DIY Osciloscopio Arduino simple de 20 kHz en Nokia 5110 LCD
Componentes y suministros
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 4 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 4 |
Herramientas y máquinas necesarias
![]() |
| |||
![]() |
|
Aplicaciones y servicios en línea
![]() |
|
Acerca de este proyecto
En esta ocasión te mostraré cómo hacer un osciloscopio Arduino simple. La frecuencia de señal máxima que puede mostrar el osciloscopio es de 20 kHz y el voltaje de entrada máximo es de 5 V sin divisor de voltaje.
El osciloscopio se controla mediante cuatro botones:
- Botón "HOLD" - que sirve para congelar el estado actual de la pantalla
- Botón de sincronización que le permite configurar el nivel de sincronización.
- Y los botones "+" y "-" que controlan el barrido, el nivel de sincronización y mueven la imagen de la señal en modo HOLD.
En la pantalla del Nokia 5110, verticalmente cada celda es 1 V, horizontalmente una celda es igual a la resolución de escaneo, que tiene los (siguientes) valores de:0.1, 0.2, 0.5, 1.0, 2.0, 5.0, 10.0, 20.0 y 50.0 ms . El valor de barrido se cambia con los botones "+" y "-", que se muestran en la esquina superior izquierda. El nivel de activación se muestra como una pequeña barra en el lado izquierdo de la pantalla y el voltaje de activación se muestra en la esquina superior derecha de la pantalla. Este proyecto está publicado en la página arduino.ru donde puede leer más detalles.

El dispositivo es extremadamente simple de construir y consta de solo unos pocos componentes:microcontrolador Arduino Nano
- Pantalla LCD Nokia N5110
- cuatro botones
- cuatro resistencias desplegables
- Conector de entrada
- Y interruptor de encendido y Led
Probé el osciloscopio con generador de señal sinusoidal y rectangular. Aunque no es un instrumento profesional o muy útil, aún puede usarse con fines educativos o en su laboratorio, para probar señales de baja frecuencia, especialmente sabiendo que el dispositivo es muy fácil de fabricar y extremadamente barato.
Finalmente, el dispositivo se coloca en una caja adecuada de PVC y se recubre con papel tapiz autoadhesivo.
Código
- código Arduino
Código Arduino C / 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; configuración vacía () {Serial.begin (9600); display.begin (); display.clearDisplay (); display.display (); display.setContrast (40); // ajuste de contraste display.setTextSize (1); // establecer el tamaño de fuente display.setTextColor (BLACK); // configurando el color del texto pinMode (10, INPUT); // + pinMode (11, ENTRADA); // - pinMode (12, ENTRADA); // mantener pinMode (13, INPUT); // синх ADMUX =0b01000000; // 0B0100000 10 bits A0 // 0B01100000 8 bits A0 ADCSRA =0b11110010; // CLK / 4; analogWrite (9, 127); // SALIDA PWM 9} bucle vacío () {/////////////////////////// CONTROL DE BOTÓN ////////// ////////////////////// 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;} delay (100);}} if (digitalRead (12) ==HIGH) {hold ++; i2 =0; delay (100);} if (digitalRead (13) ==ALTA) {menu ++; delay (100);} if (mantener> 1) {mantener =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); // establecer la posición del cursor /////////////////////////// TIEMPO DE BARRIDO calibrado por el generador /////////////// ///////////// 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; // SINCRONIZACIÓN tiempos =micros (); while (i <167) {i ++; delayMicroseconds (zz); anuncios (); datos [i] =izm; // MEDIDA 10 bit} i =0; tiempos =micros () - tiempos; Serial.println (veces); } ////////////////////// SALIDA EN PANTALLA ////////////////////////// ///// if (millis () - tiempo> 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-datos [i] / u_dig, i * h2-i2 + h2-1, 47-data [i + 1] / u_dig, BLACK);} i =0; display.print (por, 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 (menú ==1) {display.drawLine (0, 48-sss / u_dig, 4, 48-sss / u_dig, BLACK);} tiempo =millis ();} display.display (); } // bucle de anuncios vacíos () {//////// 10 bits /////////// do {ADCSRA | =(1 < Esquemas
![]()
Proceso de manufactura
- Persianas inteligentes
- Sensor de obstáculos simple con Arduino
- Voltímetro de bricolaje con Arduino y una pantalla Nokia 5110
- Osciloscopio DIY de 10Hz-50kHz en pantalla LCD de 128x64
- Rueda de medición simple de bricolaje con codificador giratorio
- Cronómetro Arduino simple
- Medidor de capacitancia de rango automático simple para bricolaje (10pF-10000microF)
- ¡Amigo de AI LCD!
- Bloqueo controlado por gestos
- Una entrada analógica aislada para Arduino
- Reloj despertador simple con DS1302 RTC