Stap 5: Programmeren van de Arduino
De code voor dit project was ongecompliceerd. De eerste stap was alle van de verschillende sensoren werken krijgen. De SIK-code werd gebruikt om te helpen bij dit proces. Zodra de sensoren goed werkt waren, begonnen we dan maken van specifieke functies. Maken van de foto weerstand en RGB LED samenwerken was eenvoudig. Voor demodoeleinden, de dagtijd was ingesteld op 40, en terug zou worden ingesteld op nul telkens het 40 bereikt. Een andere waarde zal elke seconde tellen als de weerstand van de foto op een bepaalde waarde is. Het is ook weer op nul gezet zodra de dag-variabele is ingesteld op 40. Het volgende en meer uitdagende deel was het maken van de potentiometer, LED's, vocht sensor en servo werk samen. De oplossing die wij gevonden moest stapelen als verklaringen. De eerste zou luiden naar de waarde van de potentiometer en visueel een LED oplichten. Elke LED zou aan de gebruiker hoeveel water dat de plant ontvangt het signaal, en geen LED bedoeld dat u niet met behulp van het water. Zodra die werd onderscheiden, de vocht sensor werd voorgelezen, en afhankelijk van die waarde, de servo zou leiden tot een water. We besloten dat het zou goed zijn om een time-out-periode, zodat het water zou hebben tijd om te verspreiden.
* Let op dat sommige vocht en zonlicht variabelen zullen moeten worden veranderd naar suite uw toepassing
#include #include / / servo bibliotheek int potPin = A2; Const int lightValue = A0; int moistValue = A3; Const int RED_PIN = 11; Const int GREEN_PIN = 10; Const int BLUE_PIN = 9; int lightLevel = 0; int moistLevel = 0; int blootstelling = 0; int overdag = 0; int LedPin8 = 8; int LedPin12 = 12; int LedPin13 = 13; int waterCount = 0; Servo servo1; Servo control-object
void setup {pinMode (RED_PIN, OUTPUT) pinMode (GREEN_PIN, OUTPUT); pinMode (BLUE_PIN, OUTPUT); pinMode (LedPin8, OUTPUT); pinMode (LedPin12, OUTPUT); pinMode (LedPin13, OUTPUT); servo1.attach(6);
mainColors(); Serial.begin(9600);
}
void loop / / deze functie wordt telkens opnieuw uitgevoerd nadat Setup is voltooid {lightLevel = analogRead(lightValue); mainColors(); waterLevel(); waterCount ++;
Serial.println(moistLevel); Serial.println("moisture"); Serial.println(waterCount); Serial.println("waterCount"); } ongeldig waterLevel() {int potValue; potValue = analogRead(potPin); als (potValue < 255) {digitalWrite (LedPin8, laag); digitalWrite (LedPin12, laag); digitalWrite (LedPin13, laag); als (waterCount == 10) {waterCount = 0;}} als (potValue > 255 & & potValue < 510) {digitalWrite (LedPin8, hoge); digitalWrite (LedPin12, laag); digitalWrite (LedPin13, laag); moistLevel = analogRead(moistValue); als (waterCount == 10 & & moistLevel < 600) {waterer1(); waterCount = 0;} anders als (waterCount == 10) {waterCount = 0;}} als (potValue > 510 & & potValue < 765) {digitalWrite (LedPin8 HOGE); digitalWrite (LedPin12, hoge); digitalWrite (LedPin13, laag); moistLevel = analogRead(moistValue); Als (waterCount == 10 & & moistLevel < 625) {waterer2(); waterCount = 0;} else if (waterCount == 10) {waterCount = 0;}} Als (potValue > 765) {digitalWrite (LedPin8, hoge); digitalWrite (LedPin12, hoge); digitalWrite (LedPin13, hoge); moistLevel = analogRead(moistValue); if (waterCount == 10 & & moistLevel < 650) {waterer3(); waterCount = 0;} anders als (waterCount == 10) {waterCount = 0;}}
} void waterer1() {servo1.write(15); / / vertellen servo naar 90 graden delay(1000); / / Pause om het te krijgen tijd om te gaan servo1.write(90); / / vertellen servo naar 0 graden} waterer2() {} ongeldig
servo1.write(7); Vertellen van de servo naar 90 graden
delay(1100); Pauze om het te krijgen tijd om te bewegen
servo1.write(90); Vertellen servo naar 0 graden} waterer3() {} ongeldig
servo1.write(0); Vertellen van de servo naar 90 graden
delay(1200); Pauze om het te krijgen tijd om te bewegen
servo1.write(90); Vertellen servo naar 0 graden}
VOID mainColors() {overdag ++; delay(1000); als (overdag > 45) {blootstelling = 0; overdag = 0, digitalWrite (RED_PIN, LOW), digitalWrite (GREEN_PIN, laag); digitalWrite (BLUE_PIN, laag);} als (lightLevel < 300) {blootstelling ++; Serial.println(exposure); } / / yelllow (draai op de rode en groene LED): als (blootstelling > 29) {digitalWrite (RED_PIN, hoge); digitalWrite (GREEN_PIN, hoge); digitalWrite (BLUE_PIN, laag);} / / rood (rood op): als (blootstelling > 19 & & blootstelling < = 29) {digitalWrite (RED_PIN, laag); digitalWrite (GREEN_PIN, hoge); digitalWrite (BLUE_PIN, laag);} / / paars (beurt rood en blauw op): als (blootstelling > 10 & & blootstelling < = 19) {digitalWrite (RED_PIN LAAG); digitalWrite (GREEN_PIN, hoge); digitalWrite (BLUE_PIN, hoge); ongeldig showRGB(int color)}} {int redIntensity, int greenIntensity, int blueIntensity;
Als (kleur < = 255) / / zone 1 {redIntensity = 255 - kleur; / / rode afgaat uit bij greenIntensity = kleur; / / groene afgaat van aan op blueIntensity = 0; / / blauw is altijd af} anders als (kleur < = 511) / / zone 2 {redIntensity = 0; / / rood is altijd uit greenIntensity = 255 - (kleur - 256); / / groen bij uit blueIntensity = (kleur - 256); / / blauw af aan op} anders / / kleur > = 512 / / zone 3 {redIntensity = (kleur - 512); / / rood uit aan op greenIntensity = 0; / / groene is altijd uit blueIntensity = 255 - (kleur - 512); / / blauw op op off}
analogWrite (RED_PIN, redIntensity); analogWrite (BLUE_PIN, blueIntensity); analogWrite (GREEN_PIN, greenIntensity); }