Stap 3: schets
Hier is de schets van die de Arduino board wordt uitgevoerd. De code bepaalt in wezen wat de lezing van de vochtigheid sensor is en vergelijkt het met de vocht limiet lezen. Als het groter is, dan loopt de openValve-lus. Als het minder, dan de writeSensor-lus loopt. De openValve-lus wordt de klep geopend en knippert het woord drenken een aantal keer bepaald door de variabele blinkCount vóór het sluiten van de klep. De writeSensor-lus wordt alleen de sensor lezen op het LCD-scherm weergegeven. Als het vocht lezing kleiner dan de limiet van vocht, een aantal is als verklaringen worden uitgevoerd om te bepalen welke LED-lamp moeten licht omhoog en waar de servo zou worden gepositioneerd.
Auteur: Nick Brown
Herziene versie: 12/3/15
Semester: Vallen 2015
Omvatten verklaringen
#include
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2);
#define servopin 9 / / servomotor definieert als pin 9 Servo indicator;
int valvePin = 10; Magneetventiel is verbonden met pin 10
int moistureLimit = 450; De limiet van vocht voordat de plant moet
worden gedrenkt is 450
int greenLimit = 350; De limiet van vocht dat de groene LED brandt
int yellowLimit = 400; De limiet van vocht tussen de eerste en tweede
gele LED-verlichting
int blinkCount = 4; Hiermee geeft u de hoeveelheid tijd zal het bericht "water"
knipperen voordat de klep sluit
int greenled = 7; Groene LED is verbonden met pin 7
int yellow1led = 6; Eerste gele LED is verbonden met pin 6
int yellow2led = 5; Tweede gele LED is verbonden met pin 5
int redled = 4; Rode LED is verbonden met pin 4
VOID Setup {}
Initialiseer seriële communicatie met 9600 bits per seconde:
Serial.begin(9600);
LCD.init();
LCD.backlight (); //turns de achtergrondverlichting op
pinMode (valvePin, OUTPUT); Definieert ventiel en LED-verlichting zoals uitgangen
pinMode (greenled, OUTPUT);
pinMode (yellow1led, OUTPUT);
pinMode (yellow2led, OUTPUT);
pinMode (redled, OUTPUT);
indicator.attach(servopin); hecht servomotor voor stift
delay(1000); wachten 1000msec}
void loop {}
Lees de input op analoge pin 0:
int moistureValue = analogRead(A0);
Serial.println(moistureValue); Als verklaring of de lezing van vocht vertelt is hoger dan de
vocht limiet. Als zo, de lus open klep uitvoeren zal, zal de rode LED
oplichten, en de servomotor onder hoek 0 moet worden geplaatst.
Als (moistureValue > moistureLimit)
{
digitalWrite(redled,HIGH);
digitalWrite(yellow1led,LOW);
digitalWrite(yellow2led,LOW);
digitalWrite(greenled,LOW);
indicator.write(0);
OpenValve (valvePin);
}
Als als verklaring niet wordt gesloten, de writesensor-lus wordt uitgevoerd
en een reeks van if verklaringen wordt uitgevoerd te bepalen hoe vochtig de
de bodem is. Deze verklaringen zullen vertellen welke LED licht moet worden verlicht
en welke positie de servomotor moet.
anders
{
writeSensor(moistureValue);
digitalWrite(redled,LOW);
Als (yellowLimit > moistureValue)
{
Als (greenLimit > moistureValue)
{
digitalWrite(greenled,HIGH);
digitalWrite(yellow2led,LOW);
digitalWrite(yellow1led,LOW);
indicator.write(180);
}
anders
{
digitalWrite(yellow1led,HIGH);
digitalWrite(greenled,LOW);
digitalWrite(yellow2led,LOW);
indicator.write(120);
}
}
anders
{
digitalWrite(yellow2led,HIGH);
digitalWrite(yellow1led,LOW);
indicator.write(60);
}
}
}
Open klep lus wordt uitgevoerd wanneer de grond te droog
VOID OpenValve (int pinNum) {}
klep opent
digitalWrite(pinNum,HIGH);
Het LCD-scherm knippert het woord drenken knipperen tellen keer
voordat de klep is gesloten.
LCD.Clear(); for (int i = 0; ik < blinkCount; ik ++)
{
Afdrukken drenken op het display
LCD.Print("Watering");
vertraging (1000);
De weergave uitschakelen:
lcd.noDisplay();
delay(500);
De weergave inschakelen:
LCD.display();
delay(500);
LCD.Clear();
}
digitalWrite(pinNum,LOW);
}
writeSensor lus wordt uitgevoerd wanneer een bodem NAT genoeg
VOID writeSensor(int sensorData)
{
de LCD's aantal kolommen en rijen instellen:
LCD.begin (16, 2);
Een bericht op het LCD-scherm afdrukt.
LCD.Print ("Sensor");
lcd.setCursor (0, 1);
print die de vocht-lezing in de parameter sensorData doorgegeven:
LCD.Print(sensorData);
}