Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

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

Aplicaciones y servicios en línea

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:

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:

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

  1. Persianas Inteligentes: Control Automático de Luz con Arduino y Energía Solar
  2. Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
  3. Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
  4. Osciloscopio DIY con Arduino Nano (10 Hz–50 kHz) y LCD 128×64
  5. Construir una rueda medidora DIY precisa con Arduino Nano y encoder rotativo
  6. Cronómetro Arduino Sencillo: Activado por Botón con EEPROM e Interrupciones
  7. Medidor de Capacitancia Autoranging DIY (10 pF–10 µF) – Fácil Construcción con Arduino
  8. Compañero LCD con IA: Tu Amigo Interactivo con Arduino
  9. Cerradura por Gestos Sin Contacto: Acceso Seguro con APDS-9960 y Arduino
  10. Circuito de entrada analógica aislada para Arduino
  11. Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO