Osciloscópio DIY 10Hz-50kHz em tela LCD 128x64
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 3 |
Ferramentas e máquinas necessárias
|
Aplicativos e serviços online
|
Sobre este projeto
Este projeto descreve uma maneira de fazer um osciloscópio simples que tem uma faixa de 10Hz a 50kHz. Essa é uma faixa extremamente grande, visto que o dispositivo não utiliza um chip conversor externo de digital para analógico, mas apenas Arduino.
O resultado é exibido em uma tela LCD relativamente grande (ST7920) com resolução de 128x64 pixels. A área de exibição de medição é 96x64 e a área de exibição de informações é 32x64, onde é mostrada a frequência do sinal de teste, Vpp etc.
É extremamente simples de construir e consiste em apenas alguns componentes:
- Arduino Nano
- Visor LCD ST7920 com resolução de 128x64
- três interruptores momentâneos
- dois potenciomêmeros
- e um capacitor 100 microF
O dispositivo tem várias funções como:disparo automático (display muito estável), Velocidade de varredura:0,02ms / div ~ 10ms / div, de acordo com o transporte e divisão 1-2-5 em nove níveis e função Hold:Congela a forma de onda e os parâmetros do display. Este projeto está publicado no blog de Wu Hanqing, onde você pode encontrar o código original. Fiz alterações mínimas porque estava construindo o osciloscópio com base no hardware de um de meus projetos anteriores. Como você pode ver no vídeo, o instrumento tem uma visão muito clara devido à tela grande e também um disparador automático surpreendentemente bom. A posição vertical da imagem é ajustada com o potenciômetro de 50 kohms, e o contraste com o potenciômetro de 10 kohms. Testei o osciloscópio com um gerador de sinal senoidal e retangular.
Por último, mesmo não sendo um instrumento profissional ou muito utilizável, pode ainda ser utilizado para fins educacionais ou em seu laboratório, para testar sinais de baixa frequência, principalmente sabendo que o dispositivo é muito fácil de fazer e extremamente barato.
Código
- código Arduino
Código do Arduino C / C ++
#includeU8GLIB_ST7920_128X64_4X u8g (6, 5, 4); entrada int =A0; int Key_add =8; int Key_sub =9; int Key_hold =10; int x, y; int i, i1, i2, V_min, V_max, V_mid, t, t0, t1, sta, Key =1, hold =0; long Freq; float Vpp; int Y [96]; Buffer int [192]; const uint8_t L [] PROGMEM ={0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00, 0xC0, 0x01, 0x80, 0x60, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x01, 0xC0, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0xE3, 0xDF, 0xB6, 0x6F, 0x8F, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0x8F, 0xFF, 0x00, 0x01, 0xE3, 0x1B, 0xB6, 0x6D, 0x9B, 0x80, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x03, 0x33, 0x31, 0xB6, 0x6C, 0xB1, 0x80, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x03, 0xF 3, 0x31, 0xB6, 0x6C, 0xB1, 0x80, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x06, 0x33, 0x1B, 0xB6, 0x6C, 0x9B, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x06, 0x1B, 0x1F, 0xBE, 0x6C, 0x8F, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x03, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x0C, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x0C, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x0C, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 x08, 0x10, 0x0E, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0F, 0x1E, 0x3C, 0xF8, 0xF0, 0x00, 0x00, 0x08, 0x10, 0x0E, 0x01, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x0D, 0x93, 0x6E, 0xCD, 0x90, 0x00, 0x00, 0x08, 0x10, 0x0F, 0x87, 0xFF, 0xF9, 0x80, 0x80, 0x00, 0x00, 0x0F, 0x30, 0xC6, 0xCF, 0xF8, 0x00, 0x00, 0x08, 0x10, 0x0F, 0x87, 0xFF, 0xF9, 0x80, 0x00, 0x00, 0x03, 0xB0, 0xC6, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x0D, 0x9B, 0x6C, 0xCD, 0xB0, 0x00, 0x00, 0x08, 0x10, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x07, 0x9E, 0x3C, 0xF9, 0xE0, 0x00, 0x00, 0x08, 0x10, 0x0F, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x08, 0x10, 0x03, 0xFF, 0xFF, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x08, 0x10, 0x03, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x1F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x07, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x07, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x10, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x07, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x07, 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x07, 0x83, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0 0, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0 x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; void setup () {pinMode (Key_add, INPUT); digitalWrite (Key_add, HIGH); pinMode (Key_sub, INPUT); digitalWrite (sub-chave, ALTO); pinMode (Key_hold, INPUT); digitalWrite (Key_hold, HIGH); ADMUX =0x60; ADCSRA =0xe2; u8g.setFont (u8g_font_5x7); u8g.firstPage (); faça {u8g.drawBitmapP (0, 0, 16, 64, L); } while (u8g.nextPage ()); atraso (2000); } void loop () {amostra (); A medida( ); Transformar (); Key_scan (); if (mantenha ==0) {u8g.firstPage (); fazer {desenhar (); } while (u8g.nextPage ()); }} void sample () {para (i =0; i <192; i ++) {Buffer [i] =ADCH; interruptor (chave) {caso 1:quebra; caso 2:atraso Microssegundos (4); pausa; caso 3:atraso Microssegundos (10); pausa; caso 4:atraso Microssegundos (23); pausa; caso 5:atraso Microssegundos (60); pausa; caso 6:atraso Microssegundos (123); pausa; caso 7:atraso Microssegundos (248); pausa; caso 8:atraso Microssegundos (623); pausa; caso 9:atraso Microssegundos (1247); pausa; padrão:break; }}} void Measure () {V_max =Buffer [0]; V_min =Buffer [0]; para (i =0; i <192; i ++) {if (Buffer [i]> V_max) V_max =Buffer [i]; if (Buffer [i] =V_mid) {i1 =i; pausa; }} para (i =i1 + 1; i <98 + i1; i ++) {if (Buffer [i] =V_mid) {i2 =i; pausa; }} t =i2-i1; se (t> 0) Freq =8000 / t; else Freq =0;} void Transform () {for (sta =0; sta <96; sta ++) {if (Buffer [sta] <128 &&Buffer [sta + 2]> 128) quebrar; } para (i =0; i <96; i ++) Y [i] =63- (Tampão [i + sta]>> 2); } void draw () {for (x =0; x <95; x ++) u8g.drawLine (x, Y [x], x, Y [x + 1]); u8g.drawFrame (0,0,97,64); u8g.drawLine (48,0,48,63); u8g.drawLine (0,32,96,32); para (x =0; x <96; x + =8) u8g.drawLine (x, 31, x, 33); for (y =0; y <64; y + =8) u8g.drawLine (47, y, 49, y); for (x =8; x <96; x + =8) {for (y =8; y <64; y + =8) u8g.drawPixel (x, y); } u8g.drawStr (98,7, "MS / div"); u8g.drawStr (98,23, "V / div"); u8g.drawStr (98,30, "0,324"); u8g.drawStr (98,40, "Vpp"); u8g.setPrintPos (98, 47); u8g.print (Vpp); u8g.drawStr (118,47, "V"); u8g.drawStr (98,55, "F (HZ)"); switch (chave) {caso 1:u8g.drawStr (98,14, "0,02"); u8g.setPrintPos (98, 62); u8g.print (Freq * 50); pausa; caso 2:u8g.drawStr (98,14, "0,05"); u8g.setPrintPos (98, 62); u8g.print (Freq * 20); pausa; caso 3:u8g.drawStr (98,14, "0,1"); u8g.setPrintPos (98, 62); u8g.print (Freq * 10); pausa; caso 4:u8g.drawStr (98,14, "0,2"); u8g.setPrintPos (98, 62); u8g.print (Freq * 5); pausa; caso 5:u8g.drawStr (98,14, "0,5"); u8g.setPrintPos (98, 62); u8g.print (Freq * 2); pausa; caso 6:u8g.drawStr (98,14, "1"); u8g.setPrintPos (98, 62); u8g.print (Freq); pausa; caso 7:u8g.drawStr (98,14, "2"); u8g.setPrintPos (98, 62); u8g.print (Freq / 2); pausa; caso 8:u8g.drawStr (98,14, "5"); u8g.setPrintPos (98, 62); u8g.print (Freq / 5); pausa; caso 9:u8g.drawStr (98,14, "10"); u8g.setPrintPos (98, 62); u8g.print (Freq / 10); pausa; padrão:break; }} void Key_scan () {if (digitalRead (Key_add) ==LOW) {while (digitalRead (Key_add) ==LOW); Key ++; if (Chave ==10) Chave =9; atraso (10); } if (digitalRead (Key_sub) ==LOW) {while (digitalRead (Key_sub) ==LOW); Chave--; if (Chave ==0) Chave =1; atraso (10); } if (digitalRead (Key_hold) ==LOW) {while (digitalRead (Key_hold) ==LOW); segure =~ segure; atraso (10); }}
Esquemas
Processo de manufatura
- DIY LUMAZOID Arduino Music Visualiser
- DIY Simple 20 kHz Arduino Oscilloscope no Nokia 5110 LCD
- Homem de Ferro
- Encontre-me
- Matriz LED + Display da porta do sensor de movimento [Arduino Holiday]
- Controle do umidificador Arduino
- Voltímetro DIY com Arduino e um visor Nokia 5110
- Sonar usando arduino e exibição no IDE de processamento
- MobBob:DIY Arduino Robot Controlado por Smartphone Android
- Osciloscópio DIY 10Hz-50kHz em tela LCD 128x64