Orodha ya maudhui:

MPEGEZAJI WA VYAKULA VYAKULA PETE: 9 Hatua
MPEGEZAJI WA VYAKULA VYAKULA PETE: 9 Hatua

Video: MPEGEZAJI WA VYAKULA VYAKULA PETE: 9 Hatua

Video: MPEGEZAJI WA VYAKULA VYAKULA PETE: 9 Hatua
Video: UTACHEKA...!! mtoto wa Diamond Platnumz #Tiffah aogopa Helcopter 🙌 2024, Novemba
Anonim
UTOAJI KIPAJI KWA VYOMBO VYA PETE
UTOAJI KIPAJI KWA VYOMBO VYA PETE

Je! Umewahi kujisikia kama kupoteza wakati mwingi kulisha mnyama wako? Je! Ulishawahi kuita mtu kulisha wanyama wako wa kipenzi wakati ulikuwa kwenye likizo? Nimejaribu kurekebisha masuala haya yote na mradi wangu wa sasa wa shule: Petfeed!

Vifaa

Raspberry Pi 3b

Kiini cha Mizigo ya Baa (10kg)

Kiambatisho cha Kiini cha HX711

Sensorer ya Maji ya Maji (https://www.dfrobot.com/product-1493.html)

Sensorer ya Ukaribu wa Ultrasonic

Pini 16 za LCD

Magari ya 2x ya kupitisha 28byj-48

2x dereva wa gari stepper ULN2003

Hatua ya 1: Wiring

Wiring
Wiring
Wiring
Wiring

cabling nyingi hapa. Toa nyaya zako za kuruka na uanze kubana!

Hatua ya 2: Tumia Kiini chako cha Mzigo Kutumika

Tumia Kiini chako cha Mzigo Kutumika
Tumia Kiini chako cha Mzigo Kutumika

kutumia seli ya mzigo, kwanza tunahitaji kuibandika kwenye sahani mbili: sahani ya chini, na sahani ambayo tutapima chakula chetu.

Screws unahitaji ni jozi ya screws M4 na bolts vinavyolingana na jozi ya screws M5 na bolts vinavyolingana. Nilitumia drill ndogo kutengeneza mashimo.

(picha:

Hatua ya 3: Hifadhidata ya kawaida

Hifadhidata ya kawaida
Hifadhidata ya kawaida

data kutoka kwa sensorer zetu inapaswa kuhifadhiwa kwenye hifadhidata. Kwa faili za chatu kuungana na hifadhidata: tazama hapa chini.

basi unahitaji pia faili ya usanidi:

[kontakt_python] mtumiaji = * jina lako la mtumiaji * mwenyeji = 127.0.0.1 # ikiwa bandari ya ndani = 3306 password = * neno lako la siri * hifadhidata = * yourdb * [application_config] driver = 'SQL Server'

Hatua ya 4: Kuweka Saini ya Kiini cha Mzigo

kuagiza RPi. GPIO kama GPIOingiza kuingiza wakati wa kuagiza kutoka hx711 kuagiza HX711 kutoka kwa helpers.stepperFood kuagiza StepperFood kutoka kwa wasaidizi.

Baada ya kuagiza maktaba yetu yote (kumbuka, tunatumia Maktaba ya HX711 kuendesha seli ya mzigo) tunaweza kuanza kuandika nambari yetu halisi

TARRA_CONSTANT = 80600

GRAM_CONSTANT = 101

Kwa kujua msimamo wetu, kwanza weka TARRA_CONSTANT = 0 na GRAM_CONSTANT = 1.

Ifuatayo tunahitaji kujua thamani ambayo seli yetu ya mzigo inasoma wakati hakuna kitu kinachopimwa. Thamani hii itakuwa TARRA_CONSTANT.

Kama GRAM_CONSTANT, chukua tu kitu unachojua uzani wa (nilitumia pakiti ya tambi), pima na ugawanye kisomaji cha seli na mzigo halisi wa kitu. Kwangu hii ilikuwa 101.

darasani LoadCell (threading. Thread):

def _init _ (ubinafsi, tundu, lcd): kukaza nyuzi. Thread._ init _ (self) self.hx711 = HX711 (dout_pin = 5, pd_sck_pin = 6, channel = 'A', gain = 64) self.socket = soketi self.lcd = lcd

hapa tunaanzisha darasa la LoadCell na ramani pini.

def run (binafsi):

jaribu: wakati Kweli: self.hx711.reset () # Kabla hatujaanza, weka upya HX711 (sio lazima) hatua_avg = jumla (self.hx711.get_raw_data ()) / 5 weight = round ((measures_avg - TARRA_CONSTANT) / GRAM_CONSTANT, 0) chapa ("uzito: {0}". Fomati (uzito)) DataRepository.insert_weight (uzito) 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, "Uzito": db_weight, "Muda": DataRepository.serializeDateTime (actionTime)}) chapa ("zou moeten emitten") writeWeight = "weight:" + str (db_weight) msg = "PETFEED" LCDWrite.message () ikiwa int (db_weight [: - 2]) <= 100: StepperFood.run () time.sleep (20) isipokuwa Isipokuwa kama e: chapa ("Hitilafu na uzani" + str (e))

Hatua ya 5: Kuandika Nishati ya Maji

kuagiza utaftaji wa muda wa kuingiza kutoka kwa hazina. DataRepository kuagiza DataRepository kutoka RPi kuagiza GPIOGPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) GPIO_Water = 18 GPIO.setup (GPIO_Water, GPIO. IN) darasa la WaterSensor (threading. Thread): ubinafsi, tundu): uzi. nyuzi. status "] action = maji [" action "] DataRepository.insert_water (str (status), action) data_water = DataRepository.get_data_sensor (2) historyId = data_water [" SensorsHistory "] value = data_water [" value "] ikiwa value == "0": value = "te weinig water" else: value = "genoeg water" actionTime = data_water ["actionTime"] self.socket.emit ('data_water', {"id": historyId, "value": thamani, "Wakati": DataRepository.serializeDateTime (actionTime), "action": action}) time.sleep (5) isipokuwa Isipokuwa kama ex: chapa (ex) chapa ('error bij watersensor') def is_water (self): status = GPIO pembejeo (GPIO_Wate r) ikiwa self.vorige_status == 0 na hadhi == 1: chapa ('water gedetecteerd') sensorData = {"status": status, "action": "water gedetecteerd"} self.vorige_status = status status = GPIO.input (GPIO_Water) ikiwa self.vorige_status == 1 na hadhi == 1: chapa ('maji aanwezig') sensorData = {"status": status, "action": "water aanwezig"} status = GPIO.input (GPIO_Water) ikiwa self.vorige_status == 1 na status == 0: chapa ('maji weg') sensorData = {"status": status, "action": "water weg"} self.vorige_status = status status = GPIO.input (GPIO_Water) ikiwa self.vorige_status == 0 na status == 0: chapa ('startpositie') hadhi = GPIO.input (GPIO_Water) sensorData = {"status": status, "action": "startpositie"} sensor ya kurudi

Hatua ya 6: Kuandika Nasaha ya Ukaribu

kuagiza utaftaji wa muda wa kuingiza kutoka kwa hazina. DataRepository kuagiza DataRepository kutoka RPi kuagiza GPIO GPIO.setmode (GPIO. BCM) GPIO.setningings (False) GPIO_Trig = 4 GPIO_Echo = 17 GPIO.setup (GPIO_Trig, GPIO. OUT) GPIO.set). IN) def current_milli_time (): kurudi int (round (time.time () * 1000)) darasa UltrasonicSensor (threading. Thread): def _init _ (self, tundu): threading. Thread._ init _ (self) self.socket = tundu def run (self): jaribu: last_reading = 0 interval = 5000 wakati True: if current_milli_time ()> last_reading + interval: dist = self.distance () chapa ("Umbali uliopimwa =%.1f cm"% dist) DataRepository. insert_proximity (dist) data_prox = DataRepository.get_data_sensor (1) historiaId = data_prox ["SensorsHistory"] prox = data_prox ["value"] actionTime = data_prox ["actionTime"] self.socket.emit ('data_proximity', {": historyId, "Ukaribu": prox, "Muda": DataRepository.serializeDateTime (actionTime)}) last_reading = current_milli_time () isipokuwa Isipokuwa kama ex: print (ex) de f umbali (ubinafsi): # weka Trigger kwa HIGH GPIO.output (GPIO_Trig, Kweli) # weka Trigger baada ya 0.01ms hadi saa LOW. lala (0.00001) GPIO.output (GPIO_Trig, False) StartTime = time.time () StopTime = time.time () # saveTimeTime wakati GPIO.input (GPIO_Echo) == 0: StartTime = time.time () # kuokoa muda wa kuwasili wakati GPIO.input (GPIO_Echo) == 1: StopTime = time.time () # tofauti ya wakati kati ya kuanza na kuwasili TimeElapsed = StopTime - StartTime # kuzidisha na kasi ya sonic (34300 cm / s) # na ugawanye na 2, kwa sababu huko na umbali wa nyuma = (TimeElapsed * 34300) / 2 umbali wa kurudi

Hatua ya 7: Kuweka alama kwa Moteli za Stepper

kuagiza RPi. GPIO kama GPIOingiza wakati wa kuingiza GPIO.setmode (GPIO. BCM) GPIO.setningings (False) pato [0, 0, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1], [1, 0, 0, 1] darasa la StepperFood: # 512 ni 1 keer rond def run (): kwa i katika anuwai (512): kwa nusu ya hatua katika masafa (8): kwa pini katika masafa (4): GPIO.putput (control_pins [pin], halfstep_seq [halfstep] [pin]) muda. kulala (0.001 kwa pini katika anuwai (4): Pato la GPIO (pato la kudhibiti [pini], 0)

Nambari hii inaweza kutumika tena kwa gari lingine la kukanyaga, weka tu nambari za pini za kudhibiti kwenye pini zao za kurudia na ubadilishe jina la darasa kuwa StepperWater:

Hatua ya 8: Kuandika LCD

Kanuni nyingi, lakini tumekaribia kumaliza.

Darasa la LCD linajumuishwa kama faili ya LCD.py

kutoka kwa wasaidizi. LCD kuagiza LCD

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]) darasa la LCD Andika: ujumbe wa def (msg): jaribu kuchapisha ("jaribu") lcd.init_LCD () lcd.send_instruction (12) lcd.clear_display () lcd.write_message (msg, '1') isipokuwa: chapa ("kosa la LCDWrite")

Hatua ya 9: Mwisho

Mwisho
Mwisho
Mwisho
Mwisho

matokeo ya mwisho: jinsi tulivyoichora dhidi ya jinsi ilivyomalizika.

Ilipendekeza: