Paso 5: Programación Arduino
El código para este proyecto fue hacia adelante. El primer paso fue conseguir todos los diferentes sensores trabajando. El código SIK fue utilizado para ayudar en este proceso. Una vez que los sensores estaban trabajando correctamente, entonces empezamos a crear funciones específicas. Haciendo la fotorresistencia y RGB LED trabajar juntos era simple. Para fines de demostración, el día fue fijado a 40 y sería retroceder a cero cada vez que llegó a 40. Otro valor contará hasta cada segundo si la fotorresistencia es en un cierto valor. Es también poner a cero una vez que se establece la variable día a 40. La siguiente y más difícil parte hacía el potenciómetro, de LED, sensor de humedad y servo trabajo juntos. La solución que encontramos fue la pila si declaraciones. La primera sería leer el valor del potenciómetro y visualmente se encenderá un LED. Cada LED sería una señal al usuario de la cantidad de agua la planta va a recibir, y no LED significó que no estaban usando agua. Una vez que era distinguido, era leer el sensor de humedad, y dependiendo de ese valor, el servo desencadenaría un agua. Decidimos que sería bueno tener un período de tiempo, por lo que el agua tendría tiempo para difundir.
* Tenga en cuenta que algunas variables de humedad y la luz del sol serán necesario cambiar a la suite de la aplicación
#include #include / / biblioteca de servo 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; exposición int = 0; Día int = 0; int LedPin8 = 8; int LedPin12 = 12; int LedPin13 = 13; int waterCount = 0; Servo1 servo; objeto de control de servo
void setup() {pinMode (RED_PIN, salida) pinMode (GREEN_PIN, salida) pinMode (BLUE_PIN, salida); pinMode (LedPin8, salida); pinMode (LedPin12, salida); pinMode (LedPin13, salida); servo1.attach(6);
mainColors(); Serial.Begin(9600);
}
void loop() / / esta función se ejecuta repetidamente termine el setup() {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); si (potValue < 255) {digitalWrite (LedPin8, LOW); digitalWrite (LedPin12, LOW); digitalWrite (LedPin13, bajo); si (waterCount == 10) {waterCount = 0;}} si (potValue > 255 & & potValue < 510) {digitalWrite (LedPin8, alto); digitalWrite (LedPin12, LOW); digitalWrite (LedPin13, LOW); moistLevel = analogRead(moistValue); si (waterCount == 10 & & moistLevel < 600) {waterer1(); waterCount = 0;} else if (waterCount == 10) {waterCount = 0;}} si (potValue > 510 & & potValue < 765) {digitalWrite (LedPin8 ALTO); digitalWrite (LedPin12, alto); digitalWrite (LedPin13, bajo); moistLevel = analogRead(moistValue); Si (waterCount == 10 & & moistLevel < 625) {waterer2(); waterCount = 0;} else if (waterCount == 10) {waterCount = 0;}} Si (potValue > 765) {digitalWrite (LedPin8, alto); digitalWrite (LedPin12, alto); digitalWrite (LedPin13, alto); moistLevel = analogRead(moistValue); if (waterCount == 10 & & moistLevel < 650) {waterer3(); waterCount = 0;} else if (waterCount == 10) {waterCount = 0;}}
} void waterer1() {servo1.write(15); / / enviar a servo a 90 grados delay(1000); / / tiempo de pausa para conseguirlo para mover servo1.write(90); / / enviar a servo para ir a 0 grados} void waterer2() {}
servo1.Write(7); Dile servo a 90 grados
Delay(1100); Pausa para conseguir tiempo para mover
servo1.Write(90); Dile el servo a 0 grados} void waterer3() {}
servo1.Write(0); Dile servo a 90 grados
Delay(1200); Pausa para conseguir tiempo para mover
servo1.Write(90); Dile el servo a 0 grados}
void mainColors() {día ++; delay(1000); si (durante el día > 45) {exposición = 0; diurna = 0; digitalWrite (RED_PIN, LOW); digitalWrite (GREEN_PIN, LOW); digitalWrite (BLUE_PIN, LOW);} si (lightLevel < 300) {exposición ++; Serial.println(Exposure); } / / pasando (enciende LED rojo y verde): Si (exposición > 29) {digitalWrite (RED_PIN, alto); digitalWrite (GREEN_PIN, alto); digitalWrite (BLUE_PIN, LOW);} / / rojo (girar en rojo): Si (exposición > 19 & & exposición < = 29) {digitalWrite (RED_PIN, LOW); digitalWrite (GREEN_PIN, alto); digitalWrite (BLUE_PIN, LOW);} / / Purple (vuelta rojo y azul en): Si (exposición > 10 & & exposición < = 19) {digitalWrite (RED_PIN BAJA); digitalWrite (GREEN_PIN, alto); digitalWrite (BLUE_PIN, alto); }} void showRGB(int color) {int redIntensity; int greenIntensity; int blueIntensity;
Si (color < = 255) / zona 1 {redIntensity = 255 - color; / / rojo sale de a greenIntensity = color; / / verde pasa de off a en blueIntensity = 0; / azul siempre esta apagado} else if (color < = 511) / zona 2 {redIntensity = 0; / / rojo está siempre en off greenIntensity = 255 - (color - 256); / / verde a de blueIntensity = (color - 256); / / azul a} más / color > = 512 / zona 3 {redIntensity = (color - 512); / / rojo apagado a en greenIntensity = 0; / / verde está siempre en off blueIntensity = 255 - (color - 512); / / azul en OFF}
analogWrite (RED_PIN, redIntensity); analogWrite (BLUE_PIN, blueIntensity); analogWrite (GREEN_PIN, greenIntensity); }