Sadržaj:
- Pribor
- Korak 1: Odabir opreme
- Korak 2: Projektiranje sustava
- Korak 3: Rješavanje izvanrednih situacija
- Korak 4: Pokretanje sustava 24 sata dnevno
- Korak 5: Nadzor nad oblakom
- Korak 6: Radi
Video: Pametna pumpa za aparat za kavu kojom upravlja Raspberry Pi & HC-SR04 ultrazvučni senzor i Cloud4RPi: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
U teoriji, svaki put kad odete do aparata za kavu na jutarnju šalicu, postoji samo jedna od dvadeset prilika da ćete morati napuniti spremnik vode. U praksi se, međutim, čini da stroj na neki način pronalazi način da vam ovaj posao uvijek prepusti. Što više želite kavu, veća je vjerojatnost da ćete dobiti strašnu poruku "napuni spremnik vode". Moje kolege osjećaju isto po tom pitanju. Budući da smo štreberi, odlučili smo implementirati tehnologiju koja će ovomu stati na kraj.
Pribor
Naša oprema
Imamo aparat za kavu SAECO Aulika Focus. Do danas smo koristili ručnu pumpu za punjenje spremnika vode u mašini iz standardne boce za vodu od 5 litara (19 l).
Naši ciljevi
- Koristite električnu pumpu koju pokreće neka vrsta kontrolera ili mikroračunalo preko releja.
- Imajte način izmjeriti razinu vode u spremniku aparata za kavu kako bi naš sustav znao kada ga treba napuniti.
- Imati sredstva za upravljanje sustavom, po mogućnosti u stvarnom vremenu s mobilnog uređaja.
- Primajte obavijesti (putem Slacka ili slične usluge) ako sustav pođe po zlu.
Korak 1: Odabir opreme
Pumpa
Brzo pretraživanje na webu prikazat će nekoliko modela električnih pumpi dizajniranih za vašu bocu vode po izboru. Takve se crpke obično upravljaju prekidačem za uključivanje/isključivanje (na primjer, Hot Frost A12 ili SMixx XL-D2). Evo pumpe koju smo odabrali za naš projekt.
Uređaj za upravljanje
Isprobali smo nekoliko uređaja, ali smo se odlučili za Raspberry Pi zbog sljedećih prednosti:
- Ima GPIO koji nam omogućuje povezivanje senzora blizine
- Podržava Python
Instalirali smo svježu verziju Raspbian Buster Lite i sve potrebno za pokretanje Pythona 3.
Kako prebacujemo pumpu
Za kontrolu snage odabrali smo poluprovodnički relej srednje snage (12V/2A) prikladan za izmjeničnu struju. Relej povezuje crpku s utičnicom i kontrolira se digitalnim pinom Raspberry Pi.
Kako provjeravamo razinu vode
Bilo nam je važno da ne mijenjamo konstrukciju aparata za kavu, pa smo odlučili upotrijebiti ultrazvučni senzor blizine HC-SR04 za mjerenje razine vode.
3D smo ispisali prilagođeni poklopac spremnika vode s dvije rupe za emitere senzora. Lako smo pronašli GitHub biblioteku za senzor. Tada su sve pripreme bile završene.
Korak 2: Projektiranje sustava
Logika sustava
Sustav je dizajniran imajući na umu sljedeću jednostavnu logiku:
- Sustav stalno prati udaljenost između senzora i vodene površine.
- Kad god promjena udaljenosti pređe graničnu vrijednost, sustav šalje informacije o svom stanju u oblak.
- Ako udaljenost prelazi najveću dopuštenu vrijednost (spremnik je prazan), sustav uključuje pumpu i isključuje je kad udaljenost bude manja od minimalne dopuštene vrijednosti.
- Kad god se stanje sustava promijeni (na primjer, crpka se aktivira), obavještava oblak.
U slučaju pogreške, obavijest se šalje Slack kanalu.
Kad je aparat za kavu u mirovanju, sustav jednom u minuti uputi uslugu oblaka s dijagnostičkim podacima. Osim toga, šalje svoje stanje u oblak svakih 5 minuta.
Kad je crpka aktivna, sustav šalje podatke češće, ali ne više od jednom u pola sekunde.
def send (cloud, varijable, dist, error_code = 0, force = False): pump_on = is_pump_on () postotak = calc_water_level_percent (dist) varijable ['Distance'] ['value'] = dist varijable ['WaterLevel'] [' vrijednost '] = varijable postotka [' PumpRelay '] [' vrijednost '] = varijable pump_on [' Status '] [' vrijednost '] = stanje kalc. (kôd pogreške, postotak, crpka_on)
struja = vrijeme ()
globalno last_sending_time if force or current - last_sending_time> MIN_SEND_INTERVAL: očitanja = cloud.read_data () cloud.publish_data (očitanja) last_sending_time = current
Rad s pumpom
Sljedeće konstante definiramo kao osnovu za logiku rada pumpe.
# GPIO pinova (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27
# Pumpa
START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # milisekundi PUMP_STOP_TIMEOUT = 5 # sekundi
VAŽNO: Ako ćete koristiti Pin 4, ne zaboravite onemogućiti opciju 1-Wire raspi-config kako biste izbjegli sukobe.
Prilikom pokretanja programa registriramo povratni poziv i početno stanje postavljamo na OFF.
Evo koda za funkciju koja uključuje / isključuje pumpu:
def toggle_pump (value): if pump_disabled: return if is_pump_on ()! = value: log_debug ("[x] % s" % ('START' ako je vrijednost else 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.izlaz (GPIO_PUMP, vrijednost) # Start/Stop pouring
Kao što je definirano u gornjem kodu za pokretanje, kada se relej UKLJUČI, poziva se sljedeći povratni poziv:
pump_on = False def pump_relay_handle (pin): global pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("Relej crpke promijenjen u % d" % pump_on)
U povratnom pozivu spremamo trenutno stanje crpke u varijablu. U glavnoj petlji aplikacije možemo otkriti trenutak prebacivanja crpke kao što je prikazano u nastavku:
def is_pump_on (): globalna pump_on povratna pump_on
ako je otkriven GPIO.event_devent (GPIO_PUMP):
is_pouring = is_pump_on () #… log_debug ('[!] Otkriven događaj pumpe: % s' % ('Uključeno' ako je_lijevanje drugo 'Isključeno')) slanje (oblak, varijable, udaljenost, sila = True)
Mjerenje udaljenosti
Vrlo je lako izmjeriti udaljenost do vodene površine pomoću ultrazvučnog senzora blizine. U našem spremištu podijelili smo nekoliko python skripti koje vam omogućuju testiranje senzora.
U stvarnim primjenama očitanja senzora mogu varirati zbog efekta odbijanja senzora i oscilacija vode. U nekim slučajevima očitanja mogu potpuno nedostajati. Implementirali smo klasu BounceFilter koja akumulira N nedavnih vrijednosti, odbacuje vrhove i izračunava prosjek preostalih mjerenja. Proces mjerenja provodi se sljedećim asinkronim algoritmom.
# Zadržava posljednja očitavanja mjerenja senzora = BounceFilter (veličina = 6, broj odbacivanja = 1)
read_complete = threading. Event ()
def wait_for_distance ():
read_complete.clear () thread = threading. Thread (target = read_distance) thread.start ()
ako nije čitanje_potpuno.čekajte (MAX_READING_TIMEOUT):
log_info ('Vremensko ograničenje senzora za čitanje') return Nema povratnih očitanja.avg ()
def read_distance ():
pokušajte: vrijednost = hcsr04.raw_distance (sample_size = 5) zaokruženo = vrijednost ako je vrijednost Ništa drugo okruglo (vrijednost, 1) readings.add (zaokruženo) osim iznimke kao pogreške: log_error ('Interna pogreška: % s' % err) konačno: reading_complete.set ()
Potpunu implementaciju filtra možete pronaći u izvorima.
Korak 3: Rješavanje izvanrednih situacija
Što ako je senzor izgorio, otpao ili pokazuje na pogrešno područje? Trebao nam je način da prijavimo takve slučajeve kako bismo mogli poduzeti ručne mjere.
Ako senzor ne uspije dati očitanja udaljenosti, sustav šalje promijenjeni status u oblak i generira odgovarajuću obavijest.
Logika je ilustrirana donjim kodom.
distance = wait_for_distance () # Pročitajte trenutnu dubinu vode ako udaljenost nije None: log_error ('Distance error!') notify_in_background (calc_alert (SENSOR_ERROR)) send (cloud, varijable, distance, error_code = SENSOR_ERROR, force = True)
Imamo radni raspon razine vode koji se treba održavati kada je senzor na svom mjestu. Testiramo pada li trenutna razina vode u ovom rasponu:
# Udaljenost od senzora do razine vode # na temelju spremnika za vodu u aparatu za kavu MIN_DISTANCE = 2 # cm MAX_DISTANCE = 8 # cm
# Udaljenost je izvan očekivanog raspona: nemojte početi lijevati
ako je udaljenost> MAX_DISTANCE * 2: log_error ('Udaljenost je izvan raspona: %.2f' % udaljenost) nastavi
Crpku isključujemo ako je bila aktivna kada je došlo do pogreške.
if is_pump_on () and pre_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] Hitno zaustavljanje crpke. Nema signala senzora udaljenosti')
toggle_pump (STOP_PUMP)
Obrađujemo i slučaj kada boci ponestane vode. Provjeravamo ne mijenja li se razina vode tijekom rada crpke. Ako je tako, sustav čeka 5 sekundi, a zatim provjerava je li se crpka isključila. Ako se to ne dogodi, sustav provodi nužno isključivanje pumpe i šalje obavijest o pogrešci.
PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Nema
def set_emergency_stop_time (sada, is_pouring):
globalna hitna_stopa_vremena hitna_zaustavljanja_vremena = sada + PUMP_STOP_TIMEOUT ako je / ulijevanje drugo Ništa
def check_water_source_empty (sada):
vratite hitno_ustanje_vremena i sada> hitno_stanje_vremena
# --------- glavna petlja -----------
ako je GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emergency_stop_time (now, is_pouring) #…
globalna crpka_omogućena
if check_water_source_empty (now): log_error ('[!] Hitno zaustavljanje crpke. / Izvor vode je prazan') toggle_pump (STOP_PUMP) pump_disabled = True
Gore je primjer dnevnika poruka generiranog tijekom hitnog zaustavljanja.
Korak 4: Pokretanje sustava 24 sata dnevno
Kod na uređaju otklonjen je pogreške i radi bez problema. Pokrenuli smo ga kao uslugu pa se ponovno pokreće ako se Raspberry Pi ponovno pokrene. Radi praktičnosti, stvorili smo Makefile koji pomaže pri implementaciji, pokretanju usluge i pregledavanju dnevnika.
. PHONY: instaliraj run start start stop log log deploy MAIN_FILE: = pumpica za kavu/main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = pumpica za kavu.service
instalirati:
chmod +x $ (SERVICE_INSTALL_SCRIPT) sudo./$(SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)
trčanje:
sudo python3 $ (MAIN_FILE)
početak:
sudo systemctl start $ (SERVICE_NAME)
status:
sudo systemctl status $ (SERVICE_NAME)
Stop:
sudo systemctl stop $ (SERVICE_NAME)
zapisnik:
sudo journalctl -u pumpa za kavu --od danas
rasporediti:
rsync -av-senzor pumpe za kavu-postavljanje Makefile *.sh pi@XX. XX. XXX. XXX: ~/
Ovu datoteku i sve potrebne skripte možete pronaći u našem spremištu.
Korak 5: Nadzor nad oblakom
Za implementaciju upravljačke ploče koristili smo Cloud4RPi. Prvo smo dodali widgete za označavanje bitnih parametara sustava.
Usput, widget za varijablu STATUS može koristiti različite sheme boja na temelju svoje vrijednosti (vidi gornju sliku).
Dodali smo widget grafikona za prikaz dinamičkih podataka. Na donjoj slici možete vidjeti trenutak uključivanja i isključivanja pumpe te odgovarajuće razine vode.
Ako analizirate dulji vremenski raspon, možete vidjeti vrhove - tada je pumpa radila.
Cloud4RPi vam također omogućuje postavljanje različitih razina glađenja.
Korak 6: Radi
Radi! Upravljačka ploča u cijelosti izgleda kao što je prikazano u nastavku.
Trenutno naša automatska pumpa radi već nekoliko tjedana i sve što trebamo učiniti je zamijeniti boce s vodom. Cjelokupni kod za naš projekt dostupan je u našem GitHub spremištu.
Preporučeni:
STONE Display +STM32 +Aparat za kavu: 6 koraka
STONE Display +STM32 +Aparat za kavu: Ja sam softverski inženjer MCU -a, nedavno sam dobio projekt da bude aparat za kavu, kućanski zahtjevi s zaslonom osjetljivim na dodir, funkcija je dobra, iznad ekrana odabir možda nije dobar, Na sreću, ovaj projekt mogu odbiti
Pametni aparat za kavu - dio ekosustava SmartHome: 4 koraka
Pametni aparat za kavu - dio SmartHome ekosustava: Hakirani aparat za kavu, učinio ga dijelom SmartHome ekosustavaImam stari dobri Delonghi aparat za kavu (DCM) (nije promocija i želim da bude "pametan". Pa sam ga hakirao instaliranjem ESP8266 modul sa sučeljem za njegov mozak/mikrokontroler pomoću
Aparat za praćenje aparata za kavu s Raspberry Pi i Google tablicama: 5 koraka
Alat za praćenje aparata za kavu s Raspberry Pi i Google tablicama: Ova uputa pokazat će vam kako izgraditi aparat za praćenje alata na bazi Raspberry Pi za zajednički aparat za kavu u vašem uredskom prostoru. Pomoću OLED zaslona i mehaničkih prekidača za praćenje korisnici mogu zabilježiti potrošnju kave, vidjeti ravnotežu i
ESP 8266 Nodemcu RGB LED traka kojom upravlja web server poslužitelj: 4 koraka
ESP 8266 Nodemcu RGB LED traka kojom upravlja daljinski upravljač web -poslužitelja: U ovim uputama naučit ćemo kako pretvoriti nodemcu u IR daljinski upravljač RGB LED trake, a taj nodemcu daljinski upravljač mora kontrolirati web stranica hostirana na mobitelu ili računalu od strane nodemcu -a
WiFi aparat za kavu: 9 koraka
WiFi aparat za kavu: Wifi aparat za kavu koristi Arduino, NODE MCU i reciklirane dijelove za sigurno i daljinsko kuhanje šalice kave