miércoles, 6 de agosto de 2025

ESP32C3 MINI Timer programable

  Página principal


ESP32C3 MINI
Timer programable

Me ha llegado un nuevo módulo que lleva el CHIP ESP32C3 , por alrededor de 2€ no me he podido resistir.
Especificaciones
  • SoC de bajo consumo equipado con procesador mononúcleo RISC-V de 32 bits, frecuencia principal de hasta 160 MHz
  • Compatible con Wi-Fi de 2,4 GHz (802.11 b/g/n) y Bluetooth® 5 (LE)
  • 400 KB de SRAM y 384 KB de ROM, y 4 MB de memoria Flash integrada
  • 3x SPI, 1x I2C, 2x UART, 1x I2S, 2x ADC, etc.


Después de seguir algunos tutoriales y instalar en el arduino  el gestor de tarjetas el módulo esp32 by Espressif System, no conseguía hacer funcionar la placa.
Probando varias placas y consultando varios tutoriales, encontré mi placa que funcionaba como LOLIN C3 MINI.
El problema que existen muchos ensambladores de placas, y algunos no figuran el modelo.
En mi caso la configuración de pins son:
static const uint8_t TX = 21;
static const uint8_t RX = 20;

static const uint8_t SDA = 8;
static const uint8_t SCL = 10;

static const uint8_t SS = 5;
static const uint8_t MOSI = 4;
static const uint8_t MISO = 3;
static const uint8_t SCK = 2;

static const uint8_t A0 = 0;
static const uint8_t A1 = 1;
static const uint8_t A2 = 2;
static const uint8_t A3 = 3;
static const uint8_t A4 = 4;
static const uint8_t A5 = 5;
Que cada uno mire en su placa la configuración de pins.
Se puede encontrar en:
    /home/usuario/.arduino15/packages/esp32/hardware/esp32/3.3.0/variants/lolin_c3_mini

Después de probar el clásico programa de hacer parpadear un LED, me propuse hacer algo mejor.
En el anterior proyecto había publicado un montaje que me había mandado Alfredo Segura, era un TIMER PROGRAMABLE .
Pues me puse manos a la obra y monté todo el circuito, y me puse a programar.
El programa debe mantener unos valores de ON/OFF que contienen los tiempos de apagado y encendido, y estos valores se deben mantener aunque se vaya la alimentación.
Los ESP32 no tienen EEPROM, pero mediante la librería #include <EEPROM.h> , se emula y se graba en memoria de programa.
Para cambiar los valores de apagado y encendido utilizamos un Rotary Encoder, se debe pulsar el botón del mando para pasar entre los diferentes valores ON/OFF.
Si se mantiene pulsado el mando por más de 4 segundos, los valores de tiempos ON/OFF se almacenan en la *EEPROM.
Girando el mando se cambia de ON/OFF.
Todo esto se visualiza en la pantalla OLED SSD1306




Como se puede ver, he utilizado un módulo que contiene el mando
Rotary Encoder y la pantalla OLED.
También  se puede utilizar los dos módulos por separado.



Este ha sido mi primer contacto con el ESP32_C3_MINI, y  he encontrado una placa extraordinaria, con mucho potencial.
Espero que les haya gustado este pequeño proyecto, que no será el último con este micro.

PROGRAMA

Saludos.
Juan Galaz



Bibliografía:

https://github.com/sidharthmohannair/Tutorial-ESP32-C3-Super-Mini
https://www.luisllamas.es/probamos-el-nuevo-esp32-c3-el-sustituto-del-esp8266/
https://www.espressif.com/sites/default/files/documentation/esp32-c3-mini-1_datasheet_en.pdf
https://www.mechatronicstore.cl/conectando-la-esp32-c3-super-mini-a-arduino-paso-a-paso/?srsltid=AfmBOopdSs8GEHCtRzY2aXz168xDNPLSEk_YsHXers0j9pHBz6SHsCk4
https://www.youtube.com/watch?v=0sum5XaOdW0

domingo, 3 de agosto de 2025

Luces aleatorias

 

 

PROGRAMA ARDUINO

TIMER PROGRAMABLE CON ARDUINO NANO, DISPLAY Y ENCODER ROTATIVO

 

TIMER PROGRAMABLE CON ARDUINO NANO
 DISPLAY Y ENCODER ROTATIVO
Ing. Alfredo Segura, México julio de 2025.

Tras de realizar varios proyectos con Display OLED SSD1306 de 128x64 pixeles y Encoder Rotativo con Push Button integrado, hubo que diseñar un Timer que encendiera un ventilador por 10 minutos y lo mantuviera apagado por 10 horas. El proyecto ideal para usar Arduino haciendo uso de millis().

He elegido el Arduino NANO por su bajo costo y su capacidad sobrada para este proyecto, desarrollando el código con el IDE de Arduino, cuya parte medular es el siguiente listado:


if ((flagtc == true) && (millis() > (tiempo + t_enc))) {     // 5000
digitalWrite(PinRy, LOW);       // Apaga el Ventilador
flagtc = false;
   flagtl = true;
   tiempo = millis();
   onoff = "OFF";
mostrar();
  }

if ((flagtl == true) && (millis() > (tiempo + t_apa))) {
digitalWrite(PinRy, HIGH);      // Enciende el Ventilador
flagtc = true;
   flagtl = false;
   tiempo = millis();
   onoff = "ON";
mostrar();
  }
 

Es decir, apagar y encender el ventilador, depende del estado anterior, lo que se maneja con las variables flagtc y flagtl del tipo booleano.

El resto del código es para controlar el display OLED y detectar giros en el Encoder Rotativo, haciendo uso de los pines de INTerrupción externa (Pin 2 y Pin 3) del NANO.

Al encender o resetear el Arduino NANO, se hace sonar un buzzer con dos pitidos, mientras que el display muestra “TIMER 0/1” en cuanto no se manipule el Encoder, pero el Timer ya está en funcionamiento. Si se requiere cambiar los tiempos de encendido y/o apagado, se presiona el push button integrado al encoder, lo que lleva al programa a colocar una línea en el display, debajo de T_ENC o de T_APA, permitiendo subir o bajar el valor de milisegundos girando el encoder en sentido horario o antihorario. El display mostrará el tiempo en milisegundos y también en minutos con parte entera y fraccionaria.

Si el push button del encoder es presionado por más de 5 segundos, se entra en una sección para grabar ambos valores; T_ECN y T_APA en la memoria EEPROM propia del Arduino NANO. Así que al resetear el dispositivo, y durante el setup() se lee el contenido de la memoria EEPROM, recuperando ambos valores.

El diagrama del circuito es el siguiente:

La tarjeta PCB realizada en Traxmaker se muestra a continuación:

El circuito en protoboard funcionando, se muestra en la siguiente fotografía:


PROGRAMA

VIDEO SIMULACIÓN


viernes, 1 de agosto de 2025

ADAPTADOR PARA ESP32

 

Atras

ADAPTADOR PARA ESP32

Alfredo Segura.

Este pequeño proyecto consiste en fabricar un adaptador para el ESP32, el cual tenemos comprobado que es difícil trabajarlo en un protoboard estándar, ya que su anchura, apenas le permite posicionarse en los extremos externos de dicho protoboard, dejando solamente una línea de contactos disponible para conexiones externas.

Buscando en Internet un adaptador para el efecto, me sorprende que no haya uno como el que yo realicé, cuya fabricación y armado permite colocarlo en el protoboard en los contactos más cercanos a la división con que cuentan los protoboards en el centro.

Lo primero que hay que hacer es la plantilla de PCB como se muestra en la siguiente figura:



El siguiente paso es crear la tarjeta de cobre (PCB) de un solo lado con esta plantilla, para lo cual yo uso el método más antiguo, que consiste en los siguientes pasos:

1.- Preparar una placa de cobre (un solo lado) con el tamaño de la plantilla, debidamente lavado con detergente, para eliminar cualquier residuo de suciedad, principalmente grasa.

2.- Imprimir la plantilla sobre papel ‘transfer’ en una impresora laser en negro.

3.- Fijar el papel ‘transfer’ ya impreso en la placa de cobre usando cinta adhesiva.

4.- Poner la placa de cobre con el papel ‘transfer’ en una superficie completamente plana , con el papel transfer por el lado de arriba y cubrirlo con dos hojas de papel higiénico.

5.- Con una plancha muy caliente hacer presión sobre el conjunto, girando la plancha en varias direcciones. (nunca deslizar), solo ejercer presión hacia abajo.

6.- Con 2 minutos de esta operación, concluir el proceso de la plancha y retirar el papel ‘transfer’, verificando que el tóner se haya pasado totalmente a la placa de cobre.

7.- Sumergir la placa de cobre con la plantilla ya pegada en un recipiente de plástico con una cantidad moderada de Cloruro Férrico y mover constantemente observando cómo el cobre va desapareciendo de la placa, quedando únicamente las pistas cubiertas de tóner.

8.- Cuando todo el cobre ha desaparecido, recoger y guardar el Cloruro Férrico usado en otro recipiente con tapa, para una ocasión posterior. En el recipiente de plástico donde se hizo el proceso, se echa bastante agua limpia para retirar todo residuo de Cloruro Férrico, cuidando de que no toque la piel o a ropa, ya que es imposible limpiarlo.

9.- En el mismo recipiente con agua y usando una fibra de metal delgada, se pasa por encima del tóner repetidamente hasta eliminarlo, quedando únicamente las pistas de cobre expuestas.

10.- Una vez debidamente seca la tablilla, se procede a pasarle el cautín y un poco de soldadura, de tal manera que todas las pistas queden con una fina capa de estaño, para protección del cobre por oxidación a futuro. Se cortan las tres partes de este diseño, para su ensamblaje posterior.

Concluido el proceso anterior, se realiza la perforación de los hoyos y posteriormente se incrustan los’ headers’ machos y hembras como se muestra en la Fig. 2.

En la Fig. 3 se muestra otra vista del ensamblaje y soldadura de los ‘headers’ uniendo las 3 partes entre si de las tablillas PCB de este diseño.

En la siguiente figura (Fig. 4) se observa el adaptador con un ESP32 ya incrustado en su parte superior y a su vez colocado en el protoboard, precisamente en las líneas de orificios mas contiguos al canal central de dicho protoboard, dejando disponibles casi todos los puntos de contacto para cualquier diseño.

Entre las placas verticales de este diseño, se puede rellenar con polietileno caliente, de tal manera que al enfriarse otorgue resistencia a dichas placas para su uso constante.

El ESP32 se puede poner en cualquier sentido en el adaptador, y éste a su vez también en cualquier sentido sobre el protoboard.



Ing. Alfredo Segura, México. Julio de 2025.



miércoles, 16 de julio de 2025

Arduino Nano, Excavadora Mando infrarrojos LG

  Página principal


Arduino Nano
Excavadora
Mando infrarrojos LG


Hace algún tiempo realicé unos montajes para manejar pequeños vehículos mediante un mando a distancia  genérico LG.
http://seta43.duckdns.org/artren.html
http://seta43.duckdns.org/car_c/car_c.html

Para este montaje manejo una excavadora de juguete con un mando genérico de televisión LG.
Se utilizan 2 módulos MX1616, que manejan los cuatro motores.
2 motores para la dirección, 1 motor para el giro, y otro para la pala.
La alimentación se realiza mediante una batería recargable de 7,4V (2S).
Para mi gusto la excavadora debería funcionar con un voltaje menor, entre 5 y 6 V, para que fuese más lentos los movimientos.
Se puede conseguir con un diodo en serie, pero eso lo dejo como idea.
En un principio mi idea era montarlo en una placa protoboard, para luego pasarlo a una PCB.
Después de probarlo y funcionar, ví que la excavadora tenía mucha holgura en mucha partes, y  las cadenas de oruga estaban algo deterioradas. Entonces decidí que no merecía la pena hacer el PCB.


Como es difícil saber la polaridad de los motores, al conectar los motores puede ocurrir que los motores no vayan en la dirección adecuada. Existen dos formas de arreglar esto, o en el programa, o cambiando las conexiones físicas.


El manejo se realiza con el mando LG, y la correpondencia de teclas son:

  Serial.println("0 - (OK) STOP");
  Serial.println("1 - (^)  ADELANTE");
  Serial.println("2 - (v)  ATRAS");
  Serial.println("3 - (<)  IZQUIERDA");
  Serial.println("4 - (>)  DERECHA");
  Serial.println("5 - (<<)  Rotar IZQ.");
  Serial.println("6 - (>>)  Rotar DER.");
  Serial.println("7 - (Play)  CARGAR");
  Serial.println("8 - (Pause)  DESCARGA");
Para la depuración en el terminal serie se pueden manejar los diferentes comando con números.

Espero que les haya gustado este pequeño proyecto, yo me lo he pasado bien.

VIDEO

PROGRAMA

Saludos.
Juan Galaz



Bibliografía:

http://seta43.duckdns.org/artren.html
http://seta43.duckdns.org/car_c/car_c.html

miércoles, 9 de julio de 2025

CNC con piezas impresas en 3D

  Página principal


CNC
Con piezas impresas en 3D


Hace algunos años había creado un mini CNC con piezas recicladas de DVD. http://seta43.duckdns.org/cnca.html
En este vídeo realizo un  plotter con piezas impresas en 3D y con material PLA.
Se diseñan con freeCAD para luego imprimir las piezas en 3D.


 
El conjunto se une con varillas roscadas de 8 mm.
Las varillas de desplazamiento son de acero en 8 mm de diámetro.
La base del papel es de metacrilato, y esta unido al eje X mediante imanes.

Todo se controla mediante un arduino en el cual está cargado el programa GRBL.

Este programa interpreta el código GCODE que se manda desde el ordenador.
La placa controla 2 motores paso a paso y un servo.

Al utilizar un servo para bajar o subir un lápiz, debemos utilizar una versión especial.
grbl 0.9i with Servo motor support

El servo se conectará al pin 11 del arduino, que corresponde al pin de fin  de carrera Z.


Para que los pasos del motor fueran más suaves , he tenido que modificar los puentes.


También modificaremos los parámetros de la placa.


Para convertir gráficos o letras en código GCODE utilizaremos el programa INKSCAPE junto con la extensión GCODETOOLS .
En Biblioteca de herramientas utilizamos grafitti.
Creamos unos puntos de orientación.

Utilizamos textos vectorizados de un solo tramo, y lo creamos mediante la extensión , Texto Hershey.


Los gráficos lo tenemos que vectorizar mediante la opción del menú, Vectorizar mapa de bits.
Debemos probar que opción nos viene mejor,  en Modo de detección.


Modificamos diferentes parámetros  en el cuadro verde, como son la velocidad y el código GCODE que hará subir o bajar el bolígrafo.


Ahora creamos el código GCODE con el menú Trayecto a GCODE. Aquí daremos nombre al archivo y ajustaremos los diferente valores.


Para mandar el código a la placa electrónica, utilizamos el programa Universal Gcode Sender.
https://winder.github.io/ugs_website/

Cargamos el fichero anteriormente creado, que lo mostrara en pantalla.
Ya solo nos queda mandarlo al plotter.


El resultado es bastante bueno, el mayor problema es encontrar una buena utilidad de transformar imágenes a gráficos vectorizados.

Espero que les haya gustado este pequeño proyecto.
He tomado muchas ideas de diferentes proyectos que he encontrado en la red.

VIDEO

PIEZAS

Saludos.
Juan Galaz



Bibliografía:

http://seta43.duckdns.org/cnca.html
grbl 0.9i with Servo motor support
https://winder.github.io/ugs_website/



viernes, 6 de junio de 2025