O osciloscópio é um dos instrumentos de bancada mais importantes, principalmente se você for realizar alguma montagem com sinais alternados.
Contudo, seu custo pode assustar muitos iniciantes e entusiastas que gostariam de ter um instrumento desses em casa. Neste tutorial, vou apresentar um osciloscópio de 4 canais construído com Arduino Uno utilizando como interface uma aplicação web local feita com Flask, um framework Python para desenvolvimento de servidores web.
Todo o código está disponível no GitHub, é totalmente Open Source (baseado em Python), e o único hardware que você irá precisar é um Arduino Uno, seu cabo USB e um fio.
No final, iremos ter um osciloscópio DIY (Do It Yourself – Faça você mesmo) com 4 canais integrados.
Materiais
Hardware
- Arduino Uno
- Cabo USB
- Computador Windows
- 2 fios macho-macho (daqueles de protoboard)
- (Opcional: protoboard, quatro fios, resistor de 100 kOhm, e capacitor de 100 nF)
Software
- Firmware (programa que iremos carregar no Arduino Uno pelo Arduino IDE, disponível no GitHub)
- Biblioteca TimerOne (carregada no Arduino IDE para compilarmos o código)
- Flask (web server python)
- Biblioteca pyserial (biblioteca python)
- Python 3
Setup das Ferramentas
Arduino
No Arduino IDE, iremos precisar da biblioteca TimerOne.
No github da biblioteca, podemos baixar o ZIP da biblioteca:
No Arduino IDE, basta ir em Sketch -> Incluir Biblioteca -> Adicionar biblioteca ZIP
Basta então selecionar o arquivo que baixamos do GitHub da biblioteca:
Python
Será necessário ter o Python 3 instalado.
Caso não tenha, basta instalar a partir da página oficial do Python, e marcar a opção de “Add Python to PATH” durante a instalação (se precisar de mais detalhes, há um tutorial do Python Brasil para a instalação do Python 3 no Windows).
Duas bibliotecas do Python serão necessárias: flask e pyserial.
No Windows, podemos fazer a instalação pelo comando pip do Python.
Para instalar a biblioteca pyserial, basta digitar o comando “pip install pyserial” no prompt de comando do Windows:
De forma similar, basta digitar no prompt de comando “pip install flask” para a biblioteca Flask:
Obtenção do projeto Osciloscópio de 4 canais no GitHub
No GitHub do projeto, basta selecionar a opção “Download ZIP”:
Código Arduino
Temos três abas principais no programa Arduino: main, serial e timerOne.
De forma geral, a aba timerOne utiliza a biblioteca timerOne para geração da onda quadrada pelo Arduino Uno, a aba serial possui o código que implementa o protocolo serial no Arduino. Este protocolo também é implementado do lado do computador, mas pelo uso da biblioteca pyserial e o flask, como iremos detalhar na próxima seção.
Após abrir o arquivo LabUno4.ino, iremos conectar o Arduino Uno com seu cabo USB, selecionar a porta serial correspondente, e realizar a compilação e carga do programa.
Código Python no Computador
Após o programa carregado no Arduino, falta rodar o programa em Python no computador.
Antes de rodar o programa, precisamos fazer uma configuração: trocar a porta serial presente no programa pela porta serial que o Arduino Uno está conectado (que utilizamos para a carga no passo anterior), no código app.py:
Após feito o ajuste, podemos executar o código (no menu superior, Run -> Run module):
O programa em Python utiliza a biblioteca pyserial para que o computador se comunique com o Arduino Uno através da comunicação serial.
O webserver implementado com o Flask receberá as requisições HTTP do cliente (página web) e utiliza a comunicação serial da biblioteca pyserial.
Com o código app.py em execução, podemos então abrir um navegador e acessar o endereço https://127.0.0.1:
A seguinte página deverá ser aberta:
Ao clicar em LabUno4a.htm no fim da página, ou sobre a figura, iremos para outra página, que é a interface do osciloscópio, desenvolvida em HTML e javascript. Como o Arduino estará em aberto, os sinais do osciloscópio devem estar “pulando” conforme a imagem:
Exemplo de uso do Osciloscópio de 4 canais com Arduino Uno
Nesta seção iremos dar alguns exemplos de operação do osciloscópio de 4 canais.
Ajuste do trigger
O ajuste do trigger (canal e nível) pode ser feito nos campos à direita da tela superior:
Seleção de canal
A seleção dos canais para visualização na tela pode ser feita nos demais campos da tela superior:
Monitoramento de onda quadrada
Com o fio macho-macho, devemos ligar a porta D8 (onde um sinal de onda quadrada é gerado) na porta A0 (onde temos um canal do osciloscópio).
Ajuste de ms/div
Ao clicar na parte superior da tela, podemos trocar os ms/div da visualização:
Ajuste da frequência
Para modificar a frequência da onda quadrada, podemos digitar o comando “f8=500” (para ajustar para 500 Hz) no campo de Comando, e apertar a seta (>) para mandar o comando para o Arduino:
Saída Digital
Para controlar qualquer porta como saída digital, basta digitar o comando do tipo: dw=[porta],[valor 0 ou 1], sendo 0 desligado e 1 ligado.
Saída Analógica
Para controlar o PWM das portas (PWM do Arduino Uno é de 500 Hz), basta digitar o comando:
aw=[porta 3,5,6,9,10 ou 11],[valor 0 a 255]
Com outro fio macho-macho, podemos ligar a porta D5 na porta A5.
Após um comando de “aw=5,100” e configuração de um dos canais visíveis como o A5, devemos visualizar a forma de onda gerada pelo PWM do Arduino.
Uma possibilidade é o uso de um circuito RC dimensionado para transformar esta saída PWM em uma tensão contínua de 0 a 5V.
Ajuste de V/div
O ajuste de V/div no canto superior esquerdo da tela torna possível alternar entre duas visualizações: canais do osciloscópio sobrepostos ou separados.
Circuito RC no D8 (adicional)
Adicionalmente, podemos ligar um circuito RC no pino D8.
Na figura, temos uma montagem do circuito em uma protoboard:
Ajustando os parâmetros do osciloscópio, e incluindo mais um canal para visualizar a forma de onda resultante da aplicação da onda quadrada no circuito RC, podemos ver três sinais no osciloscópio construído com Arduino:
Este projeto está em constante desenvolvimento, então sugestões são muito bem vindas!
Este e outros instrumentos de bancada de baixo custo com Arduino estão sendo usados no projeto LabEAD, para a execução de atividades de laboratório de eletrônica analógica e digital de forma remota. Se você se interessou pela iniciativa, temos uma página no Facebook e uma playlist no Youtube, com experimentos de eletrônica.
Nesta playlist do LabEAD temos também uma demonstração da versão do osciloscópio de bancada standalone com ESP32, o que torna possível a visualização do osciloscópio pelo celular. Mas isso já é assunto para outro tutorial.





Olá, obrigado pelo artigo.
Qual a frequência máxima que poderia está sendo utilizada para este osciloscópio?
Olá, estou a procura de um osciloscópio para tentar verificar a onda/distorção em um amplificador de som automotivo, eu já tenho arduino e já fiz alguns experimentos, com esse eu consigo medir até qual tensão? Meu amplificador chega a mandar até 50v
Olá, poderia ensinar como ler os valores analógicos do arduino?
Olá,
Valores analógicos do Arduino podem ser lidos com a função AnalogRead, segue a referência do site do Arduino: https://www.arduino.cc/reference/pt/language/functions/analog-io/analogread/
Um tutorial que pode interessar aqui do Embarcados está disponível em: https://embarcados.com.br/arduino-entradas-analogicas/
Att.
Victor
Poise, mas você ligou a porta analógica de entrada na porta digital pwm, não seria isso? Então colocou algum filtro para a saida ficar mais analógica?
Isso, eu liguei o PWM na entrada analógica para visualizar a onda quadrada.
E sim, também adicionei um filtro RC usando os materiais opcionais (Opcional: protoboard, quatro fios, resistor de 100 kOhm, e capacitor de 100 nF) para observar uma onda com formato mais triangular (para dar o efeito que você citou de “deixar a saída mais analógica”).
As ligações são as seguintes (a partir da foto):
Att.
Victor
Entendo. E, Victor, uma pergunta específica, se não for da sua área, já fico agradecido com sua opinião e indicações, para controle de plantas, você diria que o filtro é suficiente quando queremos precisão? Ou preciso ir atrás de algum CI?
Oi Dias, eu nunca fiz projeto de controle de rega de plantas.
Mas minha sugestão é utilizar um CI específico de sensor de umidade de solo para Arduino, pode acelerar seu desenvolvimento.
Att.
Victor
Obrigado pela atenção
Olá, tenho duas dúvidas: Como ficaria o desenho do circuito para este projeto(na foto não identifiquei muito bem)?. E a segunda dúvida, é se eu posso utilizar um arduino mega?
Olá,
As ligações são:
Fio Arduino Uno Protoboard
Laranja pino 8 resistor-cima
Azul pino A1 resistor-cima
Vermelho pino A0 resistor-baixo;capacitor-cima
Preto pino GND capacitor-baixo
Sim, é possível utilizar o Mega.
Tem outro post sobre o Mega: https://embarcados.com.br/funcionalidades-de-osciloscopio-com-plotter-serial-no-arduino-mega/
Att.
Victor
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>>
dá este erro em cima mais uma vez reafírmo se alguem tiver a gentileza de me ajudar meu email é
armandojos@gmail.com
Oi José,
Esta mensagem deve ser de quando você abre o Python Shell, onde você pode ir digitando comandos e testando.
Peço que realize a instalação das bibliotecas python pelo comando pip no prompt de comando do windows (conforme detalhado no tutorial), baixe o projeto do github (vide tutorial) e tente editar o arquivo app.py com o IDLE (conforme imagem em anexo).
Att.
Victor
não consigo instalar o tal programa pynthon não abre
por favor se caso tenha a sua gentileza de me ajudar com toda a dignidade me escreve para o meu email pessoal
armandojos@gmail.com
o mestre em engenharia eletrotecnica e computadores pelo IST de Lisboa
Olá José,
Creio que esteja com problemas na instalação do python no Windows, no passo “setup das ferramentas -> python”.
Conforme indiquei no tutorial, uma referência para fazer este procedimento está em https://python.org.br/instalacao-windows/.
Minha sugestão é buscar discussões em fóruns e tutoriais para esta parte geral do python. O pessoal que faz tutoriais específicos para este setup devem conseguir te auxiliar melhor, se comentar nestes fóruns como fez aqui.
Penso ser mais proveitoso deixarmos a discussão nos comentários deste tutorial, para que eventualmente outras pessoas com problemas parecidos possam ter estas respostas como referência.
Att.
Victor
Excelente iniciativa. Principalmente agora que tantos cursos de eletrônica precisam re-estruturar para EAD.
Muito bom o tutorial !!! embora não consiga visualizar a tela do osciloscópio (“Não é possível acessar esse siteA conexão com 127.0.0.1 foi recusada”)
tentando de tudo quanto é jeito, mas por enquanto nada 😉
]
Oi Jorge,
Aparentemente deve ser algo de segurança. Qual sistema operacional e qual browser está usando?
Buscando por “flask connection refused” no google, há algumas alternativas para tentar.
Att.
Victor
Oi Victor,
Testei o seu tutorial no Linux (Ubuntu 16.04 LTS) e vi que neste caso precisa comentar a linha 11 do script app.py.
Obrigado e parabéns pelo projeto!
Oi João,
Obrigado, inclui um comentário no app.py e no README do projeto no Github.
Espero que a ferramenta seja útil.
Att.
Victor
Muito bom. Parabéns. 🙂