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/



lunes, 12 de mayo de 2025

Arduino - Display ascensor - WS2812B

  Página principal

Arduino
Display ascensor
WS2812B


En este caso uso el WS2812B para representar el display de un ascensor.


En modo de luminosidad alta en color blanco, la intensidad es de 660mA. Para evitar no tener que utilizar otro alimentador, he colocado el brillo a 10 en todos los LED, con lo cual no llega a 30mA, de esta forma puedo alimentar el panel con el arduino.
He colocado un interruptor para seleccionar el tipo de número que se quiera visualizar, a gusto de cada uno.
Las fotos del display no hace justicia a como se ve en la realidad.



Espero que realicéis este circuito, es muy fácil.

VIDEO

PROGRAMA y Librerías 


Saludos.
Juan Galaz



Bibliografía:

Reloj WS2812
BANDERAS



domingo, 27 de abril de 2025

Arduino nano Banderas WS2812B

  Página principal

Arduino nano
Banderas
WS2812B

 


Hace años realicé un reloj con los diodos LED WS2812B, Reloj WS2812 .
Ahora utilizando una matriz de diodos WS2812B , realizo una muestra de banderas de las diferentes comunidades autonómicas.
El montaje es muy sencillo, pero vistoso, de los que no tardas en realizar.






No he querido realizar el esquema debido a su simplicidad.
El pin 13 del arduino al DATAIN del panel.
La alimentación de 5V y GND a los pins del arduino.
En modo de luminosidad alta en color blanco, la intensidad es de 660mA. Para evitar no tener que utilizar otro alimentador, he colocado el brillo a 10 en todos los LED, con lo cual no llega a 30mA, de esta forma puedo alimentar el panel con el arduino.

La matriz de 8X8 es pequeña, por lo que tenido que pensar mucho para intentar mostrar las banderas lo mejor posible.
En algunos casos he realizado 2 diseños, y me que quedado con la que creo que está mejor.

Espero que realicéis este circuito, es muy fácil.

VIDEO


PROGRAMA y Librerías 

Saludos.
Juan Galaz



Bibliografía:

Reloj WS2812



martes, 22 de abril de 2025

Arduino nano - Radio SI7432 ALL BAND AM - FM - SSB

  Página principal

Arduino nano
Radio SI7432 ALL BAND
AM - FM - SSB

En el proyecto  https://github.com/pu2clr/SI4735  hay muchos ejemplo con el CHIP SI7432 .
Entre ellos existe uno SI473X_04_ALL_IN_ONE que recibe todas las banda y modulaciones.
Lo que hago es modificarlo para poder cambiar cualquier opción desde
un Rotary encoder.



En el primer ejemplo utilizo la librería Tiny4kOLED.h para manejar el OLED junto con Rotary.h para manejar el mando encoder.






En el segundo montaje utilizo una librería propia para manejar el OLED junto con 
Rotary.h para manejar el mando encoder.
Además quito mucha información de pantalla, que se puede ver directamente en el menú.
 



VIDEO

Programa1
programa2

Libreria SI4732
Rotary
Tiny4kOLED

Saludos.
Juan Galaz



Bibliografía:

https://github.com/pu2clr/SI4735
https://github.com/skathir38/Rotary



domingo, 20 de abril de 2025

Arduino nano - Radio SI7432 AM - FM

Arduino nano
Radio SI7432
AM - FM

Con el CHIP SI7432 realizo una radio de FM y AM. Es una continuación de radsi.html
En este montaje utilizo un Rotary encoder para cambiar la frecuencia, y un OLED para visualizar la frecuencia.




Lo monto en una placa de circuito impreso, alimentándolo  con 5 V del USB, y el SI4732 se alimenta mediante los 3.3V del propio arduino nano.
Para sintonizar la AM se utiliza una bobina de 500uH con núcleo de ferrita.
Utilizo el mando
Rotary encoder para navegar por todas la opciones del programa.
En FM funciona todo bastante bien, incluso el RSD, además con poca antena la señal es buena.
En AM  la señal de audio baja bastante, y en mi edificio la señales de baja frecuencia tienen bastante ruido.
También debemos girar la bobina en dirección a la emisora de AM.
Como el propio circuito genera ruido, he añadido en el menú una opción para que no se actualice las calidades de señal y de esta forma no genera ruido.


VIDEO


PROGRAMA 
Libreria SI4732

Saludos.
Juan Galaz



Bibliografía:

https://github.com/pu2clr/SI4735
https://github.com/skathir38/Rotary



jueves, 27 de marzo de 2025

Arduino - Radio SI7432

  Página principal

Arduino
Radio SI7432


Con el CHIP SI7432 realizo una radio de FM.

El circuito de radio frecuencia es el mismo para los 3 montajes, no se utiliza la bobina ni el condensador para la banda de AM, solo se utiliza la parte de FM.
El SI4732 y el SI4735 son el mismo chip, pero con diferente encapsulamiento .
Puedes variar la dirección del bus I2C mediante colocar el pin SENB a Vcc o a masa.
En el bus I2C  he colocado resistencias de 120 ohmios a modo de protección entre el Arduino nano que funciona a 5V y el CHIP SI7432 que funciona a 3V, no es lo mas adecuado, pero funciona bien.
Revisé el consumo del CHIP SI7432 y comprobé que consumía 21mA, por lo que se puede alimentar a través de los 3,3 V que proporciona el Arduino nano.  He colocado dos condensadores en la alimentación del CHIP para mejorar la estabilidad de la alimentación. El display OLED se alimenta a 5V.
Para el primer montaje utilizo botones para cambiar la frecuencia.
También se pueden cambiar mediante comandos en la consola serie  con las siguientes ordenes:
HELP                 ayuda
VOL=[0-63]           Volumen
FRE=[8400-10800]     Frecuencia
+++_ o ---_          Sintonía
NEXT  o  FREV        Busca emisora





La librería utilizada para manejar el OLED es realizada por mi.
La programación hace uso de la librería  https://github.com/pu2clr/SI4735.
    Programa        Librería


En este segundo montaje utilizo un Rotary encoder para cambiar la frecuencia.
Se podría modificar el programa para que cambiase de frecuencia con más velocidad dependiendo la velocidad de rotación, pero eso lo dejo para el que quiera hacerlo, no es difícil.



Programa        Librería Rotary Encoder

VIDEO

Espero que os haya gustado este pequeño circuito.


Saludos.
Juan Galaz



Bibliografía:

https://github.com/pu2clr/SI4735
https://github.com/skathir38/Rotary