Orodha ya maudhui:
- Vifaa
- Hatua ya 1: Wiring
- Hatua ya 2: Tumia Kiini chako cha Mzigo Kutumika
- Hatua ya 3: Hifadhidata ya kawaida
- Hatua ya 4: Kuweka Saini ya Kiini cha Mzigo
- Hatua ya 5: Kuandika Nishati ya Maji
- Hatua ya 6: Kuandika Nasaha ya Ukaribu
- Hatua ya 7: Kuweka alama kwa Moteli za Stepper
- Hatua ya 8: Kuandika LCD
- Hatua ya 9: Mwisho
Video: MPEGEZAJI WA VYAKULA VYAKULA PETE: 9 Hatua
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:48
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
cabling nyingi hapa. Toa nyaya zako za kuruka na uanze kubana!
Hatua ya 2: 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
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
matokeo ya mwisho: jinsi tulivyoichora dhidi ya jinsi ilivyomalizika.
Ilipendekeza:
Rangi Kubadilisha Mwanga wa Pete ya LED: Hatua 11
Rangi Kubadilisha Mwanga wa Pete ya LED: Leo tutafanya rangi ya inchi 20 kubadilisha taa ya pete ya LED. Najua taa za pete kawaida ni za mviringo lakini hii itakuwa mraba ili kufanya mambo iwe rahisi kidogo. Mradi huu mdogo ni wa wapiga picha ambao wanahitaji budg
Taa ya Pete ya LED: Hatua 9 (na Picha)
Taa ya Pete ya LED: Ujenzi huu unakuja kama nilihitaji taa bora kwenye dawati langu kwa wakati ninapounganisha na kuweka mizunguko pamoja. Nilikuwa nimeleta pete ya taa ya LED (zinaitwa macho ya malaika na hutumiwa kwenye taa za gari) miezi michache kabla ya ujenzi mwingine na
Taa ya Pete ya LED ya Mini Mini !: Hatua 7 (na Picha)
Taa ya Pete ya LED ya Mini Mini: Je! Umechoka na siku za giza? Siku hizi zimekwisha na taa mpya mpya ya DIY mini! Tumia kwa selfie zako, blogi au hata blogi! Ukiwa na uwezo wa kushangaza wa betri ya 1800 mAh utaweza kutumia taa kwa karibu masaa 4 kwa mwangaza kamili
Kufanya Saa ya Pete ya Arduino OLED: Hatua 5
Kutengeneza Saa ya Pete ya Odu ya Arduino: Nimenunua onyesho ndogo la OLED, safi na uwazi wake unanivutia. Lakini naweza kufanya nini nayo? Kwa kweli, ukweli ni kwamba ninawezaje kuionyesha … Lol. Kweli, wakati nilitazama bango la Bwana wa Pete, ambayo ni safu yangu ya sinema nipenda zaidi,
MFUMO WA POS KWA MADUKA, VYAKULA NA VITUO VYA UTUMISHI KUTOKA KWA EXCEL Ukitumia Barcode: Hatua 7
MFUMO WA POS KWA MADUKA, VYAKULA NA VITUO VYA UTUMISHI KUTOKA EXCEL Kwa Kutumia Barcode: Ninaanzisha na blogi hii kwako jinsi ya kuunda mfumo rahisi wa POS (hatua ya mauzo) kwa maduka madogo ya vyakula na vituo vya huduma. Kwa njia hii unaweza kusimamia vifaa vifuatavyo bila programu maalum au vifaa vya gharama kubwa. v Iss