विषयसूची:
- आपूर्ति
- चरण 1: वायरिंग
- चरण 2: अपने लोड सेल को प्रयोग करने योग्य बनाएं
- चरण 3: सामान्यीकृत डेटाबेस
- चरण 4: लोड सेल को कोड करना
- चरण 5: जल संवेदक को कोड करना
- चरण 6: निकटता सेंसर को कोड करना
- चरण 7: स्टेपर मोटर्स की कोडिंग
- चरण 8: एलसीडी को कोड करना
- चरण 9: अंत
वीडियो: स्वचालित पालतू भोजन डिस्पेंसर: 9 कदम
2024 लेखक: John Day | [email protected]. अंतिम बार संशोधित: 2024-01-30 09:19
क्या आपने कभी अपने पालतू जानवरों को खिलाने में बहुत अधिक समय बर्बाद करने का मन किया है? जब आप छुट्टी पर थे तो कभी किसी को अपने पालतू जानवरों को खिलाने के लिए फोन करना पड़ा? मैंने अपने वर्तमान स्कूल प्रोजेक्ट के साथ इन दोनों मुद्दों को ठीक करने का प्रयास किया है: पेटफीड!
आपूर्ति
रास्पबेरी पाई 3बी
बार लोड सेल (10 किग्रा)
HX711 लोड सेल एम्पलीफायर
जल स्तर सेंसर (https://www.dfrobot.com/product-1493.html)
अल्ट्रासोनिक निकटता सेंसर
एलसीडी 16-पिन
2x स्टेपर मोटर 28byj-48
2x स्टेपर मोटर चालक ULN2003
चरण 1: वायरिंग
यहां बहुत सारी केबलिंग है। अपने जम्पर केबल्स को बाहर निकालें और पिन करना शुरू करें!
चरण 2: अपने लोड सेल को प्रयोग करने योग्य बनाएं
लोड सेल का उपयोग करने के लिए, हमें पहले इसे दो प्लेटों से जोड़ना होगा: एक निचली प्लेट, और एक प्लेट जिस पर हम अपना भोजन तौलेंगे।
आपको जो स्क्रू चाहिए वह मैचिंग बोल्ट के साथ M4 स्क्रू की एक जोड़ी और मैचिंग बोल्ट के साथ M5 स्क्रू की एक जोड़ी है। मैंने छेद बनाने के लिए एक छोटी सी ड्रिल का इस्तेमाल किया।
(तस्वीर:
चरण 3: सामान्यीकृत डेटाबेस
हमारे सेंसर के डेटा को डेटाबेस में सहेजना होता है। डेटाबेस से कनेक्ट करने के लिए अजगर फ़ाइलों के लिए: नीचे देखें।
तो आपको एक कॉन्फ़िगरेशन फ़ाइल की भी आवश्यकता है:
[connector_python] उपयोगकर्ता = *आपका उपयोगकर्ता नाम* होस्ट = १२७.०.०.१ #if स्थानीय पोर्ट = ३३०६ पासवर्ड = *आपका पासवर्ड* डेटाबेस = *yourdb* [application_config] ड्राइवर = 'एसक्यूएल सर्वर'
चरण 4: लोड सेल को कोड करना
RPI. GPIO को GPIO के रूप में आयात करें। थ्रेडिंग आयात करें hx711 से आयात समय हेल्पर्स से HX711 आयात करें। हेल्पर्स से स्टेपरफूड आयात स्टेपरफूड। LCDWrite रिपॉजिटरी से LCDWrite आयात करें। डेटा रिपोजिटरी आयात डेटा रिपोजिटरी
हमारे सभी पुस्तकालयों को आयात करने के बाद (ध्यान दें, हम लोड सेल को चलाने के लिए HX711 लाइब्रेरी का उपयोग कर रहे हैं) हम अपना वास्तविक कोड लिखना शुरू कर सकते हैं
TARRA_CONSTANT = 80600
GRAM_CONSTANT = 101
हमारे स्थिरांक ज्ञात करने के लिए, पहले TARRA_CONSTANT = 0 और GRAM_CONSTANT = 1 सेट करें।
आगे हमें यह पता लगाने की जरूरत है कि हमारा लोड सेल क्या पढ़ता है जब कुछ भी तौला नहीं जा रहा है। यह मान TARRA_CONSTANT होगा।
GRAM_CONSTANT के लिए, बस एक ऐसी वस्तु लें जिसका आप वजन जानते हैं (मैंने स्पेगेटी के एक पैकेट का उपयोग किया है), इसे तौलें और लोड सेल रीडआउट को वस्तु के वास्तविक वजन से विभाजित करें। मेरे लिए यह 101 था।
क्लास लोडसेल (थ्रेडिंग। थ्रेड):
डीईएफ़ _init_(सेल्फ, सॉकेट, एलसीडी): थ्रेडिंग। थ्रेड। = एलसीडी
यहां हम लोडसेल क्लास को इनिशियलाइज़ करते हैं और पिन को मैप करते हैं।
डीईएफ़ रन (स्वयं):
कोशिश करें: जबकि सच: self.hx711.reset() # शुरू करने से पहले, HX711 (बाध्य नहीं) उपायों को रीसेट करें। 0) प्रिंट ("वजन: {0}"। प्रारूप (वजन)) DataRepository.insert_weight (वजन) data_weight = DataRepository.get_data_sensor(3) historyId = data_weight["SensorsHistory"] db_weight = data_weight["value"] actionTime = data_weight ["actionTime"] self.socket.emit('data_weight', { "id": historyId, "Weight": db_weight, "Time": DataRepository.serializeDateTime(actionTime)}) print("zou moeten emitten") writeWeight = "वजन:" + str(db_weight) msg = "PETFED" LCDWrite.message() यदि int(db_weight[:-2]) <= 100: StepperFood.run() time.sleep(20) अपवाद को छोड़कर e: प्रिंट ("तोलने में त्रुटि" + str(e))
चरण 5: जल संवेदक को कोड करना
रिपॉजिटरी से आयात समय आयात थ्रेडिंग। डेटा रिपोजिटरी आरपीआई से डेटा रिपोजिटरी आयात GPIOGPIO.setmode (GPIO. BCM) GPIO.setwarnings(गलत) GPIO_Water = 18 GPIO.setup(GPIO_Water, GPIO. IN) वर्ग वाटरसेंसर (थ्रेडिंग। थ्रेड) सेल्फ, सॉकेट): थ्रेडिंग.थ्रेड._इनिट_(सेल्फ) सेल्फ.सॉकेट = सॉकेट सेल्फ.वोरिज_स्टैटस = 0 डीईएफ़ रन (सेल्फ): कोशिश करें: जबकि ट्रू: वॉटर = सेल्फ.इस_वॉटर () प्रिंट (वाटर) स्टेटस = वॉटर [" स्थिति"] क्रिया = जल ["क्रिया"] DataRepository.insert_water (str (स्थिति), क्रिया) data_water = DataRepository.get_data_sensor(2) historyId = data_water["SensorsHistory"] value = data_water["value"] यदि मान == "0": मान = "ते वेनिग वॉटर" अन्य: मान = "जीनोएग वॉटर" एक्शनटाइम = डेटा_वाटर ["एक्शनटाइम"] self.socket.emit ('data_water', { "id": historyId, "value": value, "समय": DataRepository.serializeDateTime(actionTime), "action": action}) time.sleep(5) अपवाद को छोड़कर उदा: प्रिंट (पूर्व) प्रिंट ('त्रुटि बिज वॉटरसेंसर') def is_water (स्व): स्थिति = GPIO इनपुट (GPIO_Wate.) r) यदि self.vorige_status == 0 और स्थिति == 1: प्रिंट ('वाटर gedetecteerd') sensorData = {"status": status, "action": "water gedetecteerd"} self.vorige_status = status status = GPIO.input (GPIO_Water) अगर self.vorige_status == 1 और स्थिति == 1: प्रिंट ('वाटर anwezig') sensorData = {"status": status, "action": "water aanwezig"} status = GPIO.input(GPIO_Water) अगर self.vorige_status == 1 और स्थिति == 0: प्रिंट ('वाटर वेग') सेंसरडेटा = {"स्थिति": स्थिति, "क्रिया": "वाटर वेग"} self.vorige_status = स्थिति स्थिति = GPIO.input(GPIO_Water) अगर self.vorige_status == 0 और स्थिति == 0: प्रिंट ('startpositie') स्थिति = GPIO.input (GPIO_Water) sensorData = {"स्थिति": स्थिति, "कार्रवाई": "startpositie"} वापस sensorData
चरण 6: निकटता सेंसर को कोड करना
रिपॉजिटरी से आयात समय आयात थ्रेडिंग। डेटा रिपोजिटरी आरपीआई से डेटा रिपोजिटरी आयात GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (गलत) GPIO_Trig = 4 GPIO_Echo = 17 GPIO।. IN) def current_milli_time (): रिटर्न इंट (राउंड (टाइम.टाइम () * 1000)) क्लास अल्ट्रासोनिक सेंसर (थ्रेडिंग। थ्रेड): डीईएफ़ _init_ (सेल्फ, सॉकेट): थ्रेडिंग। थ्रेड._init_ (सेल्फ) सेल्फ सॉकेट = सॉकेट डीईएफ़ रन (स्व): कोशिश करें: last_reading = 0 अंतराल = 5000 जबकि सही: यदि current_milli_time ()> last_reading + अंतराल: dist = self.distance () प्रिंट ("मापा दूरी =%। 1f सेमी"% जिला) DataRepository. insert_proximity(dist) data_prox = DataRepository.get_data_sensor(1) historyId = data_prox["SensorsHistory"] prox = data_prox["value"] actionTime = data_prox["actionTime"] self.socket.emit('data_proximity', { "id": historyId, "निकटता": प्रॉक्सी, "समय": DataRepository.serializeDateTime(actionTime)}) last_reading = current_milli_time () अपवाद को छोड़कर पूर्व: प्रिंट (पूर्व) डी f दूरी (स्वयं): # ट्रिगर को उच्च GPIO.output (GPIO_Trig, True) पर सेट करें # 0.01ms के बाद कम समय के लिए ट्रिगर सेट करें। नींद (0.00001) GPIO.output (GPIO_Trig, False) StartTime = time.time () स्टॉपटाइम = time.time() # GPIO.input(GPIO_Echo) == 0: StartTime = time.time() # सेव करें जबकि GPIO.input(GPIO_Echo) == 1: स्टॉपटाइम = time.time() # आगमन का समय बचाएं। प्रारंभ और आगमन के बीच समय का अंतर समय बीत गया = स्टॉपटाइम - स्टार्टटाइम # ध्वनि गति (34300 सेमी/सेकेंड) से गुणा करें # और 2 से विभाजित करें, क्योंकि वहां और पीछे की दूरी = (समय समाप्त * 34300) / 2 वापसी दूरी
चरण 7: स्टेपर मोटर्स की कोडिंग
RPI. GPIO को GPIO के रूप में आयात करेंआयात समय आयात थ्रेडिंग GPIO.setmode(GPIO. BCM) GPIO.setwarnings(False) control_pins = [12, 16, 20, 21] पिन के लिए control_pins: GPIO.setup(pin, GPIO. OUT) GPIO.आउटपुट (पिन, 0) हाफस्टेप_सेक =
यह कोड अन्य स्टेपर मोटर के लिए पुन: प्रयोज्य है, बस कंट्रोल पिन नंबर को उनके संबंधित पिन पर सेट करें और क्लास का नाम बदलकर स्टेपरवाटर करें:
चरण 8: एलसीडी को कोड करना
बहुत सारे कोड, लेकिन हम लगभग पूरा कर चुके हैं।
LCD.py फ़ाइल के रूप में LCD वर्ग शामिल है
हेल्पर्स से।एलसीडी आयात एलसीडी
E = 26 RS = 25 D0 = 19 D1 = 13 D2 = 24 D3 = 22 D4 = 23 D5 = 8 D6 = 7 D7 = 10 LCD (E, RS, [D0, D1, D2, D3, D4, D5, D6, D7]) वर्ग LCDWrite: def संदेश (msg): कोशिश करें: Print("try") LCD.init_LCD() LCD.send_instruction(12) LCD.clear_display() LCD.write_message(msg, '1') को छोड़कर: प्रिंट ("त्रुटि LCDWrite")
चरण 9: अंत
अंतिम परिणाम: हमने इसे कैसे बनाया बनाम यह कैसे समाप्त हुआ।
सिफारिश की:
AtTiny85 का उपयोग कर स्वचालित पालतू फीडर: 6 कदम
AtTiny85 का उपयोग करते हुए स्वचालित पालतू फीडर: AtTiny85 de PET Engenharia de Computação está licenciado com uma Licença Creative Commons - Atribuição 4.0 इंटरनेशनल का उपयोग करके स्वचालित पालतू फीडर
पुरानी डिजिटल घड़ी का उपयोग करके स्वचालित पालतू फीडर: 10 कदम (चित्रों के साथ)
एक पुरानी डिजिटल घड़ी का उपयोग करके स्वचालित पालतू फीडर: नमस्ते, इस निर्देश में मैं आपको दिखाऊंगा कि कैसे मैंने एक पुरानी डिजिटल घड़ी का उपयोग करके एक स्वचालित पालतू फीडर बनाया। मैंने एक वीडियो भी एम्बेड किया है कि मैंने यह फीडर कैसे बनाया। इस निर्देश को पीसीबी प्रतियोगिता में शामिल किया जाएगा और एक एहसान के रूप में मैं
IDC2018IOT कनेक्टेड पालतू भोजन, पानी और मॉनिटर सिस्टम: 7 कदम
IDC2018IOT कनेक्टेड पालतू भोजन, पानी और मॉनिटर सिस्टम: परिचय चाहे आप दबाव में छात्र हों, मेहनती व्यक्ति हों, या दिन में कुछ घंटों से अधिक समय के लिए घर से दूर हों। एक देखभाल करने वाले पालतू जानवरों के मालिकों के रूप में, हम यह सुनिश्चित करना चाहते हैं कि हमारे प्यारे स्वस्थ रहें, खिलाएं और निश्चित रूप से टी पर झूठ न बोलें
पालतू भोजन (कुत्ता, बिल्ली, चिकन, आदि) फेंकने के लिए स्वचालित गुलेल, गेंदें और अधिक फेंकना !: 4 कदम (चित्रों के साथ)
पालतू भोजन (कुत्ता, बिल्ली, चिकन, आदि) फेंकने के लिए स्वचालित गुलेल, गेंद फेंकना और बहुत कुछ !: नमस्कार और मेरे पहले निर्देश में आपका स्वागत है! हमारा कुत्ता अपना खाना पसंद करता है, वह सचमुच सेकंड के भीतर यह सब खा लेगी। मैं इसे धीमा करने के तरीके तैयार कर रहा हूं, गेंदों से अंदर के भोजन के साथ इसे पूरे पिछवाड़े में फेंकने के लिए। आश्चर्यजनक रूप से, वह
पालतू जानवरों के लिए IoT ट्रीट डिस्पेंसर: 7 कदम (चित्रों के साथ)
पालतू जानवरों के लिए IoT ट्रीट डिस्पेंसर: मेरे पास दो बिल्लियाँ हैं, और उन्हें दिन में लगभग 3 बार ट्रीट देना काफी परेशानी का सबब बन गया। वे मुझे अपने प्यारे चेहरों और तीव्र घूरों से देखते, फिर बिल्ली के हरे भरे बक्से में दौड़ते, म्याऊ करते और उनके लिए भीख माँगते। मैंने तय कर लिया था