Orodha ya maudhui:

Pampu ya mashine ya kahawa mahiri inayodhibitiwa na Raspberry Pi & HC-SR04 Sensor ya Ultrasonic na Cloud4RPi: Hatua 6
Pampu ya mashine ya kahawa mahiri inayodhibitiwa na Raspberry Pi & HC-SR04 Sensor ya Ultrasonic na Cloud4RPi: Hatua 6

Video: Pampu ya mashine ya kahawa mahiri inayodhibitiwa na Raspberry Pi & HC-SR04 Sensor ya Ultrasonic na Cloud4RPi: Hatua 6

Video: Pampu ya mashine ya kahawa mahiri inayodhibitiwa na Raspberry Pi & HC-SR04 Sensor ya Ultrasonic na Cloud4RPi: Hatua 6
Video: Я ОДЕРЖИМЫЙ ДЕМОНАМИ 2024, Julai
Anonim
Pampu ya mashine ya kahawa mahiri inayodhibitiwa na Raspberry Pi & HC-SR04 Sensor ya Ultrasonic na Cloud4RPi
Pampu ya mashine ya kahawa mahiri inayodhibitiwa na Raspberry Pi & HC-SR04 Sensor ya Ultrasonic na Cloud4RPi

Kwa nadharia, kila wakati unapoenda kwa mashine ya kahawa kwa kikombe chako cha asubuhi, kuna nafasi moja tu kati ya ishirini itabidi ujaze tangi la maji. Katika mazoezi, hata hivyo, inaonekana kuwa mashine kwa namna fulani hupata njia ya kuweka kazi hii kila wakati kwako. Kadri unavyotaka kahawa, ndivyo unavyoweza kupata ujumbe wa kutisha wa "jaza tanki la maji". Wenzangu wanahisi vivyo hivyo juu ya hili. Kuwa wajinga kwamba sisi ni, tuliamua kutekeleza teknolojia ambayo ingekomesha hii.

Vifaa

Vifaa vyetu

Tuna mashine ya kahawa ya SAECO Aulika Focus. Hadi leo, tulitumia pampu ya mkono kujaza tangi la maji la mashine kutoka kwenye chupa ya maji ya kawaida ya 5 Gallon (19L).

Malengo yetu

  1. Tumia pampu ya umeme inayoendeshwa na aina fulani ya kidhibiti au kompyuta ndogo kupitia relay.
  2. Kuwa na njia ya kupima kiwango cha maji kwenye tangi la mashine ya kahawa ili mfumo wetu ujue wakati wa kuijaza tena.
  3. Kuwa na njia za kudhibiti mfumo, ikiwezekana kwa wakati halisi kutoka kwa kifaa cha rununu.
  4. Pokea arifa (kupitia Slack au huduma kama hiyo) ikiwa chochote kitatokea vibaya na mfumo.

Hatua ya 1: Kuchagua Vifaa

Kuchagua Vifaa
Kuchagua Vifaa
Kuchagua Vifaa
Kuchagua Vifaa
Kuchagua Vifaa
Kuchagua Vifaa
Kuchagua Vifaa
Kuchagua Vifaa

Pampu

Utafutaji wa haraka wa wavuti utaonyesha mifano kadhaa ya pampu ya umeme iliyoundwa kwa chupa yako ya maji ya chaguo. Pampu kama hizo kawaida hudhibitiwa na swichi ya ON / OFF (kwa mfano, Hot Frost A12 au SMixx ХL-D2). Hapa kuna pampu tuliyochagua kwa mradi wetu.

Kifaa cha Mdhibiti

Tulijaribu vifaa kadhaa lakini tukakaa kwenye Raspberry Pi kwa sababu ya faida zifuatazo:

  • Ina GPIO ambayo inatuwezesha kuunganisha sensorer ya ukaribu
  • Inasaidia Python

Tuliweka toleo jipya la Raspbian Buster Lite na kila kitu kinachohitajika kuendesha Python 3.

Jinsi Tunavyogeuza pampu

Ili kudhibiti nguvu, tulichagua nguvu ya kati (12V / 2A) hali ya nguvu inayobadilishwa inayofaa kwa kubadilisha mbadala. Relay inaunganisha pampu kwenye duka na inadhibitiwa na pini ya dijiti ya Raspberry Pi.

Jinsi Tunavyoangalia Kiwango cha Maji

Ilikuwa muhimu kwetu kutobadilisha ujenzi wa mashine ya kahawa, kwa hivyo tuliamua kutumia HC-SR04 sensor ya ukaribu wa Ultrasonic kupima kiwango cha maji.

Tulichapisha 3d kifuniko cha tanki la maji na mashimo mawili kwa watoaji wa sensa. Tulipata kwa urahisi maktaba ya GitHub kwa sensa. Wakati huu maandalizi yote yamekamilika.

Hatua ya 2: Kubuni Mfumo

Kubuni Mfumo
Kubuni Mfumo
Kubuni Mfumo
Kubuni Mfumo

Mantiki ya Mfumo

Mfumo umeundwa kwa kuzingatia mantiki rahisi ifuatayo:

  • Mfumo hufuatilia kila wakati umbali kati ya sensorer na uso wa maji.
  • Wakati wowote mabadiliko katika umbali yanapita juu ya kizingiti cha thamani, mfumo hutuma habari juu ya hali yake kwa wingu.
  • Ikiwa umbali huenda juu ya kiwango cha juu kinachoruhusiwa (tanki haina kitu), mfumo huwasha pampu na kuizima mara moja umbali ni chini ya kiwango cha chini kinachoruhusiwa.
  • Wakati wowote hali ya mfumo inabadilika (kwa mfano, pampu inapoamilisha), inaarifu wingu.

Ikiwa kuna kosa, arifa hutumwa kwa kituo cha Slack.

Wakati mashine ya kahawa iko wavivu, mfumo hupiga huduma ya wingu na data ya uchunguzi mara moja kila dakika. Kwa kuongeza, hutuma hali yake kwa wingu kila dakika 5.

Wakati pampu inafanya kazi, mfumo hutuma data mara kwa mara lakini si zaidi ya mara moja kila nusu sekunde.

def send (wingu, vigeuzi, dist, makosa_code = 0, nguvu = Uongo): pump_on = is_pump_on () asilimia = calc_water_level_percent (dist) vigeuzi ['Umbali'] ['thamani'] = vigeuzi vya mbali ['WaterLevel'] [' thamani '] = asilimia anuwai

sasa = wakati ()

saa ya mwisho ya kutuma_lakini ikiwa ya nguvu au ya sasa - wakati wa mwisho_kutuma> MIN_SEND_INTERVAL: masomo = cloud.read_data () cloud.publish_data (usomaji) last_sending_time = sasa

Kufanya kazi na Pump

Tunafafanua kanuni zifuatazo kama msingi wa mantiki ya utendaji wa pampu.

Pini # GPIO (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27

# Pump

START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # milliseconds PUMP_STOP_TIMEOUT = sekunde #

MUHIMU: Ikiwa utatumia Pin 4, usisahau kulemaza chaguo la 1-Wire raspi-config kuzuia mizozo.

Wakati wa kuanza kwa programu, tunasajili kupigwa tena na kuweka hali ya kwanza KUZIMA.

Hapa kuna nambari ya kazi inayobadilisha pampu:

def toggle_pump (value): ikiwa pump_disabled: return if is_pump_on ()! = value: log_debug ("[x]% s"% ('START' ikiwa ni thamani nyingine 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) Pato la GPIO (GPIO_PUMP, thamani) # Anza / Acha kumwagika

Kama inavyofafanuliwa katika nambari ya kuanza hapo juu, wakati relay inawasha, simu inayofuata inaitwa:

pump_on = Fal def def pump_relay_handle (pin): global pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("Uwasilishaji wa pampu umebadilishwa kuwa% d"% pump_on)

Katika kupigiwa tena simu, tunaokoa hali ya sasa ya pampu kuwa ya kutofautisha. Katika kitanzi kikuu cha programu, tunaweza kugundua wakati pampu inapogeuza kama inavyoonyeshwa hapa chini:

def is_pump_on (): pump_on kimataifa kurudi pump_on

ikiwa GPIO.event_detected (GPIO_PUMP):

is_pouring = is_pump_on () #… log_debug ('[!] tukio la Pump limegunduliwa:% s'% ('On' if is_pouring other 'Off')) tuma (wingu, vigeuzi, umbali, nguvu = Kweli)

Kupima Umbali

Ni rahisi sana kupima umbali kuelekea uso wa maji kwa kutumia sensor ya ukaribu wa ultrasonic. Katika hazina yetu, tulishiriki hati kadhaa za chatu ambazo hukuruhusu kujaribu sensa.

Katika matumizi halisi, usomaji wa sensorer unaweza kubadilika kwa sababu ya athari ya kugundua ya sensorer na oscillations ya maji. Katika hali nyingine, usomaji unaweza kukosa kabisa. Tulitekeleza darasa la BounceFilter ambalo hukusanya N maadili ya hivi karibuni, hutupa kilele na kuhesabu wastani wa vipimo vilivyobaki. Mchakato wa kipimo unatekelezwa na algorithm ifuatayo ya asynchronous.

# Huweka vipimo vya sensa ya mwisho kusoma = BounceFilter (size = 6, discard_count = 1)

kusoma_kukamilika = kufunga.

def sub_for_distance ():

kusoma_kamilika.safisha () nyuzi = kukaza nyuzi. Thread (target = read_distance) thread.start ()

ikiwa sio kusoma_kamilisho.ngojea (MAX_READING_TIMEOUT):

log_info ('Muda wa sensa ya kusoma') rudisha Hakuna usomaji wa kurudi.avg ()

def kusoma_distance ():

jaribu: value = hcsr04.raw_distance (sample_size = 5) rounded = value if value is none else round (value, 1) readings.: kusoma_kamilisho.set ()

Unaweza kupata utekelezaji kamili wa vichungi kwenye vyanzo.

Hatua ya 3: Kushughulikia Hali za Dharura

Kushughulikia Hali za Dharura
Kushughulikia Hali za Dharura
Kushughulikia Hali za Dharura
Kushughulikia Hali za Dharura
Kushughulikia Hali za Dharura
Kushughulikia Hali za Dharura

Je! Ikiwa sensor imeungua, au imeanguka, au inaashiria eneo lisilo sahihi? Tulihitaji njia ya kuripoti kesi kama hizo ili tuweze kuchukua hatua za mikono.

Ikiwa sensor inashindwa kutoa usomaji wa umbali, mfumo hutuma hali iliyobadilishwa kwenye wingu na hutoa arifa inayofanana.

Mantiki inaonyeshwa na nambari hapa chini.

umbali = subiri_kwa_daraja () # Soma kina cha maji cha sasa ikiwa umbali sio: log_error ('Hitilafu ya umbali!') notify_in_background (calc_alert (SENSOR_ERROR)) tuma (wingu, vigeuzi, umbali, makosa_code = SENSOR_ERROR, nguvu = Kweli)

Tuna kiwango cha maji cha kufanya kazi ambacho kinapaswa kudumishwa wakati sensor iko mahali pake. Tunajaribu ikiwa kiwango cha maji cha sasa kiko katika safu hii:

# Umbali kutoka kwa sensorer hadi kiwango cha maji # kulingana na tanki la maji la mashine ya kahawa MIN_DISTANCE = 2 # cm MAX_DISTANCE = 8 # cm

Umbali uko nje ya anuwai inayotarajiwa: usianze kumwagika

ikiwa umbali> MAX_DISTANCE * 2: log_error ('Umbali haupo mbali:%.2f'% umbali) endelea

Tunazima pampu ikiwa inafanya kazi wakati hitilafu ilitokea.

ikiwa ni_pump_on () na prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('[!] Kituo cha dharura cha pampu. Hakuna ishara kutoka kwa sensor ya umbali')

geuza_bomba (STOP_PUMP)

Tunashughulikia kesi hiyo wakati chupa inaisha maji. Tunaangalia ikiwa kiwango cha maji hakibadilika wakati pampu inaendesha. Ikiwa ndivyo, mfumo unasubiri kwa sekunde 5 na kisha uangalie ikiwa pampu imezimwa. Ikiwa halijafanya hivyo, basi mfumo hutumia kuzima pampu ya dharura na kutuma arifa ya kosa.

PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Hamna

def set_emergency_stop_time (sasa, ni_kumwaga):

dharura ya kimataifa_wacha_wakati wa dharura_wacha_wakati = sasa + PUMP_STOP_TIMEOUT ikiwa / ni_mwagiliaji mwingine Hakuna

def check_water_source_empty (sasa):

rudisha wakati wa dharura_wacha_na sasa> muda wa dharura_wacha

# --------- kitanzi kuu -----------

ikiwa GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emergency_stop_time (sasa, ni_mwagika) #…

pampu_yalemavu

ikiwa check_water_source_empty (sasa): log_error ('[!] Kituo cha dharura cha pampu. Chanzo cha maji ni tupu') toggle_pump (STOP_PUMP) pump_disabled = True

Hapo juu ni mfano wa kumbukumbu ya ujumbe uliozalishwa wakati wa kituo cha dharura.

Hatua ya 4: Kuendesha Mfumo 24/7

Kuendesha Mfumo 24/7
Kuendesha Mfumo 24/7

Nambari iliyo kwenye kifaa imetatuliwa na inaendesha bila shida. Tulizindua kama huduma, kwa hivyo inaanza tena ikiwa Raspberry Pi itafunguliwa upya. Kwa urahisi, tuliunda Makefile ambayo husaidia kwa kupelekwa, kuendesha huduma na magogo ya kutazama.

. PHONY: sakinisha run log status start deploy MAIN_FILE: = coffee-pump / main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = coffee-pump.service

sakinisha:

chmod + x $ (SERVICE_INSTALL_SCRIPT) sudo./$ (SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)

kukimbia:

sudo python3 $ (MAIN_FILE)

Anza:

Sudo systemctl kuanza $ (SERVICE_NAME)

hali:

hali ya sudo systemctl $ (SERVICE_NAME)

simama:

Sudo systemctl acha $ (SERVICE_NAME)

logi:

sudo journalctl -u kahawa-pampu - tangu leo

kupeleka:

rsync -av kahawa-pampu sensor-kuanzisha Makefile *.sh pi@XX. XX. XXX. XXX: ~ /

Unaweza kupata faili hii na hati zote zinazohitajika katika hazina yetu.

Hatua ya 5: Ufuatiliaji wa Wingu

Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu
Ufuatiliaji wa Wingu

Tulitumia Cloud4RPi kutekeleza jopo la kudhibiti. Kwanza tuliongeza vilivyoandikwa kuonyesha mifumo muhimu ya mifumo.

Kwa njia, wijeti ya ubadilishaji wa STATUS inaweza kutumia miradi tofauti ya rangi kulingana na thamani yake (angalia picha hapo juu).

Tuliongeza wijeti ya chati kuonyesha data yenye nguvu. Katika picha hapa chini unaweza kuona wakati pampu ILIYOWASHWA na KUZIMA na viwango vya maji husika.

Ikiwa unachambua urefu wa muda mrefu, unaweza kuona kilele - ndio wakati pampu ilikuwa ikiendesha.

Cloud4RPi pia hukuruhusu kuweka viwango tofauti vya kulainisha.

Hatua ya 6: Ni Kazi

Image
Image

Inafanya kazi! Jopo la kudhibiti kwa jumla linaonekana kama inavyoonyeshwa hapa chini.

Hivi sasa, pampu yetu ya moja kwa moja imekuwa ikiendesha kwa wiki kadhaa na tunachohitaji kufanya ni kuchukua nafasi ya chupa za maji. Nambari kamili ya mradi wetu inapatikana katika hazina yetu ya GitHub.

Ilipendekeza: