miércoles, 19 de septiembre de 2018

Medida de la humedad del terreno con sensor de humedad capacitivo


Después de estar un largo periodo sin publicar nada en el BLOG, ya que he estado realizando proyectos mucho más ambiciosos que ya iré publicando, hoy os traigo un POST donde voy a explicar cómo utilizar un sensor de humedad capacitivo para medir el porcentaje de humedad relativa de un terreno a tiempo real.  La ventaja de este tipo de sensores frente a otros modelos como los “resistivos”, es que aguantan la corrosión de manera eficiente al no tener partes metálicas en contacto directo con la humedad del terreno, con lo que evitamos falsas medidas  o incluso el deterioro del sensor a lo largo del tiempo.  El código utilizado lo podemos modificar para activar bombas o electroválvulas que den paso al riego de un terreno dependiendo de la humedad relativa que este tenga en el momento deseado por ejemplo.

Sensor de humedad capacitivo

Para comenzar, tenemos que alimentar nuestro sensor de humedad directamente desde el Arduino UNO, es decir,  debemos de conectar el pin “VCC” del sensor de humedad al pin “+5V” de Arduino, y por otro lado, el pin “GND” del sensor al pin “GND” de Arduino. Por último, tenemos que conectar el pin “AOUT” del sensor de humedad a uno de los pines analógicos de nuestro Arduino UNO para poder realizar las oportunas mediciones de humedad, que en este caso corresponde con el pin analógico “A0”. En la siguiente tabla os muestro la correspondencia de pines:

Tabla de conexiones

Como la salida máxima del sensor de humedad capacitivo son 3VDC, el rango de valores teóricos que podemos obtener con la lectura del pin analógico “A0” se sitúa entre 0 y 615, puesto que el ADC interno del Arduino UNO tiene una resolución de 10 bits y utiliza una referencia interna de 5VDC, obteniéndose un rango entre 0 y 1024 como ya deberíamos de conocer. A continuación se muestran las principales características de este sensor:


Características del sensor de humedad capacitivo


Como este tipo de sensor va a estar en contacto permanente con el terreno, siempre va a tener una humedad relativa en su superficie y en sus componentes electrónicos. Para que dicha humedad no afecte al comportamiento del dispositivo debemos de respetar unos límites de profundidad a la hora de instalar el sensor en el terreno, que a continuación os muestro:


Instalación del sensor de humedad capacitivo


Como la fabricación de estos sensores de humedad capacitivos no es una ciencia exacta, ni mucho menos si nos encontramos con múltiples fabricantes de este tipo de dispositivos, debemos de calibrar mediante programación el dispositivo antes de poder utilizar el programa de adquisición de la humedad relativa del terreno, es decir, una vez realizadas las oportunas conexiones y mediante el programa “Calibracion_sensor_humedad_capacitivo.ino” vamos a obtener los valores de lectura del pin analógico “A0” cuando el sensor está totalmente seco (Valor_Sensor_Aire) y cuando el sensor está sumergido en agua (Valor_Sensor_Agua), siendo importante realizar varias lecturas de la salida analógica del sensor de humedad capacitivo a través del pin analógico "A0", para cada uno de los casos límite, hasta que el valor se estabilice. Por último, hay que modificar dichos valores límite dentro del programa “Sensor_humedad_capacitivo_final.ino” para poder medir correctamente el porcentaje de humedad relativa que hay en un terreno a tiempo real.




Lista de Materiales:

  •         Arduino UNO Rev.3.
  •         Cable USB tipo A-B.
  •         Capacitive Soil Moisure Sensor V1.2 (Sensor de humedad capacitivo).
  •         Cables de conexión.


Código del programa:

  •           Calibracion_sensor_humedad_capacitivo







  •           Sensor_humedad_capacitivo_final









Video:




lunes, 12 de junio de 2017

Programación de un Arduino UNO a través de ICSP


En este POST voy a explicar cómo programar un Arduino UNO a través de ICSP, que no es más que un método de programación serie en circuito que se realiza mediante un conector de 6 pines (MOSI, MISO, SCK, RESET, VCC y GND ) que nuestra placa Arduino tiene para tal fin, teniendo acceso a la memoria de programa (Flash) del microcontrolador AVR (Atmega328) y poderle grabar directamente desde el PC el Bootloader, que es un gestor de arranque interno necesario para que nuestro Arduino se pueda comunicar correctamente con el IDE, o cargarle cualquiera de los programas (Sketchs) que nos interesen, sin necesidad de utilizar el puerto USB de nuestro Arduino.


Conector ICSP en un Arduino UNO

Para poder hacer uso de este método de programación va a ser necesario un hardware adicional denominado programador. En nuestro caso vamos a utilizar como programador ICSP un Arduino UNO, un USBTinty y un USBasp, aunque también existan otros métodos alternativos a los citados.
 

1º MÉTODO ICSP: Arduino UNO como programador ICSP.

Para este método de programación ICSP vamos a necesitar inicialmente un Arduino UNO configurado como programador ICSP. Para ello le debemos de cargarle un “Sketch” especial que viene en el IDE de Arduino, dirigiéndonos hacia el menú “Archivo à Ejemplos à ArduinoISP”, como se muestra en la siguiente imagen:


Ruta del programa “ArduinoISP” que incluye el IDE de Arduino

A continuación se nos abrirá el programa que debemos de cargar en el Arduino UNO que vamos a utilizar como programador ICSP, como si de cualquier programa se tratara, es decir, conectando el Arduino UNO al PC a través del puerto USB, seleccionando la placa Arduino UNO y el puerto COM en el que conectamos el Arduino UNO, y por último, presionando el icono subir (Ctrl + U).
 

Programa “ArduinoISP” que incluye el IDE de Arduino

Una vez cargado el programa correctamente en el Arduino UNO que vamos a utilizar como programador ICSP, debemos de realizar la conexión ICSP entre los dos Arduinos como se muestra en la siguiente tabla:

Conexiones para la programación ICSP entre los dos Arduinos UNO

Una vez conectados los dos Arduinos mediante ICSP, conectamos el Arduino UNO programador ICSP al USB de nuestro PC y abrimos el IDE de Arduino para cargar el Bootloader o el programa que queramos al otro Arduino a través de él. Para ello debemos de tener configurado el IDE de Arduino como se muestra a continuación, teniendo muy presente que tenemos que seleccionar el puerto COM en el que tengamos conectado nuestro Arduino programador ICSP.

Configuración del IDE de Arduino para programación con Arduino ICSP

Para finalizar debemos de abrir el programa que deseamos cargar en nuestro Arduino y dirigirnos hacia el menú ”Archivo à Subir Usando Programador” para poder subir el programa correctamente a la placa. Si deseamos cargar el “Bootloader” en la placa, simplemente pulsamos la opción “Quemar Bootloader” en el menú de Herramientas.


Menú ”Archivo” del IDE de Arduino



Lista de Materiales:


·         2 Arduino UNO Rev.3.

·         IDE 1.6.4 de Arduino (vale cualquier otra versión).

·         Cable USB tipo A-B.

·         Cables de conexiones.

 

2º MÉTODO ICSP: Programador ICSP “USBTinty”

Para poder utilizar este método de programación ICSP vamos a necesitar un programador ICSP denominado comercialmente como “USBTinty”.

Programador ICSP “USBTiny”

Lo primero que tendremos que hacer es conectarlo al puerto USB de nuestro PC y posteriormente cargarle los driver como si de cualquier otro HARDWARE se tratase, es decir, entrando en el administrador de dispositivos si estamos trabajando con un sistema operativo Windows. En el siguiente enlace podéis obtener los drivers actualizados.

Una vez que nuestro PC haya reconocido y configurado para su uso el programador “USBTinty”, tendremos que conectar el bus de 6 pines que trae el programador a nuestro Arduino como se muestra a continuación y no de cualquier otra manera, aunque podemos realizar la conexión ICSP entre el programador y el Arduino “pin a pin” siempre que respetemos el orden de conexiones ICSP que el “USBTinty” trae serigrafiado en su parte posterior.

Conexión entre el “USBTinty” y nuestro Arduino UNO

A continuación tenemos que conectar el “USBTiny” al puerto USB de nuestro PC y abrir el IDE de Arduino para configurarlo como se muestra en la siguiente imagen.

Configuración del IDE de Arduino para programación ICSP con “USBTiny”


Como podemos observar,  tenemos que seleccionar el puerto COM donde está conectado el USBTiny, el tipo de placa a programar, que en nuestro caso es un Arduino UNO y  además debemos de seleccionar el USBTinyISP como programador. Para quemar el Bootloader, que es el Firmware de arranque de la placa, simplemente presionaríamos la opción realizándose el proceso automáticamente.
Por último, para cargar un programa a la placa a través del USBTiny, presionaríamos la opción “Subir usando Programador” del menú “Archivo” del IDE de la misma manera que lo hemos hecho para el primer método ICSP.

 

Lista de Materiales:


·         Arduino UNO Rev.3.

·         Programador ICSP “USBTinty”.

·         Drivers “USBTinty”.

·         IDE 1.6.4 de Arduino (vale cualquier otra versión).

·         Cable USB tipo A-B.

·         Cables de conexiones (Cable de 6 pines opcional)

 

3º MÉTODO ICSP: Programador ICSP “USBasp”

Para poder trabajar con este último método de programación ICSP vamos a necesitar un programador ICSP llamado “USBasp”.

Programador ICSP “USBasp”

Antes de comenzar os tengo que avisar de que este método es el más tedioso y complicado de configurar por lo que no os lo recomiendo si podemos utilizar alguno de los dos anteriores, puesto que además de instalar los drivers correspondientes es necesario actualizar el firmware del “USBasp” para que pueda ser reconocido por el IDE de Arduino. Para ello vamos a seguir una serie de pasos que a continuación os detallo.
Para comenzar vamos a conectar el “USBasp” a nuestro PC a través del puerto USB para que lo reconozca y podamos instalar los drivers correspondientes como si de cualquier otro dispositivo “Hardware” se tratara. En este enlace os dejo los drivers actualizados y funcionando correctamente.
Una vez que tengamos los drivers instalados, vamos a pasar a actualizar el firmware del “USBasp”, para ello, vamos a necesitar un Arduino UNO configurado como programador ICSP, como os he explicado en el primer método de este POST, además de tener instalado el software “AVRDUDESS 2.4” que podéis descargar desde aquí. Antes de continuar con la conexión entre el “USBasp” y el Arduino UNO configurado como programador ICSP, debemos de abrir el “USBasp” y puentear mediante un Jumper o cablecito los dos orificios que trae en su parte posterior, para que pueda ser programado (una vez programado hay que retirarlo para que “USBasp” funcione correctamente).

Jumper de programación en el “USBasp”

Las conexiones a realizar entre el Arduino UNO configurado como programador ICSP y el “USBasp” son las que se muestran en la siguiente tabla:
 
Tabla de conexiones entre el Arduino Uno configurado como programador ICSP y el USBasp
 
 
 
Configuración de los pines en el programador “USBasp”
 
Por último, una vez realizadas las oportunas conexiones, vamos a descargar de aquí  el nuevo firmware para poder cargárselo al “USBasp” a través del software “AVRDUDESS 2.4” que hemos instalado anteriormente, para ello, una vez abierto el software tenemos que realizar las siguientes operaciones: 

A.      Programador à Arduino. 

B.      Atmega8 MCU (suponiendo que el USBasp tiene un atmega8). 

C.      Puerto COM à Elegimos el puerto donde está conectado el Arduino Uno configurado como programador ICSP.  

D.     Velocidad en baudios de la comunicación à19200.  

E.      Seleccionamos el archivo firmware que hemos descargado anteriormente. 

F.       Presionar el botón “Program!”.



 
Configuración del software “AVRDUDESS 2.4”



Una vez actualizado el “USBasp” ya podrá ser reconocido por el IDE de Arduino para poder programar un Arduino Uno a través de él. Para ello debemos de conectar los pines ICSP del Arduino a programar a los pines del “USBasp”, respetando las conexiones “pin a pin”, para posteriormente conectar el “USBasp” al puerto USB de nuestro PC,  abrir el IDE de Arduino y configurarlo como a continuación se muestra.
 
Configuración del IDE de Arduino para programación ICSP con “USBasp”


Para ello abrimos el programa que queremos cargar en el Arduino UNO, seleccionamos la placa Arduino UNO y el puerto “COM” donde conectamos el “USBasp”, y por último, tenemos que seleccionar el “USBasp” como programador. Si queremos “Quemar el Bootloader” simplemente pulsaríamos en la opción y se realizaría automáticamente en pocos segundos. Para cargar el programa nos tenemos que ir al menú “Archivo à Subir Usando Programador” como se ha venido haciendo en los métodos ICSP anteriormente explicados.




Lista de Materiales:



·         Arduino UNO Rev.3.

·         Programador ICSP “USBasp”.

·         Drivers “USBasp”.

·         IDE 1.6.4 de Arduino (vale cualquier otra versión).

·         Software “AVRDUDESS 2.4”.

·         Firmware “USBasp”.

·         Cable USB tipo A-B.

·         Cables de conexiones (Cable de 10 pines opcional).

 

miércoles, 22 de febrero de 2017

Composición de colores RGB con potenciómetros a través de Bluetooth


Con este POST vamos a ser capaces de realizar la composición de cualquier color en un LED RGB mediante 3 potenciómetros, uno para cada color (Rojo, Verde y Azul), tal y como se analizó en un POST anterior, pero esta vez, lo haremos a través de comunicación bluetooth entre dos Arduinos, es decir, en vez de conectar tanto el LED RGB como los tres potenciómetros de control del color RGB al mismo Arduino, conectaremos el LED RGB al “Arduino Esclavo”, que va a ser el encargado de recibir a través de bluetooth los valores R, G y B necesarios para componer el color, además de aplicárselos al LED RGB para que los ejecute,  y por otra parte conectaremos los tres potenciómetros al “Arduino Maestro” que va a ser el encargado de leer el valor analógico de los mismos y de transformarlos para poder enviarlos a través de bluetooth hacia el “Arduino Esclavo”.
 
  Comunicación Bluetooth “Maestro-Esclavo” entre dos Arduinos

Para poder realizar la comunicación bluetooth entre los dos Arduinos, necesitaremos conectar un módulo bluetooth HC-06 al “Arduino Esclavo” para que pueda recibir los valores R, G y B de la composición del color y además necesitaremos conectar un módulo bluetooth HC-05 al “Arduino Maestro” configurándolo como maestro para que pueda enviar los valores R, G y B a través de bluetooth. Debemos de tener en cuenta que para que ambos Arduinos se sincronicen vía bluetooth deben de tener configurado mediante “comandos AT” el mismo pin de conexión, que en mi caso es “1234” en ambos Arduinos y también la misma velocidad de transmisión (os recomiendo 38400 Baudios para no tener que modificar los programas que cargamos en los Arduinos),  para ello,  tenemos el siguiente POST, donde se explica con detenimiento cómo configurar estos módulos bluetooth con éxito.

  Tabla de conexiones

Cabe aclarar que tanto la masa (GND) como la alimentación (VCC) de los módulos bluetooth HC-05 y HC-06 van conectadas respectivamente a los pines “GND” y “+5V” de Arduino. Los potenciómetros lineales de 10KΩ tienen un mando de control  y tres terminales de conexión que denominaremos P1, P2 y P3, donde P2 es el terminal central del potenciómetro. Como necesitamos tres potenciómetros en este proyecto, vamos a utilizar la matriz de enteros “const int Pot[3] = {0, 1, 2}” para definir a que pines analógicos de Arduino van a ir conectados los terminales centrales de los potenciómetros para poder realizar la lectura de sus valores, lo que significa que el terminal central del potenciómetro que regula el color rojo del LED RGB (P2_Pot[0]) va conectado a la entrada analógica “A0” de Arduino, el que regula el color verde (P2_Pot[1]) le conectaremos a la entrada analógica “A1” y el que regula el color azul (P2_Pot[2]) le conectaremos a la entrada analógica “A2”. Los otros dos terminales, P1 y P3, de cada uno de los tres potenciómetros van conectados respectivamente a los pines +5V y GND de Arduino. Por último, tengo que explicar, que el módulo RGB consta de cuatro pines de conexión, tres de ellos para los valores de entrada R, G y B que van conectados a los pines digitales 9, 10 y 11 respectivamente, y el restante que va conectado al pin “GND” de Arduino.
Para finalizar tengo añadir que para que todo esto funcione correctamente simplemente debemos de realizar correctamente la conexión de todos los componentes, a la vez que cargar el código correspondiente en cada uno de los Arduinos para que se comporten de manera adecuada. Una vez realizado esto, debemos de tener alimentados los dos Arduinos y esperar a que sincronicen los módulos bluetooth entre sí para comenzar a operar. Esto es un proceso automático y no es necesario realizar ninguna tarea adicional para que ocurra, sabiendo que están sincronizados cuando el LED de conexión de los módulos bluetooth HC-06 y HC-05 deje de parpadear para permanecer en un estado fijo. A partir de aquí podremos ir moviendo el mando de control de los 3 potenciómetros (R, G y B) para ir componiendo los colores en el LED RGB. Si abrimos el monitor serie del “Arduino Maestro” cuando lo tenemos conectado al PC a través del cable USB, podremos ver el valor de R, G y B (de 0 a 255) que estamos enviando a través de Bluetooth en cada momento cuando movemos los mandos de los tres potenciómetros.

Monitor serie


Lista de Materiales:


·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Módulo Bluetooth HC-05 (Maestro).

·         Módulo Bluetooth HC-06 (Esclavo).

·         LED RGB de  5mm (cátodo común).

·         3 Resistencias de 220Ω.

·         3 Potenciómetros lineales de 10KΩ.

·         Protoboard.

·         Cables de conexión.

NOTA: Si utilizamos un módulo RGB, no nos hace falta utilizar ni el LED RGB ni las resistencias, puesto que ya viene todo integrado en una pequeña placa.
 

Código del programa:

·         Arduino Esclavo
 

 
 
 
·         Arduino Maestro
 

 
 
  
Video:
  

viernes, 13 de enero de 2017

Control del brillo de una bombilla mediante un Dimmer AC y Bluetooth



Gracias a este POST vamos a aprender a controlar el brillo de una bombilla convencional de 220VAC mediante un Dimmer AC, como ya hicimos en un POST anterior, aunque en este caso vamos a modificar o variar el pulso PWM, que controla el Dimmer AC, desde una APP Android a través de Bluetooth y no desde el monitor serie como ya vimos con anterioridad. Ahora bien, para que nuestro Arduino pueda recibir el valor del PWM a través de Bluetooth tenemos que añadirle a nuestro proyecto un módulo Bluetooth HC-05, descrito y configurado en este POST, aunque lo debemos de conectar a nuestro Arduino como se muestra en la siguiente tabla. Cabe recordaros que la velocidad de comunicación (BAUDIOS) configurada mediante comandos AT del módulo Bluetooth HC-05, que en mi caso son 38400 bps (por defecto), debe coincidir con la velocidad de comunicación serie para el módulo Bluetooth que incluimos dentro de la programación que cargaremos a nuestro Arduino UNO (BT.begin(38400);).

  Tabla de conexiones entre nuestro Arduino y el módulo HC-05

Como ya sabemos de un POST anterior, un Dimmer AC es un atenuador de intensidad capaz de regular los 220VAC de su entrada para que su salida ofrezca un valor de 220VAC o inferior, que es donde conectaremos la bombilla para así poder controlar su brillo variando el pulso PWM entregado a través de Bluetooth. A continuación os muestro una tabla donde se relaciona directamente el valor  de la señal PWM con el porcentaje de atenuación del Dimmer y el porcentaje de brillo de la bombilla.

  Diagrama de funcionamiento del Dimmer AC

Como se puede observar en el diagrama anterior, la atenuación del valor de la entrada del Dimmer AC respecto de su salida es inversamente proporcional al brillo de la bombilla, es decir, a mayor atenuación de los 220VAC de la entrada del Dimmer AC obtenemos menor voltaje en la salida del mismo (menor brillo de la bombilla) y viceversa. A continuación os muestro las conexiones que debemos realizar en el Dimmer AC para que nuestro sistema funcione tal y como se ha descrito.

Tabla de conexiones del Dimmer AC

Una vez realizadas las oportunas conexiones de todo el sistema lo primero que tenemos que hacer es compilar y cargar el programa que tenemos en la descarga, en nuestro Arduino, para posteriormente instalar la aplicación "1 Channel Dimmer Bluetooth " que nos podemos descargar del siguiente enlace. Para instalar la APP en nuestro Smartphone, simplemente descomprimimos la carpeta descargada y copiamos el archivo “1CH_Dimmer_Bluetooth.apk” dentro de la tarjeta SD, para posteriormente abrir el explorador de archivos de nuestro Smartphone, buscar la ruta del archivo copiado y ejecutar el archivo dándole todos los permisos que sean necesarios para su instalación.

  Aplicación Android “1 Channel Dimmer Bluetooth”

Una vez instalada la aplicación debemos de realizar una serie de procesos como se muestra en el siguiente vídeo para poder vincular y conectar el módulo Bluetooth HC-05 a nuestro Smartphone y así poder utilizar la aplicación para enviar el valor del PWM mediante Bluetooth.



Si pulsamos el botón “ON” de la APP se envía a través de Bluetooth el valor  “90” (Bombilla completamente encendida) y si por el contrario pulsamos el botón “OFF” se envía el valor “14” (Bombilla completamente apagada).  Para valores intermedios del pulso PWM (entre 14 y 90), es decir, para variar el brillo de la bombilla, tenemos que ir pulsando sobre la barra central y nunca arrastrar el marcador, puesto que si lo hacemos, el sistema quedará bloqueado necesitando un reinicio para volver a su funcionamiento normal.  Si el valor enviado a través de la APP es superior a 90 es considerado por el Dimmer AC en todos los casos como 90, gracias a la programación que le cargamos a nuestro Arduino, y si es inferior a 14 es considerado siempre como 14. Para poder observar el valor del PWM que le estamos mandando al Dimmer AC a través de la APP en  cada momento simplemente tendremos que abrir el monitor serie del IDE de Arduino como ya lo hemos realizado en múltiples ocasiones y comenzar a enviar valores PWM desde la APP.
  Monitor serie


Lista de Materiales:



·         Arduino UNO Rev.3.

·         Cable USB tipo A-B.

·         Dimmer AC (50Hz/220V).

·         Módulo Bluetooth HC-05.

·         Casquillo portalámparas de PVC.

·         Bombilla de 28W/220VAC (vale cualquier bombilla de 220VAC).

·         Protoboard.

·         Cables de conexión.





Código del programa: