Den anläggning Buddy (5 / 7 steg)
Steg 5: Programmera Arduino
Koden för detta projekt var rakt fram. Det första steget var att få alla olika sensorer arbetar. SIK koden användes till hjälp i denna process. När sensorerna fungerar, började vi sedan att skapa specifika funktioner. Att göra foto motstånd och RGB LED arbeta tillsammans var enkel. För demosyften, dagarna var satt till 40, och skulle sättas tillbaka till noll varje gång man nått 40. Ett annat värde räknas upp varje sekund om foto motståndet är på ett visst värde. Det är också nollställs när variabeln dag har angetts till 40. Den nästa och mer utmanande del var att den potentiometer, lysdioder, fukt sensor och servo arbete tillsammans. Den lösning som vi hittade var att stapla om uttalanden. Först skulle läsa värdet potentiometer och visuellt lysa upp en LED. Varje LED skulle signalera till användaren hur mycket vatten som anläggningen kommer att få, och ingen LED menade du inte använder den till vatten. En gång som var distingerad, fukt sensorn lästes och beroende på det värdet, servo skulle utlösa en vatten. Vi bestämde att det skulle vara bra att ha en timeout-period, så att vattnet skulle ha tid att sprida.
* notera vissa fukt och solljus variabler kommer att behöva ändras till svit ditt program
#include #include / / servo bibliotek 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 exponering = 0; int dagtid = 0; int LedPin8 = 8; int LedPin12 = 12; int LedPin13 = 13. int waterCount = 0; Servo servo1; Servo kontroll objekt
void setup() {pinMode (RED_PIN, OUTPUT) pinMode (GREEN_PIN, OUTPUT) pinMode (BLUE_PIN, OUTPUT); pinMode (LedPin8, OUTPUT); pinMode (LedPin12, utgång); pinMode (LedPin13, OUTPUT); servo1.attach(6);
mainColors(); Serial.BEGIN(9600);
}
void loop() / / funktionen kör flera gånger efter setup() klar {lightLevel = analogRead(lightValue); mainColors(); waterLevel(); waterCount ++;
Serial.println(moistLevel); Serial.println("Moisture"); Serial.println(waterCount); Serial.println("waterCount"); } void waterLevel() {int potValue; potValue = analogRead(potPin); om (potValue < 255) {digitalWrite (LedPin8, låg), digitalWrite (LedPin12, låg), digitalWrite (LedPin13, låg); om (waterCount == 10) {waterCount = 0;}} om (potValue > 255 & & potValue < 510) {digitalWrite (LedPin8, hög), digitalWrite (LedPin12, låg), digitalWrite (LedPin13, låg); moistLevel = analogRead(moistValue); om (waterCount == 10 & & moistLevel < 600) {waterer1(); waterCount = 0;} annars om (waterCount == 10) {waterCount = 0;}} om (potValue > 510 & & potValue < 765) {digitalWrite (LedPin8 HÖG); digitalWrite (LedPin12, hög); digitalWrite (LedPin13, låg); moistLevel = analogRead(moistValue); om (waterCount == 10 & & moistLevel < 625) {waterer2(); waterCount = 0;} else om (waterCount == 10) {waterCount = 0;}} om (potValue > 765) {digitalWrite (LedPin8, hög), digitalWrite (LedPin12, hög), digitalWrite (LedPin13, hög), moistLevel = analogRead(moistValue); om (waterCount == 10 & & moistLevel < 650) {waterer3(); waterCount = 0;} else om (waterCount == 10) {waterCount = 0;}}
} void waterer1() {servo1.write(15); / / tala servo gå till 90 grader delay(1000); / / Pause för att få det tid för att flytta servo1.write(90); / / tala servo gå till 0 grader} void waterer2() {
servo1.write(7); Berätta servo gå till 90 grader
Delay(1100); Paus för att få det dags att flytta
servo1.write(90); Berätta servo gå till 0 grader} void waterer3() {
servo1.write(0); Berätta servo gå till 90 grader
Delay(1200); Paus för att få det dags att flytta
servo1.write(90); Berätta servo gå till 0 grader}
void mainColors() {dagtid ++; delay(1000); om (dagtid > 45) {exponering = 0; dagtid = 0, digitalWrite (RED_PIN, låg), digitalWrite (GREEN_PIN, låg), digitalWrite (BLUE_PIN, låg);} om (lightLevel < 300) {exponering ++; Serial.println(Exposure); } / / yelllow (vänd på röd och grön LED): om (exponering > 29) {digitalWrite (RED_PIN, hög), digitalWrite (GREEN_PIN, hög), digitalWrite (BLUE_PIN, låg);} / / röd (blir röda på): om (exponering > 19 & & exponering < = 29) {digitalWrite (RED_PIN, låg), digitalWrite (GREEN_PIN, hög), digitalWrite (BLUE_PIN, låg);} / / lila (tur rött och blått på): om (exponering > 10 & & exponering < = 19) {digitalWrite (RED_PIN LÅG); digitalWrite (GREEN_PIN, hög); digitalWrite (BLUE_PIN, hög); {}} void showRGB(int color) {int redIntensity; int greenIntensity; int blueIntensity;
om (färg < = 255) / / zon 1 {redIntensity = 255 - färg; / / röd går från på till off greenIntensity = färg; / / grön går från av till på blueIntensity = 0; / / blå är alltid off} annars om (färg < = 511) / / zon 2 {redIntensity = 0; / / röd är alltid off greenIntensity = 255 - (färg - 256); / / grön på att av blueIntensity = (färg - 256); / / blå till på} annat / / färg > = 512 / / zon 3 {redIntensity = (färg - 512); / / röd till på greenIntensity = 0; / / grönt är alltid off blueIntensity = 255 - (färg - 512); / / blå på off}
analogWrite (RED_PIN, redIntensity); analogWrite (BLUE_PIN, blueIntensity); analogWrite (GREEN_PIN, greenIntensity); }