viernes, 19 de abril de 2019

Cómo Fabricar Tu Propia Controladora De Impresora 3D – Parte 5

En esté capitulo les muestro el código de un host que programé en Python hace unos años para explicar cómo se comunica la placa SinapTec AT328.02 con el host.






30% de descuento para PCB avanzados y fabricación dentro de las 24 horas en PCBWay:

Acá podés obtener el diseño de mis placas:

sábado, 13 de abril de 2019

Cómo Fabricar Tu Propia Controladora De Impresora 3D – Parte 4

En esté capitulo explico cómo funciona la parte electrónica de la placa de la placa y conecto el resto de los componentes para simular el funcionamiento de la misma.
https://www.pronterface.com



30% de descuento para PCB avanzados y fabricación dentro de las 24 horas en PCBWay:

Acá podés obtener el diseño de mis placas:

lunes, 8 de abril de 2019

Cómo Fabricar Tu Propia Controladora De Impresora 3D – Parte 3

En este video explico como ser carga el firmware TeaCup en nuestra placa SinapTec AT328.02 y además explico cómo regular la corriente de los driver que controlan los motores paso a paso.



Les presento un servicio de PCBWay que permite compartir las placas en forma muy simple. Además, se le puede agregar fotos, videos y toda la documentación necesaria para realizar el proyecto. Haciendo click en “Add to cart” podés encargar tus placas.


Acá podés obtener el diseño de mis placas:

30% de descuento para PCB avanzados y fabricación dentro de las 24 horas en PCBWay: https://www.pcbway.es

martes, 19 de marzo de 2019

Cómo Fabricar Tu Propia Controladora De Impresora 3D – Parte 2

Este video es un time-lapse del montaje de lo componentes y también doy una serie de tips para el correcto armado de una placa controladora de impresora 3D SinapTec AT328.02.




La calidad del plateado de las vías hizo que sea muy fácil soldar los componentes.


Encargá tus PCBs en PCBWay.es. Descargá los archivos gerber RS-274-X aquí.

domingo, 10 de marzo de 2019

Cómo Fabricar Tu Propia Controladora De Impresora 3D – Parte 1

Mandé a fabricar 10 placas a una empresa china llamada PCBWay, me las mandaron por FedEx y tardaron unos 10 días desde que hice el pedido hasta que las entregaron en la puerta de mi oficina.
La calidad de las placas es excelente en todo sentido, tanto de las pistas, como la serigrafía, la malla antisoldante, el plateado de las vías, las perforaciones y los bordes.





Les paso a detallar como hacer un pedido en PCBWay.

1) Loguearse. Usar datos verdaderos ya que los mismos luego se utilizarán para el envío

2) Cotización en línea (10 placas de 1 o 2 capas de 100x100mm a 5 u$s + envío)


3) Subir archivos Gerber RS-274-X (ACÁ LOS GERBER DE LA SinapTec AT328.02) y enviar el pedido


4) Una vez enviado el pedido una persona se encargará de verificarlo, si todo está bien ya podés pagarlo y cargar los datos de envío.


https://reprap.org/wiki/SinapTec_AT328.02/es

sábado, 20 de octubre de 2018

ESP32 desde Cero - Tutorial 7: Mostrar los Datos de un Sensor en una Página Web

En este video explico cómo mostrar los datos del sensor interno de efecto Hall en una página web alojada en un servidor web dentro del mismo ESP32.


Código Fuente:

#include <WiFi.h>

//------------------Servidor Web en puerto 80---------------------

WiFiServer server(80);

//---------------------Credenciales de WiFi-----------------------

const char* ssid     = "---";
const char* password = "---";

//---------------------VARIABLES GLOBALES-------------------------
int contconexion = 0;

String header; // Variable para guardar el HTTP request

//------------------------CODIGO HTML------------------------------
String paginaInicio = "<!DOCTYPE html>"
"<html>"
"<head>"
"<meta charset='utf-8' />"
"<META HTTP-EQUIV='Refresh' CONTENT='1'>"
"<title>Servidor Web ESP32</title>"
"</head>"
"<body>"
"<center>"
"<h3>Servidor Web ESP32</h3>";

String paginaFin = "</center>"
"</body>"
"</html>";


//---------------------------SETUP--------------------------------
void setup() {
  Serial.begin(115200);
  Serial.println("");
  
  // Conexión WIFI
  WiFi.begin(ssid, password);
  //Cuenta hasta 50 si no se puede conectar lo cancela
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { 
    ++contconexion;
    delay(500);
    Serial.print(".");
  }
  if (contconexion <50) {
      //para usar con ip fija
      //IPAddress ip(192,168,1,180); 
      //IPAddress gateway(192,168,1,1); 
      //IPAddress subnet(255,255,255,0); 
      //WiFi.config(ip, gateway, subnet); 
      
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());
      server.begin(); // iniciamos el servidor
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
  }
}

//----------------------------LOOP----------------------------------

void loop(){
  WiFiClient client = server.available();   // Escucha a los clientes entrantes

  if (client) {                             // Si se conecta un nuevo cliente
    Serial.println("New Client.");          // 
    String currentLine = "";                //
    while (client.connected()) {            // loop mientras el cliente está conectado
      if (client.available()) {             // si hay bytes para leer desde el cliente
        char c = client.read();             // lee un byte
        Serial.write(c);                    // imprime ese byte en el monitor serial
        header += c;
        if (c == '\n') {                    // si el byte es un caracter de salto de linea
          // si la nueva linea está en blanco significa que es el fin del 
          // HTTP request del cliente, entonces respondemos:
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
                     
            // Muestra la página web
            client.println(paginaInicio + String(hallRead()) + paginaFin);
            
            // la respuesta HTTP temina con una linea en blanco
            client.println();
            break;
          } else { // si tenemos una nueva linea limpiamos currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // si C es distinto al caracter de retorno de carro
          currentLine += c;      // lo agrega al final de currentLine
        }
      }
    }
    // Limpiamos la variable header
    header = "";
    // Cerramos la conexión
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

domingo, 30 de septiembre de 2018

ESP32 desde Cero - Tutorial 6: Servidor Web (WebServer)

En este tutorial explico cómo hacer un servidor web (WebServer) usando la IDE de Arduino en un ESP32.


Código Fuente:

#include <WiFi.h>

//------------------Servidor Web en puerto 80---------------------

WiFiServer server(80);

//---------------------Credenciales de WiFi-----------------------

const char* ssid     = "-----";
const char* password = "-----";

//---------------------VARIABLES GLOBALES-------------------------
int contconexion = 0;

String header; // Variable para guardar el HTTP request

String estadoSalida = "off";

const int salida = 2;

//------------------------CODIGO HTML------------------------------
String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
"<meta charset='utf-8' />"
"<title>Servidor Web ESP32</title>"
"</head>"
"<body>"
"<center>"
"<h1>Servidor Web ESP32</h1>"
"<p><a href='/on'><button style='height:50px;width:100px'>ON</button></a></p>"
"<p><a href='/off'><button style='height:50px;width:100px'>OFF</button></a></p>"
"</center>"
"</body>"
"</html>";


//---------------------------SETUP--------------------------------
void setup() {
  Serial.begin(115200);
  Serial.println("");
  
  pinMode(salida, OUTPUT); 
  digitalWrite(salida, LOW);

  // Conexión WIFI
  WiFi.begin(ssid, password);
  //Cuenta hasta 50 si no se puede conectar lo cancela
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { 
    ++contconexion;
    delay(500);
    Serial.print(".");
  }
  if (contconexion <50) {
      //para usar con ip fija
      //IPAddress ip(192,168,1,180); 
      //IPAddress gateway(192,168,1,1); 
      //IPAddress subnet(255,255,255,0); 
      //WiFi.config(ip, gateway, subnet); 
      
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());
      server.begin(); // iniciamos el servidor
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
  }
}

//----------------------------LOOP----------------------------------

void loop(){
  WiFiClient client = server.available();   // Escucha a los clientes entrantes

  if (client) {                             // Si se conecta un nuevo cliente
    Serial.println("New Client.");          // 
    String currentLine = "";                //
    while (client.connected()) {            // loop mientras el cliente está conectado
      if (client.available()) {             // si hay bytes para leer desde el cliente
        char c = client.read();             // lee un byte
        Serial.write(c);                    // imprime ese byte en el monitor serial
        header += c;
        if (c == '\n') {                    // si el byte es un caracter de salto de linea
          // si la nueva linea está en blanco significa que es el fin del 
          // HTTP request del cliente, entonces respondemos:
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // enciende y apaga el GPIO
            if (header.indexOf("GET /on") >= 0) {
              Serial.println("GPIO on");
              estadoSalida = "on";
              digitalWrite(salida, HIGH);
            } else if (header.indexOf("GET /off") >= 0) {
              Serial.println("GPIO off");
              estadoSalida = "off";
              digitalWrite(salida, LOW);
            }
            
            // Muestra la página web
            client.println(pagina);
            
            // la respuesta HTTP temina con una linea en blanco
            client.println();
            break;
          } else { // si tenemos una nueva linea limpiamos currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // si C es distinto al caracter de retorno de carro
          currentLine += c;      // lo agrega al final de currentLine
        }
      }
    }
    // Limpiamos la variable header
    header = "";
    // Cerramos la conexión
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}