Brewduino (2 / 3 étapes)

Étape 2: LCD + relais = plus de choses !

Dans les versions précédentes, j’ai utilisé un écran LCD qui, alors qu’il travaillait, aurait besoin d’une douzaine de fils et un potentiomètre pour contrôler la luminosité de l’écran (voir photo, albums de Conseil). Cette fois j’ai réussi à obtenir certains écrans LCD beaucoup plus simples qui nécessitent seulement quatre fils (même photo, bas board). Les fils sont VCC, GND, SDA et SCL. Ceux-ci devraient être indiqués sur votre Arduino, mais sur les cartes UNO, selon moi, que c’est A4 et A5. Sur mon méga c' est 20 et 21 et ils sont signalées comme telles. Mais vous devez mettre ces deux lignes à travers une résistance de 4,7 K de 5V.

Ces nouveaux écrans LCD sont I2C qui signifie qu’ils ont une petite carte de contrôleur sur le dos. Cela signifie également qu’ils ont besoin d’une nouvelle bibliothèque de LCD (https://bitbucket.org/fmalpartida/new-liquidcrystal) dans le code.

Avant d’ajouter le code d’écran LCD, nous devons faire un balayage de l’écran LCD pour obtenir son adresse I2C. Différents modèles ont des adresses différentes. Alors, prenez le code : http://arduino.cc/playground/Main/I2cScanner et exécutez-le pour voir votre adresse I2C LCD dans le moniteur de la série. Le mien est 0x3F.

Code d’écran LCD

J’ai besoin d’inclure cette nouvelle bibliothèque :

 #include <LiquidCrystal_I2C.h> 

Définir différentes broches (I2C trucs que vous ne devriez pas besoin de toucher) mais insérer mon adresse 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); 

Dans mon installation j’ai initialiser l’écran 16 X 2, activer le rétro-éclairage et imprimer un message et mettre un délai pour permettre la lecture.

 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); 

J’ai maintenant ma température, l’humidité et certains de mes sorties de moniteur série aller à l’écran LCD à l’aide de la commande lcd.print().

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

lcd.setCursor() est de placer le texte à une position particulière sur l’écran.

Remarque : Si vous ne voyez rien sur votre écran sur la première manche, essayez de tourner le potentiomètre sur le dos de l’écran LCD pour régler la luminosité de l’écran.

Avertissement: cette fois, nous nous dirigeons dans la grande ligue avec contrôle
dispositifs de tension de ménage. Il va sans dire, mais je vais le dire quand même, vous devez vous assurer que vos appareils de 110/240V sont débranchés avant de découper des câbles et vérifiez votre câblage avant que vous ne mettez que rebrancher la prise murale.

Solid State Relay

Tout d’abord, vous pouvez utiliser un commutateur de relais avec ce circuit, mais vous obtiendrez un physique cliquettement comme le relais bascule en arrière. Pas grand chose, mais un relais statique est numérique et sans bruit. Avoir la certitude absolue que le relais commuter (solide ou non de l’État) est évalué pour faire 110/240V.

Avant je Hachez le câble de mon tapis de chaleur bien-aimé, je tiens à s’assurer que ce circuit fonctionnera. Ainsi, au lieu de cela, je vais couper en une lampe de bureau non utilisés.

Avec elle unbranché j’ai haché par le câble et jumelé hors les deux câbles intérieurs (phase et neutres). J’ai ensuite torsadés les deux câbles de vivre ensemble et a laissé les deux câbles de neutres détachés. J’ai aussi mis un ruban isolant sur cette tournure à le couvrir et garder les choses un peu sûre.

Le relais de l’état solide (SSR pour faire court) possède deux entrées de DC (sur la photo, à qui est en bas à gauche, est le sol rouge + 5v et bleu). Il a également (selon votre SSR) un ou plusieurs canaux. Mon SSR dispose de deux canaux. C’est où votre Arduino (fil jaune sur la photo) dira la SSR d’aller haute ou basse. Les deux entrées finales sont pour le câble que vous souhaitez ouvrir/fermer. Dans ce cas, le neutre (fils de haut sur la photo) de ma lampe. Maintenant, il n’a pas aidé que mes entrées sont étiquetées à tort. L’une marquée "Ch1' est en fait pour le canal RSS deux. Donc si vous essayez ceci et cela ne fonctionne pas, essayez de changer votre câble de Ch1 à Ch2. Vous devriez voir une lumière arrivé sur la RSS pour montrer quel canal est HIGH/LOW.

Avec ces choses en place, il est temps d’écrire du code.

Pour tester la RSS je vais flasher le voyant marche/arrêt. Les premières nouvelles lignes de code sont :

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

Ceci définit la broche 53 sur l’Arduino comme le téton de contrôle pour le SSR. L’Etat doit garder la trace de savoir si la lampe est actuellement on/off. Le previousMillis et l’intervalle sont pour le flash. Je vais essayer d’utiliser millis plutôt que des retards comme millis est préférable au programme arrêt retard commande.

J’ai commencer avec l’habituel pinMode et puis définissez la SSR à l’état initial du bas. En d’autres termes, au large. Ce SSR est « faible niveau trigger », qui signifie faible sur, et haute est éteint.

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

Je crée dans la configuration :

 unsigned long currentMillis = millis(); 

car cela vous serviront dans la fi/puis à allumer/éteindre la lampe.

Le seul autre code additionnel de note est l’entremise :

 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 et previousMillis garder trace de combien de millisecondes la boucle s’exécute pour. Quand il atteint l’intervalle (mis en place au début) puis la boucle se termine. Notez que cela signifie que le code jamais moutures à l’arrêt comme il le ferait avec un retard. Je peux mettre encore des trucs à faire à l’intérieur de cette haute/basse si déclaration.

Le cercle intérieur if/else est juste vérifier pour voir que si il est actuellement désactivé, nous allons mettre sur, si il y a actuellement sur, mettons. Et, enfin, faire le marche/arrêt.

L’intervalle défini à 1000 cela signifie que la lampe s’éteindra sur/chaque seconde.

Le seul inconvénient d’éliminer les retards est que je suis maintenant martelage ThingSpeak chaque minute ou moins, mais je vais arranger ça plus tard. Ça fonctionne. C’est l’essentiel !

Le code pour cela est attaché.

Pour rechercher une température spécifique, que c’est aussi simple que de mettre en deux si les déclarations.

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

Si la température dépasse 24, la lampe s’allume. Si la température tombe en dessous de 24, le voyant s’éteint.

Articles Liés