Tartalomjegyzék:
- Kellékek
- Lépés: A berendezés kiválasztása
- 2. lépés: A rendszer tervezése
- 3. lépés: Vészhelyzetek kezelése
- 4. lépés: A rendszer futtatása a nap 24 órájában
- 5. lépés: Felhőfigyelés
- 6. lépés: Működik
Videó: Okos kávéfőző szivattyú a Raspberry Pi és a HC-SR04 ultrahangos érzékelő és a Cloud4RPi vezérlésével: 6 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Elméletileg minden alkalommal, amikor a kávéfőzőhöz megy a reggeli csészéért, csak egy a huszadiknak az esélye, hogy meg kell töltenie a víztartályt. A gyakorlatban azonban úgy tűnik, hogy a gép valahogy megtalálja a módját, hogy ezt a házimunkát mindig rábírja. Minél többet szeretne kávét, annál nagyobb valószínűséggel kapja meg a rettegett „töltse fel a víztartályt” üzenetet. A kollégáim is hasonlóan vélekednek erről. Mivel mi vagyunk a malacok, úgy döntöttünk, hogy megvalósítjuk azt a technológiát, amely ennek véget vet.
Kellékek
Berendezéseink
Van egy SAECO Aulika Focus kávéfőzőnk. A mai napig kézi szivattyúval töltöttük fel a gép víztartályát egy standard 5 literes (19 literes) vizespalackból.
Céljaink
- Használjon elektromos szivattyút, amelyet valamilyen vezérlő vagy mikroszámítógép hajt egy relén keresztül.
- Legyen módja a kávéfőző tartályában lévő vízszint mérésére, hogy rendszerünk tudja, mikor kell újratölteni.
- Legyen eszköze a rendszer vezérlésére, lehetőleg valós időben, mobileszközről.
- Értesítések fogadása (a Slack vagy hasonló szolgáltatáson keresztül), ha bármi baj van a rendszerrel.
Lépés: A berendezés kiválasztása
A pumpa
Egy gyors internetes keresés számos elektromos szivattyúmodellt jelenít meg az Ön által választott kulacshoz. Az ilyen szivattyúkat általában egy BE/KI kapcsoló vezérli (például Hot Frost A12 vagy SMixx ХL-D2). Itt van a szivattyú, amelyet a projektünkhöz választottunk.
A vezérlő eszköz
Több eszközt is kipróbáltunk, de a Raspberry Pi mellett döntöttünk a következő előnyök miatt:
- GPIO -val rendelkezik, amely lehetővé teszi a közelségérzékelő csatlakoztatását
- Támogatja a Python -ot
Telepítettük a Raspbian Buster Lite friss verzióját és mindent, ami a Python 3 futtatásához szükséges.
Hogyan kapcsoljuk be a szivattyút
A teljesítmény szabályozásához egy közepes teljesítményű (12V/2A) szilárdtest relét választottunk, amely alkalmas váltakozó áramra. A relé a szivattyút a kimenethez köti, és a Raspberry Pi digitális csapja vezérli.
Hogyan ellenőrizzük a vízszintet
Fontos volt számunkra, hogy ne változtassuk meg a kávéfőző szerkezetét, ezért úgy döntöttünk, hogy a HC-SR04 ultrahangos közelségérzékelőt használjuk a vízszint mérésére.
3D-s nyomtatást készítettünk az egyedi víztartály fedelére, két lyukkal az érzékelő kibocsátói számára. Könnyen találtunk egy GitHub könyvtárat az érzékelő számára. Ezen a ponton minden előkészítés befejeződött.
2. lépés: A rendszer tervezése
A rendszer logikája
A rendszer a következő egyszerű logikát szem előtt tartva készült:
- A rendszer folyamatosan figyeli az érzékelő és a vízfelület közötti távolságot.
- Amikor a távolság változása meghaladja a küszöbértéket, a rendszer információt küld az állapotáról a felhőnek.
- Ha a távolság meghaladja a megengedett legnagyobb értéket (a tartály üres), a rendszer aktiválja a szivattyút, és kikapcsolja, ha a távolság kisebb, mint a megengedett legkisebb érték.
- Amikor a rendszer állapota megváltozik (például a szivattyú bekapcsol), tájékoztatja a felhőt.
Hiba esetén értesítést küld a Slack csatornára.
Amikor a kávéfőző tétlen, a rendszer percenként egyszer feljelenti a felhőszolgáltatást diagnosztikai adatokkal. Ezenkívül 5 percenként elküldi állapotát a felhőbe.
Amikor a szivattyú aktív, a rendszer gyakrabban, de legfeljebb fél másodpercenként küld adatokat.
def send (felhő, változók, dist, error_code = 0, force = False): pump_on = is_pump_on () percent = calc_water_level_percent (dist) variables ['Distance'] ['value'] = dist variables ['WaterLevel'] [' value '] = százalékos változó [' PumpRelay '] [' value '] = pump_on variables [' Status '] [' value '] = calc_status (error_code, percent, pump_on)
jelenlegi = idő ()
globális last_sending_time ha erő vagy aktuális - last_sending_time> MIN_SEND_INTERVAL: readings = cloud.read_data () cloud.publish_data (olvasmányok) last_sending_time = aktuális
Munka a szivattyúval
A következő állandókat definiáljuk a szivattyú működési logikájának alapjaként.
# GPIO csap (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27
# Szivattyú
START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # ezredmásodperc PUMP_STOP_TIMEOUT = 5 # másodperc
FONTOS: Ha a 4. tűt fogja használni, ne felejtse el letiltani az 1 vezetékes raspi-config opciót a konfliktusok elkerülése érdekében.
A program indításakor regisztrálunk egy visszahívást, és a kezdeti állapotot OFF -ra állítjuk.
Itt található a szivattyút váltó funkció kódja:
def toggle_pump (érték): if pump_disabled: return if is_pump_on ()! = value: log_debug ("[x] % s" % ('START' if else value 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.output (GPIO_PUMP, érték) # Öntés leállítása/leállítása
A fenti indítási kódban meghatározottak szerint a relé bekapcsolásakor a következő visszahívás hívódik:
pump_on = Hamis def pump_relay_handle (pin): globális pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("A szivattyú relé % d -re változott" % pump_on)
A visszahívásban mentjük a szivattyú aktuális állapotát egy változóba. Az alkalmazás fő hurkában észlelhetjük azt a pillanatot, amikor a szivattyú átkapcsol az alábbiak szerint:
def is_pump_on (): globális pump_on return pump_on
ha GPIO.event_detected (GPIO_PUMP):
is_pouring = is_pump_on () #… log_debug ('[!] Szivattyúesemény észlelve: % s' % ('On', ha is_pouring else 'Off')) send (felhő, változók, távolság, erő = igaz)
A távolság mérése
Az ultrahangos közelségérzékelő segítségével nagyon könnyű megmérni a vízfelülethez mért távolságot. Tárunkban megosztottunk néhány python -szkriptet, amelyek lehetővé teszik az érzékelő tesztelését.
Valós alkalmazásokban az érzékelő leolvasása ingadozhat az érzékelő ugráló hatása és a víz lengése miatt. Bizonyos esetekben az értékek teljesen hiányozhatnak. Bevezettünk egy BounceFilter osztályt, amely N friss értékeket halmoz fel, elveti a csúcsokat és kiszámítja a fennmaradó mérések átlagát. A mérési folyamatot a következő aszinkron algoritmus hajtja végre.
# Megőrzi az utolsó érzékelői méréseket.
reading_complete = threading. Event ()
def wait_for_distance ():
reading_complete.clear () thread = threading. Thread (target = read_distance) thread.start ()
ha nem olvassa el a teljes.várakozást (MAX_READING_TIMEOUT):
log_info ('Olvasási érzékelő időtúllépése') return Nincs visszatérés readings.avg ()
def read_distance ():
try: value = hcsr04.raw_distance (minta_mérete = 5) kerekítve = érték, ha az érték Nincs más kerek (érték, 1) readings.add (kerekítve), kivéve a kivétel mint hibát: log_error ('Belső hiba: % s' % err) végül: reading_complete.set ()
A szűrő teljes megvalósítását megtalálhatja a forrásokban.
3. lépés: Vészhelyzetek kezelése
Mi van, ha az érzékelő kiégett, leesett, vagy rossz helyre mutat? Szükségünk volt az ilyen esetek bejelentésének módjára, hogy manuálisan tegyünk lépéseket.
Ha az érzékelő nem tudja megadni a távolság leolvasását, a rendszer elküldi a megváltozott állapotot a felhőnek, és megfelelő értesítést generál.
A logikát az alábbi kód szemlélteti.
distance = wait_for_distance () # Olvassa el az aktuális vízmélységet, ha a távolság nincs: log_error ('Távolsághiba!') értesítés_háttérben (calc_alert (SENSOR_ERROR)) send (felhő, változók, távolság, error_code = SENSOR_ERROR, force = True)
Van egy működési vízszint -tartományunk, amelyet fenn kell tartani, amikor az érzékelő a helyén van. Vizsgáljuk, hogy az aktuális vízszint ebbe a tartományba esik -e:
# Az érzékelő és a vízszint közötti távolság # a kávéfőző víztartálya alapján MIN_DISTANCE = 2 # cm MAX_DISTANCE = 8 # cm
# A távolság a várt tartományon kívül van: ne kezdje el önteni
ha a távolság> MAX_DISTANCE * 2: log_error ('A távolság kívül esik a tartományon: %.2f' % távolság) folytassa
Lekapcsoljuk a szivattyút, ha hiba esetén aktív volt.
if is_pump_on () és prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] A szivattyú vészleállítása. Nincs jel a távolságérzékelőből')
toggle_pump (STOP_PUMP)
Azt az esetet is feldolgozzuk, amikor a palackból kifogy a víz. Ellenőrizzük, hogy a vízszint nem változik -e a szivattyú működése közben. Ha igen, a rendszer 5 másodpercet vár, majd ellenőrzi, hogy a szivattyú kikapcsolta -e. Ha nem, akkor a rendszer végrehajtja a szivattyú vészleállítását, és hibaüzenetet küld.
PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Nincs
def set_emergency_stop_time (most, is_pouring):
globális vészhelyzet_megállási idő vészhelyzet_időzítési ideje = most + PUMP_STOP_TIMEOUT, ha / is_pouring else Nincs
def check_water_source_empty (most):
return_stop_time és most> ārkārtas_stop_idő
# --------- főhurok -----------
ha GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emergency_stop_time (most, is_pouring) #…
globális pump_disabled
if check_water_source_empty (most): log_error ('[!] A szivattyú vészleállítása. / A vízforrás üres') toggle_pump (STOP_PUMP) pump_disabled = Igaz
A fenti példa a vészleállítás során létrehozott üzenetnapló.
4. lépés: A rendszer futtatása a nap 24 órájában
Az eszközön található kódot hibakeresés után futtatják, és gond nélkül fut. Szolgáltatásként indítottuk el, tehát újraindul, ha a Raspberry Pi újraindul. A kényelem érdekében létrehoztunk egy Makefile -t, amely segít a telepítésben, a szolgáltatás futtatásában és a naplók megtekintésében.
. PHONY: telepítés futtatás start stop állapotnapló telepítés MAIN_FILE: = coffee-pump/main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = coffee-pump.service
telepítés:
chmod +x $ (SERVICE_INSTALL_SCRIPT) sudo./$(SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)
fuss:
sudo python3 $ (MAIN_FILE)
Rajt:
sudo systemctl start $ (SERVICE_NAME)
állapot:
sudo systemctl állapot $ (SERVICE_NAME)
álljon meg:
sudo systemctl stop $ (SERVICE_NAME)
napló:
sudo journalctl -u kávépumpa -mától
telepítés:
rsync -av kávépumpa érzékelő beállítása Makefile *.sh pi@XX. XX. XXX. XXX: ~/
Ezt a fájlt és az összes szükséges szkriptet megtalálja a tárházunkban.
5. lépés: Felhőfigyelés
A Cloud4RPi -t használtuk a vezérlőpult megvalósításához. Először modulokat adtunk hozzá, amelyek jelzik a rendszer alapvető paramétereit.
Egyébként a STATUS változó widgetje különböző színsémákat használhat az értéke alapján (lásd a fenti képet).
Hozzáadtunk egy diagram widgetet a dinamikus adatok megjelenítéséhez. Az alábbi képen láthatja a szivattyú be- és kikapcsolásának pillanatát, valamint a megfelelő vízszintet.
Ha hosszabb időtartamot elemez, csúcsokat láthat - ekkor működött a szivattyú.
A Cloud4RPi lehetővé teszi különböző simítási szintek beállítását is.
6. lépés: Működik
Működik! A kezelőpanel teljes egészében az alábbiak szerint néz ki.
Jelenleg automatikus szivattyúnk hetek óta működik, és csak a vizespalackok cseréjét kellett elvégeznünk. Projektünk teljes kódja elérhető a GitHub adattárunkban.
Ajánlott:
Intelligens szemetes az Arduino, az ultrahangos érzékelő és a szervomotor használatával: 3 lépés
Intelligens szemetes az Arduino, az ultrahangos érzékelő és a szervomotor használatával: Ebben a projektben megmutatom, hogyan készítsünk intelligens szemetet az Arduino használatával, ahol a szemétkosár fedele automatikusan kinyílik, ha szemetes szemléletmóddal közeledik. Az intelligens szemeteskosár készítéséhez használt egyéb fontos összetevők egy HC-04 ultrahangos érzékelő
Ultrahangos érzékelő robotporszívón: 5 lépés
Ultrahangos érzékelő a robotporszívón: Szia, a Dirt Devil robotporszívó már körülbelül 3 éve van nálunk, és még mindig teszi a dolgát. Ez az M611 típus, ami egy pici "buta": nem kell beolvasni a területet, vagy emlékezni arra, hogy hova nem szabad porszívózni, de vissza lehet térni
Akváriumtervezés az alapvető paraméterek automatikus vezérlésével: 4 lépés (képekkel)
Akváriumtervezés az alapvető paraméterek automatikus vezérlésével: Bevezetés Ma a tengeri akváriumápolás minden akvarista számára elérhető. Az akvárium megszerzésének problémája nem nehéz. De a lakók teljes életfenntartása, a műszaki meghibásodások elleni védelem, az egyszerű és gyors karbantartás és ápolás érdekében
Okos kávéfőző - a SmartHome ökoszisztéma része: 4 lépés
Intelligens kávéfőző - a SmartHome ökoszisztéma része: a feltört kávéfőző a SmartHome ökoszisztéma részévé vált modul interfésszel az agyához/mikrokontrolleréhez
Joule tolvaj a fénykibocsátás rendkívül egyszerű vezérlésével: 6 lépés (képekkel)
Joule tolvaj a fénykibocsátás rendkívül egyszerű vezérlésével: A Joule Thief áramkör kiváló entrée a kezdő elektronikus kísérletező számára, és számtalanszor reprodukálták, sőt a Google keresése 245000 találatot eredményez! A leggyakrabban előforduló áramkör messze az 1. lépésben látható