Paso 4: El código de Arduino
Aquí está el código que escribí para este proyecto. Debería poder pegar directamente en un nuevo Arduino Sketch
Baño de Sensor
int ToiletSensor = 0; Aseo Pin Sensor int ToiletValue = 0; int ToiletAverage = 520; int ToiletDifference = 0; int ToiletSensitivity = 20;
Agua fría tubo Sensor int SinkOneSensor = 1; Agua fría tubo Sensor Pin int SinkOneValue = 0; int SinkOneAverage = 520; int SinkOneDifference = 0; int SinkOneSensitivity = 20;
Sensor de agua caliente tubo int SinkTwoSensor = 2; Agua caliente tubo Sensor Pin int SinkTwoValue = 0; int SinkTwoAverage = 520; int SinkTwoDifference = 0; int SinkTwoSensitivity = 20;
int UnwashedHands = false; True = manos no lavadas, false = manos lavadas int DoorSensorPin = 7; Puerta Sensor Pin int DoorSensor = bajo; sentidos cuando baño puerta abrieron int AlarmPin = 9; Pin de salida de alarma sin firmar largo ResetTimer = 0; / / almacena el tiempo de reset automático
void setup() {Serial.begin(9600) pinMode (DoorSensorPin, entrada); pinMode (AlarmPin, salida);
Pines de salida para el indicador durante la prueba pinMode (9, salida); pinMode (10, salida); pinMode (11, salida); pinMode (12, salida); pinMode (13, salida); }
void loop() {}
Lea cada sensor y ajusta automáticamente el valor medio de cada sensor ToiletValue = analogRead(ToiletSensor); ToiletDifference = ToiletValue - ToiletAverage; ToiletAverage = ToiletAverage + (ToiletDifference / 10);
SinkOneValue = analogRead(SinkOneSensor); SinkOneDifference = SinkOneValue - SinkOneAverage; SinkOneAverage = SinkOneAverage + (SinkOneDifference / 10);
SinkTwoValue = analogRead(SinkTwoSensor); SinkTwoDifference = SinkTwoValue - SinkTwoAverage; SinkTwoAverage = SinkTwoAverage + (SinkTwoDifference / 10);
DoorSensor = digitalRead(DoorSensorPin);
Si (abs(ToiletDifference) > ToiletSensitivity & & millis() > 20000) //waits 20 segundos para establecer promedios {digitalWrite (10, HIGH); //turns indicador LED Serial.println("Toilet"); //This Sensor superado la sensibilidad umbral Serial.println(ToiletDifference) //Difference entre el valor actual del sensor y sensor media if((millis()-ResetTimer) > 30000) //waits 30 segundos para el tanque a llenar antes el baño el sensor puede activarse otra vez {UnwashedHands = true; //sets mano lavar estado ResetTimer = millis(); //Stores hora de reset automático}} else {digitalWrite (10 BAJA); }
Si (abs(SinkOneDifference) > SinkOneSensitivity & & millis() > 20000) //waits 20 segundos para establecer promedios {digitalWrite (11, alto); //Difference entre el valor actual del sensor y sensor //turns indicador LED Serial.println("Sink One"); //This Sensor superado el Serial.println(SinkOneDifference) del umbral de sensibilidad media UnwashedHands = false;} else {digitalWrite (11, LOW);}
Si (abs(SinkTwoDifference) > SinkTwoSensitivity & & millis() > 20000) //waits 20 segundos para establecer promedios {digitalWrite (12, HIGH); //turns indicador LED Serial.println("Sink Two"); //This superado la Serial.println(SinkTwoDifference) del umbral de sensibilidad de Sensor //Difference entre el valor actual del sensor y sensor media UnwashedHands = false;} else {digitalWrite (12, LOW);}
Si (DoorSensor == HIGH) {Serial.println("Door"); digitalWrite (13, HIGH); //turns en el indicador LED
if(UnwashedHands == true) {para (int i = 0; i < = 5; i ++) //sound alarma durante 5 segundos {digitalWrite (AlarmPin alto) delay(500) de alarma //Activates; digitalWrite (AlarmPin, LOW); delay(500);}}
} else {digitalWrite (13, LOW);} if((millis()-ResetTimer) > 300000) sensores de //resets después de 5 minutos de inactividad {UnwashedHands = false;}}