DIY Eenvoudige 20 kHz Arduino-oscilloscoop op Nokia 5110 LCD
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
Benodigde gereedschappen en machines
| ||||
|
Apps en online services
|
Over dit project
Deze keer laat ik je zien hoe je een eenvoudige Arduino-oscilloscoop maakt. De maximale signaalfrequentie die de oscilloscoop kan weergeven is 20 kHz en de maximale ingangsspanning is 5 V zonder spanningsdeler.
De oscilloscoop wordt bediend met vier knoppen:
- "HOLD"-knop - die dient om de huidige status van het scherm te bevriezen
- Synchronisatieknop waarmee u het synchronisatieniveau kunt instellen.
- En knoppen "+" en "-" die de sweep, het synchronisatieniveau regelen en het signaalbeeld in HOLD-modus verplaatsen.
Op het scherm van de Nokia 5110 is verticaal elke cel 1 V, horizontaal is één cel gelijk aan de scanresolutie, die de (volgende) waarden heeft van:0,1, 0,2, 0,5, 1,0, 2,0, 5,0, 10,0, 20,0 en 50,0 ms . De sweep-waarde wordt gewijzigd met de knoppen "+" en "-", die in de linkerbovenhoek worden weergegeven. Het triggerniveau wordt weergegeven als een kleine balk aan de linkerkant van het scherm en het triggervoltage wordt weergegeven in de rechterbovenhoek van het scherm. Dit project is gepubliceerd op de arduino.ru-pagina waar u meer details kunt lezen.
Het apparaat is uiterst eenvoudig te bouwen en bestaat uit slechts een paar componenten - Arduino Nano-microcontroller
- Nokia N5110 LCD-scherm
- vier knoppen
- vier pull-down weerstanden
- Ingangsaansluiting
- En aan / uit-schakelaar en led
Ik heb de oscilloscoop getest met sinus- en rechthoekige signaalgenerator. Ook al is het geen professioneel of zeer bruikbaar instrument, het kan nog steeds worden gebruikt voor educatieve doeleinden of in uw laboratorium, voor het testen van laagfrequente signalen, vooral wetende dat het apparaat zeer eenvoudig te maken en extreem goedkoop is.
Ten slotte wordt het apparaat in een geschikte doos van PVC geplaatst en bedekt met zelfklevend behang.
Code
- Arduino-code
Arduino-codeC/C++
#include#include #include Adafruit_PCD8544 display =Adafruit_PCD8544(7, 6, 5, 4, 3);//CLK,DIN,DC,CE, RST |||| VCC +3.3 V , BL ++ 200 OM ++ 3.3 V int izm,x,y,u,i2,zz,hold,h0,h1,h2,raz=0,menu,sss=512,u_dig,data[168 ]{};unsigned long time,times;float per;byte i; void setup() {Serial.begin(9600); display.begin();display.clearDisplay();display.display(); display.setContrast(40); // contrastinstelling display.setTextSize(1); // instelling lettergrootte display.setTextColor (BLACK); // instelling van de tekstkleur pinMode (10,INPUT); // + pinMode (11, INPUT); // - pinMode (12, INPUT); // houd pinMode vast (13, INPUT); // синх ADMUX =0b01000000; // 0B0100000 10 bit A0 // 0B01100000 8 bit A0 ADCSRA =0b11110010;// CLK/4; analoogWrite (9, 127); // PWM 9 OUTPUT} void loop() {/////////////////////////// KNOPBEDIENING////////// //////////////////// if(menu==0){ if(digitalRead(10)==HIGH){if(hold==0){raz++;} if(hold==1){i2=i2+1;}delay(100);} if(digitalRead(11)==HIGH){if(hold==0){raz--;}if(hold==1&&hold>0){i2=i2-1;}vertraging(100);} } if(digitalRead(12)==HOOG){hold++;i2=0;vertraging(100);} if(digitalRead(13)==HOOG){menu++;delay(100);} if(hold>1){hold=0;}if(menu>1||menu<0){menu=0;} if(raz<=0){raz=0;}if(raz>8){raz=8;} if(menu==1){hold=0; if(digitalRead(10)==HIGH){sss+=24;delay(100);} if(digitalRead(11)==HIGH){sss-=24;delay(100);} if(sss>1023){ sss=1023;}if(sss<0){sss=0;} } display.setCursor(0,0); // cursorpositie instellen/////////////////////////SWEEP TIME gekalibreerd door generator /////////////// ///////////// if(raz==0){zz=1;h2=2;per=0.1;} if(raz==1){zz=1;h2=1; per=0.2;} if(raz==2){zz=12;h2=1;per=0.5;} if(raz==3){zz=32;h2=1;per=1;} if(raz ==4){zz=75;h2=1;per=2;} if(raz==5){zz=200;h2=1;per=5;} if(raz==6){zz=380;h2=1;per=10;} if(raz==7){zz=750;h2=1;per=20;} if(raz==8){zz=1900;h2=1;per=50;}//////////////////////////////////////////////// /////////////////// if(hold==0&&millis()-time>0){ ads();while(izm 5000){break;}}h0=0;// SYNCHRONISATIE times=micros(); while(i<167){i++;delayMicroseconds(zz); advertenties();data[i]=izm; // METING 10 bit }i=0;times=micros()-times; Serial.println(tijden); }////////////////////UITGANG OP DISPLAY////////////////////////// ///// if(millis()-time>100){ display.clearDisplay(); if(sss<204&&sss>100){u_dig=10;display.setCursor(0,40);display.print("0.4V");} else if(sss<100){u_dig=5; display.setCursor(0,40);display.print("0.2V");} else{u_dig=25;} display.setCursor(0,0); while(i<167){i++;setka(); display.drawLine(i*h2-i2, 47-data[i]/u_dig,i*h2-i2+h2-1, 47-data[i+1]/u_dig, ZWART);}i=0; display.print(per,1);display.print(" mS "); if(menu==0){if(hold==1){display.print("HOLD ");}else{display.print("AUTO");}} if(menu==1){display.print (sss/200.0,1);display.print("V ");} if(menu==1){display.drawLine(0, 48-sss/u_dig,4, 48-sss/u_dig, BLACK);} tijd=millis();} display.display(); }// loop void ads(){ //////// 10 bit /////////// do{ADCSRA |=(1 < Schema's
Productieproces
- Slimme jaloezieën
- Eenvoudige obstakelsensor met Arduino
- DIY voltmeter met Arduino en een Nokia 5110-display
- DIY 10Hz-50kHz Oscilloscoop op 128x64 LCD-scherm
- DIY eenvoudig meetwiel met roterende encoder
- Eenvoudige Arduino-chronometer
- DIY Simple Autorange Capacitance Meter (10pF-10000microF)
- AI LCD-vriend!
- Gebarengestuurd slot
- Een geïsoleerde analoge ingang voor Arduino
- Eenvoudige wekker met DS1302 RTC