- Nasıl çalışır
- Gerekli Bileşenler
- Şemalar
- Arduino Oslloskop Kodu
- Python (Çizici) Komut Dosyası
- Arduino kodu
- Arduino Osiloskopu İş Başında
Osiloskop, herhangi bir elektronik mühendisi veya üreticisinin tezgahında bulacağınız en önemli araçlardan biridir. Öncelikle dalga biçimini görüntülemek ve girişinde uygulanan, zamanla değişebilecek voltaj seviyelerini, frekansı, gürültüyü ve diğer sinyal parametrelerini belirlemek için kullanılır. Ayrıca, yerleşik yazılım geliştiricileri tarafından kod hata ayıklaması için ve teknisyenler tarafından onarım sırasında elektronik cihazlarda sorun gidermek için kullanılır. Bu nedenler, osiloskobu herhangi bir mühendis için sahip olması gereken bir araç haline getirir. Tek sorun, çok pahalı olabilmeleridir, en temel işlevleri en düşük doğrulukla gerçekleştiren Osiloskoplar 45 ila 100 ABD Doları kadar pahalı olabilirken, daha gelişmiş ve verimli olanların maliyeti 150 ABD Dolarının üzerindedir. Bugün Arduino'nun nasıl kullanılacağını göstereceğimve düşük maliyetli, 4 kanallı bir Arduino osiloskop oluşturmak için en sevdiğim programlama dili Python ile geliştirilecek bir yazılım, ucuz osiloskopun bazılarının dalga formlarının gösterilmesi ve voltaj seviyelerinin belirlenmesi gibi görevlerini yerine getirebilir. sinyaller için.
Nasıl çalışır
Bu proje için iki bölüm var;
- Veri Dönüştürücü
- Çizici
Osiloskoplar genellikle giriş kanalına uygulanan bir analog sinyalin görsel temsilini içerir. Bunu başarmak için, önce sinyali analogdan dijitale dönüştürmemiz ve ardından verileri çizmemiz gerekir. Dönüşüm için, sinyal girişindeki Analog verileri dijital sinyale dönüştürmek için Arduino tarafından kullanılan atmega328p mikrodenetleyicideki ADC'den (Analogdan Dijitale dönüştürücü) yararlanacağız. Dönüşümden sonra, zaman başına değer UART aracılığıyla Arduino'dan PC'ye gönderilir; burada python kullanılarak geliştirilecek plotter yazılımı, her bir veriyi zamana karşı çizerek gelen veri akışını bir dalga biçimine dönüştürecektir.
Gerekli Bileşenler
Bu projeyi oluşturmak için aşağıdaki bileşenler gereklidir;
- Arduino Uno (Diğer kartlardan herhangi biri kullanılabilir)
- Breadboard
- 10k Direnç (1)
- LDR (1)
- Atlama telleri
Gerekli Yazılımlar
- Arduino IDE
- Python
- Python Kitaplıkları: Pyserial, Matplotlib, Drawnow
Şemalar
Arduino Osiloskopunun şeması basittir. Tek yapmamız gereken, incelenecek sinyali Arduino'nun belirtilen Analog pinine bağlamak. Bununla birlikte, LDR'yi incelenecek sinyali üretmek için basit bir voltaj bölücü kurulumunda kullanacağız, öyle ki oluşturulan dalga formu, LDR etrafındaki ışık yoğunluğuna bağlı olarak voltaj seviyesini tanımlayacaktır.
Bileşenleri aşağıdaki şemalarda gösterildiği gibi bağlayın;
Bağlantıdan sonra kurulum aşağıdaki resimdeki gibi olmalıdır.
Tüm bağlantılar bittiğinde, kodu yazmaya devam edebiliriz.
Arduino Oslloskop Kodu
İki bölümün her biri için kodlar yazacağız. Daha önce de belirtildiği gibi Plotter için, UART ve Plots aracılığıyla Arduino'dan gelen verileri kabul eden bir python betiği yazacağız , dönüştürücü için ise ADC'den verileri alan ve dönüştüren bir Arduino taslağı yazacağız. çiziciye gönderilen voltaj seviyeleri.
Python (Çizici) Komut Dosyası
Python kodu daha karmaşık olduğu için onunla başlayacağız.
Aşağıdakileri içeren birkaç kütüphane kullanacağız; drawow, Matplotlib ve Pyserial , daha önce bahsedildiği gibi python komut dosyası ile. Pyserial , seri bağlantı noktası üzerinden iletişim kurabilen bir python betiği oluşturmamızı sağlar, Matplotlib bize seri bağlantı noktası üzerinden alınan verilerden grafikler oluşturma yeteneği verir ve drawow , grafiği gerçek zamanlı olarak güncellememiz için bir araç sağlar.
Bu paketleri bilgisayarınıza kurmanın birkaç yolu vardır, en kolayı pip yoluyla. Pip, bir Windows veya Linux makinesinde komut satırı aracılığıyla kurulabilir. PIP, python3 ile paketlenmiştir, bu yüzden python3'ü yüklemenizi ve yola python eklemeyle ilgili kutuyu işaretlemenizi öneririm. Pip'i yüklemeyle ilgili sorun yaşıyorsanız, ipuçları için bu resmi python web sitesine bakın.
Pip kurulduktan sonra artık ihtiyacımız olan diğer kitaplıkları kurabiliriz.
Windows kullanıcıları için komut istemini, linux kullanıcıları için terminali açın ve aşağıdakileri girin;
pip kurulum pyserial
Bunu yaptıktan sonra matplotlib'i ;
pip matplotlib yüklemek
Drawnow bazen matplotlib ile birlikte kurulur ama emin olmak için çalıştırın;
pip kurulumu
Kurulum tamamlandıktan sonra, artık python betiğini yazmaya hazırız.
Bu proje için python betiği, Raspberry Pi Tabanlı Osiloskop için yazdığıma benzer.
Kod için gerekli tüm kitaplıkları içe aktararak başlıyoruz;
import süresi import matplotlib.pyplot from drawow import * import pyserial
Daha sonra, kod sırasında kullanılacak değişkenleri oluşturup başlatıyoruz. Val dizisi, seri porttan alınan verileri saklamak için kullanılacak ve saymak için cnt kullanılacaktır. 0 konumundaki veriler, her 50 veri sayımından sonra silinecektir. Bu, osiloskopta görüntülenen verileri tutmak için yapılır.
val = cnt = 0
Ardından, Arduino'nun python betiğimizle iletişim kuracağı seri port nesnesini oluşturuyoruz. Aşağıda belirtilen com portunun, Arduino kartınızın IDE ile iletişim kurduğu aynı com portu olduğundan emin olun. Yukarıda kullanılan 115200 baud hızı, Arduino ile yüksek hızlı iletişim sağlamak için kullanıldı. Hataları önlemek için, Arduino seri portu da bu baud hızı ile iletişim kuracak şekilde etkinleştirilmelidir.
bağlantı noktası = seri.Seri ('COM4', 115200, zaman aşımı = 0,5)
Ardından, arsa etkileşimli hale getiriyoruz;
plt.ion ()
Alınan verilerden arsa oluşturmak için bir fonksiyon yaratmamız gerekiyor, beklediğimiz üst ve minimum limiti oluşturmalıyız, bu durumda Arduino'nun ADC'sinin çözünürlüğüne göre bu 1023'tür. Ayrıca başlığı belirledik, her ekseni etiketledik ve arsa tanımlamayı kolaylaştırmak için bir açıklama ekledik.
# şekil işlevini oluşturun def makeFig (): plt.ylim (-1023,1023) plt.title ('Osiloskop') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro - ', label =' Kanal 0 ') plt.legend (loc =' sağ alt ')
Bunu yaptıktan sonra, mevcut olduğunda verileri seri porttan alan ve grafiğini çizen ana döngüyü yazmaya hazırız. Arduino ile senkronize etmek için, verileri okumaya hazır olduğunu belirtmek için python betiği tarafından Arduino'ya bir el sıkışma verisi gönderilir. Arduino el sıkışma verilerini aldığında, ADC'den gelen verilerle yanıt verir. Bu el sıkışma olmadan, verileri gerçek zamanlı olarak çizemeyeceğiz.
while (True): port.write (b's ') # Arduino ile el sıkışma if (port.inWaiting ()): # eğer arduino value = port.readline () yanıtlıyorsa # yanıtı oku print (value) #print böylece yapabiliriz izleme numarası = int (değer) # alınan veriyi tamsayı yazdırmaya dönüştür ('Kanal 0: {0}'. format (sayı)) # Yarım saniye uyu. time.sleep (0.01) val.append (int (sayı)) drawow (makeFig) #update plot yeni veri girişini yansıtacak şekilde plt.pause (.000001) cnt = cnt + 1 if ( cnt > 50): val.pop (0) # 0 konumundaki verileri silerek grafiği taze tutun
Arduino osiloskopun için tam piton kod aşağıda gösterilen bu makalenin sonunda verilmiştir.
Arduino kodu
İkinci kod, ADC'den gelen sinyali temsil eden verileri elde etmek için Arduino taslağıdır, ardından çizici yazılımından el sıkışma sinyalini almayı bekleyin. El sıkışma sinyalini alır almaz, elde edilen verileri UART aracılığıyla plotter yazılımına gönderir.
Biz Arduino analog pimi pimi bildirerek başlamak sinyal uygulanacağı için.
int sensorpin = A0;
Ardından 115200 baud hızı ile seri iletişimi başlatır ve başlatırız.
void setup () { // python betiğiyle eşleşecek şekilde saniyede 115200 bitte seri iletişimi başlat : Serial.begin (115200); }
Son olarak, verilerin okunmasını işleyen ve verileri çiziciye seri olarak gönderen voidloop () işlevi.
void loop () { // analog pin 0'daki girişi okuyun: float sensorValue = analogRead (sensorpin); bayt verisi = Serial.read (); eğer (data == 's') { Serial.println (sensorValue); gecikme (10); // kararlılık için okumalar arasında gecikme } }
Tam Arduino Osiloskop Kod aşağıda gösterilen bu makalenin sonundaki yanı sıra aşağıda verilmiştir.
int sensorpin = A0; void setup () { // python betiğiyle eşleşecek şekilde saniyede 115200 bitte seri iletişimi başlat : Serial.begin (115200); } void loop () { // analog pin 0: ################################### ####################### float sensorValue = analogRead (sensorpin); bayt verisi = Serial.read (); eğer (data == 's') { Serial.println (sensorValue); gecikme (10); // kararlılık için okumalar arasında gecikme } }
Arduino Osiloskopu İş Başında
Kodu Arduino kurulumuna yükleyin ve python komut dosyasını çalıştırın. Verilerin python komut satırı aracılığıyla akışa başladığını ve aşağıdaki resimde gösterildiği gibi ışık yoğunluğuna göre grafiğin değiştiğini görmelisiniz.
Yani Arduino bu şekilde Osiloskop olarak kullanılabilir, Raspberry pi kullanılarak da yapılabilir, burada Raspberry Pi tabanlı Osiloskop ile ilgili tam öğreticiyi kontrol edin.