- Bagaimana itu bekerja
- Komponen yang Diperlukan
- Skema
- Kode Osiloskop Arduino
- Python (Plotter) Script
- Kode Arduino
- Osiloskop Arduino Beraksi
Osiloskop adalah salah satu alat terpenting yang akan Anda temukan di meja kerja setiap insinyur atau pembuat elektronik. Ini terutama digunakan untuk melihat bentuk gelombang dan menentukan level tegangan, frekuensi, noise, dan parameter sinyal lain yang diterapkan pada inputnya yang mungkin berubah seiring waktu. Ini juga digunakan oleh pengembang perangkat lunak tertanam untuk debugging kode dan teknisi untuk memecahkan masalah perangkat elektronik selama perbaikan. Alasan ini membuat osiloskop menjadi alat yang harus dimiliki oleh setiap insinyur. Satu-satunya masalah adalah harganya bisa sangat mahal, Osiloskop yang melakukan fungsi paling dasar dengan akurasi paling rendah bisa semahal $ 45 hingga $ 100 sementara yang lebih canggih dan efisien harganya lebih dari $ 150. Hari ini saya akan mendemonstrasikan cara menggunakan Arduinodan sebuah perangkat lunak, yang akan dikembangkan dengan bahasa pemrograman favorit saya Python, untuk membangun osiloskop Arduino 4 saluran berbiaya rendah yang mampu melakukan tugas-tugas di mana beberapa osiloskop murah digunakan seperti tampilan bentuk gelombang dan penentuan level tegangan untuk sinyal.
Bagaimana itu bekerja
Ada dua bagian untuk proyek ini;
- Pengonversi Data
- The Plotter
Osiloskop umumnya melibatkan representasi visual dari sinyal analog yang diterapkan ke saluran inputnya. Untuk mencapai ini, pertama-tama kita perlu mengubah sinyal dari analog ke digital dan kemudian memplot datanya. Untuk konversi, kita akan memanfaatkan ADC (Analog to Digital converter) pada mikrokontroler atmega328p yang digunakan oleh Arduino untuk mengubah data Analog pada input sinyal menjadi sinyal digital. Setelah konversi, nilai per waktu dikirim melalui UART dari Arduino ke PC di mana perangkat lunak plotter yang akan dikembangkan menggunakan python akan mengubah aliran data yang masuk menjadi bentuk gelombang dengan memplot setiap data terhadap waktu.
Komponen yang Diperlukan
Komponen berikut diperlukan untuk membangun proyek ini;
- Arduino Uno (Salah satu papan lainnya dapat digunakan)
- Papan tempat memotong roti
- 10k Resistor (1)
- LDR (1)
- Kabel jumper
Perangkat Lunak yang Diperlukan
- IDE Arduino
- Python
- Library Python: Pyserial, Matplotlib, Drawnow
Skema
Skema untuk Arduino Oscilloscope sederhana. Yang perlu kita lakukan adalah menghubungkan sinyal yang akan diperiksa ke pin Analog yang ditentukan dari Arduino. Namun, kami akan menggunakan LDR dalam pengaturan pembagi tegangan sederhana untuk menghasilkan sinyal yang akan diperiksa, sehingga bentuk gelombang yang dihasilkan akan menggambarkan level tegangan, berdasarkan intensitas cahaya di sekitar LDR.
Hubungkan komponen seperti yang ditunjukkan pada skema di bawah ini;
Setelah koneksi, pengaturannya akan seperti gambar di bawah ini.
Setelah semua koneksi selesai, kita dapat melanjutkan untuk menulis kode.
Kode Osiloskop Arduino
Kami akan menulis kode untuk masing-masing dari dua bagian. Untuk Plotter seperti yang disebutkan sebelumnya, kita akan menulis skrip python yang menerima data dari Arduino melalui UART dan Plots, sedangkan untuk konverter, kita akan menulis sketsa Arduino yang mengambil data dari ADC dan mengubahnya menjadi level tegangan yang dikirim ke plotter.
Python (Plotter) Script
Karena kode python lebih kompleks, kita akan mulai dengannya.
Kami akan menggunakan beberapa perpustakaan termasuk; digambar, Matplotlib dan Pyserial dengan script python seperti yang disebutkan sebelumnya. Pyserial memungkinkan kita membuat skrip python yang dapat berkomunikasi melalui port serial, Matplotlib memberi kita kemampuan untuk menghasilkan plot dari data yang diterima melalui port serial dan drawow menyediakan sarana bagi kita untuk memperbarui plot secara real time.
Ada beberapa cara untuk menginstal paket-paket ini di PC Anda, yang paling mudah adalah melalui pip . Pip dapat diinstal melalui baris perintah pada mesin windows atau linux. PIP dikemas dengan python3 jadi saya akan menyarankan Anda menginstal python3 dan mencentang kotak tentang menambahkan python ke jalur. Jika Anda mengalami masalah saat menginstal pip, lihat situs web python resmi ini untuk mendapatkan tip.
Dengan pip terinstal, sekarang kita dapat menginstal pustaka lain yang kita butuhkan.
Buka prompt perintah untuk pengguna windows, terminal untuk pengguna linux dan masukkan yang berikut ini;
pip instal pyserial
Setelah ini selesai, instal matplotlib menggunakan;
pip instal matplotlib
Drawnow terkadang dipasang bersama matplotlib tetapi untuk memastikan, jalankan;
pip instal drawow
Setelah instalasi selesai, sekarang kita siap untuk menulis skrip python.
Skrip python untuk proyek ini mirip dengan yang saya tulis untuk Osiloskop Berbasis Raspberry Pi.
Kami mulai dengan mengimpor semua perpustakaan yang diperlukan untuk kode;
impor waktu impor matplotlib.pyplot sebagai plt dari drawow import * import pyserial
Selanjutnya, kami membuat dan menginisialisasi variabel yang akan digunakan selama kode. Array val akan digunakan untuk menyimpan data yang diterima dari port serial dan cnt akan digunakan untuk menghitung. Data di lokasi 0 akan dihapus setelah setiap 50 hitungan data. Ini dilakukan untuk menjaga agar data tetap ditampilkan pada osiloskop.
val = cnt = 0
Selanjutnya, kami membuat objek port serial di mana Arduino akan berkomunikasi dengan skrip python kami. Pastikan port com yang ditentukan di bawah ini adalah port com yang sama yang digunakan papan Arduino Anda untuk berkomunikasi dengan IDE. Baud rate 115200 yang digunakan di atas digunakan untuk memastikan komunikasi kecepatan tinggi dengan Arduino. Untuk mencegah kesalahan, port serial Arduino juga harus diaktifkan untuk berkomunikasi dengan laju baud ini.
port = serial.Serial ('COM4', 115200, timeout = 0,5)
Selanjutnya, kami membuat plot interaktif menggunakan;
plt.ion ()
kita perlu membuat fungsi untuk menghasilkan plot dari data yang diterima, membuat batas atas dan minimum yang kita harapkan, yang dalam hal ini adalah 1023 berdasarkan resolusi ADC Arduino. Kami juga mengatur judul, memberi label pada setiap sumbu dan menambahkan legenda untuk memudahkan identifikasi plot.
#membuat fungsi gambar def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Channel 0 ') plt.legend (loc =' lower right ')
Dengan ini selesai, kita sekarang siap untuk menulis loop utama yang mengambil data dari port serial jika tersedia dan memplotnya. Untuk melakukan sinkronisasi dengan Arduino, data jabat tangan dikirim ke Arduino oleh skrip python untuk menunjukkan kesiapannya untuk membaca data. Ketika Arduino menerima data jabat tangan, itu membalas dengan data dari ADC. Tanpa jabat tangan ini, kami tidak akan dapat memplot data secara real time.
while (True): port.write (b's ') #handshake with Arduino if (port.inWaiting ()): # if the arduino membalas value = port.readline () # baca reply print (value) #print agar kita bisa pantau nomor = int (nilai) #convert data yang diterima ke cetak integer ('Saluran 0: {0}'. format (angka)) # Tidur selama setengah detik. time.sleep (0,01) val.append (int (number)) drawow (makeFig) #update plot untuk mencerminkan input data baru plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) #membuat plot tetap segar dengan menghapus data di posisi 0
The kode python lengkap untuk osiloskop Arduino diberikan pada akhir artikel ini ditunjukkan di bawah ini.
Kode Arduino
Kode kedua adalah sketsa Arduino untuk mendapatkan data yang mewakili sinyal dari ADC, kemudian menunggu untuk menerima sinyal jabat tangan dari software plotter. Segera setelah menerima sinyal jabat tangan, ia mengirimkan data yang diperoleh ke perangkat lunak plotter melalui UART.
Kami mulai dengan mendeklarasikan pin pin Analog dari Arduino tempat sinyal akan diterapkan.
int sensorpin = A0;
Selanjutnya, kami menginisialisasi dan memulai komunikasi serial dengan baud rate 115200
void setup () { // inisialisasi komunikasi serial pada 115200 bit per detik agar sesuai dengan script python: Serial.begin (115200); }
Terakhir, fungsi voidloop () yang menangani pembacaan data, dan mengirimkan data melalui serial ke plotter.
void loop () { // baca masukan pada pin analog 0: float sensorValue = analogRead (sensorpin); data byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); penundaan (10); // penundaan di antara pembacaan untuk stabilitas } }
The lengkap Arduino Oscilloscope Kode diberikan di bawah serta di akhir artikel ini ditunjukkan di bawah ini.
int sensorpin = A0; void setup () { // inisialisasi komunikasi serial pada 115200 bit per detik agar sesuai dengan script python: Serial.begin (115200); } void loop () { // baca masukan pada pin analog 0: ################################ ###################### float sensorValue = analogRead (sensorpin); data byte = Serial.read (); if (data == 's') { Serial.println (sensorValue); penundaan (10); // penundaan di antara pembacaan untuk stabilitas } }
Osiloskop Arduino Beraksi
Unggah kode ke pengaturan Arduino dan jalankan skrip python. Anda akan melihat data mulai mengalir melalui baris perintah python dan plot bervariasi dengan intensitas cahaya seperti yang ditunjukkan pada gambar di bawah.
Nah begini cara Arduino bisa dijadikan Oscilloscope, bisa juga dibuat menggunakan Raspberry pi, cek disini tutorial lengkap Osiloskop berbasis Raspberry Pi.