INFORMACJA: Poniższy post znajduje się w Poczekalni.
Projekt ten jest skierowany dla wszystkich tych , którzy posiadają piec na ekogroszek lub pellet i chcą mieć bieżący podgląd na ilość opału w podajniku , ilość zużycia opału w ujęciu rocznym ,podgląd na temperature C.O. / C.W.U lub mieć możliwość sterowania pompami z poziomu aplikacji.Całość projektu jest mojego autorstwa , jednak działa dzięki bardzo fajnej aplikacji Supla – https://cloud.supla.org/ oraz ze skryptów zaczerpniętych z forum – https://forum.supla.org/ w tym bardzo pomocnego i uczynnego programisty o nicku ,,klew”
Do projektu niezbędny jest:
-moduł Wemos D1 mini pro z uwagi na możliwość dołączenia zewnętrznej anteny WIFI
-moduł przekaźnikowy 5V -2 lub 4 przekaźnikowy
-konto w serwisie Supla
-zasilacz 5V DC ja zastosowałem ładowarkę do Samsunga
-czyjniki temperatury DS20b18
-czujnik kontaktron
-puszka wraz ze złączkami
-czujnik odległości HC SR04
-płytka PCB na której należy dolutować piny zaciskowe
Schemat połączenia:
Przekaźnik wraz z wemosem umiejscowiłem w puszce montażowej
Czujnik odległości umiejscowiłem w klapie podajnika ( po zainstalowaniu czujnik na pustym podajniku wskazywał 65 cm)
Kontaktron umiejscowiłem na przykręcanym profilu , natomiast na śrubie/zawleczce ślimaka umieściłem okrągły magnes (zasada działania jest bardzo prosta , ślimak wraz magnesem za każdym pełnym obrotem podaje sygnał do wemosa)
Czujniku temperatury umieściłem na rurach, mocując je za pomocą opasek
Kod źródłowy:
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
/* Copyright (C) AC SOFTWARE SP. Z O.O. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // D0 -echo czujnika odległosci HC_SR04 // D1 -trigger czujnika odległosci HC_SR04 // D2 -czujniki temperatury // D3 -nieprzypisany // D4 -przekaźnik SSR pompy CO Podłogówki // D5 -przekaźnik SSR pompy CWU // D6 -kontaktron // D7 -nieprzypisany // D8 -nieprzypisany #include <SPI.h> #include <SuplaDevice.h> #include <SuplaImpulseCounter.h> #include <supla/sensor/HC_SR04.h> #include <supla/will_trigger.h> #include <supla/sensor/virtual_binary.h> #include <supla/sensor/DS18B20.h> #include <supla/control/relay.h> #include <supla/control/button.h> #include <supla/sensor/binary.h> // ESP8266 based board: #include <supla/network/esp_wifi.h> Supla::ESPWifi wifi("nazwa sieci", "hasło wifi"); using namespace Supla; // Definiujemy nazwy zdarzeń, których będziemy używać enum {NISKIPOZIOM, WYSOKIPOZIOM}; // Tworzymy nową klasę, która dziedziczy po sensorze HC SR04 oraz po klasie WillTrigger, która pozwala na // tworzenie powiązań między różnymi elementami aplikacji class DistanceWithAlarm : public Sensor::HC_SR04, public WillTrigger { public: // Konstruktor - przekazujemy parametry do klasy bazowe HC_SR04 oraz ustawiamy thresholdX na zero. DistanceWithAlarm(int8_t trigPin, int8_t echoPin) : HC_SR04(trigPin, echoPin), threshold(0) {}; // Nadpisujemy metodę "getValue" - zawoła ona metodę getValue z klasy bazowej HC_SR04, po czym sprawdzi warunki // czy pobrana wartość jest mniejsza lub większa od parametrów threshold oraz wywoła odpowiednie zdarzenie double getValue() { double value = Sensor::HC_SR04::getValue(); if (value > DISTANCE_NOT_AVAILABLE) { if (value < threshold) { runTrigger(NISKIPOZIOM); } if (value > threshold) { runTrigger(WYSOKIPOZIOM); } } return value; } double threshold; }; void setup() { Serial.begin(9600); WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP" // Replace the falowing GUID with value that you can retrieve from https://www.supla.org/arduino/get-guid char GUID[SUPLA_GUID_SIZE] = {0xE7,xxxxxxxxxxxxxxxx}; // Replace the following AUTHKEY with value that you can retrieve from: https://www.supla.org/arduino/get-authkey char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {0x1F xxxxxxxxxxxxxxxxxxx}; /* * Having your device already registered at cloud.supla.org, * you want to change CHANNEL sequence or remove any of them, * then you must also remove the device itself from cloud.supla.org. * Otherwise you will get "Channel conflict!" error. */ //CZUJNIK ILOŚCI EKOGROSZKU // Tworzymy sensor dystansu - ustaw poprawne GPIO DistanceWithAlarm *distance = new DistanceWithAlarm(D1, D0); // (trigger, echo) // Tworzymy wirtualny sensor binarny (on/off, jest/nie ma) Sensor::VirtualBinary *ekogroszek = new Sensor::VirtualBinary(); // Ustawiamy odległości powyżej/poniżej których mają wykonać się akcje distance->threshold = 0.50; // gdy zasobnik jest całkowicie pusty wartość wynosi 65 cm // Czujnik dystansu -> wywoła ( ustaw sensor obecności ekogroszku, gdy wartość będzie poniżej threshold) distance->willTrigger(*ekogroszek, NISKIPOZIOM, SET); // Czujnik dystansu -> wywoła ( wyczyść sensor obecności ekogroszku, gdy wartość będzie powyżej threshold) distance->willTrigger(*ekogroszek, WYSOKIPOZIOM, CLEAR); //w pliku sensor/distance zamieniono czestotliwosc odczytu za 2000 z 500 //CZUJNIK ILOŚCI ZUŻYCIA EKOGROSZKU SuplaDevice.addImpulseCounter(D6, 0, false, true, 50); // kontaktron zwieramy jednym przewodem do masy , drugi do pinu D6 ,40 obrotów to ok.7 kg //SEKCJA PRZEKAŹNIKÓW SuplaDevice.addRelay(D4, false); //pompa CO SuplaDevice.addRelay(D5, false); //Pompa CWU SuplaDevice.addRelay(D7, false); //nieprzypisany //CZUJNIK TEMPERATUR // 4 termometry DS18B20 na pinie D2. Adres DS można pominąć, gdy na pinie jest tylko jedno urządzenie DeviceAddress ds1addr = {0x28, 0x21, 0xE3, 0x56, 0xB5, 0x1, 0x3C, 0x8A}; //czerwony zasilanie pieca DeviceAddress ds2addr = {0x28, 0xDD, 0x6C, 0x56, 0xB5, 0x1, 0x3C, 0x21}; //niebieski woda w bojlerze DeviceAddress ds3addr = {0x28, 0x12, 0xCC, 0x56, 0xB5, 0x1, 0x3C, 0xA9}; //bialy powrót pieca DeviceAddress ds4addr = {0x28, 0xAA, 0xC5, 0x5B, 0x59, 0x14, 0x1, 0x4D}; //brazowy pion DeviceAddress ds5addr = {0x28, 0x33, 0x10, 0x56, 0xB5, 0x1, 0x3C, 0x57}; //zielony DeviceAddress ds6addr = {0x28, 0xFE, 0x35, 0x56, 0xB5, 0x1, 0x3C, 0xA8}; //czerwono zielony new Supla::Sensor::DS18B20(D2, ds1addr); new Supla::Sensor::DS18B20(D2, ds2addr); new Supla::Sensor::DS18B20(D2, ds3addr); new Supla::Sensor::DS18B20(D2, ds4addr); new Supla::Sensor::DS18B20(D2, ds5addr); new Supla::Sensor::DS18B20(D2, ds6addr); // D8 (przy starcie musi miec 0) // D3 (nie działa) // D5 w przypadku przekaznika musi byc false /* * SuplaDevice Initialization. * Server address is available at https://cloud.supla.org * If you do not have an account, you can create it at https://cloud.supla.org/account/create * SUPLA and SUPLA CLOUD are free of charge * */ SuplaDevice.setName("STEROWNIK"); SuplaDevice.begin(GUID, // Global Unique Identifier "xxxx.supla.org", // SUPLA server address "@gmail.com", // Email address used to login to Supla Cloud AUTHKEY); // Authorization key } void loop() { SuplaDevice.iterate(); } |
W projekcie zastosowałem 6 czujników temperatury z których należy odczytać adres – korzystałem z tej strony https://www.elektronika24.pl/adres-ds18b20-odczyt/
Po wgraniu do Wemosa D1 i przypisaniu urządzeń -konfiguracja wygląda to następująco:
Po włączeniu uprzednio skonfigurowanej na telefonie aplikacji Supla , ukazuję się następujące ikony:(ikony należy stworzyć oraz dodać do supla.cloud)
Dodatkowo dzięki stronie https://supla.fracz.com , powiązanej z serwisem supla , skonfigurowałem programator czasu włączenia pompy podłogówki oraz powiadomień pushover działającej na zasadzie powiadomień SMS o ilości kończącego się ekogroszku – o tym jak to zrobić napisze w kolejnej części.
Powiadomienia wyglądają następująco:
To byłoby na tyle, mam nadzieje że projekt opisałem w sposób zrozumiały.
Z uwagi na zgłoszenia o problemach z konfiguracją w Arduino IDE poniżej załączam skonfigurowany plik supladevice.rar autorstwa Klew , kórego nalży rozpakować oraz nadmisać w lokalizacji C:UsersNazwa użytkownikaDocumentsArduinolibraries
Pliki załączone do artykułu:
INFORMACJA: Oceń artykuł aby pomóc mu trafić na stronę główną Majsterkowa.
UWAGA: Zaloguj się, aby móc zagłosować na ten projekt.
Witam.
Projekt jest super. gdzie znajdę biblioteki do softu.
https://github.com/klew/arduino
Dzięki.
Jak uszczelniłeś puszkę z czujnikiem? Jak nie domknę dokładnie klapy, to mi dym “cofa” na kotłownię. Nie masz takiego problemu?
otwory w pokrywie są precyzyjnie wywiercone i dodatkowo pomiędzy puszką a pokrywą nałożyłem cienką warstwe silikonu-dym się nie cofa
ten kod aby na pewno działa?, brak aktualnie w źródłach nie ma will_trigger, piszesz także, że w sensor/distance zmieniłeś częstotliwość odczytu tylko że nigdzie tej biblioteki nie ładujesz?
wszystko jasne, kod przyklejony z forum Supla, wiec nie ma się co dziwić. Jeśli piszesz program to zrób to od A do Z, a nie że kopiujesz i wprowadzasz swoje zmiany nie zmieniając komentarzy -> “czy pobrana wartość jest mniejsza lub większa od parametrów threshold 1 i 2” – u Ciebie jest tylko jeden threshold!
,,wszystko jasne, kod przyklejony z forum Supla” -jeżeli twierdzisz że kod przeklejony z forum Supla , to zaloguj się na te forum i skopiuj ten kod -ja na forum gotowego kodu nie widziałem , a podany kod jest zmodyfikowaną wersją stworzoną i składającą się z kilku projektów i zmodyfikowany właśnie pod ten projekt.
pobierz aktualne źródła SuplaDevice, wklej swój kod i zobacz czy się kompiluje.
Witam WinstonW
Bardzo fajny projekt, takiego czegoś właśnie szukałem. Szkoda, ze w twoim sofcie nie liczy odległości od tylu i ze nie ma konfigu po http. Ale i tak szacun!