- Reikalinga medžiaga:
- ADC0804 vieno kanalo 8 bitų ADC modulis:
- Grandinės schema ir paaiškinimas:
- Aviečių Pi programavimas:
- „Flex Sensor“ vertės rodymas skystųjų kristalų ekrane naudojant „Raspberry Pi“:
„Raspberry Pi“ yra ARM architektūros procesoriaus plokštė, skirta elektronikos inžinieriams ir mėgėjams. PI yra viena iš labiausiai patikimų projektų kūrimo platformų. Turėdamas didesnį procesoriaus greitį ir 1 GB RAM, PI gali būti naudojamas daugeliui aukšto lygio projektų, tokių kaip vaizdo apdorojimas ir daiktų internetas. Yra daugybė įdomių dalykų, kuriuos galima padaryti naudojant PI, tačiau viena liūdna ypatybė yra ta, kad jame nėra įmontuoto ADC modulio.
Tik jei „Raspberry Pi“ būtų galima susieti su jutikliais, jis galėtų sužinoti apie realaus pasaulio parametrus ir sąveikauti su jais. Dauguma jutiklių yra analoginiai jutikliai, todėl turėtume išmokti naudoti išorinį ADC modulį IC su „Raspberry Pi“, kad sujungtume šiuos jutiklius. Šiame projekte sužinosime, kaip mes galime suderinti „Flex Sensor“ su „Raspberry Pi“ ir parodyti jo vertes LCD ekrane.
Reikalinga medžiaga:
- Raspberry Pi (bet koks modelis)
- ADC0804 IC
- 16 * 2 LCD ekranas
- „Flex Sensor“
- Rezistoriai ir kondensatoriai
- Breadboard arba perf board.
ADC0804 vieno kanalo 8 bitų ADC modulis:
Prieš tęsdami toliau, sužinokime apie šį ADC0804 IC ir kaip jį naudoti su aviečių pi. ADC0804 yra vieno kanalo 8 bitų IC, tai reiškia, kad jis gali nuskaityti vieną ADC reikšmę ir susieti ją su 8 bitų skaitmeniniais duomenimis. Šiuos 8 bitų skaitmeninius duomenis gali nuskaityti „Raspberry Pi“, taigi vertė bus 0–255, nes 2 ^ 8 yra 256. Kaip parodyta toliau esančiuose IC kontaktuose, šiems skaitmeniniams duomenims skaityti naudojami kaiščiai nuo DB0 iki DB7. vertybes.
Dabar dar vienas svarbus dalykas yra tai, kad ADC0804 veikia esant 5 V įtampai, taigi jis teikia išėjimą 5 V loginiu signalu. 8 kontaktų išvestyje (reprezentuojančioje 8 bitus) kiekvienas kaištis teikia + 5 V išvestį, kad atspindėtų logiką „1“. Taigi problema yra ta, kad PI logika yra + 3,3 V, todėl jūs negalite suteikti + 5 V logikos PI + 3,3 V GPIO kaiščiui. Jei duosite + 5 V bet kuriam PI GPIO kaiščiui, plokštė sugadinama.
Taigi, norėdami sumažinti loginį lygį nuo + 5 V, naudosime įtampos skirstytuvo grandinę. Aptarėme įtampos skirstytuvo grandinę, prieš tai ieškodami tolesnio paaiškinimo. Ką mes padarysime, mes naudojame du rezistorius, kad + 5 V logika būtų padalinta į 2 * 2,5 V logiką. Taigi po padalijimo mes suteiksime + 2,5v logiką Raspberry Pi. Taigi, kai logiką „1“ pateikia ADC0804, PI GPIO kaište pamatysime + 2,5 V, o ne + 5 V. Sužinokite daugiau apie ADC čia: ADC0804 įvadas.
Žemiau yra ADC modulio, naudojant ADC0804, paveikslėlis , kurį sukūrėme „Perf Board“:
Grandinės schema ir paaiškinimas:
Visa „ Flex Sensor“ ir „Raspberry Pi“ sąsajos schema parodyta žemiau. To paties paaiškinimas yra toks.
Atrodo, kad ši aviečių pi lankstaus jutiklio grandinė yra šiek tiek sudėtinga su daugybe laidų, tačiau, jei pažvelgtumėte atidžiau, dauguma laidų yra tiesiogiai prijungti iš LCD ir 8 bitų duomenų kaiščio prie „Raspberry pi“. Ši lentelė padės jums užmegzti ir patikrinti ryšius.
PIN kodas |
Aviečių smeigtuko numeris |
Aviečių Pi GPIO pavadinimas |
LCD Vss |
4 kaištis |
Žemė |
LCD Vdd |
6 kaištis |
Vcc (+ 5 V) |
LCD ekranas |
4 kaištis |
Žemė |
LCD ekranai |
38 kaištis |
GPIO 20 |
LCD RW |
39 kaištis |
Žemė |
LCD ekranas |
40 kaištis |
GPIO 21 |
LCD D4 |
3 kaištis |
GPIO 2 |
LCD D5 |
5 kaištis |
GPIO 3 |
LCD D6 |
7 kaištis |
GPIO 4 |
LCD D7 |
11 kaištis |
GPIO 17 |
ADC0804 Vcc |
2 kaištis |
Vcc (+ 5 V) |
ADC0804 B0 |
19 kaištis (per 5,1 K) |
GPIO 10 |
ADC0804 B1 |
21 kaištis (per 5,1 K) |
GPIO 9 |
ADC0804 B2 |
23 kaištis (per 5,1 K) |
GPIO 11 |
ADC0804 B3 |
29 kaištis (per 5,1 K) |
GPIO 5 |
ADC0804 B4 |
31 kaištis (per 5,1 K) |
GPIO 6 |
ADC0804 B5 |
33 kaištis (per 5,1 K) |
GPIO 13 |
ADC0804 B6 |
35 kaištis (per 5,1 K) |
GPIO 19 |
ADC0804 B7 |
Kaištis 37 (per 5,1 K) |
GPIO 26 |
ADC0804 WR / INTR |
15 kaištis |
GPIO 22 |
Nuo tada galite naudoti šį paveikslėlį, norėdami nustatyti PIN kodą „Raspberry“.
Kaip ir visiems ADC moduliams, ADC0804 IC taip pat reikalingas laikrodžio signalas, laimei, šis IC turi vidinį laikrodžio šaltinį, todėl mes tiesiog turime pridėti RC grandinę prie CLK ir CLK R kaiščių, kaip parodyta grandinėje. Mes naudojome 10K ir 105pf vertę, tačiau galime naudoti bet kokią artimą vertę, pvz., 1uf, 0.1uf, 0.01uf taip pat turėtų veikti.
Tada, norėdami prijungti „Flex“ jutiklį, mes panaudojome potencialų daliklio grandinę naudodami 100K rezistorių. Kai „Flex“ jutiklis yra sulenktas, jo varža skirsis, todėl kinta ir potencialus rezistoriaus kritimas. Šis kritimas matuojamas pagal ADC0804 IC ir atitinkamai generuojami 8 bitų duomenys.
Patikrinkite kitus su „Flex Sensor“ susijusius projektus:
- Lankstaus jutiklio sąsajos su AVR mikrovaldikliu
- „Arduino“ pagrįstas „Angry Bird“ žaidimų valdiklis, naudojant „Flex Sensor“
- Servo variklio valdymas „Flex Sensor“ pagalba
- Tonų generavimas palietus pirštus naudojant „Arduino“
Aviečių Pi programavimas:
Kai baigsime ryšius, turėtume perskaityti šių 8 bitų būseną naudodami „Raspberry Pi“ ir konvertuoti juos į dešimtainį skaičių, kad galėtume jais pasinaudoti. Programa daryti tą patį ir parodyti gautas vertes LCD ekrane pateikiama šio puslapio pabaigoje. Toliau kodas paaiškinamas į mažus džinkus.
Mums reikalinga LCD biblioteka, kad susietume LCD su Pi. Tam mes naudojame „shubham“ sukurtą biblioteką, kuri padės mums susieti 16 * 2 skystųjų kristalų ekraną su Pi keturių laidų režimu. Taip pat mums reikia bibliotekų, kad būtų galima panaudoti laiką ir Pi GPIO kaiščius.
Pastaba : lcd.py reikia atsisiųsti iš čia ir įdėti į tą patį katalogą, kuriame išsaugota ši programa. Tik tada kodas bus sudarytas.
importuoti lcd #importuoti skystųjų kristalų biblioteką [email protected] importavimo laikas #importavimo laikas importuoti RPi.GPIO kaip GPIO #GPIO bus teikiama tik kaip GPIO
Kad skystųjų kristalų pin apibrėžimai yra skiriamas kur kintamieji yra kaip parodyta žemiau. Atminkite, kad šie skaičiai yra GPIO PIN kodai, o ne tikrieji PIN kodai. Norėdami palyginti GPIO numerius su PIN kodais, galite naudoti aukščiau pateiktą lentelę. Į dvejetainį masyvą bus įtraukti visi duomenų smeigtukų numeriai, o masyvo bitai išsaugos gautą visų GPIO smeigtukų vertę.
#LCD kaiščių apibrėžimai D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarys = (10,9,11,5,6,13,19,26) # Kaiščių skaičių masyvas jungiasi prie DB0- DB7 bitai = #rezultuojančios 8 bitų duomenų reikšmės
Dabar mes turime apibrėžti įvesties ir išvesties kaiščius. Septyni duomenų kaiščiai bus įvesties kaištis, o paleidimo kaištis (RST ir INTR) bus išvesties kaištis. Mes galime perskaityti 8 bitų duomenų vertes iš įvesties kaiščio tik tuo atveju, jei pagal duomenų lapą tam tikrą laiką išvesties kaištį sukelsime aukštai. Kadangi dvejetainius kaiščius deklaravome binarys masyve, deklaravimui galime naudoti for for loop, kaip parodyta žemiau.
binarams binariuose: GPIO.setup (dvejetainis, GPIO.IN) #Visi binariniai kaiščiai yra įvesties kaiščiai #Trigger pin GPIO.setup (22, GPIO.OUT) #WR ir INTR kaiščiai
Dabar naudodamiesi LCD bibliotekos komandomis galime inicijuoti LCD modulį ir parodyti mažą įvadinį pranešimą, kaip parodyta žemiau.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro pranešimas mylcd.Print ("Lankstus jutiklis su") mylcd.setCursor (2,1) mylcd.Print ("Avietė Pi ") time.sleep (2) mylcd.clear ()
Begalinės, kol ciklo viduje pradedame skaityti dvejetaines reikšmes, jas konvertuodami į dešimtainį skaičių ir atnaujiname rezultatą LCD. Kaip minėta anksčiau, prieš skaitant ADC reikšmes, norėdami suaktyvinti ADC konversiją, tam tikrą laiką trigerio kaištis turėtų būti aukštas. Tai daroma naudojant šias eilutes.
„GPIO.output“ (22, 1) # Įjunkite „Trigger time.sleep“ (0.1) „GPIO.output“ (22, 0)
Dabar turėtume perskaityti 8 duomenų kaiščius ir atnaujinti rezultatą bitų masyve. Norėdami tai padaryti, mes naudojame „ for loop“, kad kiekvieną įvesties kaištį palygintume su „True“ ir „False“. Jei teisinga, atitinkamas bitų masyvas bus padarytas kaip 1 kitas, jis bus padarytas kaip 0. Tai buvo visi 8 bitų duomenys bus 0 ir 1 atitinkamai iš perskaitytų verčių.
# Perskaitykite įvesties kaiščius ir atnaujinkite bitų masyvą i diapazone (8): jei (GPIO.input (binarys) == True): bitai = 1 if (GPIO.input (binarys) == False): bitai = 0
Atnaujinę bitų masyvą, turėtume konvertuoti šį masyvą į dešimtainę vertę. Tai yra ne kas kita, o dvejetainis dešimtainis perskaičiavimas. 8 bitų dvejetainiams duomenims 2 ^ 8 yra 256. Taigi gausime dešimtainius duomenis nuo 0 iki 255. Python'e operatorius „**“ naudojamas bet kokios reikšmės galiai surasti. Kadangi bitai prasideda MSB, mes padauginame jį iš 2 ^ (7 padėties). Tokiu būdu visas dvejetaines reikšmes galime konvertuoti į dešimtainius duomenis ir tada juos parodyti LCD ekrane
#skaičiuokite dešimtainę reikšmę naudodamas i bitų masyvą diapazone (8): dešimtainis = dešimtainis + (bitai * (2 ** (7-i)))
Kai žinome dešimtainę vertę, lengva apskaičiuoti įtampos vertę. Mes tiesiog turime jį padauginti iš 19,63. Nes 8 bitų 5 VADC kiekvienas bitas yra 19,3 mili voltų analogija. Gauta įtampos vertė yra įtampos vertė, atsiradusi per ADC0804 IC kaiščius Vin + ir Vin-.
#suskaičiuoti įtampos vertę Įtampa = dešimtainis * 19,63 * 0,001 #vienas vienetas yra 19,3mV
Naudodami įtampos vertę galime nustatyti, kaip lenkiamas jutiklis ir kokia kryptimi jis buvo sulenktas. Žemiau pateiktose eilutėse aš ką tik palyginau nuskaitytos įtampos reikšmes su iš anksto nustatytomis įtampos vertėmis, kad nurodytų „Flex“ jutiklio padėtį LCD ekrane.
#compare jutiklio įtampa ir ekrano būsena mylcd.setCursor (1,1) if (Įtampa> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") else: mylcd.Print ("Stabilus")
Panašiai galite naudoti įtampos vertę atlikti bet kokią užduotį, kurią norite atlikti „Raspberry Pi“.
„Flex Sensor“ vertės rodymas skystųjų kristalų ekrane naudojant „Raspberry Pi“:
Projektas yra labai paprastas. Tačiau įsitikinkite, kad atsisiuntėte antraštės failą lcd.py ir įdėjote jį į tą patį katalogą, kuriame yra jūsų dabartinė programa. Tada atlikite jungtis, parodytas grandinės schemoje, naudodamiesi skydu ar perf lenta, ir paleiskite žemiau esančią programą savo Pi, ir jūs turėtumėte dirbti. Jūsų sukurta žemiau turėtų atrodyti maždaug taip.
Kaip parodyta, LCD ekrane bus rodoma dešimtainė vertė, įtampos vertė ir jutiklio padėtis. Tiesiog sulenkite jutiklį į priekį arba atgal ir turėtumėte matyti, kaip keičiasi įtampa ir dešimtainė vertė, taip pat bus rodomas būsenos tekstas. Galite prijungti bet kurį jutiklį ir pastebėti, kad jame kinta įtampa.
Visą mokymo programos darbą rasite žemiau pateiktame vaizdo įraše. Tikiuosi, kad supratote projektą ir patiko kurti kažką panašaus. Jei turite kokių nors abejonių, palikite juos komentarų skiltyje arba forumuose, ir aš pasistengsiu kuo geriau į juos atsakyti.