Brewduino (2 / 3 steg)

Steg 2: LCD + relä = mer grejer!



I tidigare bygger jag använde en LCD-skärm som, när det fungerade, skulle behöva ett tiotal ledningar och en potentiometer att styra skärmens ljusstyrka (se foto, top styrelsen). Denna gång har jag lyckats få några mycket enklare LCD skärmar som kräver endast fyra sladdar (samma foto, botten styrelsen). Ledningarna är VCC, GND, SDA och SCL. Dessa skall vara märkta på din Arduino, men UNO styrelserna tror jag det är A4 och A5. På min MEGA är det är 20 och 21 och de markerade som sådana. Men du måste sätta båda dessa linjer via en 4.7K motstånd från 5V.

Dessa nyare LCD-skärmar är I2C vilket innebär att de har en liten styrkort på baksidan. Det innebär också att de kräver en nyare LCD bibliotek (https://bitbucket.org/fmalpartida/new-liquidcrystal) i koden.

Innan du lägger till LCD kod, måste vi göra en genomsökning av LCD-skärmen får dess I2C adress. Olika modeller har olika adresser. Så, ta koden från: http://arduino.cc/playground/Main/I2cScanner och köra den för att se din LCD I2C adress i följetong monitor. Min är 0x3F.

LCD-kod

Jag måste inkludera det nya biblioteket:

#include < LiquidCrystal_I2C.h >

Definiera olika pins (I2C saker som du inte ska behöva röra) men infoga min I2C adress:

#define I2C_ADDR 0x3F / / <<---lägga till din adress här.
#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);

I min setup jag starta skärmen som 16 X 2, slå på bakgrundsbelysningen, och skriva ut ett meddelande och en försening så att läsa den.

LCD.BEGIN (16,2); LCD är 16 x 2
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); Slå på bakgrundsbelysningen
lcd.setBacklight(HIGH);
LCD.Home(); Gå hem
LCD.Print ("skärmen OK"); skriva ut på skärmen
Delay(2000);

Jag har nu min temperatur, luftfuktighet, och några av min följetong monitorutgångar kommer att LCD-skärmen med kommandot lcd.print().

lcd.setCursor(0,2);
LCD.Print ("kontroll... ");

lcd.setCursor() är för att placera texten på en viss position på skärmen.

Obs: om du inte ser något på skärmen på den första körningen, prova vrida potentiometern på baksidan av LCD-skärmen att justera ljusstyrkan på skärmen.

Varning: den här gången är vi på väg i den stora ligan med kontrollerande
Hushållens spänning enheter. Det borde vara självklart, men jag säger det ändå, bör du kontrollera dina 110/240V enheter är urkopplad innan hugga kablar och dubbelkolla dina ledningar innan du lägger som kopplar tillbaka till vägguttaget.

Solid State-relä

Först, du kan använda en reläutgång med denna krets, men du får en fysisk klickande ljud som reläet växlar fram och tillbaka. Inget märkvärdigt, men en solid state-relä är digital och utan ljud. Vara helt säker på att växla reläet (fast eller inte) är specificerad för att göra 110/240V.

Innan jag hacka i kabeln till min älskade värme matta vill jag att denna krets kommer att fungera. Så istället ska jag hacka i en oanvänd skrivbordslampa.

Med det uninkopplad jag hackade via kabel och parat av två inre kablarna (levande och neutrala). Jag sedan twisted två levande kablar ihop och lämnade två neutrala kablar lossnat. Jag har också lagt några eltejp över det twist för att täcka upp och hålla saker lite säker.

Solid state-relä (SSR för korta) har två DC-ingångar (på bilden, på som är nederst till vänster, är marken röd + 5v och blå). Det har också (beroende på din SSR) en eller flera kanaler. Min SSR har två kanaler. Det är där din Arduino (gul tråd på bilden) kommer att berätta i SSR att gå hög eller låg. De sista två ingångarna är för kabeln du önskar att öppna/stänga. I detta fall neutrala (översta trådarna i bilden) från min lampa. Nu, det hjälpte inte att mina ingångar är felaktigt märkta. En märkt "Ch1" är faktiskt för SSR kanal två. Så om du försöker detta och det inte fungerar, prova att byta din tråd från Ch1 till Ch2. Du bör se en ljus komma på på SSR att visa vilken kanal är hög/låg.

Med dessa saker på plats är det dags att skriva lite kod.

För att testa i SSR kommer jag blinkar lampan på/av. De första nya raderna kod är:

#define ssr1 53int stat = låg;
osignerade långa previousMillis = 0;
CONST långa intervall = 1000;

Detta definierar pin 53 på Arduino som kontroll stiftet för i SSR. Staten är att hålla reda på om lampan är för närvarande på/av. PreviousMillis och intervall är för blixten. Jag kommer att försöka använda millis snarare än förseningar som millis är mer att föredra framför programmet att stoppa dröjsmål kommando.

Jag börjar med den vanliga pinMode och då sätta i SSR att starttillståndet för låg. Med andra ord av. Denna SSR är "låg nivå utlösande" vilket innebär låg på, och hög är avstängd.

pinMode (ssr1, produktionen);
digitalWrite (ssr1, statligt);

I setup skapa jag:

osignerade långa currentMillis = millis();

eftersom detta kommer att användas i om/då att växla på/av lampan.

Endast andra extra koden notera är växlingen:

om (currentMillis - previousMillis > = intervall) {
previousMillis = currentMillis; med millis() för lätta flash dröjsmål
blixtljus
om (statligt == låg) {
State = hög; vill inaktivera i SSR
} annat {
State = låg; vill aktivera i SSR
}
digitalWrite (ssr1, statligt); vända i SSR/på
}

currentMillis och previousMillis kommer att hålla koll på hur många millisekunder loopen kör för. När den når intervallet (inställt i början) då loopen avslutas. Observera att detta innebär att koden aldrig slipar till en halt som det skulle med en fördröjning. Jag kan fortfarande sätta grejer att göra inne som hög/låg om uttalande.

Inre if/else bara kontroll för att se om den är för närvarande avstängd, låt oss sätta det på, om det är för närvarande på, låt oss uttrycka det. Och, slutligen, göra den på/av.

Med intervall på 1000 innebär detta lampan kommer att slå på/av varje sekund.

Den enda nackdelen med att ta bort förseningarna är att jag nu hamrar ThingSpeak varje minut eller mindre, men jag fixar det senare. Det fungerar. Det är huvudsaken!

Koden för detta är fäst.

Att kontrollera om en viss temperatur så enkelt som att sätta i två om uttalanden.

om (DHT.temperature > 24) {
State = låg;
}

om (DHT.temperature < 24) {
State = hög;
}

Om temperaturen går över 24, tänds lampan. Om temperaturen sjunker under 24, slocknar lampan.

Se Steg
Relaterade Ämnen