W dzisiejszym poście opiszę jak utworzyć sensor służący do sprawdzenia czy drzwi lodówki i zamrażarki są otwarte. Oczywiście kod ten można użyć do kontroli innych urządzeń, drzwi czy okien. Ja znalazłem takie a nie inne zastosowanie 🙂
Potrzebne będą:
1. Lodówko – zamrażarka 🙂
2. Arduino nano

3. Dwóch kontaktronów

4. Moduł NRF24L
5. Okablowanie
Schemat podłączenia:
Na początku podłączamy wszystko tak samo jak w przypadku samej Bramki Mysensors – SCHEMAT
- Następnie podłączamy do Naszego Arduino Nano dwa kontaktrony:
- Pierwszy:
Jeden z kabli do PINU 2 w Arduino a drugi z kabli do dowolnego GND
- Drugi:
Jeden z kabli do PINU 3 w Arduino a drugi z kabli do dowolnego GND (może być to samo)
Jako, że Arduino nano ma tylko dwa Piny GND trzeba będzie albo posłużyć się płytką stykową (do nabycia np. w sklepie electropark.pl) albo wpiąć jeden kabel w drugi i podłączyć do jednego GND a do drugiego moduł NRF24L.
Gdy już wszystko mamy podłączone należy odpalić program do obsługi arudino o czym pisałem w innym artykule.
Kolejnym krokiem będzie wklejenie Naszego kodu i wgranie go do Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
/** * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <[email protected]> * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * DESCRIPTION * * Simple binary switch example * Connect button or door/window reed switch between * digitial I/O pin 2 and 3 (BUTTON_PIN below) and GND. * http://www.mysensors.org/build/binary */ // Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 #include <SPI.h> #include <MySensors.h> #include <Bounce2.h> #define PRIMARY_CHILD_ID 22 #define PRIMARY_BUTTON_PIN 2 // Arduino Digital I/O pin for button/reed switch #define SECONDARY_CHILD_ID 33 #define SECONDARY_BUTTON_PIN 3 // Arduino Digital I/O pin for button/reed switch Bounce debouncer = Bounce(); int oldValue=-1; // Change to V_LIGHT if you use S_LIGHT in presentation below MyMessage msg(PRIMARY_CHILD_ID,V_TRIPPED); MyMessage msg2(SECONDARY_CHILD_ID,V_TRIPPED); void setup() { // Setup the button pinMode(PRIMARY_BUTTON_PIN,INPUT); pinMode(SECONDARY_BUTTON_PIN,INPUT); // Activate internal pull-up digitalWrite(PRIMARY_BUTTON_PIN,HIGH); digitalWrite(SECONDARY_BUTTON_PIN,HIGH); } void presentation() { // Register binary input sensor to gw (they will be created as child devices) // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. // If S_LIGHT is used, remember to update variable type you send in. See "msg" above. present(PRIMARY_CHILD_ID, S_DOOR); present(SECONDARY_CHILD_ID, S_DOOR); } // Check if digital input has changed and send in new value void loop() { uint8_t value; static uint8_t sentValue=2; static uint8_t sentValue2=2; // Short delay to allow buttons to properly settle value = digitalRead(PRIMARY_BUTTON_PIN); if (value != sentValue) { // Value has changed from last transmission, send the updated value send(msg.set(value==HIGH ? 1 : 0)); sentValue = value; } value = digitalRead(SECONDARY_BUTTON_PIN); if (value != sentValue2) { // Value has changed from last transmission, send the updated value send(msg2.set(value==HIGH ? 1 : 0)); sentValue2 = value; } } |
12 Odpowiedzi
Jacek
siema dzięki wielkie za Twoja artykuły czy masz może już ten skrypt jak
ustawić alarm gdy drzwi będą za długo otwarte tak byście dostali powiadomienie na telefon.
chciałbym to wykorzystać do bramy garażowej np jeśli brama otwarta ( może jeszcze jak brak ruchu w garażu) załóżmy 10 minut to wyślij maila albo zamknij bramę
Łukasz Kostrzewa
Hej
Nie wiem jak napisać to w Lua choć to pewnie proste ale można spróbować na około przez Zdarzenia w Domoticz.
1. Ja bym utworzył zdarzenie gdzie gdy drzwi w garażu są otwarte to: Wybieramy z zakładki Logic Set After Seconds.
Tworzymy wcześniej Dummy switch o dowolnej nazwie (np. brama) i trypie przełącznika i dodajemy go do naszego zdarzenia a czas to 600 s.
2. Tworzymy drugie zdarzenie gdzie jak drzwi w garażu zamknięte to „brama” Set brama to Off.
3. Następnie tworzymy kolejne zdarzenie gdzie od góry dajemy If „brama” open then z zakładki Messages Send email with subject and message to.
Mam nadzieję, że w miarę to wszystko opisałem zrozumiale:)
Żeby można było otrzymywać maile z Domoticz należy wcześniej w ustawieniach Domoticza przez www ustawić dostęp do maila – działa dobrze z gmailem.
Prosił bym o info czy się udało
Pozdrawiam
Jacek
o to chodziło
https://photos.app.goo.gl/NGMAtywhQNj66V5H3
Łukasz Kostrzewa
Witam
Dokładnie o to chodziło.
Działa jak powinno?
Pozdrawiam
Grzegorz
Niestety ten szkic nie da się skompilować dla Arduino Nano
Agnieszka Kostrzewa
Dziwne bo ja używam go na aruduino nano i działa. Może pojawiły się jakieś nowe biblioteki w najnowszych uaktualnieniach i dlatego nie działa. Ja nic nie uaktualniałem od dosyć dawna także…
Rozumiem, że szkic się kompiluje ale nie działa? Co się wyświetla po wgraniu skryptu i podłączeniu kontaktronów w monitorze portu szeregowego?
Grzegorz
Skrypt nie kompiluje się.
Grzegorz
Ten kod ładnie sie kompiluje: https://www.mysensors.org/build/binary, ale jest na 1 kontaktron, a ja chce na co najmniej 2 kontaktrony.
Jedyne na o mnie stać to dodałem linijke dodatkową linijkę:
#define CHILD_ID 2
#define BUTTON_PIN 2 // Arduino Digital I/O pin for button/reed switch
W Domoticzu widzę 2 przełaczniki, ale tylko jeden reaguje – coś jeszcze pewnie trzeba dopisać, tylko ja………. 🙂
Krzysiek
pytanie czy można przerobić ten kod by dodac jeszcze 2 przekaźniki?
pozdrawiam Krzysiek
Agnieszka Kostrzewa
Witam. W kodzie jest blad na paczatku:
Kod mozna przerobic powielajac to co jest w tym tak zeby byly 4 kontaktrony.
W wolnej chwili moze taki wrzuce ale prosze samenu pokombinkwac:)
grzegorz
Witam, czy udało się Pani wykombinować aby działało na wiecej kontaktronów?
Agnieszka Kostrzewa
Niestety sprawdzone mam tylko dwa