Otvättade händer larm (4 / 13 steg)
Steg 4: Arduino koden
Här är koden som jag skrev för detta projekt. Du bör kunna klistra in den direkt i en ny Arduino skiss
Toalett-Sensor
int ToiletSensor = 0; Toaletten givarstaven int ToiletValue = 0; int ToiletAverage = 520; int ToiletDifference = 0; int ToiletSensitivity = 20;
Kallvatten Pipe Sensor int SinkOneSensor = 1; Kallvatten Pipe givarstaven int SinkOneValue = 0; int SinkOneAverage = 520; int SinkOneDifference = 0; int SinkOneSensitivity = 20;
Varmt vatten röret Sensor int SinkTwoSensor = 2; Varmt vatten röret givarstaven int SinkTwoValue = 0; int SinkTwoAverage = 520; int SinkTwoDifference = 0; int SinkTwoSensitivity = 20;
int UnwashedHands = false; sant = händer har inte tvättats, false = händer har tvättats int DoorSensorPin = 7. Dörr givarstaven int DoorSensor = låg; sinnen när toalett dörren är öppnade int AlarmPin = 9; Alarm utgångsstiftet osignerade långa ResetTimer = 0; / / butiker tid för automatisk återställning
void setup() {Serial.begin(9600), pinMode (DoorSensorPin, ingång), pinMode (AlarmPin, OUTPUT);
Utgångsstift för indikator lysdioder under testning pinMode (9, OUTPUT); pinMode (10, OUTPUT); pinMode (11, OUTPUT); pinMode (12, OUTPUT); pinMode (13, OUTPUT); }
void loop() {
Läs varje sensor och automatiskt justera medelvärdet för varje 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);
om (abs(ToiletDifference) > ToiletSensitivity & & millis() > 20000) //waits 20 sekunder att upprätta medelvärden {digitalWrite (10, hög), //turns på indikator LED Serial.println("Toilet"); //This Sensor överskreds känslighet tröskel Serial.println(ToiletDifference); //Difference mellan nuvarande sensor och sensor i genomsnitt if((millis()-ResetTimer) > 30000) //waits 30 sekunder för tanken att fylla innan toalett sensorn kan aktiveras igen {UnwashedHands = true; //sets hand tvätta status ResetTimer = millis(); //Stores aktuell tid för automatisk återställning}} annat {digitalWrite (10 LÅG); }
om (abs(SinkOneDifference) > SinkOneSensitivity & & millis() > 20000) //waits 20 sekunder att upprätta medelvärden {digitalWrite (11, hög), //turns på indikator LED Serial.println("Sink One"), //This Sensor överskreds känslighet tröskel Serial.println(SinkOneDifference), //Difference mellan nuvarande sensor och sensor i genomsnitt UnwashedHands = false;} annat {digitalWrite (11, låg);}
om (abs(SinkTwoDifference) > SinkTwoSensitivity & & millis() > 20000) //waits 20 sekunder att upprätta medelvärden {digitalWrite (12, hög), //turns på indikator LED Serial.println("Sink Two"), //This Sensor överskreds känslighet tröskel Serial.println(SinkTwoDifference), //Difference mellan nuvarande sensor och sensor i genomsnitt UnwashedHands = false;} annat {digitalWrite (12, låg);}
om (DoorSensor == hög) {Serial.println("Door"); digitalWrite (13, hög); //turns indikator LED
IF(UnwashedHands == true) {för (int jag = 0; jag < = 5; i ++) //sound larm för 5 sekunder {digitalWrite (AlarmPin, hög); //Activates larm delay(500) digitalWrite (AlarmPin, låg); delay(500);}}
} annat {digitalWrite (13, låg);} if((millis()-ResetTimer) > 300000) //resets sensorer efter 5 minuters inaktivitet {UnwashedHands = false;}}