Smart Appliance Switch (3 / 5 stap)

Stap 3: codering

Aanvankelijk leek de logica eenvoudig: als het is donker en er is beweging - zet het toestel (lamp in mijn geval), anders zwenking op vandoor. Wacht n seconden en controleer nogmaals.

Maar als ik was het testen van en het toevoegen van nieuwe modi naar mijn apparaat, geen van bovenstaande genoemde werkte zo eenvoudig.

U kunt als (donker == true & & verkeer == true) {draai op} anders dan {uitschakelen}; vertraging (n);

want je vervelende feedback effect krijgt: donker? -Ja, verkeer? -ja dan zet hem op; wachten; donkere? -geen (omdat we zojuist de lichten hebt ingeschakeld), verkeer? -ja dan zwenking op vandoor; donkere? -Ja... Dus knipperen met deze logica u constant krijgt.

Thats waarom in procedure light_on() we eerst als het is donker en ga dan in de lus, over te schakelen op licht en voortdurend te controleren of beweging aanwezig is. We controleren niet deze twee voorwaarden gelijktijdig.

Wat betreft de opdracht vertraging (n), die wordt onderbroken uitvoering voor n milliseconden, wij niet gebruiken omdat tijdens de vertraging, als u druk op permanente of handmatige modusknoppen, Arduino niet ziet, omdat het slaapt. Daarom gebruiken we in de dezelfde lus, welke controles voor bewegingen in light_on () procedure, functioneren van millis() en zijn waarde toewijzen aan variabele "nu". Millis() geeft als resultaat het aantal milliseconden dat is verstreken sinds de Arduino was ingeschakeld. Op deze manier zijn wij in staat om uit de lus wanneer nu + delay_time > millis().

Dus, alle voorwaarden om van lus in light_on() procedure:

  • Er bestaat geen verkeer;
  • delay_time is verstreken sinds de laatste keer dat beweging werd ontdekt;
  • apparaat is gewijzigd door een van de knoppen in te drukken.

Andere opmerkingen die ik in de code zelf opgenomen.

Ik maakte twee klassen: fotocel en pir.

Voor de knop debouncing gebruik ik Bounce2-bibliotheek die u vanaf hier downloaden kunt. Library downloaden en uitpakken van de inhoud ervan in ~/Documents/Arduino/libraries (op een Mac) of mijn Documents\Arduino\libraries (op een Windows machine).

 <p>//#define __DEBUG__ // uncomment this define for debugging information in serial monitor<br>#include "Bounce2.h" #include "photocell.h" #include "pir.h"</p><p>//SETUP const unsigned int PHOTOCELL_PIN = A0; const unsigned int RELAY_PIN = 10; const unsigned int PERMANENT_LED_PIN = 13; const unsigned int PERMANENT_MODE_PIN = 12; const unsigned int MANUAL_MODE_PIN = 11; const unsigned int PIR_INPUT_PIN = 2; const unsigned int BAUD_RATE = 9600; const unsigned int LIGHT_DELAY = 5000; const unsigned int DEBOUNCE_DELAY = 20; const int DEFAULT_THRESHOLD = 130; //SETUP</p><p>int threshold = 0; Bounce permanent_mode_button, manual_mode_button; boolean button_state = false; photocell p_cell(PHOTOCELL_PIN); PIR ir_sensor(PIR_INPUT_PIN); enum modes {default_, permanent, manual, threshold_changed}; // we also need to be able to determine, when during manual mode, manual mode button was pressed again int prev_mode = default_; int mode = default_;</p><p>//check state of button boolean button_pressed(Bounce& button, boolean& state) { if (button.update() && button.read() == 1) { state = !state; } return state; }</p><p>//determine current mode int check_mode() { if (button_pressed(permanent_mode_button, button_state)) mode = permanent; // permanent mode button pressed</p><p> else if (manual_mode_button.update() && manual_mode_button.read() == 1) { threshold = p_cell.value();</p><p>#ifdef __DEBUG__ Serial.println("threshold: " + String(threshold)); #endif</p><p> mode = threshold_changed; // threshold was changed }</p><p> else if (threshold > 0) { mode = manual; // manual mode }</p><p> else mode = default_; // default mode</p><p> return mode; }</p><p>//check, wheter mode was changed bool mode_changed() { if (prev_mode != check_mode()) { prev_mode = check_mode();</p><p>#ifdef __DEBUG__ Serial.println("true, previous mode: " + String(prev_mode)); #endif return true; } else { #ifdef __DEBUG__ Serial.println("false, previous mode: " + String(prev_mode)); #endif return false; } }</p><p>//turn on the light void light_on (int threshold, const unsigned int& pin, const unsigned int& delay_time) { digitalWrite (PERMANENT_LED_PIN, 0); if (p_cell.value() <= threshold) {</p><p> unsigned long now = 0; boolean mode_change = mode_changed();</p><p> for (; ((ir_sensor.motion_detected() && !mode_change) && (now = millis())) || ((millis() < (now + delay_time)) && !mode_change); mode_change = mode_changed()) { digitalWrite(pin, 1); // we get out of this loop when there is no movement or device mode was changed or delay time has passed #ifdef __DEBUG__ Serial.println("inside loop, motion: " + String(ir_sensor.motion_detected())); Serial.println("now: " + String(now)); #endif } digitalWrite(pin, 0); } digitalWrite(pin, 0); }</p><p>void setup() { #ifdef __DEBUG__ Serial.begin(BAUD_RATE); #endif permanent_mode_button.attach(PERMANENT_MODE_PIN); permanent_mode_button.interval(DEBOUNCE_DELAY); pinMode(PERMANENT_MODE_PIN, INPUT); manual_mode_button.attach(MANUAL_MODE_PIN); manual_mode_button.interval(DEBOUNCE_DELAY); pinMode(MANUAL_MODE_PIN, INPUT); pinMode(RELAY_PIN, OUTPUT); pinMode(PERMANENT_LED_PIN, OUTPUT); }</p><p>void loop() { if (mode == permanent) { digitalWrite(RELAY_PIN, 1); digitalWrite(PERMANENT_LED_PIN, 1); #ifdef __DEBUG__ Serial.println("permanent mode on"); #endif }</p><p> else if (mode == manual) { #ifdef __DEBUG__ Serial.println("manual mode on"); #endif light_on (threshold, RELAY_PIN, LIGHT_DELAY); }</p><p> else if (mode == default_) { #ifdef __DEBUG__ //Serial.println("default mode on"); Serial.println("value: " + String(p_cell.value())); #endif light_on (DEFAULT_THRESHOLD, RELAY_PIN, LIGHT_DELAY); } check_mode(); }</p> 

photocell.h

 <p>#include "arduino.h"</p><p>class photocell { private: unsigned int _pin; int buffer_size;</p><p> public: photocell(const unsigned int pin) { _pin = pin; buffer_size = 10; }</p><p> int value () { float sum = 0; for (int i = 1; i <= buffer_size; i++) { //we use buffer to get nice average value sum += analogRead(_pin); } return round(sum / buffer_size); } };</p> 

PIR.h

 <p>#ifndef __PIR__<br>#define __PIR__ #include "arduino.h"</p><p>class PIR { int _input_pin;</p><p> public: PIR(const unsigned int input_pin) { _input_pin = input_pin; pinMode(_input_pin, INPUT); }</p><p> bool motion_detected() { return digitalRead(_input_pin) == HIGH; } }; #endif</p> 

Dat is alle code die u nodig hebt. Nu u naar uw Arduino en test, uploaden kan of alles werkt zoals het zou moeten, voordat die zich bezighouden met hoogspanning en montage geval voor uw apparaat.

Ook bijgevoegde ik bestanden met codes. Op mijn machine verzamelt alles zonder problemen.

Gerelateerde Artikelen

TV Remote controlled home toestel met behulp van 8051

TV Remote controlled home toestel met behulp van 8051

Dit project wordt gebruikt om over te schakelen van het elektrische apparaten op afstand met behulp van afstandsbediening. Het maakt gebruik van philips RC5 protocol gebaseerd extern. De micro-controller gebruikt is van Atmel d.w.z. at89c2051 van 805
Home energiebesparing en automatisering met Z-Wave en Android

Home energiebesparing en automatisering met Z-Wave en Android

Energiebesparing is een groot onderwerp, er zijn veel manieren om energie te besparen, van uw verlichting uitschakelen wanneer u een kamer helemaal naar aanbrengend weer stripping om ervoor te zorgen dat je niet te laten uit de warme of koude lucht v
Como contact el SONOFF WiFi schakelen een io.adafruit.com via MQTT

Como contact el SONOFF WiFi schakelen een io.adafruit.com via MQTT

El Itead SONOFF es un interruptor inteligente de WIFI. Es muy Ahorro y completamente hackeable dat een que esta basado nl el famoso ESP8266. Nl este ejemplo se va een re-configurar el dispositivo para verbinden vía MQTT al servicio de io.adafruit.com
WiFi Switch board of Smart Plug met Esp8266, Attiny 85 & PIR Sensor met android app

WiFi Switch board of Smart Plug met Esp8266, Attiny 85 & PIR Sensor met android app

De Wifi Arduino 85 is een kleine plank met ESP8266-01 module, Attiny85 micro controller en een relais. Het heeft ook en extra header voor het aansluiten van een externe doorgifte of met sensoren zoals PIR, IR enz afhankelijk van uw toepassing. Bent u
Bouwen van een Smart Home met een Wifi Wireless Switch door Apple App controle

Bouwen van een Smart Home met een Wifi Wireless Switch door Apple App controle

Slimme huis is nu een mode, dus ik volg deze trend en om mijn huis een echte slimme huis geworden. Ik heb gezocht naar over het slimme huis gadgets voor enige tijd, vinden dat er veel van de schakelaar voor draadloos netwerkverkeer, wifi switch, app
SMART switch

SMART switch

De wereld zo snel is veranderd en het is allemaal vanwege de techniek en wetenschap. Dingen hebben verbeterd, nieuw tijdperk is aangebroken voor een betere en een slimme wereld. Maar volgens mij is er een ding dat nog niet veranderd... Een schakelopt
Arduino NodeMCU ESP8266 gebaseerd WIFI Smart Strip 4 Relay Switch Board met Raw TCP/IP, Mqtt & Android App

Arduino NodeMCU ESP8266 gebaseerd WIFI Smart Strip 4 Relay Switch Board met Raw TCP/IP, Mqtt & Android App

De MCU knooppunt is een open source ESP8266 gebaseerd Wifi toegelaten IoT platform voor iedereen. Wat we hebben gedaan is gemaakt een vier relais boord en het leukste deel is dat bord ook een 100-240V-AC naar 5V-DC Power supply aan boord heeft zodat
Domótica, Interruptor Inteligente - Home automation - Smart Switch

Domótica, Interruptor Inteligente - Home automation - Smart Switch

Nl esta oportunidad les ofrezco un proyecto nl el cual hij estado trabajando, y del cual esperaría recibir comentarios, ideeën, heeft, con el fin de lograr alguno de los mejores sistemas disponibles nl la rood.Nl el presente artículo encontrará todo
Samsung Galaxy - bestanden overdragen met Samsung Smart Switch App

Samsung Galaxy - bestanden overdragen met Samsung Smart Switch App

Stap voor stap over hoe uw bestanden overzetten van de ene Samsung telefoon naar een andere.
SLIMME auto en SMART PARKING SYSTEM

SLIMME auto en SMART PARKING SYSTEM

Dit instructable is de schriftelijke versie van mijn "Arduino: hoe te bouwen A SMART CAR en SMART PARKING SYSTEM"Robotica is een onderdeel van de mededeling van vandaag. In de huidigeRobotica is een snel groeiende en interessante gebied. Het is
DIY Smart Garage deuropener

DIY Smart Garage deuropener

Ik weet dat je hebt gekregen van 5 minuten op de weg en gevraagd zelf, "deed ik de garagedeur sluiten?".Nu, in plaats van draaien of verlaten van uw garage en huis kwetsbaar voor dieven, kunt u controleren en sluit het met uw telefoon met uw keu
Arduino gebaseerde Smart Home IOT systeem

Arduino gebaseerde Smart Home IOT systeem

Hallo, ik ben Michalis Vasilakis uit Ardumotive.com en in deze handleiding Instructables zal ik u tonen hoe kunt u gemakkelijk maken uw eigen smart home systeem op basis van Arduino uno en een Ethernet-module (of schild).U zal zitten kundig voor gebr
Smart WIFI Video auto (Arduino control)

Smart WIFI Video auto (Arduino control)

Wij hebben allemaal een wens van de exploratie van onbekende plaats. Bij ik en mijn partner kijken naar de film "The Martian" en zie dat er een robot-auto in Mars is - - een planeet thats vijftig - zes miljoen kilometer van onze aarde. "Hij
BlueSense - DIY Smart kamer automatisering met behulp van Bluetooth

BlueSense - DIY Smart kamer automatisering met behulp van Bluetooth

Uw droom Smart kamer is slechts één aanraking weg! Invoering van "BlueSense"--het slimme kamer automatiseringssysteem dat een kunt bepalen van het toestel in de kamer met behulp van smartphones. Het bereik van de werking voor BlueSense is ongeve