lunes, 22 de enero de 2018

Bienvenid@s a AGP.miniproyects

 


 

En este blog podrás observar algunos de mis proyectos,
relacionados con la programación, arduino, chips como el
ESP 8266 WiFi, sensores, módulos LCD, TFT  y otros periféricos.
No soy un experto en esto, solo que me gusta compartir las
 cosas que hago y el libre conocimiento.


 
AGPminiproyects en youtube

domingo, 21 de enero de 2018

OLED 0.96"128X64 I2C + RTC + Arduino. Reloj con alarma programable en la eeprom de Arduino.

  Hacía poco que me hice con un mini display Oled, también disponía de un modulo RTC y como nunca había usado la memoria eeprom de arduino me propuse diseñar un reloj digital sencillo, con alarma programable mediante 2 pulsadores. Evidentemente el uso de la eeprom esta justificado en estos casos en los que deseamos que los ajustes de determinadas variables permanezcan despues de que el MCU haya perdido la alimentación. 
  
El programa se inicia presentando la hora y el calendario. En esta pantalla pulsando el botón Up muestra durante 2 segundos la última programación de la alarma grabada en la memoria eeprom de Arduino.
 Con el botón Ok entra en el modo de programación de la alarma y a cada pulsación cambia la pantalla para poder ajustar su valor :  

                                        On/Off 
                                         Hora
                                         Minuto
                                         Duración

 En cada una de estas pantallas se puede modificar su valor presionando el botón Up . Cuando se cambia de pantalla, el programa verifica si se han producido cambios para en ese caso sobreescribir en la eeprom de Arduino la nueva programación de la alarma.

 Una vez  armada la alarma suena el buzzer hasta que sea pulsado alguno de los dos botones o se cumpla la duración de alarma previamente programada.
                                         







                                       









Sketch Arduino:











martes, 14 de noviembre de 2017

nRF24l01. Maestro y 4 Esclavos. Nextion. Remote switches.

  En esta entrada, vamos a transmitir datos  a través de los módulos inalámbricos nRF24l01 controlados por Arduino. Usando su versión más  completa:




1100 Meter Long Distance NRF24L01+PA+LNA Wireless Module Board With Antenna








  Aparte del  chip NRF24L01 posee un circuito amplificador de potencia (PA), un circuito amplificador de bajo ruido (LNA) además de una antena  que en conjunto le permite lograr un alcance de hasta 1100m. Existe bastante información en Internet sobre el uso de estos transceptores. 
 Mi intención es poner a vuestra disposición los archivos con los que he practicado y que comento en esta entrada.

                                      Remote switches


Aunque este es un ejercicio meramente ilustrativo, lo que aquí aprenderemos podría ser implementado en otros casos en los que se requiera de un accionamiento remoto simple pero eficaz.
 Si analizamos el código, lo que hacemos inicialmente es configurar el módulo y luego enviar o leer los datos transmitidos por el módulo nRF24l01, la variable que se va a transmitir en este caso es un solo carácter del tipo "char". 
 La idea es crear una red con 5 de estos módulos asociados con sus correspondientes Arduinos.
 Uno de ellos, equipado con un display LCD Nextion y cuatro pilotos, actúa como Maestro que envía y recibe datos de los otros cuatro módulos que lógicamente actúan como esclavos.
 El módulo Maestro muestra el estado de cuatro interruptores remotos. Cada uno de ellos puede accionarse desde un esclavo diferente. Este proceso se representa con gráficos en el display Nextion y también por medio de cuatro leds.












 Cada vez que a  los módulos esclavos se les solicite por el Maestro, leerán el estado del interruptor conectado a cada uno de ellos para  seguidamente transmitir el dato correspondiente en cada caso;  el carácter "A" cuando lean un nivel alto en el pin D7  ó "B"  cuando lean un nivel bajo.




Nodo esclavo



 El Maestro encenderá los leds correspondientes  cuando cada interruptor remoto pase a "ON"  El Maestro conecta en bucle con las cuatro direcciones de los esclavos. Si alguno no envía los datos a tiempo (antes de 200 milisegundos)  el Maestro ordenará al display ocultar la imagen del nodo  esclavo que no responde. Y cuanto mayor sea la frecuencia con la que se se consulta a los esclavos mayor sera la sensacion de respuesta en tiempo real.
Estos son los esquemas de conexiones:


Conexiones nRF24l01 a Arduino
  


Esquema para el Maestro



Esquema para cada módulo esclavo 


 La tensión de funcionamiento para el módulo nRF24l01 es de 3.3V . Como véis, he incluido en el esquema un regulador LM1117-3.3 para lograr un
 funcionamiento estable, pues los módulos nRF24l01 version PA & LNA
requieren de una mayor intensidad de alimentación que la que le puede proporcionar la tarjeta Arduino por su salida de 3.3V

martes, 23 de mayo de 2017

Nextion. Arduino nano. RTC DS1307. AM2302 DHT22

 En algunos locales públicos es necesario controlar el estado de las puertas. En ciertos casos, por normativa disponen de barras antipánico que desde el lado del interior siempre abren y esto puede resultar problemático.


 Simplemente instalando cuatro interruptores magnéticos en las puertas, se puede realizar esta función. Con una pantalla táctil LCD Nextion y una tarjeta arduino se puede diseñar un interfaz de control y visualización para este proceso.







 En este proyecto se emplea una tarjeta Arduino nano, una pantalla Nextion HMI 3.2" un módulo Rtc (RTC_DS1307) un sensor de temperatura y humedad (AM2302 DHT22) un pequeño altavoz, además de cuatro microrruptores necesarios para simular la apertura de las puertas y así poder observar su funcionamiento.




Funciones:

Muestra con imágenes el estado de las puertas, emite un aviso sonoro cuando alguna se abre, registra la hora en la que se produce la apertura. Y también indica la temperatura, sensación térmica, humedad relativa, hora y el calendario.



 Esto se muestra de forma amigable e intuitiva gracias al interfaz gráfico Nextion HMI.

 Aquí dejo un video que muestra el funcionamiento de mi prototipo, le he agregado una presentacion de imagenes (totalmente innecesaria) para completar la máxima capacidad de la memoria flash de la pantalla y puedo afirmar que el resultado ha sido excelente.




 






 NextionControlPuertas.ino  

Un saludo.                                                          

lunes, 19 de diciembre de 2016

Arduino. Abrir Menús con tres pulsadores o Bluetooth HC-05





 El módulo  HC-05  permite la comunicación serie entre una placa Arduino y un smartphone o tablet vía bluetooth.
 Existen aplicaciones android para el envío de datos a través del bluetooth, esta es una disponible en Google Play:

                           Bluetooth Serial Controller

 Configuración:

 Iniciamos la aplicación y vinculamos el smartphone con el módulo HC-05 (ajustado de fábrica) después en la aplicación:

            PREFERENCE:


            CONTROLLER (A-E)     =>   "A"


            BUTTON Name:          ( nombramos los botones que vamos a usar)


              button1                    =>   "UP" 

              button4                    =>  "OK"
              button7                    =>  "DOWN"


           Command:                  ( introducimos el dato a enviar por cada                                                           botón, elegimos tres caracteres Ascii;  1,2 y 3

              button1                    =>  "1" 

              button4                    =>  "2"
              button7                    =>  "3"

            Visibility:                    ( marcamos solo los botones que veremos al                                                    final)         


              button1                    =>    x 

              button4                    =>    x 
              button7                    =>    x



           CONNECT:  

              select a device to connect:       (aquí seleccionamos el módulo HC-05)


 Cuando la aplicación ha establecido la conexión, el led del módulo Bluetooth parpadea más lento. Desde la aplicación podremos enviar los datos que configuramos anteriormente a la placa Arduino por medio de los tres botones  del smartphone y así lograremos el mismo resultado que con los tres pulsadores tal como vimos en la entrada anterior. 


  Y para ver cómo se pueden unir distintas funciones a través de un menú principal,  en el menu1 he acoplando el programa que vimos en la entrada sobre el Gas Sensor MQ-6.
 Sketch:

HC-05._Menus_con_Bluetooth_Gas_sensor_MQ-6_y_tres_pulsadores

 Con la práctica, una vez que conozcamos el  módulo bluetooth, veremos que fácilmente podemos  controlar electrodomésticos , alumbrado, puertas de garaje, cuadros eléctricos, etc.





Saludos.

AGPminiproyects.





           

jueves, 1 de diciembre de 2016

Arduino. Abrir Menús con tres pulsadores

 Ya hemos interactuado con Arduino por medio del panel táctil. Pero si nuestro módulo tft no es táctil podemos hacerlo por medio de pulsadores o incluso usar la pantalla de nuestro móvil.



 Para ver esto, en un módulo TFT 1.8" vamos a dibujar un menú principal desde el que se pueda acceder a otros seis por medio de una sección de tres pulsadores o haciendo lo mismo desde la pantalla de nuestro móvil.
 En una segunda parte veremos el tema Bluetooth y su aplicación necesaria. 
 La cuestion en esta primera entrada está relacionada con el ADC de arduino (Convertidor Analógico-Digital ) para leer tensiones y usar con pulsadores .







  






   Pulsadores:



 Existen varias configuraciones posibles, esta es una que usa un solo pin analogico:

                                       


                                          SW1     Up
                                          SW2     Ok
                                          SW3     Down


 Dependiendo de cual sea el pulsador accionado ( sw1, sw2, sw3) se conectará al pin A6 un divisor de tensión formado por 2, 3, ó 4 resistencias en serie. Si se accionan dos o más pulsadores, solo influye el que menos resistencias encuentre hacia Vcc  (+5V). 

 El ADC de arduino ( en el sketch usamos el canal A6) puede leer y convertir estos voltajes en datos digitales, mapea  tensiones de entrada entre 0 y 5 voltios en valores enteros entre 0 y 1023 (cuando se utiliza la tensión de referencia analógica estándar 5V)  

  Es necesario calcular el valor  de las  tres posibles tensiones, entregadas por la sección  de pulsadores con su correspondiente valor digital :

   - Si se pulsa SW1. El circuito equivalente es:



 Como usamos 2 resistencias del mismo valor la tensión en el pin analogico (A6) es 1/2 de Vcc.

               Vcc/2 = 5V/2 = 2.5V .
               valor  ADC;    (2.5 x 1023) /5 = 511 

   - Si se pulsa SW2, el circuito equivalente es:



 Como usamos 3 resistencias del mismo valor la tensión en el pin analogico (A6) es 1/3 de Vcc.

              Vcc/3= 5V/3=1.66V .  
              valor  ADC;    (1.66 x 1023) /5 = 341

   - Si se pulsa SW3, el circuito equivalente es:





 Como usamos 4 resistencias del mismo valor la tensión en el pin analogico (A6) es 1/4 de Vcc.

            Vcc/4= 5V/4=1.25V .
            valor  ADC;    (1.25 x 1023) /5 = 256


 - Y si no se pulsan los pulsadores la tensión en el pin analogico (A6) es:  
   
      0V. 

     valor  ADC  =  0

 Conocidos estos cuatro valores solo es cuestion de implementarlos en el programa y asociarlos con sus correspondientes funciones. Podéis ver en el sketch como con estos valores, un condicional puede discriminar cuál ha sido el pulsador accionado pese a que los tres están conectados en el mismo pin. 




  Power bank state



 Podemos hacer más cosas con el ADC de Arduino. El menú 6 (POWER BANK state) abre una pantalla para monitorear el estado de la fuente de alimentación que uso para prototipos. Su función consiste en mostrar el voltaje de una batería de litio y un módulo DC-DC step up ajustable conectado a ella, este alcanza unos 37V. max. imprimir su valor, de forma gráfica, en voltios porcentualmente en el caso de la batería.


 Voltímetro 0-40 V ( necesarios 37 V, por seguridad 40 V) 


  Las entradas analógicas de Arduino se pueden utilizar para medir el voltaje DC entre 0 y 5V. este rango se puede aumentar creando un divisor de tensión mediante el uso de dos resistencias.
 Este es un circuito simple y útil que puede medir voltajes de entrada de CC en el rango de 0 a 40 V.

 Para calcular esto, considerar que la tensión max en A2 ( que es 5V) se da cuando el módulo DC-DC está ajustado en su máximo voltaje de salida ( que son 40v) gracias a la caída de tensión producida por las resistencias.
 A tener en cuenta que superar los 40V. implica dañar la placa Arduino. 

 Esta es la configuración:



    


 -Estado batería Li-ion



  La conexión a la batería podría realizarse directamente a un pin analogico pero esto sería  problemático dado que  esta conexión sigue estando activa aunque se corte la alimentación principal de Arduino. Por eso he vuelto a usar dos resistencias, en este caso es aconsejable que tengan un alto valor resistivo para reducir el consumo de corriente de la batería.

 Esta es la configuracion que estoy usando:



 Es un divisor de tensión a la mitad (multiplicar su lectura  x 2 en el programa)




 En una segunda parte sobre este mismo proyecto iniciaremos un módulo bluetooth HC-05 conectando con un dispositivo móvil.  Adelanto el Sketch de este programa que aunque incluye la funcionalidad Bluetooth puede funcionar correctamente solo con tres pulsadores .

HC-05._Menus_con_Bluetooth_y_tres_pulsadores


lunes, 14 de noviembre de 2016

Light Sensor BH1750 y LCD 16x2 I2C

 El control de la luz es una habilidad esencial en numerosos sectores. Esta vez vamos a montar un instrumento de medida sensible a la luz.

 Es muy fácil si disponemos de un sensor adecuado ademas de un controlador y un display para exponer su valor, esta vez será de tipo LCD alfanumérico con comunicacion I2C.

 En cuanto al sensor usaremos algo mejor que un Foto-Resistor (LDR)un sensor de iluminación digital como el módulo BH1750.

 Este sensor entrega el valor de la intensidad luminosa directamente en unidades Lux y lo hace a través del bus I2 ( Inter-Integrated Circuit) .








 


Alimentaremos el sensor con la salida de 3.3V de Arduino.  El pin ADDR se emplea para cambiar de dirección I2C según se conecte. SCL y SDA del sensor a través de resistencias de 560Ω al bus  I2C y ADDR a través de 560Ω a 3.3V de Arduino.

 En Arduino nano, el bus I2C esta en los pines analógicos A4 (SDA) y A5 (SCL).
 Asociaremos tres dispositivos capaces de comunicarse  por medio del bus I2C, con lo que conseguiremos una gran reducción en el cableado.


Librerias necesarias:


BH1750FVI;                              para el sensor.

Wire;                                       protocolo I2C

LCD; LiquidCrystal I2C;             para el display



 Una ventaja importante de I2C es que permite el uso de líneas de datos y de reloj común para comunicarse con una cierta cantidad de periféricos.




 Es la dirección del esclavo que se emite a través del bus I2C la que determina quién debe responder, pudiéndose intercambiar el rol maestro/esclavo ( los dispositivos que lo permitan )

 El proyecto se ve asi:





Y este es el sketch del programa empleado:


BH1750_LCD_16x2_I2C



Saludos y hasta pronto.

AGPminiproyects.