Brewduino (2 / 3 paso)

Paso 2: LCD + relé = más cosas!

En versiones anteriores utiliza una pantalla de LCD que, mientras trabajaba, necesitaría alrededor de una docena de cables y un potenciómetro para controlar el brillo de la pantalla (ver foto, tablero superior). Esta vez he logrado obtener algunas pantallas LCD mucho más simples que requieren solo cuatro cables (misma foto, tablero inferior). Los cables son VCC, GND, SDA y SCL. Estos deben marcarse en el Arduino, pero en tableros de UNO creo que es A4 y A5. En mi MEGA de 20 y 21 y están marcadas como tal. Pero tienes que poner esas líneas a través de una resistencia de 4,7 K de 5V.

Estas nuevas pantallas de LCD son I2C que significa que tienen un pequeño tablero de regulador en la parte posterior. También significa que requieren una nueva biblioteca de LCD (https://bitbucket.org/fmalpartida/new-liquidcrystal) en el código.

Antes de añadir el código del LCD, tenemos que hacer una exploración de la pantalla para conseguir su dirección I2C. Modelos diferentes tienen diferentes direcciones. Así que, coge el código de: http://arduino.cc/playground/Main/I2cScanner y ejecútelo para ver su dirección I2C LCD en el monitor serie. La mía es 0x3F.

Código de LCD

Necesito incluir esa nueva biblioteca:

 #include <LiquidCrystal_I2C.h> 

Definir varios pines (I2C cosas que no debes tocar) pero Inserto mi dirección I2C:

 #define I2C_ADDR 0x3F // <<----- Add your address here.#define BACKLIGHT_PIN 3 #define En_pin 2 #define Rw_pin 1 #define Rs_pin 0 #define D4_pin 4 #define D5_pin 5 #define D6_pin 6 #define D7_pin 7 LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin); 

En mi instalación inicializar la pantalla 16 X 2, activar la retroiluminación, imprimir un mensaje y poner un retraso para permitir la lectura.

 lcd.begin (16,2); // LCD is 16x2lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); // Switch on the backlight lcd.setBacklight(HIGH); lcd.home(); // go home lcd.print("Screen OK"); // print to screen delay(2000); 

Ahora tengo mi temperatura, la humedad y algunas de mis salidas de monitor serial va a la pantalla mediante el comando lcd.print().

 lcd.setCursor(0,2); lcd.print("Checking... "); 

lcd.setCursor() es para poner el texto en una posición determinada en la pantalla.

Nota: Si no ve nada en la pantalla en la primera carrera, intente girar el potenciómetro en la parte posterior de la pantalla para ajustar el brillo de la pantalla.

ADVERTENCIA: esta vez nos dirigimos en las grandes ligas con el control de
dispositivos de voltaje doméstico. Debería ir sin decir, pero lo diré de todos modos, usted debe asegurarse de que sus aparatos de 110/240V están desenchufados antes de picar los cables y comprobar el cableado antes de enchufe en el tomacorriente de pared.

Relé de estado sólido

En primer lugar, puede utilizar un interruptor de relé con este circuito, pero obtendrá un físico chasquidos como el relé cambia hacia adelante y hacia atrás. No es gran cosa, pero un relé de estado sólido es digital y sin sonido. Estar absolutamente seguro de que el relevador interruptor (sólido o no del estado) está preparada para hacer 110/240V.

Antes de pique en el cable de mi estera de calor amado quiero para asegurarse de que este circuito va a funcionar. Así, en cambio, que voy a picar en una lámpara de escritorio sin usar.

Con él unenchufado picado a través del cable y junto los dos cables interiores (vivo y neutro). Luego trenzados entre sí los dos cables de vivo y dejó los dos cables neutro separados. También puse algunos cinta eléctrica sobre ese giro para cubrir para arriba y mantener las cosas un poco seguro.

El relé de estado sólido (SSR para el cortocircuito) tiene dos entradas de DC (en la foto, en que es parte inferior izquierda, es el rojo + 5v y azul). También tiene (dependiendo de su SSR) uno o más canales. Mi SSR dispone de dos canales. Esto es donde tu Arduino (cable amarillo en la foto) le dirá a la SSR a ir alta o baja. Las dos entradas finales son para los cables que desea abrir y cerrar. En este caso el neutro (cables arriba en la foto) de mi lámpara. Ahora, no ayuda a que mis entradas son etiquetados erróneamente. El marcado un 'Ch1' es en realidad para el canal dos de la SSR. Tan si usted intente esto y no funciona, intente cambiar el cable del Ch1 al Ch2. Usted debe ver una luz viene en la RSS de canal que es alto o bajo.

Con esas cosas en su lugar es hora de escribir código.

Para probar la SSR a flashear la lámpara encendido/apagado. Las primeras líneas nuevas de código son:

 #define ssr1 53int state = LOW; unsigned long previousMillis= 0; const long interval= 1000; 

Esto define pin 53 en Arduino como el pin de control para la SSR. El estado debe realizar un seguimiento de si la lámpara está actualmente encendido. La previousMillis y el intervalo están el flash. Voy a probar y utilizar millis lugar de retrasos como millis es preferible al programa detener comandos de retardo.

Yo comienza con el habitual pinMode y luego la SSR en el estado inicial de baja. En otras palabras, apagado. Este relé es 'bajo nivel trigger' que significa es baja, y alta está apagado.

 pinMode(ssr1, OUTPUT); digitalWrite(ssr1, state); 

En la configuración de crear:

 unsigned long currentMillis = millis(); 

como se utilizará en el if/luego a encender/apagar la lámpara.

El sólo código adicional de la nota es la conmutación:

 if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // using millis() for light flash delay // flash light if (state == LOW) { state=HIGH; // want to turn the SSR off } else { state=LOW; // want to turn the SSR on } digitalWrite(ssr1, state); // turn the SSR on/off } 

currentMillis y previousMillis a hacer un seguimiento de cuántos milisegundos el bucle se ejecuta para. Cuando alcance el intervalo (configurar en el inicio) luego el bucle termina. Tenga en cuenta que esto significa que el código nunca se entrampa como lo haría con un retraso. Todavía puedo poner cosas que hacer dentro de ese alto/bajo si declaración.

El interno if/else es sólo comprobar si está actualmente desactivada, pongamos que, si es en la actualidad, Pongámoslo. Y, por último, el encendido y apagado.

Con el intervalo a 1000, esto significa que la lámpara se apagará en/cada segundo.

El único inconveniente de la eliminación de los retrasos es que yo soy ahora martilleo ThingSpeak cada minuto o menos, pero arreglaremos más adelante. Está trabajando. Eso es lo principal!

Se adjunta el código para esto.

Para comprobar una temperatura específica es tan sencillo como poner en dos si las declaraciones.

 if (DHT.temperature > 24 ) { state=LOW; } 
 if (DHT.temperature < 24) { state=HIGH; } 

Si la temperatura supera la 24, la lámpara se enciende. Si la temperatura cae por debajo de 24, la lámpara se apaga.

Artículos Relacionados