Brewduino (2 / 3 stap)

Stap 2: LCD + Relais = meer stuff!


In vorige builds gebruikte ik een LCD-scherm die, terwijl het werkte, moeten zou ongeveer een dozijn draden en een potentiometer (potmeter) waarmee de helderheid van het scherm (zie foto, top van de Raad van bestuur). Ditmaal heb ik erin geslaagd om enkele veel eenvoudiger LCD-schermen die slechts vier draden (dezelfde foto, onderkant board vereist). De draden zijn VCC, GND, SDA en SCL. Deze moeten worden gemarkeerd op uw Arduino, maar op UNO boards is volgens mij het A4 en A5. Op mijn MEGA zijn van 20 en 21 en ze gemarkeerd als zodanig. Maar u moet deze beide lijnen zetten via een 4.7K weerstand van 5V.

Deze nieuwere LCD-schermen zijn I2C waardoor dat ze een beetje controller boord hebben op de rug. Het betekent ook dat zij vereisen een nieuwere LCD-bibliotheek (https://bitbucket.org/fmalpartida/new-liquidcrystal) in de code.

Voordat LCD code toe te voegen, moeten we doen een scan van het LCD-scherm om het I2C adres. Verschillende modellen hebben verschillende adressen. Dus, pak de code uit: http://arduino.cc/playground/Main/I2cScanner en stormloop op voor zien uw LCD I2C adres in de seriële monitor. Mijne is 0x3F.

LCD-Code

Ik moet die nieuwe bibliotheek:

 #include <LiquidCrystal_I2C.h> 

Mijn I2C adres verschillende pinnen (I2C stuff mag niet hoeft te raken) maar invoegen definiëren:

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

In mijn setup ik initialiseren van het scherm als 16 X 2, inschakelen van de verlichting, en een bericht afdrukt en zet een vertraging zodat lezen.

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

Ik heb nu mijn temperatuur, vochtigheid, en sommige van mijn seriële monitor uitgangen naar het LCD-scherm met behulp van de opdracht lcd.print().

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

lcd.setCursor() is om de tekst op een bepaalde positie op het scherm te plaatsen.

Opmerking: als u niets op het scherm op eerst gelopen ziet, kunt u proberen de potentiometer op de achterkant van het LCD-scherm de helderheid van het scherm.

Waarschuwing: deze keer we heading in de Hoofdklasse met controle
spanning van de huishoudelijke apparaten. Het moet vanzelfsprekend, maar ik zeg het toch, u most merk zekere dat uw 110/240V apparaten zijn ontkoppeld voordat hakken kabels en dubbel te controleren uw bedrading voordat u zet die sluit weer aan op het stopcontact.

Solid State Relais

Eerst, kunt u een relay switch met dit circuit, maar je krijgt een fysieke te klikken geluid als het Relais schakelt heen en weer. Geen big deal, maar een solid state relais is digitaal en zonder geluid. Er absoluut zeker van dat het Relais schakelen (solide staat of niet) is gewaardeerd hiervoor 110/240V.

Voordat ik snijd in de kabel van mijn geliefde warmte mat wil ik ervoor zorgen dat dit circuit zal werken. Dus, in plaats daarvan, I 'm gonna hak in een ongebruikte bureaulamp.

Met het VNaangesloten ik gehakt via de kabel en gekoppeld uit de twee binnenste kabels (live en neutraal). Vervolgens heb ik de twee levende kabels samen twisted en liet de twee neutrale kabels los. Ik heb ook nog enkele elektrische tape over die draai te bedekken en dingen enigszins veilig te houden.

De solid state relais (SSR voor korte) heeft twee DC-ingangen (op de foto, daarbij wordt linksonder, is de grond rood + 5v en blauw). Het heeft ook (afhankelijk van uw SSR) één of meer kanalen. Mijn SSR heeft twee kanalen. Dit is waar je Arduino (gele draad in de foto) zal vertellen de SSR ga hoog of laag. De laatste twee ingangen zijn voor de kabel die u wenst te openen/sluiten. In dit geval de neutrale (bovenste draden in de foto) van mijn lamp. Nu, zou het niet helpen dat mijn ingangen ten onrechte geëtiketteerd worden. De één gemarkeerd 'Ch1' zit zowaar voor SSR kanaal twee. Dus als u dit probeert, maar het werkt niet, probeer uw draad van Ch1 Ch2. Je ziet een lichte komen op op de SSR te laten zien welk kanaal HIGH/LOW.

Met die dingen in de plaats is het tijd om te schrijven wat code.

Als u wilt testen van de SSR zal ik de lamp aan/uit flash. De eerste nieuwe lijnen van code zijn:

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

Dit definieert 53 pin op de Arduino als de controle pin voor de SSR. De staat is om bij te houden of de lamp is op dit moment aan/uit. De previousMillis en de interval zijn voor de flitser. Ik ga proberen en gebruiken millis in plaats van vertragingen als millis is meer de voorkeur aan het programma vertraging opdracht te stoppen.

Ik beginnen met de gebruikelijke pinMode en stel vervolgens de SSR naar de oorspronkelijke toestand van laag. Met andere woorden, uitschakelen. Deze SSR is 'lage niveau trigger', wat betekent lage brandt, en hoge uitstaat.

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

Ik maak in de setup:

 unsigned long currentMillis = millis(); 

Aangezien dit zal worden gebruikt in de if/om vervolgens over te schakelen aan/uit de lamp.

De alleen andere aanvullende code van de nota is de switching:

 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 en previousMillis zal bijhouden van hoeveel milliseconden de lus wordt uitgevoerd voor. Wanneer het bereikt de interval (instellen aan het begin) dan de lus eindigt. Merk op dat dit betekent dat de code nooit maalt tot stilstand als het zou met een vertraging. Nog steeds kan ik dingen te doen in die hoog/laag als verklaring.

De binnenste if/else is gewoon de controle om te zien dat wanneer deze momenteel uitgeschakeld is, laten we het op, als het op dit moment op, laten we het af. En, ten slotte, doen de in- / uitschakelen.

Dit betekent dat de lamp dooft op/elke seconde met het interval dat is ingesteld op 1000.

Het enige nadeel van het verwijderen van de vertragingen is dat ik ben nu hameren ThingSpeak elke minuut of minder, maar ik zal dat later te bevestigen. Het werkt. Dat is het belangrijkste!

De code voor dit is aangesloten.

Om te controleren voor een bepaalde temperatuur zo eenvoudig is zoals aanbrengend twee als verklaringen.

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

Als de temperatuur boven 24 gaat, komt de lamp op. Als de temperatuur daalt tot onder 24, gaat de lamp uit.

Gerelateerde Artikelen