विषयसूची:

रास्पबेरी पाई और HC-SR04 अल्ट्रासोनिक सेंसर और Cloud4RPi द्वारा नियंत्रित स्मार्ट कॉफी मशीन पंप: 6 कदम
रास्पबेरी पाई और HC-SR04 अल्ट्रासोनिक सेंसर और Cloud4RPi द्वारा नियंत्रित स्मार्ट कॉफी मशीन पंप: 6 कदम

वीडियो: रास्पबेरी पाई और HC-SR04 अल्ट्रासोनिक सेंसर और Cloud4RPi द्वारा नियंत्रित स्मार्ट कॉफी मशीन पंप: 6 कदम

वीडियो: रास्पबेरी पाई और HC-SR04 अल्ट्रासोनिक सेंसर और Cloud4RPi द्वारा नियंत्रित स्मार्ट कॉफी मशीन पंप: 6 कदम
वीडियो: Smart Coffee Machine Pump Controlled by Raspberry Pi & HC-SR04 Ultrasonic Sensor 2024, जुलाई
Anonim
रास्पबेरी पाई और HC-SR04 अल्ट्रासोनिक सेंसर और Cloud4RPi. द्वारा नियंत्रित स्मार्ट कॉफी मशीन पंप
रास्पबेरी पाई और HC-SR04 अल्ट्रासोनिक सेंसर और Cloud4RPi. द्वारा नियंत्रित स्मार्ट कॉफी मशीन पंप

सिद्धांत रूप में, हर बार जब आप अपने सुबह के कप के लिए कॉफी मशीन पर जाते हैं, तो आपके पास पानी की टंकी को भरने का केवल एक-बीस मौका होता है। व्यवहार में, हालांकि, ऐसा लगता है कि मशीन किसी तरह इस काम को हमेशा आप पर डालने का एक तरीका ढूंढती है। जितना अधिक आप कॉफी चाहते हैं, उतनी ही अधिक संभावना है कि आपको "पानी की टंकी भरें" संदेश मिलेगा। मेरे सहकर्मी भी इसके बारे में ऐसा ही महसूस करते हैं। हम जो बेवकूफ हैं, हमने उस तकनीक को लागू करने का फैसला किया जो इसे खत्म कर देगी।

आपूर्ति

हमारे उपकरण

हमारे पास एसएईसीओ औलिका फोकस कॉफी मशीन है। आज तक, हम मानक 5 गैलन (19L) पानी की बोतल से मशीन की पानी की टंकी को भरने के लिए एक हैंड पंप का उपयोग करते थे।

हमारे लक्ष्य

  1. रिले के माध्यम से किसी प्रकार के नियंत्रक या माइक्रो कंप्यूटर द्वारा संचालित इलेक्ट्रिक पंप का उपयोग करें।
  2. कॉफी मशीन के टैंक में पानी के स्तर को मापने का एक तरीका है ताकि हमारा सिस्टम जान सके कि इसे कब भरना है।
  3. सिस्टम को नियंत्रित करने के साधन हैं, अधिमानतः मोबाइल डिवाइस से रीयल-टाइम में।
  4. सिस्टम में कुछ भी गलत होने पर सूचनाएं प्राप्त करें (स्लैक या इसी तरह की सेवा के माध्यम से)।

चरण 1: उपकरण चुनना

उपकरण चुनना
उपकरण चुनना
उपकरण चुनना
उपकरण चुनना
उपकरण चुनना
उपकरण चुनना
उपकरण चुनना
उपकरण चुनना

पंप

एक त्वरित वेब खोज आपकी पसंद की पानी की बोतल के लिए डिज़ाइन किए गए कई इलेक्ट्रिक पंप मॉडल दिखाएगी। ऐसे पंपों को आमतौर पर ON/OFF स्विच द्वारा नियंत्रित किया जाता है (उदाहरण के लिए, Hot Frost A12 या SMixx L-D2)। यहां वह पंप है जिसे हमने अपनी परियोजना के लिए चुना है।

नियंत्रक डिवाइस

हमने कई उपकरणों की कोशिश की लेकिन निम्नलिखित लाभों के कारण रास्पबेरी पाई पर बस गए:

  • इसमें एक GPIO है जो हमें एक निकटता सेंसर को जोड़ने की अनुमति देता है
  • यह पायथन का समर्थन करता है

हमने रास्पियन बस्टर लाइट का एक नया संस्करण स्थापित किया और पायथन 3 को चलाने के लिए आवश्यक सभी चीजें स्थापित कीं।

हम पंप को कैसे चालू करते हैं

शक्ति को नियंत्रित करने के लिए, हमने प्रत्यावर्ती धारा के लिए उपयुक्त एक मध्यम शक्ति (12V/2A) ठोस राज्य रिले को चुना। रिले पंप को आउटलेट से जोड़ता है और रास्पबेरी पाई के डिजिटल पिन द्वारा नियंत्रित होता है।

हम जल स्तर की जांच कैसे करते हैं

हमारे लिए कॉफी मशीन के निर्माण में बदलाव नहीं करना महत्वपूर्ण था, इसलिए हमने जल स्तर को मापने के लिए HC-SR04 अल्ट्रासोनिक निकटता सेंसर का उपयोग करने का निर्णय लिया।

हमने सेंसर के उत्सर्जक के लिए दो छेदों के साथ एक कस्टम वॉटर टैंक कवर को 3डी प्रिंट किया। हमें सेंसर के लिए एक गिटहब लाइब्रेरी आसानी से मिल गई। इस बिंदु पर सभी तैयारियां समाप्त हो गई थीं।

चरण 2: सिस्टम को डिजाइन करना

सिस्टम डिजाइनिंग
सिस्टम डिजाइनिंग
सिस्टम डिजाइनिंग
सिस्टम डिजाइनिंग

सिस्टम का तर्क

सिस्टम को निम्नलिखित सरल तर्क को ध्यान में रखकर बनाया गया है:

  • सिस्टम लगातार सेंसर और पानी की सतह के बीच की दूरी की निगरानी करता है।
  • जब भी दूरी में परिवर्तन थ्रेशोल्ड मान से अधिक हो जाता है, तो सिस्टम अपनी स्थिति के बारे में जानकारी क्लाउड को भेजता है।
  • यदि दूरी अधिकतम अनुमत मान (टैंक खाली है) से अधिक हो जाती है, तो सिस्टम पंप को सक्रिय करता है और दूरी न्यूनतम अनुमत मान से कम होने पर इसे बंद कर देता है।
  • जब भी सिस्टम की स्थिति बदलती है (उदाहरण के लिए, पंप सक्रिय होता है), यह क्लाउड को सूचित करता है।

त्रुटि के मामले में, स्लैक चैनल को एक सूचना भेजी जाती है।

जब कॉफी मशीन निष्क्रिय होती है, तो सिस्टम हर मिनट में एक बार नैदानिक डेटा के साथ क्लाउड सेवा को पिंग करता है। साथ ही, यह हर 5 मिनट में अपनी स्थिति को क्लाउड पर भेजता है।

जब पंप सक्रिय होता है, तो सिस्टम अधिक बार डेटा भेजता है लेकिन हर आधे सेकेंड में एक बार से अधिक नहीं।

def भेजें (बादल, चर, जिला, त्रुटि_कोड = 0, बल = गलत): पंप_ऑन = is_pump_on () प्रतिशत = कैल्क_वाटर_लेवल_परसेंट (जिला) चर ['दूरी'] ['मान'] = जिला चर ['वाटरलेवल'] [' मान'] = प्रतिशत चर ['पंपरेले'] ['मान'] = पंप_ऑन चर ['स्थिति'] ['मान'] = कैल्क_स्टैटस (त्रुटि_कोड, प्रतिशत, पंप_ऑन)

वर्तमान = समय ()

वैश्विक last_sending_time अगर बल या वर्तमान - last_sending_time> MIN_SEND_INTERVAL: रीडिंग = क्लाउड.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 # सेकंड

महत्वपूर्ण: यदि आप पिन 4 का उपयोग करने जा रहे हैं, तो संघर्षों से बचने के लिए 1-वायर रास्पि-कॉन्फ़िगरेशन विकल्प को अक्षम करना न भूलें।

प्रोग्राम के स्टार्टअप पर, हम कॉलबैक रजिस्टर करते हैं और प्रारंभिक स्थिति को OFF पर सेट करते हैं।

यहाँ फ़ंक्शन के लिए कोड है जो पंप को चालू करता है:

def टॉगल_पंप (मान): यदि पंप_अक्षम है: यदि is_pump_on ()! = मान: log_debug ("[x]% s"% ('START' यदि मान और 'STOP')) GPIO.setup (GPIO_PUMP, GPIO. OUT) GPIO.output (GPIO_PUMP, मान) # डालना शुरू / बंद करें

जैसा कि ऊपर स्टार्टअप कोड में परिभाषित किया गया है, जब रिले चालू होता है, तो निम्न कॉलबैक कहा जाता है:

पंप_ऑन = गलत डीईएफ़ पंप_रिले_हैंडल (पिन): वैश्विक पंप_ऑन पंप_ऑन = जीपीआईओ.इनपुट (जीपीआईओ_पीयूएमपी) लॉग_डीबग ("पंप रिले को% डी में बदल दिया गया"% पंप_ऑन)

कॉलबैक में, हम पंप की वर्तमान स्थिति को एक चर में सहेजते हैं। एप्लिकेशन के मुख्य लूप में, हम उस क्षण का पता लगा सकते हैं जब पंप नीचे दिखाया गया है:

def is_pump_on (): वैश्विक पंप_ऑन रिटर्न पंप_ऑन

अगर GPIO.event_detected(GPIO_PUMP):

is_pouring = is_pump_on() # … log_debug('[!] पंप घटना का पता चला: %s'% ('चालू' अगर is_pouring और 'बंद')) भेजें (बादल, चर, दूरी, बल = सच)

दूरी मापना

अल्ट्रासोनिक निकटता सेंसर का उपयोग करके पानी की सतह की ओर दूरी को मापना काफी आसान है। हमारे भंडार में, हमने कुछ पायथन स्क्रिप्ट साझा की हैं जो आपको एक सेंसर का परीक्षण करने की अनुमति देती हैं।

वास्तविक अनुप्रयोगों में, सेंसर के उछलते प्रभाव और पानी के दोलनों के कारण सेंसर रीडिंग में उतार-चढ़ाव हो सकता है। कुछ मामलों में, रीडिंग पूरी तरह से गायब हो सकती है। हमने एक बाउंसफिल्टर वर्ग लागू किया जो एन हाल के मूल्यों को जमा करता है, चोटियों को त्याग देता है और शेष मापों के औसत की गणना करता है। माप प्रक्रिया निम्नलिखित अतुल्यकालिक एल्गोरिथ्म द्वारा कार्यान्वित की जाती है।

# अंतिम सेंसर माप रखता है रीडिंग = बाउंसफिल्टर (आकार = 6, डिस्कार्ड_काउंट = 1)

रीडिंग_कंप्लीट = थ्रेडिंग।इवेंट ()

def Wait_for_distance ():

read_complete.clear () थ्रेड = थ्रेडिंग। थ्रेड (लक्ष्य = read_distance) थ्रेड। प्रारंभ ()

अगर नहीं पढ़ना_कम्प्लीट.वेट (MAX_READING_TIMEOUT):

log_info ('सेंसर टाइमआउट पढ़ना') रिटर्न कोई नहीं रिटर्न रीडिंग। औसत ()

def read_distance ():

कोशिश करें: मान = hcsr04.raw_distance (नमूना_साइज़ = 5) गोल = मान यदि मान कोई और गोल नहीं है (मान, 1) रीडिंग। जोड़ें (गोल) अपवाद को छोड़कर त्रुटि के रूप में: log_error ('आंतरिक त्रुटि:% s'% त्रुटि) अंत में: रीडिंग_कंप्लीट.सेट ()

आप स्रोतों में फ़िल्टर का पूर्ण कार्यान्वयन पा सकते हैं।

चरण 3: आपातकालीन स्थितियों को संभालना

आपातकालीन स्थितियों को संभालना
आपातकालीन स्थितियों को संभालना
आपातकालीन स्थितियों को संभालना
आपातकालीन स्थितियों को संभालना
आपातकालीन स्थितियों को संभालना
आपातकालीन स्थितियों को संभालना

क्या होगा यदि सेंसर जल गया, या गिर गया, या किसी गलत क्षेत्र की ओर इशारा कर रहा हो? हमें ऐसे मामलों की रिपोर्ट करने का एक तरीका चाहिए था ताकि हम मैन्युअल कार्रवाई कर सकें।

यदि सेंसर डिस्टेंस रीडिंग प्रदान करने में विफल रहता है, तो सिस्टम बदली हुई स्थिति को क्लाउड पर भेजता है और संबंधित सूचना उत्पन्न करता है।

तर्क नीचे दिए गए कोड द्वारा सचित्र है।

दूरी = प्रतीक्षा_for_distance () # वर्तमान पानी की गहराई पढ़ें यदि दूरी कोई नहीं है: log_error ('दूरी त्रुटि!') सूचित_इन_बैकग्राउंड (calc_alert (SENSOR_ERROR)) भेजें (बादल, चर, दूरी, error_code = SENSOR_ERROR, बल = सही)

हमारे पास एक परिचालन जल स्तर सीमा है जिसे सेंसर के स्थान पर बनाए रखा जाना चाहिए। हम परीक्षण करते हैं कि क्या वर्तमान जल स्तर इस सीमा में आता है:

# सेंसर से जल स्तर तक की दूरी# कॉफी-मशीन की पानी की टंकी के आधार पर MIN_DISTANCE = 2 # सेमी MAX_DISTANCE = 8 # सेमी

# दूरी अपेक्षित सीमा से बाहर है: डालना शुरू न करें

अगर दूरी> MAX_DISTANCE * 2: log_error ('दूरी सीमा से बाहर है:%.2f'% दूरी) जारी रखें

यदि कोई त्रुटि हुई तो हम पंप को बंद कर देते हैं।

अगर is_pump_on() और prev_distance <STOP_PUMP_DISTANCE + DISTANCE_DELTA: log_error('[!] पंप का इमरजेंसी स्टॉप। डिस्टेंस सेंसर से कोई सिग्नल नहीं')

टॉगल_पंप (STOP_PUMP)

हम उस मामले को भी संसाधित करते हैं जब बोतल में पानी खत्म हो जाता है। हम जांचते हैं कि पंप चलने पर पानी का स्तर नहीं बदलता है या नहीं। यदि ऐसा है, तो सिस्टम 5 सेकंड तक प्रतीक्षा करता है और फिर जांचता है कि पंप बंद हो गया है या नहीं। यदि ऐसा नहीं है, तो सिस्टम आपातकालीन पंप शटडाउन को लागू करता है और एक त्रुटि सूचना भेजता है।

PUMP_STOP_TIMEOUT = 5 # secsemergency_stop_time = कोई नहीं

def set_emergency_stop_time(अब, is_pouring):

वैश्विक आपात_स्टॉप_टाइम इमरजेंसी_स्टॉप_टाइम = अभी + PUMP_STOP_TIMEOUT अगर / is_poring और कोई नहीं

def check_water_source_empty (अब):

आपातकालीन_स्टॉप_टाइम और अभी लौटाएं > आपातकालीन_स्टॉप_टाइम

# --------- मुख्य घेरा -----------

अगर GPIO.event_detected(GPIO_PUMP): is_pouring = is_pump_on() set_emergency_stop_time(अब, is_pouring) #…

वैश्विक पंप_अक्षम

अगर check_water_source_empty(अब): log_error('[!] पंप का आपातकालीन स्टॉप। / जल स्रोत खाली है') टॉगल_पंप (STOP_PUMP) पंप_अक्षम = सही

ऊपर एक आपातकालीन स्टॉप के दौरान उत्पन्न संदेश लॉग का एक उदाहरण है।

चरण 4: सिस्टम को 24/7 चलाना

सिस्टम 24/7 चलाना
सिस्टम 24/7 चलाना

डिवाइस पर कोड डीबग किया गया है और बिना किसी समस्या के चलता है। हमने इसे एक सेवा के रूप में लॉन्च किया है, इसलिए यदि रास्पबेरी पाई को रीबूट किया जाता है तो यह पुनरारंभ होता है। सुविधा के लिए, हमने एक मेकफ़ाइल बनाया जो परिनियोजन, सेवा चलाने और लॉग देखने में मदद करता है।

. PHONY: इंस्टॉल रन स्टार्ट स्टॉप स्थिति लॉग परिनियोजन MAIN_FILE:= Coffee-pump/main.py SERVICE_INSTALL_SCRIPT:= service_install.sh SERVICE_NAME:= Coffee-pump.service

इंस्टॉल:

chmod +x $(SERVICE_INSTALL_SCRIPT) सुडो./$(SERVICE_INSTALL_SCRIPT) $(MAIN_FILE)

Daud:

सुडो पायथन 3 $ (MAIN_FILE)

प्रारंभ:

sudo systemctl start $(SERVICE_NAME)

स्थिति:

sudo systemctl स्थिति $(SERVICE_NAME)

विराम:

sudo systemctl स्टॉप $(SERVICE_NAME)

लॉग:

sudo journalctl -u Coffee-pump -- आज से

तैनाती:

rsync -av कॉफी-पंप सेंसर-सेटअप Makefile *.sh pi@XX. XX. XXX. XXX:~/

आप इस फ़ाइल और सभी आवश्यक लिपियों को हमारे भंडार में पा सकते हैं।

चरण 5: क्लाउड मॉनिटरिंग

बादल निगरानी
बादल निगरानी
बादल निगरानी
बादल निगरानी
क्लाउड मॉनिटरिंग
क्लाउड मॉनिटरिंग
बादल निगरानी
बादल निगरानी

हमने नियंत्रण कक्ष को लागू करने के लिए Cloud4RPi का उपयोग किया। हमने पहले सिस्टम के आवश्यक मापदंडों को इंगित करने के लिए विजेट जोड़े।

वैसे, STATUS चर के लिए विजेट अपने मूल्य के आधार पर विभिन्न रंग योजनाओं का उपयोग कर सकता है (ऊपर की छवि देखें)।

हमने गतिशील डेटा प्रदर्शित करने के लिए एक चार्ट विजेट जोड़ा है। नीचे दी गई छवि में आप पंप के चालू और बंद होने के क्षण और संबंधित जल स्तर देख सकते हैं।

यदि आप लंबी अवधि का विश्लेषण करते हैं, तो आप चोटियों को देख सकते हैं - जब पंप चल रहा था।

Cloud4RPi आपको विभिन्न स्मूथिंग स्तर सेट करने की भी अनुमति देता है।

चरण 6: यह काम करता है

Image
Image

यह काम करता है! नियंत्रण कक्ष अपनी संपूर्णता में नीचे दिखाए अनुसार दिखता है।

वर्तमान में, हमारा स्वचालित पंप कई हफ्तों से चल रहा है और हमें केवल पानी की बोतलों को बदलने की जरूरत है। हमारे प्रोजेक्ट का पूरा कोड हमारे GitHub रिपॉजिटरी में उपलब्ध है।

सिफारिश की: