Obsah:
- Zásoby
- Krok 1: Výber zariadenia
- Krok 2: Navrhovanie systému
- Krok 3: Riešenie núdzových situácií
- Krok 4: Spustenie systému 24/7
- Krok 5: Cloudové monitorovanie
- Krok 6: Funguje to
Video: Inteligentné čerpadlo na kávovar ovládané ultrazvukovým senzorom Raspberry Pi a HC-SR04 a cloud4RPi: 6 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:57
Teoreticky vždy, keď idete do kávovaru na rannú šálku, je len jedna z dvadsiatich šancí, že budete musieť naplniť nádrž na vodu. V praxi sa však zdá, že stroj akosi nájde spôsob, ako vám túto fušku vždy položiť. Čím viac kávy chcete, tým je väčšia pravdepodobnosť, že sa vám zobrazí obávaná správa „naplňte nádržku na vodu“. Rovnako to vnímajú aj moji kolegovia. Keďže sme hlupáci, ktorými sme, rozhodli sme sa implementovať technológiu, ktorá s tým skončí.
Zásoby
Naše zariadenie
Máme kávovar SAECO Aulika Focus. Až do dnešného dňa sme používali ručnú pumpu na plnenie nádrže na vodu zo štandardnej fľaše na vodu s objemom 19 litrov.
Naše ciele
- Použite elektrické čerpadlo poháňané nejakým radičom alebo mikropočítačom cez relé.
- Majte spôsob, ako zmerať hladinu vody v nádrži kávovaru, aby náš systém vedel, kedy ju doplniť.
- Mať prostriedky na ovládanie systému, najlepšie v reálnom čase z mobilného zariadenia.
- Dostávajte upozornenia (prostredníctvom služby Slack alebo podobnej služby), ak sa v systéme niečo pokazí.
Krok 1: Výber zariadenia
Čerpadlo
Rýchle vyhľadávanie na internete zobrazí niekoľko modelov elektrických čerpadiel navrhnutých pre zvolenú fľašu vody. Také čerpadlá sa zvyčajne ovládajú vypínačom ON/OFF (napríklad Hot Frost A12 alebo SMixx ХL-D2). Tu je pumpa, ktorú sme si vybrali pre náš projekt.
Ovládacie zariadenie
Vyskúšali sme niekoľko zariadení, ale usadili sme sa na Raspberry Pi kvôli nasledujúcim výhodám:
- Má GPIO, ktoré nám umožňuje pripojiť snímač priblíženia
- Podporuje Python
Nainštalovali sme novú verziu Raspbian Buster Lite a všetko potrebné na spustenie Pythonu 3.
Ako prepíname čerpadlo
Na ovládanie napájania sme vybrali polovodičové relé so stredným výkonom (12V/2A) vhodné pre striedavý prúd. Relé pripája čerpadlo k zásuvke a je ovládané digitálnym kolíkom Raspberry Pi.
Ako kontrolujeme hladinu vody
Bolo pre nás dôležité nemeniť konštrukciu kávovaru, a preto sme sa na meranie hladiny vody rozhodli použiť ultrazvukový senzor priblíženia HC-SR04.
Vytlačili sme 3D vlastný kryt nádrže na vodu s dvoma otvormi pre žiariče senzora. Pre senzor sme ľahko našli knižnicu GitHub. V tomto bode boli všetky prípravy dokončené.
Krok 2: Navrhovanie systému
Logika systému
Systém je navrhnutý s ohľadom na nasledujúcu jednoduchú logiku:
- Systém neustále monitoruje vzdialenosť medzi senzorom a vodnou hladinou.
- Kedykoľvek zmena vzdialenosti prekročí prahovú hodnotu, systém pošle do cloudu informácie o svojom stave.
- Ak vzdialenosť prekročí maximálnu povolenú hodnotu (nádrž je prázdna), systém aktivuje čerpadlo a vypne ho, akonáhle je vzdialenosť menšia ako minimálna povolená hodnota.
- Kedykoľvek sa zmení stav systému (napríklad sa aktivuje pumpa), informuje cloud.
V prípade chyby sa na kanál Slack odošle upozornenie.
Keď je kávovar nečinný, systém pinguje cloudovú službu s diagnostickými údajmi raz za minútu. Okrem toho odosiela svoj stav do cloudu každých 5 minút.
Keď je pumpa aktívna, systém odosiela údaje častejšie, ale nie viac ako raz za pol sekundy.
def send (cloud, premenné, dist, error_code = 0, force = False): pump_on = is_pump_on () percent = calc_water_level_percent (dist) variables ['Distance'] ['value'] = dist variables ['WaterLevel'] [' hodnota '] = percentuálne premenné [' PumpRelay '] [' hodnota '] = premenné pump_on [' stav '] [' hodnota '] = stav_kalkuly (chybový_kód, percento, pump_on)
aktuálny = čas ()
globálny čas posledného odoslania, ak je platný alebo aktuálny - čas posledného odoslania> MIN_SEND_INTERVAL: readings = cloud.read_data () cloud.publish_data (čítania) last_sending_time = aktuálny
Práca s pumpou
Nasledujúce konštanty definujeme ako základ pre logiku prevádzky čerpadla.
# GPIO piny (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27
# Čerpadlo
START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # milisekúnd PUMP_STOP_TIMEOUT = 5 # s
DÔLEŽITÉ: Ak sa chystáte používať Pin 4, nezabudnite vypnúť možnosť 1-Wire raspi-config, aby ste predišli konfliktom.
Pri spustení programu zaregistrujeme spätné volanie a nastavíme počiatočný stav na VYPNUTÉ.
Tu je kód pre funkciu, ktorá prepína pumpu:
def toggle_pump (hodnota): ak pump_disabled: vráti ak is_pump_on ()! = hodnota: log_debug ("[x] % s" % ('START' ak je hodnota iná 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.output (GPIO_PUMP, hodnota) # Spustenie/zastavenie nalievania
Ako je definované v spúšťacom kóde vyššie, keď sa relé zopne, volá sa nasledujúce spätné volanie:
pump_on = False def pump_relay_handle (pin): global pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("Relé pumpy zmenené na % d" % pump_on)
Pri spätnom volaní uložíme aktuálny stav pumpy do premennej. V hlavnej slučke aplikácie môžeme zistiť okamih, kedy sa pumpa prepína, ako je uvedené nižšie:
def is_pump_on (): global pump_on return pump_on
if GPIO.event_detected (GPIO_PUMP):
is_pouring = is_pump_on () #… log_debug ('[!] Bola zistená udalosť pumpy: % s' % ('On', ak is_pouring else 'Off')) send (cloud, variables, distance, force = True)
Meranie vzdialenosti
Zmerať vzdialenosť k vodnej hladine pomocou ultrazvukového senzora priblíženia je celkom jednoduché. V našom úložisku sme zdieľali niekoľko pythonových skriptov, ktoré vám umožňujú testovať senzor.
V skutočných aplikáciách môžu hodnoty senzora kolísať v dôsledku odrazového efektu senzora a oscilácií vody. V niektorých prípadoch môžu údaje úplne chýbať. Implementovali sme triedu BounceFilter, ktorá akumuluje N posledných hodnôt, zahodí vrcholy a vypočíta priemer zostávajúcich meraní. Proces merania je implementovaný nasledujúcim asynchrónnym algoritmom.
# Zachováva posledné čítanie meraní senzora = BounceFilter (veľkosť = 6, discard_count = 1)
reading_complete = threading. Event ()
def wait_for_distance ():
reading_complete.clear () vlákno = navliekanie. Vlákno (cieľ = vzdialenosť na čítanie) thread.start ()
ak nie je read_complete.wait (MAX_READING_TIMEOUT):
log_info ('Časový limit snímača čítania') návrat Žiadny návrat readings.avg ()
def read_distance ():
try: value = hcsr04.raw_distance (sample_size = 5) rounded = value if value is None else round (value, 1) readings.add (rounded) except Exception as err: log_error ('Internal error: % s' % err) konečne: reading_complete.set ()
Úplnú implementáciu filtra nájdete v zdrojoch.
Krok 3: Riešenie núdzových situácií
Čo keď snímač vyhorel alebo spadol alebo ukázal na nesprávnu oblasť? Potrebovali sme spôsob, ako hlásiť takéto prípady, aby sme mohli podniknúť manuálne opatrenia.
Ak snímač neposkytne údaje o vzdialenosti, systém odošle zmenený stav do cloudu a vygeneruje zodpovedajúce upozornenie.
Logiku ilustruje nasledujúci kód.
distance = wait_for_distance () # Prečítajte si aktuálnu hĺbku vody, ak vzdialenosť nie je žiadna: log_error („Chyba vzdialenosti!“)
Máme prevádzkový rozsah hladiny vody, ktorý by sa mal udržiavať, keď je snímač na svojom mieste. Testujeme, či aktuálna hladina vody klesá v tomto rozsahu:
# Vzdialenosť od senzora k hladine vody # podľa nádržky na vodu kávovaru MIN_DISTANCE = 2 # cm MAX_DISTANCE = 8 # cm
# Vzdialenosť je mimo očakávaného rozsahu: nezačínajte sypať
ak vzdialenosť> MAX_DISTANCE * 2: log_error („Vzdialenosť je mimo rozsah: %.2f“% vzdialenosť) pokračovať
Čerpadlo vypneme, ak bolo aktívne, keď sa vyskytla chyba.
if is_pump_on () and prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] Emergency stop of the pump. No signal from a distance sensor')
toggle_pump (STOP_PUMP)
Spracovávame aj prípad, keď fľaši dôjde voda. Skontrolujeme, či sa hladina vody nemení, keď čerpadlo beží. Ak je to tak, systém počká 5 sekúnd a potom skontroluje, či sa čerpadlo vyplo. Ak nie, systém implementuje núdzové vypnutie čerpadla a odošle upozornenie na chybu.
PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Žiadne
def set_emergency_stop_time (now, is_pouring):
globálny núdzový_stop_čas núdzový_stop_čas = teraz + PUMP_STOP_TIMEOUT, ak / is_pouring else None
def check_water_source_empty (now):
vráťte núdzový_stop_čas a teraz> núdzový_stop_čas
# --------- hlavná slučka -----------
ak GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emergency_stop_time (now, is_pouring) #…
global pump_disabled
if check_water_source_empty (now): log_error ('[!] Emergency stop of the pump. / Water source is empty') toggle_pump (STOP_PUMP) pump_disabled = True
Hore je príklad denníka správ generovaného počas núdzového zastavenia.
Krok 4: Spustenie systému 24/7
Kód v zariadení je ladený a beží bez problémov. Spustili sme ho ako službu, takže sa reštartuje, ak sa Raspberry Pi reštartuje. Pre pohodlie sme vytvorili súbor Makefile, ktorý pomáha s nasadením, spustením služby a zobrazovaním denníkov.
. PHONY: nainštalovať beh spustiť stop stavový protokol nasadiť MAIN_FILE: = coffee-pump/main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = coffee-pump.service
Inštalácia:
chmod +x $ (SERVICE_INSTALL_SCRIPT) sudo./$(SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)
beh:
sudo python3 $ (MAIN_FILE)
štart:
sudo systemctl start $ (SERVICE_NAME)
postavenie:
sudo systemctl status $ (SERVICE_NAME)
zastaviť:
sudo systemctl stop $ (SERVICE_NAME)
denník:
sudo journalctl -u coffee -pump -od dnes
nasadiť:
rsync -av snímač čerpadla čerpadla-nastavenie Makefile *.sh pi@XX. XX. XXX. XXX: ~/
Tento súbor a všetky požadované skripty nájdete v našom úložisku.
Krok 5: Cloudové monitorovanie
Na implementáciu ovládacieho panela sme použili Cloud4RPi. Najprv sme pridali miniaplikácie na označenie základných parametrov systému.
Mimochodom, miniaplikácia pre premennú STATUS môže používať rôzne farebné schémy na základe svojej hodnoty (pozri obrázok vyššie).
Pridali sme widget grafu na zobrazenie dynamických údajov. Na obrázku nižšie vidíte okamih zapnutia a vypnutia čerpadla a príslušné hladiny vody.
Ak analyzujete dlhšie časové obdobie, môžete vidieť špičky - vtedy čerpadlo bežalo.
Cloud4RPi vám tiež umožňuje nastaviť rôzne úrovne vyhladzovania.
Krok 6: Funguje to
Funguje to! Ovládací panel ako celok vyzerá ako na obrázku nižšie.
V súčasnej dobe naša automatická pumpa funguje už niekoľko týždňov a stačilo nám len vymeniť fľaše s vodou. Úplný kód pre náš projekt je k dispozícii v našom úložisku GitHub.
Odporúča:
Inteligentné stolné LED svetlo - Inteligentné osvetlenie W/ Arduino - Pracovný priestor Neopixels: 10 krokov (s obrázkami)
Inteligentné stolné LED svetlo | Inteligentné osvetlenie W/ Arduino | Neopixels Workspace: Teraz niekoľko dní trávime veľa času doma, virtuálne študujeme a pracujeme, tak prečo si náš pracovný priestor nevylepšiť pomocou vlastného a inteligentného systému osvetlenia založeného na diódach Arduino a Ws2812b LED. Tu vám ukážem, ako si vytvoriť inteligentný Stolné LED svetlo, ktoré
Alarm Arduino so ultrazvukovým senzorom: 5 krokov (s obrázkami)
Alarm Arduino s ultrazvukovým senzorom: Tento návod je o tom, ako si sami vyrobiť jednoduché a lacné poplašné zariadenie. Potrebujete iba základné znalosti z oblasti elektroniky a programovania arduina. Ak máte nejaké otázky alebo problémy, môžete ma kontaktovať na môj mail: iwx [email protected] Tu
Rozhranie Arduino so ultrazvukovým senzorom a bezkontaktným snímačom teploty: 8 krokov
Rozhranie Arduino so ultrazvukovým senzorom a bezkontaktným snímačom teploty: V dnešnej dobe výrobcovia, vývojári uprednostňujú Arduino kvôli rýchlemu vývoju prototypov projektov. Arduino je elektronická platforma s otvoreným zdrojovým kódom založená na ľahko použiteľnom hardvéri a softvéri. Arduino má veľmi dobrú komunitu používateľov. V tomto projekte
Vylepšené RC autíčko s ultrazvukovým senzorom (Arduino): 3 kroky
Vylepšené RC autíčko s ultrazvukovým senzorom (Arduino): Jedná sa o RC autíčko, ktoré bolo vylepšené ako RC auto Arduino a vyhýbalo sa predmetom. Odstránili sme pôvodnú dosku RC auta a použili sme iba DC motory. Toto RC autíčko obsahuje dva DC motory , jeden v prednej časti auta ako motor riadenia a druhý jednosmerný prúd
Myš Bluetooth s ultrazvukovým senzorom a fotobunkou: 10 krokov (s obrázkami)
Myš Bluetooth s ultrazvukovým senzorom a fotobunkou: Malý úvod, prečo som urobil tento projekt. Práve hľadám adoptovať mačiatko do svojho nového domu. A potom, čo som prešiel niekoľkými hrateľnými vecami pre mačky, povedal som si: prečo si nevyrobiť hračku sám. Preto som vyrobil myš Bluetooth. Môžete si