Construya un osciloscopio Arduino de 20 kHz en LCD Nokia 5110: Guía DIY fácil
Componentes y suministros
| Arduino Nano R3 | 1 |
| Pantalla LCD Nokia 5110 (PCD8544) | 1 |
| Resistencia 10k ohm | 4 |
| Resistencia 4.75k ohm | 1 |
| Resistencia 330 ohm | 1 |
| Pulsador momentáneo | 4 |
Herramientas y máquinas necesarias
- Soldador (genérico)
- Estaño para soldar, libre de plomo
Aplicaciones y servicios en línea
- Arduino IDE
Sobre este proyecto
Esta vez les mostraré cómo hacer un osciloscopio Arduino simple. La frecuencia máxima de señal que el osciloscopio puede mostrar es 20 kHz, y el voltaje máximo de entrada es 5 V sin divisor de voltaje.
El osciloscopio se controla con cuatro botones:
- Botón "HOLD" - congela el estado actual de la pantalla
- Botón de sincronización - permite establecer el nivel de sincronización
- Botones "+" y "-" - controlan el barrido, nivel de sincronización y mueven la imagen de la señal en modo HOLD
En la pantalla Nokia 5110, verticalmente cada celda es 1 V, horizontalmente una celda equivale a la resolución de barrido, que tiene los siguientes valores: 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 muestra en la esquina superior izquierda. El nivel de disparo se muestra como una pequeña barra en el lado izquierdo de la pantalla, y el voltaje de disparo se muestra en la esquina superior derecha. Este proyecto está publicado en la página arduino.ru donde pueden leer más detalles.
El dispositivo es extremadamente simple de construir y consiste solo en unos pocos componentes:
- Microcontrolador Arduino Nano
- Pantalla LCD Nokia N5110
- Cuatro botones
- Cuatro resistencias pull-down
- Conector de entrada
- Interruptor de alimentación y LED
Probado el osciloscopio con generador de señales senoidal y rectangular. Aunque no es un instrumento profesional o muy usable, aún puede usarse para fines educativos o en su laboratorio, para probar señales de baja frecuencia, especialmente sabiendo que el dispositivo es muy fácil de hacer y extremadamente barato.
Finalmente, el dispositivo se coloca en una caja adecuada de PVC y recubierta con papel adhesivo.
Código
Código Arduino (C/C++)
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3); // CLK,DIN,DC,CE,RST
// VCC +3.3V, BL ++ 200 OM ++ 3.3V
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);
display.setTextSize(1);
display.setTextColor(BLACK);
pinMode(10, INPUT); // +
pinMode(11, INPUT); // -
pinMode(12, INPUT); // hold
pinMode(13, INPUT); // sinc
ADMUX = 0b01000000; // 10 bit A0
ADCSRA = 0b11110010; // CLK/4
analogWrite(9, 127); // PWM 9 OUTPUT
}
void loop() {
// CONTROL DE BOTONES
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)==HIGH){ 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);
// TIEMPO DE BARRIDO calibrado por 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<sss){ ads(); h0++; if(h0>5000){ break; } }
h0=0; // SINCRONIZACIÓN
times=micros();
while(i<167){
i++;
delayMicroseconds(zz);
ads();
data[i]=izm; // MEDICIÓN 10 bit
}
i=0;
times=micros()-times;
Serial.println(times);
}
// SALIDA EN PANTALLA
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, BLACK);
}
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 ");
display.drawLine(0, 48-sss/u_dig, 4, 48-sss/u_dig, BLACK);
}
time=millis();
}
display.display();
}
void ads(){
// 10 bit
do{ ADCSRA |= (1 << ADSC); } while((ADCSRA & (1 << ADIF)) == 0);
izm = (ADCL | ADCH << 8);
}
void setka(){
for(y=8; y<47; y=y+8){
for(x=0; x<83; x=x+4){
display.drawPixel(x, y, BLACK);
}
}
for(x=0; x<83; x=x+26){
for(y=10; y<47; y=y+4){
display.drawPixel(x, y, BLACK);
}
}
}
Esquemáticos
Diagrama de conexiones disponible en el proyecto original.
Proceso de manufactura
- Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
- Osciloscopio DIY con Arduino Nano (10 Hz–50 kHz) y LCD 128×64
- Construir una rueda medidora DIY precisa con Arduino Nano y encoder rotativo
- Cronómetro Arduino Sencillo: Activado por Botón con EEPROM e Interrupciones
- Medidor de Capacitancia Autoranging DIY (10 pF–10 µF) – Fácil Construcción con Arduino
- Compañero LCD con IA: Tu Amigo Interactivo con Arduino
- Cerradura por Gestos Sin Contacto: Acceso Seguro con APDS-9960 y Arduino
- Circuito de entrada analógica aislada para Arduino
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO