Vattna dina växter med en Attiny mikrokontroller
Jag vet, det finns en hel del instructables på hur du kan automatisera vattning av dina växter. Detta görs vanligtvis runt en Arduino. Jag bestämde mig dock att använda lite av en billigare lösning med en Arduinos små bröder, Attiny45, men det skulle nog fungera med en Attiny13. (bekräftat, det gör)
Kretsen är ganska enkel. En Fuktsensor kopplad mellan Vcc och Pin 3 (= analog pin2) bildar en spänningsavdelare. Om marken blir torr, motståndet av sensorn ökar och spänningen på pin3 går ner.
Om det faller under nivån för den nivå som med P1, vet Attiny jorden är för torr och gör stift 7 hög. Stift 7 matas in i en solid state-relä - 39MF22 - som växlar på en pump som är dränka i en vattenreservoar.
Jag har valt 39MF22 utan annan anledning än att det var mycket billigt.
Zenerdiode D1 är det att skydda chip. Om det finns en lång rad kommer från Fuktsensor, spänningstoppar kan vara förts över det, därav zenerdiode. Jag kommer att diskutera jumperblock senare
Tills så långt Attiny har gjort någonting mer än fungera som en komparator och faktiskt skulle kunna ersättas av en 741 (om du glömmer pin campatibility), men det är en mikrokontroller, kan det göra några saker. (vill du göra det med en 741 op förstärkare, titta här)
Dränkbara pumpar brukar vilja inte vara kvar körs torr, så Attiny kontrollerar waterlevel med hjälp av en switch (S1) som i mitt fall är en vass växla på utsidan av behållaren med en magnet på en flytande enhet i behållaren. Du kan också använda en tilt switchor en mekanisk switch som aktiveras av en flytande enhet. Den enklaste formen har jag sett var en flytande gummi ducky kopplad till en växla via en sträng. Om waterlevel fått för låg, skulle ducky dra i spaken.
Om du har fantasi nog, du kan till exempel attache en LDR eller en NTC mellan stift 1 och marken och låt det vattnas endast göras på natten, på morgonen, under mitten av dagen eller när det var det hetaste ögonblicket av dagen.
Bild 2 visar montering av komponenterna på ett kretskort. Som jag ville snabbt testa gå runt, hade jag inte monterat vissa komponenter ännu. Den har lite fler komponenter än i föregående bild och det är därför jag lagt till en standard 7805 baserade strömförsörjning
Bild 3 visar PCB (Hämta) den har några röda thingies på det, och jag kommer att få dessa senare. Vara medveten om att detta PCB är sett från komponent sidan och det är därför direkt användbar för värmeöverföring: kort sagt: skriva ut på glättat papper, sätta det på copperside av en bit av ren och avfettade PCB och överför det med ett varmt strykjärn. Etch i HCl och H2O2 (min rekommenderad metod)
Bild 4 visar Fuktsensor som jag använder. Det finns en hel del diskussion på luftfuktighet sensorer, men det kommer oftast till antingen 2 galvaniserade spikar eller en gips sensor. Jag har använt båda och jag föredrar de galvaniserade spikar. Lätt att göra, lätt att använda. Ja men vad om korrosion?
Japp finns det korrosion, särskilt när en ström flyter genom spikar (eventhough det är mycket lite). och det är där jumperblock i kretsen kommer in. För enkelhetens skull jag utfodring spikar bara från stambanan, så det finns en kontinuerlig spänning och en kontinuerlig ström och ja det snabbar upp korrosion.
Du kunde valde emellertid för att mata spikar från en digital i/o pin t.ex. Pin 5. Jag kunde har lagt det alternativet i PCB design med en bygel 3 stift, men det verkade lite dumt som jag bestämde mig redan jag skulle bara använda stambanan, men om du vill mata den från Pin 5 så ta en titt på PCB design. Det innebär att avbryta en koppar spåra och köra en tråd. Det är allt som finns till den. Programmet vänder sig redan för det. Ändringarna har markerats med rött på PCB design
Bara lite mer om sensorn och motståndet R1. I idealfallet har R1 samma värde som sensorn har på dess 'bara våt nog, kunde använda lite vatten' motstånd. Så, när du har gjort din sensor, hålla den i din jord på ett ögonblick att det jcould använda lite vatten. Så inte när din jord är Ben torr, men på ett ögonblick du tror, ja, jag kunde vatten idag, men kanske det kommer att hålla tills tomoro.
Stick i sensorn och mäta det är motstånd. Valde att som motstånd för din R1. I mitt fall var det 10 k, men mycket beror på vilken typ av jord, men också på avståndet mellan spikar. Jag har dem nära varandra men du kan välja för att sätta dem på motsatta sidor av din anläggning säng...
Programvara:
------
/ * Trädgård 3
april 2012
Sensorer:
-Fuktighet spike på analoga PIN2-
*
*----------------------Humid------------------------------
* Schema:
* [Mark]--[10k-pad-motstånd]--| --[Spikar]--[Vcc]
*
* Analog stift 2
*
*
ATTiny stift
Fysiska Analoog Digital
1 0 5 återställning, PinChange avbrott
2 3 3 INT0, 3
3 2 4 INT0, 4
4 mark
5 0 INT0, 0
6 1 INT0, 1
7 1 2 INT0, 2
8 Vcc
*/
PIN definities
CONST byte levelPin = 3; analoga Pin3 -> fysiska pin2 Ange nivå
CONST byte humidPin = 2; analog Pin2 -> fysiska pin3 Fuktsensor
CONST byte pumpPin = 2; Digital Pin2 -> fysisk pin7 Pump
CONST byte emptyPin = 1; Digital Pin1 -> fysisk Pin6 waterlevel
CONST byte spikePin = 0; Digital Pin0 -> fysiska Pin5 Extra för intermittent växling av spike
Variabel inställning
int fuktig = 0; float är inte nödvändigt
int vattna = 0; nivå för bevattning
byte-nivå = 0;
Följande funktion, "setup", måste alltid finnas
void setup()
{
pinMode(levelPin,INPUT); ange åtkomstnivå
pinMode(humidPin,INPUT); mäter luftfuktighet
pinMode(emptyPin,INPUT); åtgärder reservoar
pinMode(spikePin,OUTPUT); för alternativa leverans till spikar
pinMode(pumpPin,OUTPUT); Utgång för Relay
digitalWrite (pumpPin, låg);
digitalWrite (spikePin, låg);
}
void loop() //This funktion måste alltid finnas
{
Level = digitalRead(emptyPin);
/*
Först läsa nivå apparaten med P1 på levelPin och lagra det i "vattna"
*/
irrigate=Sample(levelPin);
/*
Då läser vi Fuktsensor.
Vi måste först satt spikePin till hög, som används till foder sensorn. Efter behandlingen vi ställa tillbaka) om värdet läser ("fuktiga") är mindre än vad som anses vara torka ("vattna") då pumpen bör vara påslagen under en viss tid. Detta görs genom att ange en högre treshhold för stänga av pumpen
*/
digitalWrite (spikePin, hög);
Moist=Sample(humidPin); Läs humiditySensor
digitalWrite (spikePin, låg);
Level = digitalRead(emptyPin);
om (fuktig < = bevattna) digitalWrite (pumpPin, nivå);
om (fuktig > = vattna + 5) digitalWrite (pumpPin, låg); förhindrar Jitter
avsluta loop
}
int prov (int z)
/ * Denna funktion kommer att läsa Pin "z" 5 gånger och ta ett genomsnitt.
Därefter ska det mappas genom att dividera med 4
Således: dividera med 20
*/
{
byte i.
int sval = 0;
för (jag = 0; jag < 5; i ++) {sval = sval + analogRead(z); / / sensorn på analoga pin "z"
}
sval = sval / 5; genomsnitt
sval = sval / 4; skala till 8 bitar (0 - 255)
sval = sval/20;
returnera sval;
}
Programvaran är mycket okomplicerad och behöver inte mycket att förklara. Mätningen görs med funktionen "prov" ("Stal" det någonstans men jag glömde var så krediten inte är alla mina). Varje gång innan funktionen kallas, "spikePin" ligger högt om du använder som för att mata spikar. Om du bara mata den från 5V linje, kan det anvisningen lämnas.
Som det är, mäter programvaran kontinuerligt, så egentligen inte gör det så mycket skillnad där du mata spikar från. Om du väljer att mata spikar från den digitala i/o pin, skulle det vara meningsfullt att också bygga i en försening i mäta, som en gång varje timme, eller två gånger om dagen. Som kretsen inte har en klocka, är det enklast att göra denna försening med en eller flera "försening" instruktioner.
Att få mjukvaran i Attiny
Det finns gott om instruktioner på det och det är inte ämnet för denna tutorial. Du kan använda en dedikerad programmerare, en annan arduino eller ens din seriell eller parallell port.
Men kort sagt du måste installera en Attiny85 core och markera som när sammanställningen och programmering. Gå här för kärnor och förklaring.
Extra:
Stift 1 i Attiny dras hög eftersom detta är vanligtvis Återställ PIN-koden och vill man inte ha som hänga lös. Om man skulle ersätta R4 med en 1 k motstånd i serie med LED, som användas för signal funktioner som "Jag mäta nu" eller "vattennivån är för låg". Dock måste du programmera det klämmer fast som en vanlig Digital stift och därmed förlorar sin återställningsfunktionen. Det innebär att omprogrammering inte är möjlig utan en HighVoltage programmerare.
Obs:
Om du gör PCB, är det klokt att göra kuddar där conenctors gå i en smula större med t ex en tuschpenna eller vissa nailpolish, så när du löda i kopplingarna de kan få bra grepp.