Étape 4: Le Code de l’Arduino
Voici le code que j’ai écrit pour ce projet. Vous devriez être en mesure de le coller directement dans une nouvelle esquisse de l’Arduino
Capteur de toilette
int ToiletSensor = 0 ; Toilette Pin capteur int ToiletValue = 0 ; int ToiletAverage = 520 ; int ToiletDifference = 0 ; int ToiletSensitivity = 20 ;
Eau froide tuyau capteur int SinkOneSensor = 1 ; Eau froide tuyau capteur Pin int SinkOneValue = 0 ; int SinkOneAverage = 520 ; int SinkOneDifference = 0 ; int SinkOneSensitivity = 20 ;
Eau chaude tuyau capteur int SinkTwoSensor = 2 ; Eau chaude tuyau capteur Pin int SinkTwoValue = 0 ; int SinkTwoAverage = 520 ; int SinkTwoDifference = 0 ; int SinkTwoSensitivity = 20 ;
int UnwashedHands = false ; true = mains n’ont pas été lavés, false = mains ont été lavées int DoorSensorPin = 7 ; Porte Pin capteur int DoorSensor = faible ; sens lorsque la porte des toilettes est ouvert int AlarmPin = 9 ; Broche de sortie alarme unsigned long ResetTimer = 0; / / stocke le temps pour la remise à zéro automatique
void setup() {Serial.begin(9600) ; pinMode (entrée, DoorSensorPin); pinMode (AlarmPin, sortie) ;
Broches de sortie pour les LEDs d’indication au cours des essais pinMode (sortie 9) ; pinMode (sortie 10,) ; pinMode (sortie 11) ; pinMode (sortie 12,) ; pinMode (13, sortie) ; }
void loop() {}
Lire chaque capteur et ajustent automatiquement la valeur moyenne pour chaque capteur 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 secondes pour établir des moyennes {digitalWrite (10, HIGH); //turns sur indicateur LED Serial.println("Toilet") ; //This capteur dépassée la sensibilité seuil Serial.println(ToiletDifference) ; //Difference entre la valeur actuelle de la sonde et capteur moyen if((millis()-ResetTimer) > 30000) //waits 30 secondes pour le réservoir se remplir avant la toilette du capteur peut être activé à nouveau {UnwashedHands = true ; //sets main laver statut ResetTimer = millis() ; //Stores l’heure actuelle pour la remise à zéro automatique}} else {digitalWrite (10 FAIBLE) ; }
Si (abs(SinkOneDifference) > SinkOneSensitivity & & millis() > 20000) //waits 20 secondes pour établir des moyennes {digitalWrite (11, HIGH); //turns sur indicateur LED Serial.println("Sink One") ; //This capteur dépassée la sensibilité seuil Serial.println(SinkOneDifference) //Difference entre la valeur actuelle de la sonde et capteur moyen UnwashedHands = false;} else {digitalWrite (11, LOW);}
Si (abs(SinkTwoDifference) > SinkTwoSensitivity & & millis() > 20000) //waits 20 secondes pour établir des moyennes {digitalWrite (12, HIGH); //turns sur indicateur LED Serial.println("Sink Two") ; //This capteur dépassée la sensibilité seuil Serial.println(SinkTwoDifference) //Difference entre la valeur actuelle de la sonde et capteur moyen UnwashedHands = false;} else {digitalWrite (12, LOW);}
Si (DoorSensor == HIGH) {Serial.println("Door") ; digitalWrite (13, HIGH); //turns sur indicateur LED
if(UnwashedHands == true) {pour (int i = 0; j’ai < = 5; i ++) //sound alarme pendant 5secondes {//Activates alarme delay(500) ; digitalWrite (AlarmPin, basse), digitalWrite (AlarmPin, HIGH); delay(500);}}
} else {digitalWrite (13, LOW);} if((millis()-ResetTimer) > 300000) capteurs //resets après 5 minutes d’inactivité {UnwashedHands = false;}}