- Kinakailangan na Materyal:
- ADC0804 Single Channel 8-bit ADC module:
- Circuit Diagram at Paliwanag:
- Pagprogram ng Raspberry Pi:
- Ipinapakita ang halaga ng Flex Sensor sa LCD gamit ang Raspberry Pi:
Ang Raspberry Pi ay isang ARM architecture processor based board na dinisenyo para sa mga elektronikong inhinyero at libangan. Ang PI ay isa sa pinaka mapagkakatiwalaang mga platform sa pagbuo ng proyekto doon ngayon. Sa mas mataas na bilis ng processor at 1 GB RAM, maaaring magamit ang PI para sa maraming mga proyekto sa mataas na profile tulad ng pagproseso ng Imahe at Internet of Things. Maraming mga cool na bagay na maaaring magawa sa isang PI, ngunit ang isang malungkot na tampok ay wala itong isang nakapaloob na module ng ADC.
Lamang, kung ang Raspberry Pi ay maaaring ma-interfaced sa mga sensor maaari itong malaman tungkol sa mga totoong mga parameter ng mundo at makipag-ugnay dito. Karamihan sa mga sensor doon ay analog sensor at samakatuwid dapat nating malaman na gumamit ng isang panlabas na module ng ADC na may Raspberry Pi upang i-interface ang mga sensor na ito. Sa proyektong ito matututunan natin kung paano tayo maaaring Mag- interface ng Flex Sensor sa Raspberry Pi at Ipakita ang Mga Halaga nito sa LCD Screen.
Kinakailangan na Materyal:
- Raspberry Pi (Anumang Modelo)
- ADC0804 IC
- 16 * 2 LCD display
- Flex Sensor
- Mga resistor at capacitor
- Breadboard o perf board.
ADC0804 Single Channel 8-bit ADC module:
Bago kami magpatuloy sa anumang karagdagang, alamin natin ang tungkol sa ADC0804 IC na ito at kung paano ito gamitin sa raspberry pi. Ang ADC0804 ay isang solong channel na 8-bit IC, nangangahulugang maaari itong basahin ang isang solong halaga ng ADC at mapa ito sa 8-bit ng digital data. Ang 8-bit na digital na data na ito ay maaaring mabasa ng Raspberry Pi, sa gayon ang halaga ay 0-255 dahil ang 2 ^ 8 ay 256. Tulad ng ipinakita sa mga pinout ng IC sa ibaba, ang mga pin na DB0 hanggang DB7 ay ginagamit upang basahin ang mga digital halaga
Ngayon isa pang mahalagang bagay dito ay, ang ADC0804 ay nagpapatakbo sa 5V at sa gayon nagbibigay ito ng output sa 5V signal ng lohika. Sa 8 pin output (kumakatawan sa 8bits), ang bawat pin ay nagbibigay ng + 5V output upang kumatawan sa lohika '1'. Kaya't ang problema ay ang lohika ng PI ay + 3.3v, kaya hindi mo maibigay ang + 5V na lohika sa + 3.3V GPIO pin ng PI. Kung bibigyan mo ng + 5V ang anumang GPIO pin ng PI, nasisira ang board.
Kaya't sa antas ng step-down na lohika mula sa + 5V, gagamit kami ng circuit ng divider ng boltahe. Pinag-usapan namin ang Voltage Divider Circuit na dating tumingin dito para sa karagdagang paglilinaw. Ang gagawin namin ay, gumagamit kami ng dalawang resistors upang hatiin ang + 5V lohika sa 2 * 2.5V na mga lohika. Kaya pagkatapos ng paghahati magbibigay kami ng + 2.5v na lohika sa Raspberry Pi. Kaya, tuwing ang lohika na '1' ay ipinakita ng ADC0804 makikita namin ang + 2.5V sa PI GPIO Pin, sa halip na + 5V. Dagdagan ang nalalaman tungkol sa ADC dito: Panimula sa ADC0804.
Nasa ibaba ang larawan ng ADC Module na gumagamit ng ADC0804 na itinayo namin sa Perf Board:
Circuit Diagram at Paliwanag:
Ang kumpletong diagram ng circuit para sa interfacing ng Flex Sensor sa Raspberry Pi ay ipinapakita sa ibaba. Ang paliwanag ng pareho ay ang mga sumusunod.
Ang raspberry pi flex sensor circuit na ito ay maaaring tila medyo kumplikado na may maraming mga wire, ngunit kung titingnan mo nang mas malapit ang karamihan sa mga wires ay direktang konektado mula sa LCD at 8-bit data pin sa Raspberry pi. Tutulungan ka ng sumusunod na talahanayan habang ginagawa at napatunayan ang mga koneksyon.
Pangalan ng pin |
Numero ng Raspberry Pin |
Pangalan ng Raspberry Pi GPIO |
LCD Vss |
Pin 4 |
Lupa |
LCD Vdd |
Pin 6 |
Vcc (+ 5V) |
LCD Vee |
Pin 4 |
Lupa |
LCD Rs |
Pin 38 |
GPIO 20 |
LCD RW |
Pin 39 |
Lupa |
LCD E |
Pin 40 |
GPIO 21 |
LCD D4 |
Pin 3 |
GPIO 2 |
LCD D5 |
Pin 5 |
GPIO 3 |
LCD D6 |
Pin 7 |
GPIO 4 |
LCD D7 |
Pin 11 |
GPIO 17 |
ADC0804 Vcc |
Pin 2 |
Vcc (+ 5V) |
ADC0804 B0 |
Pin 19 (hanggang 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (hanggang 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (hanggang 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (hanggang 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (hanggang 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (hanggang 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (hanggang 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (hanggang 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Maaari mong gamitin ang sumusunod na larawan upang matukoy ang mga numero ng pin sa Raspberry mula noon.
Tulad ng lahat ng mga module ng ADC, ang ADC0804 IC ay nangangailangan din ng isang signal ng orasan upang gumana, sa kabutihang-palad ang IC na ito ay may isang panloob na mapagkukunan ng orasan, kaya kailangan naming idagdag ang RC circuit sa CLK in at CLK R pin tulad ng ipinakita sa circuit. Gumamit kami ng halagang 10K at 105pf, ngunit maaari naming gamitin ang anumang halagang malapit tulad ng 1uf, 0.1uf, 0.01uf dapat ding gumana.
Pagkatapos upang ikonekta ang sensor ng Flex nagamit namin ang isang potensyal na divider circuit gamit ang isang 100K risistor. Tulad ng Flex sensor ay baluktot ang paglaban sa kabuuan nito ay magkakaiba at sa gayon ang potensyal na drop sa buong risistor. Ang drop na ito ay sinusukat ng ADC0804 IC at ang 8-bit data ay nabuo nang naaayon.
Suriin ang iba pang mga proyekto na nauugnay sa Flex Sensor:
- Ang Flex Sensor Interfacing sa AVR Microcontroller
- Batay sa Arduino Angry Bird Game Controller gamit ang Flex Sensor
- Servo Motor Control ng Flex Sensor
- Bumubuo ng Mga Tono sa pamamagitan ng Pag-tap sa Mga Daliri gamit ang Arduino
Pagprogram ng Raspberry Pi:
Kapag tapos na kami sa mga koneksyon, dapat nating basahin ang katayuan ng mga 8-bit na ito gamit ang Raspberry Pi at i-convert ito sa Decimal upang magamit natin ang mga ito. Ang programa para sa paggawa ng pareho at pagpapakita ng mga nagresultang halaga sa LCD screen ay ibinibigay sa dulo ng pahinang ito. Dagdag dito ang code ay ipinaliwanag sa maliliit na junks sa ibaba.
Kailangan namin ng isang library ng LCD upang i-interface ang LCD kasama si Pi. Para sa mga ito ginagamit namin ang library na binuo ng shubham na makakatulong sa amin upang mai-interface ang isang 16 * 2 LCD display na may isang Pi sa apat na wire mode. Kailangan din namin ng mga aklatan upang magamit ang oras at mga pin ng Pi GPIO.
Tandaan : Ang lcd.py ay dapat na mai-download mula rito, at ilagay sa parehong direktoryo kung saan nai-save ang program na ito. Pagkatapos lamang ang code ay mag-ipon.
i-import ang lcd #I-import ang LCD library sa pamamagitan ng [email protected] oras ng pag-import #I-import ang oras sa pag-import ng RPi.GPIO bilang GPIO #GPIO ay bibigyan bilang GPIO lamang
Ang mga kahulugan ng LCD pin ay nakatalaga sa mga variable tulad ng ipinakita sa ibaba. Tandaan na ang mga numerong ito ay ang mga numero ng GPIO pin at hindi ang aktwal na mga numero ng pin. Maaari mong gamitin ang talahanayan sa itaas upang ihambing ang mga numero ng GPIO sa mga numero ng pin. Isasama ng array binary ang lahat ng mga numero ng data pin at ang mga array bit ay mag-iimbak ng nagresultang halaga ng lahat ng mga GPIO pin.
#LCD kahulugan ng pin D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binarys ((10,9,11,5,6,13,19,26) #Array ng mga pin number na kumonekta sa DB0- Mga DB7 bits = #resulting na halaga ng 8-bit na data
Ngayon, kailangan nating tukuyin ang mga input at output pin. Ang pitong mga data pin ay magiging input pin at ang trigger pin (RST at INTR) ay ang output pin. Maaari naming basahin ang mga halagang 8-bit na data mula sa input pin lamang kung mai-trigger namin ang output pin na mataas para sa isang partikular na oras ayon sa datasheet. Dahil idineklara namin ang mga binary pin sa array ng binarys maaari kaming gumamit ng isang para sa loop para sa deklarasyon tulad ng ipinakita sa ibaba.
para sa binary sa binarys: GPIO.setup (binary, GPIO.IN) # Lahat ng mga binary pin ay mga input pin #Trigger pin GPIO.setup (22, GPIO.OUT) Ang #WR at INTR pin ay output
Ngayon gamit ang mga utos ng LCD library maaari nating simulan ang module ng LCD at ipakita ang isang maliit na mensahe ng intro tulad ng ipinakita sa ibaba.
mylcd = lcd.lcd () mylcd.begin (D4, D5, D6, D7, RS, EN) #Intro Message mylcd.Print ("Flex Sensor with") mylcd.setCursor (2,1) mylcd.Print ("Raspberry Pi ") oras. Natutulog (2) mylcd.clear ()
Sa loob ng walang hanggan habang loop, sinisimulan naming basahin ang mga halagang binary na binago ang mga ito sa decimal at i-update ang resulta sa LCD. Tulad ng sinabi nang mas maaga bago namin basahin ang mga halaga ng ADC dapat naming gawin ang trigger pin na maging mataas para sa isang partikular na oras upang maisaaktibo ang ADC conversion. Ginagawa ito sa pamamagitan ng paggamit ng mga sumusunod na linya.
GPIO.output (22, 1) #Turn ON Trigger time.s Sleep (0.1) GPIO.output (22, 0) #Turn OFF Trigger
Ngayon, dapat nating basahin ang mga 8-data na pin at i-update ang resulta sa array ng bits. Upang magawa ito, gumagamit kami ng isang para sa loop upang ihambing ang bawat input pin na may True at Mali. Kung totoo ang kani-kanilang mga bit array ay gagawin bilang 1 iba pa ay gagawin bilang 0. Ito ang lahat ng 8-bit na data ay gagawin 0 at 1 kani-kanilang mga nabasang halagang.
# Basahin ang mga input pin at mag-update ng resulta sa bit array para sa i sa saklaw (8): kung (GPIO.input (binarys) == Totoo): bits = 1 kung (GPIO.input (binarys) == Mali): bits = 0
Sa sandaling na-update namin ang array ng bits, dapat naming i- convert ang array na ito sa decimal na halaga. Ito ay walang iba kundi ang binary to decimal conversion. Para sa 8-bit na binary data 2 ^ 8 ay 256. Kaya makakakuha kami ng decimal data mula 0 hanggang 255. Sa python ang operator na "**" ay ginagamit upang mahanap ang lakas ng anumang halaga. Dahil ang mga piraso ay nagsisimula sa MSB pinarami namin ito sa 2 ^ (7-posisyon). Sa ganitong paraan maaari naming mai-convert ang lahat ng mga halagang binary sa decimal data at pagkatapos ay ipakita ito sa LCD
#kalkula ang decimal na halaga gamit ang bit array para sa ako sa saklaw (8): decimal = decimal + (bits * (2 ** (7-i)))
Kapag alam natin ang decimal na halaga madali itong kalkulahin ang halaga ng boltahe. Kailangan lang nating paramihin ito sa 19.63. Dahil para sa isang 8-bit 5VADC bawat bit ay isang pagkakatulad ng 19.3 milli volt. Ang nagresultang halaga ng boltahe ay ang halaga ng boltahe na lumitaw sa mga pin ng Vin + at Vin- ng ADC0804 IC.
#kalkula ang halaga ng boltahe Boltahe = decimal * 19.63 * 0.001 # Ang isang yunit ay 19.3mV
Gamit ang halaga ng boltahe maaari naming matukoy kung paano ang baluktot sensor ay baluktot at sa anong direksyon ito ay baluktot. Sa mga linya sa ibaba ay inihambing ko lamang ang mga nabasa na halaga ng boltahe na may paunang natukoy na mga halaga ng boltahe upang ipahiwatig ang posisyon ng Flex sensor sa LCD screen.
#compare boltahe at katayuan sa pagpapakita ng sensor mylcd.setCursor (1,1) kung (Boltahe> 3.8): mylcd.Print ("Bent Forward") elif (Boltahe <3.5): mylcd.Print ("Bent Backward") iba pa: mylcd.Print ("Matatag")
Katulad nito maaari mong gamitin ang halaga ng boltahe upang maisagawa ang anumang gawain na nais mong gampanan ng Raspberry Pi.
Ipinapakita ang halaga ng Flex Sensor sa LCD gamit ang Raspberry Pi:
Ang pagtatrabaho ng proyekto ay napaka-simple. Ngunit tiyaking na-download mo ang lcd.py header file at inilagay ito sa parehong direktoryo kung saan naroroon ang iyong kasalukuyang programa. Pagkatapos gawin ang mga koneksyon ay ipinapakita sa circuit diagram gamit ang isang breadboard o isang perf board at patakbuhin ang programa sa ibaba sa iyong Pi at dapat mong gawin ang bagay na gumagana. Ang na-set up mo ay dapat magmukhang ganito sa ibaba.
Tulad ng ipinakita, ipapakita ng LCD ang decimal na halaga, halaga ng boltahe at posisyon ng sensor. Yumuko lamang ang sensor pasulong o paatras at dapat mong makita ang pagkakaiba-iba ng boltahe at decimal na halaga, ipapakita rin ang isang teksto ng katayuan. Maaari mong ikonekta ang anumang sensor at pansinin ang Boltahe sa kabuuan nito na nagkakaiba-iba.
Ang kumpletong pagtatrabaho ng tutorial ay matatagpuan sa video na ibinigay sa ibaba. Inaasahan kong naintindihan mo ang proyekto at nasiyahan sa pagbuo ng katulad na bagay. Kung mayroon kang anumang pag-aalinlangan, iwanan ang mga ito sa seksyon ng komento o sa mga forum at susubukan ko ang aking makakaya sa pagsagot sa kanila.