- Bagaimana ia berfungsi
- Komponen yang Diperlukan
- Skematik
- Kod Osiloskop Arduino
- Skrip Python (Plotter)
- Kod Arduino
- Arduino Oscilloscope in Action
Osiloskop adalah salah satu alat terpenting yang anda akan dapati di meja kerja mana-mana jurutera atau pembuat elektronik. Ia digunakan terutamanya untuk melihat bentuk gelombang dan menentukan tahap voltan, frekuensi, kebisingan dan parameter lain dari isyarat yang diterapkan pada inputnya yang mungkin berubah dari masa ke masa. Ia juga digunakan oleh pembangun perisian tertanam untuk penyahpepijatan kod dan juruteknik untuk menyelesaikan masalah peranti elektronik semasa pembaikan. Sebab-sebab ini menjadikan osiloskop sebagai alat mesti dimiliki oleh jurutera mana pun. Satu-satunya masalah ialah mereka sangat mahal, Osiloskop yang menjalankan fungsi paling asas dengan ketepatan paling sedikit boleh menjadi mahal dari $ 45 hingga $ 100 sementara yang lebih maju dan efisien berharga lebih dari $ 150. Hari ini saya akan menunjukkan cara menggunakan Arduinodan perisian, yang akan dikembangkan dengan bahasa pengaturcaraan kegemaran saya Python, untuk membina osiloskop Arduino 4-saluran dengan kos rendah yang mampu melaksanakan tugas yang mana sebahagian daripada osiloskop murah digunakan seperti paparan bentuk gelombang dan penentuan tahap voltan untuk isyarat.
Bagaimana ia berfungsi
Terdapat dua bahagian untuk projek ini;
- Penukar Data
- The Plotter
Osiloskop umumnya melibatkan gambaran visual isyarat analog yang diterapkan pada saluran inputnya. Untuk mencapai ini, kita perlu menukar isyarat dari analog ke digital terlebih dahulu dan kemudian memplot data. Untuk penukaran, kami akan memanfaatkan ADC (Analog to Digital converter) pada mikrokontroler atmega328p yang digunakan oleh Arduino untuk menukar data Analog pada input isyarat ke isyarat digital. Selepas penukaran, nilai setiap masa dihantar melalui UART dari Arduino ke PC di mana perisian plotter yang akan dikembangkan menggunakan python akan mengubah aliran data yang masuk ke bentuk gelombang dengan memetakan setiap data terhadap waktu.
Komponen yang Diperlukan
Komponen berikut diperlukan untuk membina projek ini;
- Arduino Uno (Mana-mana papan lain boleh digunakan)
- Papan roti
- Perintang 10k (1)
- LDR (1)
- Wayar pelompat
Perisian yang Diperlukan
- Arduino IDE
- Python
- Pustaka Python: Pyserial, Matplotlib, Drawnow
Skematik
Skema untuk Osiloskop Arduino adalah mudah. Yang perlu kita lakukan hanyalah menyambungkan isyarat yang akan diperiksa ke pin Analog Arduino yang ditentukan. Walau bagaimanapun, kami akan menggunakan LDR dalam penyediaan pembahagi voltan sederhana untuk menghasilkan isyarat yang akan diperiksa, sehingga bentuk gelombang yang dihasilkan akan menggambarkan tahap voltan, berdasarkan intensitas cahaya di sekitar LDR.
Sambungkan komponen seperti yang ditunjukkan dalam skema di bawah;
Selepas penyambungan, persediaan harus seperti gambar di bawah.
Dengan sambungan selesai, kita boleh terus menulis kodnya.
Kod Osiloskop Arduino
Kami akan menulis kod untuk setiap dua bahagian. Untuk Plotter seperti yang disebutkan sebelumnya, kami akan menulis skrip python yang menerima data dari Arduino melalui UART dan Plots, sementara untuk penukar, kami akan menulis sketsa Arduino yang mengambil data dari ADC dan mengubahnya menjadi tahap voltan yang dihantar ke plotter.
Skrip Python (Plotter)
Oleh kerana kod python lebih kompleks, kita akan memulakannya.
Kami akan menggunakan beberapa perpustakaan termasuk; drawow, Matplotlib dan Pyserial dengan skrip python seperti yang disebutkan sebelumnya. Pyserial membolehkan kita membuat skrip python yang dapat berkomunikasi melalui port bersiri, Matplotlib memberi kita kemampuan untuk menghasilkan plot dari data yang diterima melalui port serial dan drawow memberikan cara untuk kita mengemas kini plot secara real time.
Terdapat beberapa cara untuk memasang pakej ini di PC anda, yang paling mudah adalah melalui pip . Pip boleh dipasang melalui baris perintah pada mesin windows atau linux. PIP dibungkus dengan python3 jadi saya akan menasihatkan anda memasang python3 dan tandakan kotak mengenai penambahan python ke jalan. Sekiranya anda menghadapi masalah dengan memasang pip, lihat laman web python rasmi ini untuk mendapatkan petua.
Dengan pip yang dipasang, kita sekarang boleh memasang perpustakaan lain yang kita perlukan.
Buka command prompt untuk pengguna windows, terminal untuk pengguna linux dan masukkan yang berikut;
pip memasang pyserial
Dengan ini, pasang matplotlib menggunakan;
memasang pip matplotlib
Drawnow kadang-kadang dipasang bersama matplotlib tetapi untuk memastikan, jalankan;
pasang drawow
Dengan pemasangan selesai, kami kini bersedia untuk menulis skrip python.
Skrip python untuk projek ini serupa dengan skrip yang saya tulis untuk Oscilloscope Raspberry Pi Based.
Kami mulakan dengan mengimport semua perpustakaan yang diperlukan untuk kod;
import time import matplotlib.pyplot sebagai plt dari drawow import * import pyserial
Seterusnya, kami membuat dan menginisialisasi pemboleh ubah yang akan digunakan semasa kod. Tatasusunan val akan digunakan untuk menyimpan data yang diterima daripada port siri dan cnt akan digunakan untuk mengira. Data di lokasi 0 akan dihapus setelah setiap 50 data dikira. Ini dilakukan untuk memastikan data ditampilkan di osiloskop.
val = cnt = 0
Seterusnya, kami membuat objek port bersiri di mana Arduino akan berkomunikasi dengan skrip python kami. Pastikan port com yang dinyatakan di bawah adalah port com yang sama di mana papan Arduino anda berkomunikasi dengan IDE. Tingkat baud 115200 yang digunakan di atas digunakan untuk memastikan komunikasi berkelajuan tinggi dengan Arduino. Untuk mengelakkan kesilapan, port bersiri Arduino juga mesti diaktifkan untuk berkomunikasi dengan kadar baud ini.
port = bersiri. Siri ('COM4', 115200, timeout = 0.5)
Seterusnya, kami membuat plot interaktif menggunakan;
penjelasan ()
kita perlu membuat fungsi untuk menghasilkan plot dari data yang diterima, mewujudkan had atas dan minimum yang kita harapkan, yang dalam hal ini adalah 1023 berdasarkan resolusi ADC Arduino. Kami juga menetapkan tajuk, memberi label pada setiap paksi dan menambahkan legenda untuk memudahkan mengenal pasti plotnya.
#create the function function def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Saluran 0 ') plt.legend (loc =' kanan bawah ')
Dengan ini, kami kini bersedia untuk menulis gelung utama yang mengambil data dari port bersiri apabila tersedia dan memplotnya. Untuk menyegerakkan dengan Arduino, data jabat tangan dihantar ke Arduino oleh skrip python untuk menunjukkan kesediaannya membaca data. Apabila Arduino menerima data jabat tangan, ia membalas dengan data dari ADC. Tanpa jabat tangan ini, kami tidak akan dapat merancang data dalam masa nyata.
while (True): port.write (b's ') #handshake dengan Arduino if (port.inWaiting ()): # if the arduino membalas nilai = port.readline () # baca cetakan balasan (nilai) #print sehingga kita dapat pantau nombornya = int (nilai) #konversi data yang diterima menjadi cetakan bilangan bulat ('Saluran 0: {0}'. format (nombor)) # Tidur selama setengah saat. time.sleep (0.01) val.append (int (number)) drawow (makeFig) #update plot untuk mencerminkan input data baru. jeda (.000001) cnt = cnt + 1 jika (cnt> 50): val.pop (0) # jaga plot baru dengan menghapus data pada kedudukan 0
The kod python lengkap untuk osiloskop arduino diberikan pada akhir artikel ini ditunjukkan di bawah.
Kod Arduino
Kod kedua adalah lakaran Arduino untuk mendapatkan data yang mewakili isyarat dari ADC, kemudian tunggu untuk menerima isyarat jabat tangan dari perisian plotter. Sebaik sahaja menerima isyarat jabat tangan, ia akan menghantar data yang diperoleh ke perisian plotter melalui UART.
Kita mulakan dengan menyatakan pin pin Analog Arduino di mana isyarat akan digunakan.
int sensorpin = A0;
Seterusnya, kami memulakan dan memulakan komunikasi bersiri dengan kadar baud 115200
batal persediaan () { // memulakan komunikasi bersiri pada 115200 bit sesaat agar sepadan dengan skrip python: Serial.begin (115200); }
Terakhir, fungsi voidloop () yang menangani pembacaan data, dan menghantar data melalui siri ke plotter.
gelung kosong () { // baca input pada pin analog 0: float sensorValue = analogRead (sensorpin); data bait = Serial.read (); jika (data == 's') { Serial.println (sensorValue); kelewatan (10); // kelewatan antara bacaan untuk kestabilan } }
Yang lengkap Arduino Kod Oscilloscope adalah seperti di bawah dan juga di akhir artikel ini ditunjukkan di bawah.
int sensorpin = A0; batal persediaan () { // memulakan komunikasi bersiri pada 115200 bit sesaat agar sepadan dengan skrip python: Serial.begin (115200); } gelung void () { // baca input pada pin analog 0: ################################## ###################### float sensorValue = analogRead (sensorpin); data bait = Serial.read (); jika (data == 's') { Serial.println (sensorValue); kelewatan (10); // kelewatan antara bacaan untuk kestabilan } }
Arduino Oscilloscope in Action
Muat naik kod ke persediaan Arduino dan jalankan skrip python. Anda harus melihat data mula mengalir melalui baris perintah python dan plotnya berbeza dengan intensiti cahaya seperti yang ditunjukkan dalam gambar di bawah.
Jadi ini adalah bagaimana Arduino dapat digunakan sebagai Osiloskop, ia juga boleh dibuat dengan menggunakan Raspberry pi, lihat di sini tutorial lengkap mengenai Ospilloscope berdasarkan Raspberry Pi.