Mükemmel Osilaskop (Pultoscope)

Merhaba arkadaşlar, internette dolaşırken arduino ile yapılmış güzel bir çalışma ile karşılaştım. Bu proje elektronikle uğraşan tüm arkadaşlar için olmazsa olmaz diyebilirim.

Proje ile elektronik projeleriniz için gerekli olan sinyali üretmede,elektronik devrenizde malzemelerin sağlıklarını kontrol etmede ve üretilen sinyallerin OSİLASKOP aracılığıyla ölçme işlemlerinde rahatlıkla kullanabilirsiniz.

Daha önce paylaştığımız çok fonksiyonlu multimetre

Tüm Elektronik Devre Elemanlarının Ölçümü

Projemizin görüntüsünü sizlerle paylaşmak istiyorum. Proje sadece birkaç saatinizi alır ama atölyenizde yada masanızdan ayıramayacağınızı belirtmek isterim.

Projenin alttan görünüşü

Arkadaşlar alttaki resimleri çekebilmek için ikinci bir sinyal jeneratörüne ihtiyacım olduğundan başka bir arduinoya alttaki kodları yükleyerek PWM çıkışından aldığım sinyali projemizle ölçtüm.

Sinyal üretici için kullandığım Program

 

void setup() {

}

void loop() {
tone (8, 10523 , 10000);

delay(1000);
}

 

 

Projede 3 adet buton ile menüde gezebilir ve OSİLASKOP ve Sinyal Üretici ayarlarını ayarlayabilirsiniz.

Kullanılan Malzemeler

  • Arduino board (Arduino Uno, Pro Mini, Nano V3…) x 1
  • Nokia LCD 5110/3310 x 1
  • 10K Direnç x 6
  • 270 Ohm Direnç x 1
  • 0.1 µF Kondansatör x 1
  • Push Buton x 3
  • 27-30 MHz crystal (İsteğe bağlı) Projenizde arduinoya overclock yaptırmak isterseniz kullanabilirsiniz.

Bağlantı Şeması

Programımız

//Моя версия генератора сигналлов, разработанна для рабочих целей.
//Страница проэкта  http://srukami.inf.ua/signalgenerator.html
#include <PWM.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#define led  9   //пин для генератора сигналов (не менять)
//#################№№№№№№####пользовательские настройки
#define levo 10  //кнопка ЛЕВО(можно любой пин)
#define ok 11    //кнопка ОК(можно любой пин)
#define pravo 12 //кнопка ПРАВО(можно любой пин) 
Adafruit_PCD8544 display = Adafruit_PCD8544(2, 3, 4, 6, 7);//пины к которым у вас подключен дисплей          
int PWM = 100;//стартовое значение ШИМ от 0 до 255        
int32_t frequency = 6000; //стартовое значение частоты в Гц
byte cont=40;//контрастность дисплея
//###########################################################
byte hag=0;
int mnog=0;
boolean flag=0;
byte mass[85];
byte x=0;     
void setup(){
InitTimersSafe(); 
display.begin();
display.setContrast(cont);
display.display();
ADCSRA = 0b11100010;
ADMUX = 0b01100100;
bool success = SetPinFrequencySafe(led, frequency);
delay(50);
      }
      
void Zamer(){
  for(byte i=0;i<84;i++){ 
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  mass[i]=ADCH;
  }
}
void Zamer1(){
  for(byte i=0;i<84;i++){ 
  while ((ADCSRA & 0x10)==0);
  ADCSRA|=0x10;
  mass[i]=ADCH;
  delayMicroseconds(5);
  }
}
void Zamer2(){
  for(byte i=0;i<84;i++){ while ((ADCSRA & 0x10)==0); ADCSRA|=0x10; mass[i]=ADCH; delayMicroseconds(50); } } void loop() { if(frequency>5000){Zamer();}
if(frequency<=5000){Zamer1();}
if(frequency<=1000){Zamer2();} if(frequency>40000){
    display.clearDisplay();
    display.setCursor(0,0);
    display.println("Sorry");
    display.println("Oscilloscope");
    display.println("disabled");    
          }
if(frequency<=40000){//отрисовка графика
      display.clearDisplay();
      x=0;
      for(int y=1;y<83;y++){
      display.drawLine(x, 37-mass[y]/7, x+1, 37-mass[y+1]/7, BLACK);
      x=x+1;   
      }
}
if (flag==0){//флаг выборов режима настройки ШИМ или Частоты
            if(digitalRead(levo)==HIGH){
              frequency=frequency-mnog;
              if(frequency<0){frequency=0;}
              bool success = SetPinFrequencySafe(led, frequency);
              delay(3);//защита от дребезга 
            }
            if(digitalRead(pravo)==HIGH){
              frequency=frequency+mnog;
              bool success = SetPinFrequencySafe(led, frequency);
              delay(3);//защита от дребезга 
            }  
}
if (flag==1){//флаг выборов режима настройки ШИМ или Частоты
            if(digitalRead(levo)==HIGH){
              PWM=PWM-10;
              if(PWM<0){PWM=255;} delay(3);//защита от дребезга } if(digitalRead(pravo)==HIGH){ PWM=PWM+10; if(PWM>255){PWM=0;} 
              delay(3);//защита от дребезга 
            }  
}      
if(digitalRead(ok)==HIGH){//переключение разряда выбора частоты 
  delay(3);//защита от дребезга
  hag++;
  if(hag>=5){hag=0;}
}     
display.setCursor(0,40);
display.print(frequency); 
display.print("Hz");
display.print("*");    
      if(hag==0){//выбор множителя частоты
          display.print("1"); 
          mnog=1;
          flag=0;
      }
      if(hag==1){//выбор множителя частоты
          display.print("10"); 
          mnog=10;
      }
      if(hag==2){//выбор множителя частоты
          display.print("100"); 
          mnog=100;
      }
      if(hag==3){//выбор множителя частоты
          display.print("1K"); 
          mnog=1000;
      } 
      if(hag==4){//выбор  PWM
          display.print("PWM");
          display.print(PWM); 
          flag=1;
      } 
pwmWrite(led, PWM);
delay(300);  
display.display();
}

Github

Gerekli Kütüphaneler

 

link

 

Boş zamanlarda arduino ile uğraşan kendi halinde bir Öğretmen.

  1. latif kursad cakir 18 Haziran 2017 12:21

    iyi günler.

    Başlıktaki Osilaskop kelimesini osiloskop olarak değiştirirseniz proje sayfasına ulaşmak daha kolay olacaktır diye düşünüyorum.

    İyi çalışmalar.

    Cevapla
    • Arduinocu 5 Temmuz 2017 13:46

      tedekkurler

      Cevapla
  2. Hasan 22 Mayıs 2017 20:51

    Due ile uyumlu mu?

    Cevapla
  3. Pk 13 Mayıs 2017 10:38

    En fazla kac hz cikis veriyor

    Cevapla
    • Arduinocu 13 Mayıs 2017 14:54

      normal şartlarda 16mhz lik bir kristal var ama bunu 27-30Mhz lik kristalle değiştirerek çıkış frekansını arttırabiliyorsunuz .
      max çıkış frekansını ölçmedim ne kadar olabilir emin değilim.

      Cevapla

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.