Բովանդակություն:
- Պարագաներ
- Քայլ 1: Սարքավորումների ընտրություն
- Քայլ 2: Համակարգի նախագծում
- Քայլ 3: Արտակարգ իրավիճակների կարգավորում
- Քայլ 4: Համակարգի գործարկում 24/7
- Քայլ 5: Ամպի մոնիտորինգ
- Քայլ 6: Այն աշխատում է
Video: Smart Coffee Machine Pump Controlled by Raspberry Pi & HC-SR04 Ultrasonic Sensor and Cloud4RPi: 6 Steps
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:47
Տեսականորեն, ամեն անգամ, երբ սուրճի մեքենա ես գնում առավոտյան բաժակի համար, քսանից մեկ հավանականություն կա, որ ստիպված կլինես լցնել ջրի բաքը: Գործնականում, սակայն, թվում է, որ մեքենան ինչ -որ կերպ գտնում է մի միջոց, որը միշտ ձեզ վրա է դնում այս աշխատանքը: Որքան շատ սուրճ եք ուզում, այնքան ավելի հավանական է, որ ստանաք «ջրի բաքը լցնելու» սարսափելի հաղորդագրությունը: Իմ գործընկերները նույն կերպ են վերաբերվում դրան: Լինելով այն հիմարները, որոնք մենք ենք, մենք որոշեցինք կիրառել այն տեխնոլոգիան, որը վերջ կդնի դրան:
Պարագաներ
Մեր սարքավորումները
Մենք ունենք SAECO Aulika Focus սուրճի մեքենա: Մինչ օրս մենք ձեռքի պոմպով էինք լցնում մեքենայի ջրի բաքը սովորական 5 գալոն (19 լ) ջրի շշից:
Մեր նպատակները
- Օգտագործեք էլեկտրական պոմպ, որը շարժվում է ինչ -որ կարգավարի կամ միկրոհամակարգչի միջոցով `ռելեի միջոցով:
- Ունեք սուրճի մեքենայի բաքում ջրի մակարդակը չափելու միջոց, որպեսզի մեր համակարգը իմանա, թե երբ պետք է այն լիցքավորել:
- Միջոցներ ունենալ համակարգը վերահսկելու համար, ցանկալի է իրական ժամանակում շարժական սարքից:
- Ստացեք ծանուցումներ (Slack- ի կամ նմանատիպ ծառայության միջոցով), եթե ինչ -որ բան սխալ է տեղի ունենում համակարգում:
Քայլ 1: Սարքավորումների ընտրություն
Պոմպը
Արագ որոնումը ցույց կտա էլեկտրական պոմպի մի քանի մոդել, որոնք նախատեսված են ձեր ընտրած ջրի շշի համար: Նման պոմպերը սովորաբար վերահսկվում են ON/OFF անջատիչով (օրինակ ՝ Hot Frost A12 կամ SMixx ХL-D2): Ահա մեր նախագծի համար ընտրված պոմպը:
Վերահսկիչ սարք
Մենք փորձեցինք մի քանի սարքեր, բայց նստեցինք Raspberry Pi- ի վրա ՝ հետևյալ առավելությունների պատճառով.
- Այն ունի GPIO, որը թույլ է տալիս միացնել հարևանության տվիչ
- Այն աջակցում է Python- ին
Մենք տեղադրել ենք Raspbian Buster Lite- ի թարմ տարբերակը և այն ամենը, ինչ անհրաժեշտ է Python 3 -ը գործարկելու համար:
Ինչպես ենք մենք փոխում պոմպը
Էլեկտրաէներգիան վերահսկելու համար մենք ընտրեցինք միջին հզորության (12V/2A) պինդ վիճակի ռելե, որը հարմար է փոփոխական հոսանքի համար: Ռելեն միացնում է պոմպը վարդակին և վերահսկվում է Raspberry Pi- ի թվային քորոցով:
Ինչպես ենք մենք ստուգում ջրի մակարդակը
Մեզ համար կարևոր էր չփոխել սուրճի մեքենայի կառուցվածքը, ուստի որոշեցինք օգտագործել HC-SR04 ուլտրաձայնային հարևանության սենսորը `ջրի մակարդակը չափելու համար:
Մենք եռաչափ տպեցինք ջրի բաքի ծածկը ՝ երկու անցքով ՝ սենսորի արտանետիչների համար: Մենք հեշտությամբ գտանք սենսորի GitHub գրադարանը: Այս պահին բոլոր նախապատրաստական աշխատանքներն ավարտվեցին:
Քայլ 2: Համակարգի նախագծում
Համակարգի տրամաբանություն
Համակարգը նախագծված է ՝ հաշվի առնելով հետևյալ պարզ տրամաբանությունը.
- Համակարգը մշտապես վերահսկում է տվիչի և ջրի մակերևույթի միջև հեռավորությունը:
- Ամեն անգամ, երբ հեռավորության փոփոխությունը անցնում է շեմի արժեքից, համակարգը իր վիճակի մասին տեղեկատվություն է ուղարկում ամպ:
- Եթե հեռավորությունը անցնում է թույլատրելի առավելագույն արժեքից (բաքը դատարկ է), համակարգը միացնում է պոմպը և անջատում այն, երբ հեռավորությունը փոքր է թույլատրելի նվազագույն արժեքից:
- Ամեն անգամ, երբ համակարգի վիճակը փոխվում է (օրինակ ՝ պոմպը ակտիվանում է), այն տեղեկացնում է ամպին:
Սխալի դեպքում ծանուցումն ուղարկվում է Slack ալիքին:
Երբ սուրճի ապարատը անգործության է մատնված, համակարգը րոպեական մեկ անգամ ախտորոշիչ տվյալներով ամպային ծառայություն է մատուցում: Բացի այդ, այն իր վիճակն ամպ է ուղարկում ամեն 5 րոպեն մեկ:
Երբ պոմպն ակտիվ է, համակարգը տվյալներ է ուղարկում ավելի հաճախ, բայց ոչ ավելի, քան կես վայրկյանը մեկ:
def send (ամպ, փոփոխականներ, dist, error_code = 0, force = False): pump_on = is_pump_on () տոկոս = calc_water_level_percent (dist) փոփոխականներ ['Distance'] ['value'] = dist variables ['WaterLevel'] [' արժեք '] = տոկոսային փոփոխականներ [' PumpRelay '] [' value '] = փոփոխականների_պոմպ
ընթացիկ = ժամանակ ()
գլոբալ last_sending_time եթե ուժ կամ ընթացիկ - last_sending_time> MIN_SEND_INTERVAL: ընթերցումներ = cloud.read_data () cloud.publish_data (ընթերցումներ) last_sending_time = ընթացիկ
Պոմպի հետ աշխատելը
Մենք սահմանում ենք հետևյալ հաստատունները ՝ որպես պոմպի շահագործման տրամաբանության հիմք:
# GPIO կապում (BCM) GPIO_PUMP = 4 GPIO_TRIGGER = 17 GPIO_ECHO = 27
# Պոմպ
START_PUMP = 1 STOP_PUMP = 0 PUMP_BOUNCE_TIME = 50 # միլիվայրկյան PUMP_STOP_TIMEOUT = 5 # վրկ
ԿԱՐԵՎՈՐ. Եթե մտադիր եք օգտագործել Pin 4-ը, մի մոռացեք անջատել 1-Wire raspi-config տարբերակը `հակամարտություններից խուսափելու համար:
Theրագրի գործարկման ժամանակ մենք գրանցում ենք հետադարձ կապ և նախնական վիճակը դնում OFF:
Ահա պոմպը միացնող գործառույթի կոդը.
def toggle_pump (արժեք). GPIO.output (GPIO_PUMP, արժեք) # Սկսել/դադարեցնել թափելը
Ինչպես սահմանված է վերը նշված գործարկման կոդի մեջ, երբ ռելեոնը միացված է, կանչվում է հետևյալ հետադարձ կապը.
pump_on = Սխալ def pump_relay_handle (pin). գլոբալ pump_on pump_on = GPIO.input (GPIO_PUMP) log_debug ("Պոմպի ռելեդը փոխվել է % d" % pump_on)
Հետադարձ կապում մենք պոմպի ընթացիկ վիճակը պահում ենք փոփոխականի մեջ: applicationրագրի հիմնական հանգույցում մենք կարող ենք հայտնաբերել այն պահը, երբ պոմպը միանում է, ինչպես ցույց է տրված ստորև.
def is_pump_on (): գլոբալ pump_on վերադարձի pump_on
եթե GPIO.event_detected (GPIO_PUMP):
is_pouring = is_pump_on () #… log_debug ('[!] Պոմպի իրադարձությունը հայտնաբերվել է. % s' % ('On' if ispporing else 'Off')) ուղարկել (ամպ, փոփոխականներ, հեռավորություն, ուժ = True)
Հեռավորության չափում
Quiteրի մակերևույթին հեռավորությունը չափելը բավականին հեշտ է `օգտագործելով ուլտրաձայնային հարևանության սենսոր: Մեր շտեմարանում մենք կիսեցինք մի քանի պիթոնի սցենարներ, որոնք թույլ են տալիս փորձարկել սենսորը:
Իրական ծրագրերում սենսորների ընթերցումները կարող են տատանվել սենսորի բարձրացնող ազդեցության և ջրի տատանումների պատճառով: Որոշ դեպքերում ընթերցումները կարող են ամբողջությամբ բացակայել: Մենք իրականացրեցինք BounceFilter դաս, որը կուտակում է N- ի վերջին արժեքները, գցում է գագաթները և հաշվարկում մնացած չափումների միջին ցուցանիշը: Չափման գործընթացն իրականացվում է հետևյալ ասինխրոն ալգորիթմի միջոցով:
# Պահում է սենսորի վերջին չափումների ընթերցումները = BounceFilter (չափը = 6, discard_count = 1)
read_complete = threading. Event ()
def wait_for_distance ():
read_complete.clear () thread = threading. Thread (target = read_distance) thread.start ()
եթե չեք կարդում_ ամբողջական. սպասեք (MAX_READING_TIMEOUT):
log_info ('Reading sensor timeout') return Ոչ մի վերադարձի ընթերցում չկա: avg ()
def read_distance ():
փորձեք.: reading_complete.set ()
Դուք կարող եք գտնել ֆիլտրի ամբողջական իրականացումը աղբյուրներում:
Քայլ 3: Արտակարգ իրավիճակների կարգավորում
Ի՞նչ կլինի, եթե սենսորը այրվի կամ ընկնի կամ սխալ տարածք նշի: Մեզ անհրաժեշտ էր նման դեպքեր հաղորդելու միջոց, որպեսզի կարողանանք ձեռքով գործողություններ կատարել:
Եթե սենսորը չի կարողանում ապահովել հեռավորության ընթերցումներ, համակարգը փոփոխված կարգավիճակն ուղարկում է ամպ և ստեղծում համապատասխան ծանուցում:
Տրամաբանությունը պատկերված է ստորև բերված ծածկագրով:
distance = wait_for_distance () # Կարդացեք ջրի ընթացիկ խորությունը, եթե հեռավորությունը չկա: log_error ('Distance error!') notify_in_background (calc_alert (SENSOR_ERROR)) send (cloud, variables, distance, error_code = SENSOR_ERROR, force = True)
Մենք ունենք ջրի մակարդակի գործառնական տիրույթ, որը պետք է պահպանվի, երբ սենսորը իր տեղում է: Մենք ստուգում ենք, արդյոք ջրի ներկայիս մակարդակը ընկնում է այս տիրույթում.
# Սենսորից մինչև ջրի մակարդակ # սուրճի մեքենայի ջրի բաքի հիման վրա MIN_DISTANCE = 2 # սմ MAX_DISTANCE = 8 # սմ
# Հեռավորությունը սպասված տիրույթից դուրս է. Մի սկսեք լցվել
եթե հեռավորությունը> MAX_DISTANCE * 2: log_error ('Հեռավորությունը տիրույթից դուրս է. %.2f' % հեռավորություն) շարունակեք
Մենք անջատում ենք պոմպը, եթե այն ակտիվ էր, երբ տեղի էր ունենում սխալ:
եթե is_pump_on () և pre_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error ('
toggle_pump (STOP_PUMP)
Մենք մշակում ենք նաև այն դեպքը, երբ շշի ջուրն ավարտվում է: Մենք ստուգում ենք, արդյոք ջրի մակարդակը չի փոխվում, երբ պոմպն աշխատում է: Եթե այդպես է, համակարգը սպասում է 5 վայրկյան, իսկ հետո ստուգում է, արդյոք պոմպն անջատված է: Եթե դա չի եղել, ապա համակարգը իրականացնում է վթարային պոմպի անջատում և ուղարկում սխալի մասին ծանուցում:
PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = Ոչ մեկը
def set_emergency_stop_time (այժմ, հորդառատ է).
գլոբալ Emergency_stop_time Emergency_stop_time = այժմ + PUMP_STOP_TIMEOUT, եթե / այլևս չի թափվում Ոչ մեկը
def check_water_source_empty (այժմ):
վերադարձնել Emergency_stop_time- ը և այժմ> Emergency_stop_time- ը
# --------- հիմնական հանգույց -----------
եթե GPIO.event_detected (GPIO_PUMP): is_pouring = is_pump_on () set_emergency_stop_time (now, is_pouring) #…
գլոբալ պոմպը_անջատված է
եթե check_water_source_empty (այժմ). log_error ('[!] Պոմպի վթարային կանգառ: / sourceրի աղբյուրը դատարկ է') toggle_pump (STOP_PUMP) pump_disabled = True
Վերևում արտակարգ իրավիճակների կանգառի ժամանակ առաջացած հաղորդագրությունների մատյան է:
Քայլ 4: Համակարգի գործարկում 24/7
Սարքի կոդը կարգաբերված է և աշխատում է առանց խնդիրների: Մենք այն գործարկեցինք որպես ծառայություն, ուստի այն վերագործարկվում է, եթե Raspberry Pi- ն վերագործարկվի: Հարմարության համար մենք ստեղծեցինք Makefile, որն օգնում է տեղակայմանը, ծառայության գործարկմանը և տեղեկամատյանների դիտմանը:
. PHONY: տեղադրել գործարկման մեկնարկի կանգառի կարգավիճակի մատյան, տեղակայել MAIN_FILE: = սուրճ-պոմպ/main.py SERVICE_INSTALL_SCRIPT: = service_install.sh SERVICE_NAME: = coffee-pump.service
տեղադրել:
chmod +x $ (SERVICE_INSTALL_SCRIPT) sudo./$(SERVICE_INSTALL_SCRIPT) $ (MAIN_FILE)
վազել:
sudo python3 $ (MAIN_FILE)
սկիզբ:
sudo systemctl սկսել $ (SERVICE_NAME)
կարգավիճակ:
sudo systemctl կարգավիճակը $ (SERVICE_NAME)
կանգառ:
sudo systemctl կանգառը $ (SERVICE_NAME)
տեղեկամատյան:
sudo journalctl -u սուրճի պոմպ -այսօրվանից
տեղակայել:
rsync -av սուրճ-պոմպի սենսոր-կարգավորում Makefile *.sh pi@XX. XX. XXX. XXX: ~/
Դուք կարող եք գտնել այս ֆայլը և բոլոր անհրաժեշտ սցենարները մեր շտեմարանում:
Քայլ 5: Ամպի մոնիտորինգ
Մենք օգտագործեցինք Cloud4RPi ՝ կառավարման վահանակ իրականացնելու համար: Սկզբում մենք ավելացրեցինք վիջեթներ `նշելու համակարգի հիմնական պարամետրերը:
Ի դեպ, STATUS փոփոխականի վիջեթը կարող է օգտագործել տարբեր գույնի սխեմաներ `հիմնված դրա արժեքի (տե՛ս վերևի պատկերը):
Մենք ավելացրեցինք գծապատկերային վիջեթ ՝ դինամիկ տվյալները ցուցադրելու համար: Ստորև բերված պատկերում դուք կարող եք տեսնել այն պահը, երբ պոմպը միացված և անջատված է, և ջրի համապատասխան մակարդակները:
Եթե ավելի երկար ժամանակ եք վերլուծում, կարող եք տեսնել գագաթներ, դա այն ժամանակ էր, երբ պոմպը աշխատում էր:
Cloud4RPi- ն նաև թույլ է տալիս սահմանել հարթեցման տարբեր մակարդակներ:
Քայլ 6: Այն աշխատում է
Աշխատում է! Կառավարման վահանակն ամբողջությամբ նայում է ստորև:
Ներկայումս մեր ավտոմատ պոմպը գործում է արդեն մի քանի շաբաթ, և այն ամենը, ինչ մեզ անհրաժեշտ էր անել, ջրի շշերի փոխարինումն է: Մեր նախագծի ամբողջական կոդը հասանելի է մեր GitHub շտեմարանում:
Խորհուրդ ենք տալիս:
Leap Motion Controlled Remote Search and Disposing Robot: 5 Steps
Leap Motion Controlled Remote Search and Disposing Robot. Որպես Leap Motion #3D Jam- ի իմ մուտքի մաս, ես ոգևորված էի Raspberry Pi- ի վրա հիմնված անլար ժեստերով կառավարվող Search/Rescue Robot- ի ստեղծման համար: Այս նախագիծը ցույց է տալիս և տալիս է մինիմալիստական օրինակ, թե ինչպես է անլար 3D ձեռքի ժեստերը
Smart Coffee Machine - SmartHome էկոհամակարգի մի մաս. 4 քայլ
Smart Coffee Machine - SmartHome Ecosystem- ի մի մասը. Hacked Coffee Machine- ը, այն դարձրեց SmartHome Ecosystem- ի մաս: Ես ունեմ հին հին լավ Delonghi Coffee Machine (DCM) (ոչ առաջխաղացում և ցանկանում եմ, որ այն «խելացի» լինի: Այսպիսով, ես կոտրեցի այն ՝ տեղադրելով ESP8266 մոդուլ ՝ իր ուղեղին/միկրոկառավարիչին ինտերֆեյսով ՝ օգտագործելով
Սարքավորումներ և ծրագրաշարեր Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug: 7 Steps
Սարքավորումներ և ծրագրաշարեր Hack Smart Devices, Tuya and Broadlink LEDbulb, Sonoff, BSD33 Smart Plug. Այս հրահանգում ես ձեզ ցույց եմ տալիս, թե ինչպես եմ մի քանի խելացի սարքեր փայլեցրել իմ սեփական որոնվածով, այնպես որ ես կարող եմ դրանք վերահսկել MQTT- ով ՝ իմ Openhab տեղադրման միջոցով: Ես կավելացնեմ նոր սարքեր, երբ ես դրանք կոտրել եմ: Իհարկե, կան ծրագրային ապահովման վրա հիմնված այլ մեթոդներ ՝ սովորական գործերը բռնկելու համար
Coffee Machine Tracker Raspberry Pi- ով և Google Sheets- ով ՝ 5 քայլ
Coffee Machine Tracker With Raspberry Pi և Google Sheets. Այս հրահանգը ցույց կտա ձեզ, թե ինչպես կարելի է կառուցել Raspberry Pi- ի վրա հիմնված որոնիչ ՝ ձեր գրասենյակի տարածքում ընդհանուր սուրճի մեքենայի համար: Օգտագործելով հետևորդի OLED էկրանը և մեխանիկական անջատիչները, օգտվողները կարող են գրանցել իրենց սուրճի սպառումը, տեսնել նրանց հավասարակշռությունը և
Robotic Arm Controlled by Arduino and PC: 10 Steps
Robotic Arm Controlled by Arduino and PC: Robotic arms լայնորեն կիրառվում են արդյունաբերության մեջ: Անկախ նրանից, թե դա հավաքման աշխատանքների համար է, եռակցման կամ նույնիսկ մեկը օգտագործվում է ISS (Միջազգային տիեզերակայան) նավահանգստի համար, դրանք օգնում են մարդկանց աշխատանքում կամ դրանք ամբողջությամբ փոխարինում են մարդուն: Իմ կառուցած ձեռքը ավելի փոքր է