- Bahan yang Diperlukan:
- Modul ADC0804 Saluran Tunggal 8-bit ADC:
- Rajah dan Penjelasan Litar:
- Memprogramkan Raspberry Pi:
- Menunjukkan nilai Flex Sensor pada LCD menggunakan Raspberry Pi:
Raspberry Pi adalah papan berasaskan pemproses seni bina ARM yang direka untuk jurutera elektronik dan penggemar hobi. PI adalah salah satu platform pembangunan projek yang paling dipercayai di luar sana sekarang. Dengan kelajuan pemproses yang lebih tinggi dan RAM 1 GB, PI dapat digunakan untuk banyak projek berprofil tinggi seperti pemprosesan Imej dan Internet Perkara. Terdapat banyak perkara menarik yang dapat dilakukan dengan PI, tetapi satu ciri yang menyedihkan ialah ia tidak mempunyai modul ADC terbina dalam.
Cuma, jika Raspberry Pi dapat dihubungkan dengan sensor, ia dapat mengetahui tentang parameter dunia nyata dan berinteraksi dengannya. Sebilangan besar sensor di luar sana adalah sensor analog dan oleh itu kita harus belajar menggunakan IC modul ADC luaran dengan Raspberry Pi untuk menghubungkan sensor ini. Dalam projek ini kita akan belajar bagaimana kita dapat Interface Flex Sensor dengan Raspberry Pi dan Menampilkan Nilainya di Skrin LCD.
Bahan yang Diperlukan:
- Raspberry Pi (Mana-mana Model)
- ADC0804 IC
- Paparan LCD 16 * 2
- Sensor Flex
- Perintang dan kapasitor
- Papan roti atau papan perf.
Modul ADC0804 Saluran Tunggal 8-bit ADC:
Sebelum kita melangkah lebih jauh, mari kita pelajari mengenai IC ADC0804 ini dan bagaimana menggunakannya dengan raspberry pi. ADC0804 adalah IC saluran 8-bit tunggal, yang bermaksud ia dapat membaca satu nilai ADC dan memetakannya ke data digital 8-bit. Data digital 8-bit ini dapat dibaca oleh Raspberry Pi, sehingga nilainya akan 0-255 kerana 2 ^ 8 adalah 256. Seperti yang ditunjukkan dalam pin IC di bawah, pin DB0 hingga DB7 digunakan untuk membaca digital ini nilai.
Satu lagi perkara penting di sini ialah, ADC0804 beroperasi pada 5V dan dengan itu memberikan output dalam isyarat logik 5V. Dalam output 8 pin (mewakili 8 bit), setiap pin memberikan output + 5V untuk mewakili logik '1'. Jadi masalahnya ialah logik PI adalah + 3.3v, jadi anda tidak dapat memberikan logik + 5V ke pin GPIO + 3.3V PI. Sekiranya anda memberikan + 5V kepada mana-mana pin GPIO PI, papan akan rosak.
Jadi untuk turun ke tahap logik dari + 5V, kita akan menggunakan litar pembahagi voltan. Kami telah membincangkan Voltage Divider Circuit sebelum ini untuk memperjelasnya. Apa yang akan kami lakukan ialah, kami menggunakan dua perintang untuk membahagikan logik + 5V menjadi logik 2 * 2.5V. Oleh itu, selepas pembahagian, kami akan memberikan logik + 2.5v kepada Raspberry Pi. Jadi, setiap kali logik '1' dikemukakan oleh ADC0804 kita akan melihat + 2.5V di PI GPIO Pin, bukannya + 5V. Ketahui lebih lanjut mengenai ADC di sini: Pengenalan kepada ADC0804.
Berikut adalah gambar Modul ADC menggunakan ADC0804 yang telah kami bina di Perf Board:
Rajah dan Penjelasan Litar:
Gambarajah litar lengkap untuk menghubungkan Flex Sensor dengan Raspberry Pi ditunjukkan di bawah. Penjelasan yang sama adalah seperti berikut.
Ini raspberry pi sensor flex litar mungkin seolah-olah menjadi agak kompleks dengan banyak wayar, tetapi jika anda melihat dengan lebih dekat sebahagian besar wayar bersambung terus dari LCD dan pin data 8-bit untuk pi Raspberry itu. Jadual berikut akan membantu anda semasa membuat dan mengesahkan sambungan.
Nama pin |
Nombor Pin Raspberry |
Nama GPIO Raspberry Pi |
LCD Vss |
Pin 4 |
Tanah |
LCD Vdd |
Pin 6 |
Vcc (+ 5V) |
LCD Vee |
Pin 4 |
Tanah |
LCD Rs |
Pin 38 |
GPIO 20 |
LCD RW |
Pin 39 |
Tanah |
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 (hingga 5.1K) |
GPIO 10 |
ADC0804 B1 |
Pin 21 (hingga 5.1K) |
GPIO 9 |
ADC0804 B2 |
Pin 23 (hingga 5.1K) |
GPIO 11 |
ADC0804 B3 |
Pin 29 (hingga 5.1K) |
GPIO 5 |
ADC0804 B4 |
Pin 31 (hingga 5.1K) |
GPIO 6 |
ADC0804 B5 |
Pin 33 (hingga 5.1K) |
GPIO 13 |
ADC0804 B6 |
Pin 35 (hingga 5.1K) |
GPIO 19 |
ADC0804 B7 |
Pin 37 (hingga 5.1K) |
GPIO 26 |
ADC0804 WR / INTR |
Pin 15 |
GPIO 22 |
Anda boleh menggunakan gambar berikut untuk menentukan nombor pin di Raspberry sejak itu.
Seperti semua modul ADC, ADC0804 IC juga memerlukan isyarat jam untuk beroperasi, untungnya IC ini mempunyai sumber jam dalaman, jadi kita hanya perlu menambahkan litar RC ke CLK masuk dan pin CLK R seperti yang ditunjukkan dalam litar. Kami telah menggunakan nilai 10K dan 105pf, tetapi kami boleh menggunakan nilai dekat seperti 1uf, 0.1uf, 0.01uf juga harus berfungsi.
Kemudian untuk menyambungkan sensor Flex, kami telah menggunakan litar pembahagi berpotensi menggunakan perintang 100K. Semasa sensor Flex dibengkokkan, rintangan di atasnya akan berubah dan begitu juga potensi penurunan perintang. Penurunan ini diukur oleh IC ADC0804 dan data 8-bit dihasilkan dengan sewajarnya.
Periksa projek lain yang berkaitan dengan Flex Sensor:
- Flex Sensor Interfacing dengan AVR Microcontroller
- Pengawal Permainan Angry Bird berasaskan Arduino menggunakan Flex Sensor
- Kawalan Motor Servo oleh Flex Sensor
- Menjana Nada dengan Mengetuk Jari menggunakan Arduino
Memprogramkan Raspberry Pi:
Setelah selesai dengan sambungan, kita harus membaca status 8-bit ini menggunakan Raspberry Pi dan mengubahnya menjadi Perpuluhan sehingga kita dapat memanfaatkannya. Program untuk melakukan perkara yang sama dan memaparkan nilai yang dihasilkan pada layar LCD diberikan di akhir halaman ini. Selanjutnya kod tersebut dijelaskan kepada sampah kecil di bawah.
Kami memerlukan perpustakaan LCD untuk menghubungkan LCD dengan Pi. Untuk ini, kami menggunakan perpustakaan yang dibangunkan oleh shubham yang akan membantu kami untuk memaparkan paparan LCD 16 * 2 dengan mod Pi dalam empat wayar. Kita juga memerlukan perpustakaan untuk menggunakan masa dan pin Pi GPIO.
Catatan : Lcd.py harus dimuat turun dari sini, dan diletakkan di direktori yang sama di mana program ini disimpan. Barulah kod akan disusun.
import lcd #Import perpustakaan LCD oleh [email protected] masa import #Import waktu import RPi.GPIO sebagai GPIO #GPIO akan ditunjuk sebagai GPIO sahaja
The definisi pin LCD yang diberikan kepada pembolehubah seperti yang ditunjukkan di bawah. Perhatikan bahawa nombor ini adalah nombor pin GPIO dan bukan nombor pin sebenar. Anda boleh menggunakan jadual di atas untuk membandingkan nombor GPIO dengan nombor pin. Binari array akan merangkumi semua nombor pin data dan bit array akan menyimpan nilai yang dihasilkan dari semua pin GPIO.
# Definisi pin LCD D4 = 2 D5 = 3 D6 = 4 D7 = 17 RS = 20 EN = 21 binari = (10,9,11,5,6,13,19,26) # Array nombor pin bersambung ke DB0- Bit DB7 = #berhasil nilai data 8-bit
Sekarang, kita harus menentukan pin input dan output. Tujuh pin data akan menjadi pin input dan pin pemicu (RST dan INTR) akan menjadi pin output. Kita dapat membaca nilai data 8-bit dari pin input hanya jika kita memicu pin output tinggi untuk waktu tertentu sesuai dengan lembar data. Oleh kerana kita telah mengisytiharkan pin binari dalam binarys mudah kita boleh menggunakan untuk gelung untuk perisytiharan seperti yang ditunjukkan di bawah.
untuk binari dalam binari: GPIO.setup (binari, GPIO.IN) #Semua pin binari adalah pin masukan # Pin pemacu GPIO.setup (22, GPIO.OUT) #WR dan pin INTR adalah output
Sekarang dengan menggunakan arahan perpustakaan LCD, kita dapat menginisialisasi modul LCD dan memaparkan pesan intro kecil seperti yang ditunjukkan di bawah.
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 ") time.sleep (2) mylcd.clear ()
Di dalam gelung sementara tanpa had, kita mula membaca nilai binari menukarnya menjadi perpuluhan dan mengemas kini hasilnya pada LCD. Seperti yang dinyatakan sebelumnya sebelum kita membaca nilai-nilai ADC kita harus menjadikan pin pemicu menjadi tinggi untuk waktu tertentu untuk mengaktifkan penukaran ADC. Ini dilakukan dengan menggunakan baris berikut.
GPIO.output (22, 1) # Turn ON Trigger time.sleep (0.1) GPIO.output (22, 0) # Turn Turn Trigger
Sekarang, kita harus membaca pin 8-data dan mengemas kini hasilnya dalam susunan bit. Untuk melakukan ini kita menggunakan untuk gelung untuk membandingkan setiap pin input dengan benar dan palsu. Sekiranya benar array bit masing-masing akan dibuat sebagai 1 yang lain, ia akan dibuat sebagai 0. Ini semua data 8-bit akan dibuat 0 dan 1 masing-masing dari nilai yang dibaca.
#Baca pin input dan kemas kini hasil dalam susunan bit untuk i dalam julat (8): if (GPIO.input (binarys) == True): bit = 1 if (GPIO.input (binarys) == False): bit = 0
Sebaik sahaja kita mengemas kini susunan bit, kita harus menukar susunan ini menjadi nilai perpuluhan. Ini hanyalah penukaran perduaan hingga perpuluhan. Untuk data binari 8-bit 2 ^ 8 adalah 256. Oleh itu, kita akan mendapat data perpuluhan dari 0 hingga 255. Di python, pengendali "**" digunakan untuk mencari kekuatan nilai apa pun. Oleh kerana bit dimulakan dengan MSB, kita mengalikannya dengan 2 ^ (kedudukan 7). Dengan cara ini kita dapat menukar semua nilai binari ke data perpuluhan dan kemudian memaparkannya di LCD
#kira nilai perpuluhan menggunakan susunan bit untuk i dalam julat (8): perpuluhan = perpuluhan + (bit * (2 ** (7-i)))
Sebaik sahaja kita mengetahui nilai perpuluhan, mudah untuk mengira nilai voltan. Kita hanya perlu mengalikannya dengan 19.63. Kerana untuk 5VADC 8-bit setiap bit adalah analogi 19.3 milli volt. Nilai voltan yang dihasilkan adalah nilai voltan yang telah muncul di seberang pin Vin + dan Vin- dari ADC0804 IC.
#kira nilai voltan Voltan = perpuluhan * 19.63 * 0.001 # satu unit ialah 19.3mV
Dengan menggunakan nilai voltan kita dapat menentukan bagaimana sensor flex telah dibengkokkan dan ke arah mana ia dibengkokkan. Pada baris di bawah ini saya baru membandingkan nilai voltan baca dengan nilai voltan yang telah ditentukan untuk menunjukkan kedudukan sensor Flex pada skrin LCD.
# membandingkan voltan dan status paparan sensor mylcd.setCursor (1,1) if (Voltage> 3.8): mylcd.Print ("Bent Forward") elif (Voltage <3.5): mylcd.Print ("Bent Backward") lain: mylcd.Print ("Stabil")
Anda juga boleh menggunakan nilai voltan untuk melakukan tugas yang anda mahu Raspberry Pi lakukan.
Menunjukkan nilai Flex Sensor pada LCD menggunakan Raspberry Pi:
Kerja projek ini sangat sederhana. Tetapi pastikan anda telah memuat turun fail header lcd.py dan meletakkannya di direktori yang sama dengan program semasa anda. Kemudian buat sambungan ditunjukkan dalam rajah litar menggunakan papan roti atau papan perf dan jalankan program di bawah pada Pi anda dan anda semestinya berjaya. Anda menyiapkannya akan kelihatan seperti ini di bawah.
Seperti yang ditunjukkan LCD akan memaparkan nilai Perpuluhan, nilai voltan dan kedudukan sensor. Cukup bengkokkan sensor ke depan atau ke belakang dan anda seharusnya dapat melihat voltan dan nilai perpuluhan semakin berubah, teks status juga akan dipaparkan. Anda boleh menyambungkan mana-mana sensor dan melihat Voltan yang melintangnya berubah-ubah.
Kerja lengkap tutorial boleh didapati di video yang diberikan di bawah. Harap anda memahami projek ini dan menikmati pembinaan sesuatu yang serupa. Sekiranya anda mempunyai keraguan, tinggalkan mereka di bahagian komen atau di forum dan saya akan berusaha sebaik mungkin untuk menjawabnya.