সুচিপত্র:

স্বয়ংক্রিয় পোষা খাদ্য সরবরাহকারী: 9 টি ধাপ
স্বয়ংক্রিয় পোষা খাদ্য সরবরাহকারী: 9 টি ধাপ

ভিডিও: স্বয়ংক্রিয় পোষা খাদ্য সরবরাহকারী: 9 টি ধাপ

ভিডিও: স্বয়ংক্রিয় পোষা খাদ্য সরবরাহকারী: 9 টি ধাপ
ভিডিও: গরুটা সাথে কি হয়েছে #shorts #wildlifebd 2024, জুন
Anonim
স্বয়ংক্রিয় পোষা খাদ্য সরবরাহকারী
স্বয়ংক্রিয় পোষা খাদ্য সরবরাহকারী

কখনও কি আপনার পোষা প্রাণীকে খাওয়ানোর জন্য খুব বেশি সময় নষ্ট করার মতো মনে হয়েছে? আপনি যখন ছুটিতে ছিলেন তখন কখনও আপনার পোষা প্রাণীকে খাওয়ানোর জন্য কাউকে ফোন করতে হয়েছিল? আমি আমার বর্তমান স্কুল প্রকল্পের সাথে এই দুটি সমস্যা সমাধানের চেষ্টা করেছি: পেটফিড!

সরবরাহ

রাস্পবেরি পাই 3 বি

বার লোড সেল (10 কেজি)

HX711 লোড সেল পরিবর্ধক

জলস্তর সেন্সর (https://www.dfrobot.com/product-1493.html)

অতিস্বনক প্রক্সিমিটি সেন্সর

এলসিডি 16-পিন

2x স্টেপার মোটর 28byj-48

2x স্টেপার মোটর ড্রাইভার ULN2003

ধাপ 1: তারের

তারের
তারের
তারের
তারের

এখানে প্রচুর ক্যাবলিং। আপনার জাম্পার তারগুলি বের করুন এবং পিন করা শুরু করুন!

পদক্ষেপ 2: আপনার লোড সেল ব্যবহারযোগ্য করুন

আপনার লোড সেল ব্যবহারযোগ্য করুন
আপনার লোড সেল ব্যবহারযোগ্য করুন

লোড সেল ব্যবহার করার জন্য, আমাদের প্রথমে এটি দুটি প্লেটের সাথে সংযুক্ত করতে হবে: একটি নিচের প্লেট, এবং একটি প্লেট যার উপর আমরা আমাদের খাবারের ওজন করব।

আপনার যে স্ক্রুগুলির প্রয়োজন তা হ'ল মিলে যাওয়া বোল্টগুলির সাথে এক জোড়া এম 4 স্ক্রু এবং মিলে যাওয়া বোল্টগুলির সাথে এক জোড়া এম 5 স্ক্রু। আমি গর্ত তৈরি করতে একটি ছোট ড্রিল ব্যবহার করেছি।

(ছবি:

ধাপ 3: সাধারণ ডেটাবেস

নরমালাইজড ডাটাবেস
নরমালাইজড ডাটাবেস

আমাদের সেন্সর থেকে ডেটা একটি ডাটাবেসে সংরক্ষণ করতে হবে। পাইথন ফাইলগুলি ডাটাবেসের সাথে সংযুক্ত হওয়ার জন্য: নীচে দেখুন।

তারপর আপনি একটি কনফিগ ফাইল প্রয়োজন:

[connector_python] user = * yourusername * host = 127.0.0.1 #if local port = 3306 password = * yourpassword * database = * yourdb * [application_config] driver = 'SQL Server'

ধাপ 4: লোড সেল কোডিং

RPi. GPIO GPIO হিসাবে আমদানি করুন hx711 থেকে আমদানি থ্রেডিং সময় আমদানি করুন HX711 থেকে helpers.stepper থেকে খাদ্য আমদানি করুন StepperFood সাহায্যকারীদের থেকে। LCDWrite আমদানি LCDWrite সংগ্রহস্থল থেকে।

আমাদের সমস্ত লাইব্রেরি আমদানি করার পর (দ্রষ্টব্য, আমরা লোড সেল চালানোর জন্য HX711 লাইব্রেরি ব্যবহার করছি) আমরা আমাদের প্রকৃত কোড লেখা শুরু করতে পারি

TARRA_CONSTANT = 80600

GRAM_CONSTANT = 101

আমাদের ধ্রুবক খুঁজে বের করার জন্য প্রথমে TARRA_CONSTANT = 0 এবং GRAM_CONSTANT = 1 সেট করুন।

পরবর্তীতে আমাদের লোড সেল যে মানটি পড়ে তা খুঁজে বের করতে হবে যখন কিছুই ওজন করা হয় না। এই মান হবে TARRA_CONSTANT।

GRAM_CONSTANT এর জন্য, কেবল একটি বস্তু নিন যা আপনি জানেন (আমি স্প্যাগেটির একটি প্যাক ব্যবহার করেছি), এটি ওজন করুন এবং বস্তুর প্রকৃত ওজনের সাথে লোড সেল রিডআউট ভাগ করুন। আমার জন্য এটি ছিল 101।

ক্লাস লোডসেল (থ্রেডিং। থ্রেড):

def _init _ (self, socket, lcd): threading. Thread._ init _ (self) self.hx711 = HX711 (dout_pin = 5, pd_sck_pin = 6, channel = 'A', gain = 64) self.socket = socket self.lcd = এলসিডি

এখানে আমরা লোডসেল ক্লাস শুরু করি এবং পিনগুলি ম্যাপ করি।

ডিফ রান (স্ব):

try: while True: 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 = "PETFEED" LCDWrite.message () যদি int (db_weight [:-2]) <= 100: StepperFood.run () time.sleep (20) ছাড়া e: print ("ওজনে ত্রুটি" + str (e))

ধাপ 5: ওয়াটার সেন্সর কোডিং

সংগ্রহস্থল থেকে সময় আমদানি থ্রেডিং আমদানি। self, socket): threading.tread._ init _ (self) self.socket = socket self.vorige_status = 0 def run (self): try: while True: water = self.is_water () print (water) status = water [" status "] action = water [" action "] DataRepository.insert_water (str (status), action) data_water = DataRepository.get_data_sensor (2) historyId = data_water [" SensorsHistory "] value = data_water [" value "] যদি মান == "0": value = "te weinig water" else: value = "genoeg water" actionTime = data_water ["actionTime"] self.socket.emit ('data_water', {"id": historyId, "value": value, সময়.input (GPIO_Wate r) যদি self.vorige_status == 0 এবং status == 1: print ('water gedetecteerd') sensorData = {"status": status, "action": "water gedetecteerd"} self.vorige_status = status status = GPIO.input (GPIO_Water) যদি self.vorige_status == 1 এবং status == 1: print ('water aanwezig') sensorData = {"status": status, "action": "water aanwezig"} status = GPIO.input (GPIO_Water) যদি self.vorige_status == 1 এবং status == 0: print ('water weg') sensorData = {"status": status, "action": "water weg"} self.vorige_status = status status = GPIO.input (GPIO_Water) যদি self.vorige_status == 0 এবং status == 0: print ('startpositie') status = GPIO.input (GPIO_Water) sensorData = {"status": status, "action": "startpositie"} return sensorData

ধাপ 6: প্রক্সিমিটি সেন্সর কোডিং

সংগ্রহস্থল থেকে সময় আমদানী থ্রেডিং আমদানি করুন।. IN) def current_milli_time (): return int (round (time.time () * 1000)) class UltrasonicSensor (threading. Thread): def _init _ (self, socket): threading. Thread._ init _ (self) self.socket = socket def run (self): try: last_reading = 0 interval = 5000 while True: if current_milli_time ()> last_reading + interval: dist = self.distance () print ("পরিমাপ দূরত্ব = %.1f সেমি" % dist) 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_proximity ', {" id ": historyId, "প্রক্সিমিটি": প্রক্স, "সময়": DataRepository.serializeDateTime (actionTime)}) last_reading = current_milli_time () ব্যতিক্রম ব্যতীত ex: print (ex) de f দূরত্ব (স্বয়ং): # সেট করুন উচ্চ GPIO.output (GPIO_Trig, সত্য) এ সেট করুন # 0.01ms পরে কম সময়ে ঘুমান (0.00001) GPIO.output (GPIO_Trig, মিথ্যা) StartTime = time.time () StopTime = time.time () # StartTime সেভ করুন যখন GPIO.input (GPIO_Echo) == 0: StartTime = time.time () # আসার সময় বাঁচান যখন GPIO.input (GPIO_Echo) == 1: StopTime = time.time () # শুরু এবং আগমনের মধ্যে সময়ের পার্থক্য TimeElapsed = StopTime - StartTime # সোনিক গতি (34300 cm / s) # দিয়ে গুণ করুন এবং 2 দ্বারা ভাগ করুন, কারণ সেখানে এবং পিছনের দূরত্ব = (TimeElapsed * 34300) / 2 ফেরার দূরত্ব

ধাপ 7: স্টেপার মোটর কোডিং

GPIO হিসাবে আমদানি করুন RPi. GPIO.output (pin, 0) halfstep_seq =

এই কোডটি অন্য স্টেপার মোটরের জন্য পুনusব্যবহারযোগ্য, শুধু তাদের প্রতিরক্ষামূলক পিনগুলিতে কন্ট্রোল পিন নম্বর সেট করুন এবং ক্লাসের নাম পরিবর্তন করে StepperWater করুন:

ধাপ 8: এলসিডি কোডিং

প্রচুর কোড, কিন্তু আমরা প্রায় সম্পন্ন করেছি।

LCD ক্লাস ফাইল LCD.py হিসাবে অন্তর্ভুক্ত করা হয়

এলসিডি আমদানি এলসিডি

E = 26 RS = 25 D0 = 19 D1 = 13 D2 = 24 D3 = 22 D4 = 23 D5 = 8 D6 = 7 D7 = 10 lcd = LCD (E, RS, [D0, D1, D2, D3, D4, D5, D6, D7]) ক্লাস LCDWrite: def বার্তা (msg): try: print ("try") lcd.init_LCD () lcd.send_instruction (12) lcd.clear_display () lcd.write_message (msg, '1') ছাড়া: মুদ্রণ ("ত্রুটি LCDWrite")

ধাপ 9: শেষ

শেষ
শেষ
শেষ
শেষ

চূড়ান্ত ফলাফল: আমরা কীভাবে এটিকে আঁকলাম বনাম কীভাবে এটি শেষ হয়েছিল।

প্রস্তাবিত: