Já usaram o plotter serial do Arduino IDE?
No desenvolvimento do osciloscópio de 4 canais com Arduino Uno, utilizamos esta ferramenta para ajudar nas visualizações iniciais.
Neste artigo, irei apresentar o uso desta ferramenta, e a construção de algumas funcionalidades do osciloscópio que disponibilizei no meu último artigo: Osciloscópio de 4 canais com Arduino Uno.
Iremos usar Arduino IDE e o Plotter Serial, ferramenta que já vem integrada com a IDE. Utilizaremos um Arduino Mega, geração de onda quadrada com PWM e comunicação serial, e apresentamos o desenvolvimento do código em nove passos.
Materiais
Hardware
- Arduino Mega
- Cabo USB
- Computador Windows
- 1 fio macho-macho
Software
- Arduino IDE
1. Setup Arduino IDE
A Arduino IDE está disponível no site oficial do Arduino.
Para quem é iniciante, vale a pena conferir este outro artigo com maiores detalhes sobre a instalação e uso desta IDE.
Na Arduino IDE, abra o exemplo “Blink”, em Arquivo -> Exemplos -> 01.Basics -> Blink
Conecte o Arduino Mega no Computador através do cabo USB. Na Arduino IDE, selecione o Arduino Mega como placa em Ferramentas -> Placa -> Arduino/Genuino Mega or Mega 2560.
Selecione também a porta USB onde o Arduino Mega está conectado, em Ferramentas -> Porta.
Aperte o ícone de carregar. Após a compilação e carregamento, indicado pela mensagem “Carregado”, o led integrado ao Arduino Mega deverá estar piscando.
2. Uso de PWM para Geração de Onda Quadrada
Vamos usar o PWM para geração de onda quadrada.
Para isso, iremos tomar como base o exemplo “Fade”, em Arquivo -> Exemplos -> 01.Basics -> Fade
A partir do exemplo, observamos a declaração do pino 9 com suporte a PWM como saída, e o uso de analogWrite(pino, valor) para o PWM, onde pino é o pino onde o sinal PWM será gerado, e valor é um parâmetro entre 0 a 255, que indica o duty cycle da onda gerada (isto é, em que porcentagem do tempo o sinal fica em 1).
Adaptamos estes comandos para a geração do sinal PWM no início do programa.
Agora que geramos o sinal, precisamos visualizá-lo. Após completar os passos seguintes, com as funcionalidades de osciloscópio desenvolvidas, poderemos visualizar este sinal e ter certeza do correto funcionamento.
3. Comunicação Básica Serial
No setup, iremos incluir a comunicação serial e imprimir duas frases para teste através dos comandos Serial.begin() e Serial.println().
Iremos abrir o monitor serial em Ferramentas -> Monitor Serial.
Importante configurar o baud rate do monitor serial em 115200, o mesmo especificado no código MegaPlotter.
Após a compilação e carga do programa, podemos ver os textos no monitor serial, e assim validar o correto funcionamento desta comunicação.
4. Temporização
Agora iremos executar um procedimento a cada dois segundos.
Para isso, declaramos uma variável prevMillis, que armazenará um registro da contagem de milisegundos. No loop, comparamos esta variável com o registro atual da contagem de milisegundos. Se esta diferença for maior que 2000, atualizamos o prevMillis para nos prepararmos para a próxima execução, e podemos realizar o procedimento temporizado.
Neste caso, o procedimento temporizado foi a impressão da frase “teste” com o uso do Serial.println(), conforme o passo anterior.
Após a compilação e carga, devemos visualizar a impressão da palavra “teste” a cada 2 segundos no monitor serial.
5. Leitura da Entrada Analógica
Iremos ler a entrada analógica A0 e imprimir esta leitura a cada dois segundos.
Basta declarar o pino A0 como entrada no setup, e substituir o “texto” do programa anterior pela função analogRead().
Após compilação e carga do programa, os valores lidos devem estar disponíveis no monitor serial, com atualização a cada dois segundos. Como o pino A0 ainda não está conectado (ou seja, o pino A0 está em aberto), o valor no monitor serial deve mudar a cada leitura.
6. Armazenamento de 2500 amostras em Lista
Iremos armazenar 2500 amostras coletadas com o analogRead() em uma lista,e a cada dois segundos coletar e imprimir os resultados.
Com a declaração da lista e dois loops dentro do loop principal, conseguimos implementar estas funcionalidades.
7. Visualização das 2500 amostras com Plotter Serial
Podemos fechar o monitor serial e abrir o plotter serial, em Ferramentas -> Plotter serial.
Lembre-se de conferir se o baud rate está em 115200.
Observamos que a escala fica mudando a cada impressão.
Para corrigir isto, podemos imprimir mais dois canais: uma constante em 0 e outra constante em 1023:
Para testar, podemos ligar o fio macho-macho no A0, e segurar a outra ponta na mão.
O sinal deve ser alternado:
8. Monitoramento de Onda Quadrada
Podemos monitorar a onda quadrada gerada no passo 1 com o plotter serial.
Primeiro, o fio macho-macho deve ser conectado entre os pinos A0 e 9 do Arduino Mega.

9. Sincronismo (trigger)
Para implementar o trigger e funcionalidade single presentes em osciloscópios convencionais, é necessário monitorar o sinal de interesse, e detectar sua borda de subida.
No loop, adicionamos outra estrutura for que realiza a leitura do valor analógico atual, compara com o valor anterior, e permite os procedimentos de leitura, armazenamento e impressão implementados anteriormente se o valor da leitura anterior for menor que o limiar (definido como 512), e o valor atual for maior que o limiar.
Este código funciona da seguinte forma:
- Início do prevState como -1 para realizar a comparação entre o estado anterior e o atual apenas na segunda leitura. Se o prevState fosse inicializado como 0, caso a primeira leitura fosse maior que sincValue o trigger seria disparado, mesmo que não fosse uma borda de subida.;
- Loop com variável k entre 0 e 500, com k incrementando em uma unidade a cada passo
- Obtemos a variável estado como um booleano (valor 0 ou 1; falso ou verdadeiro), que indica se a leitura atual é maior que o limiar (definido como 512);
- Se o estado anterior indica que o sinal lido anterior não era maior que o limiar, mas o estado atual indica que o sinal lido atual é maior que o limiar, termine o loop e prossiga para os procedimentos de leitura, armazenamento e impressão;
- Caso contrário, atualize o valor do estado anterior com o estado atual.
De forma visual, os passos descritos estão representados na figura a seguir:
Outros ajustes são a definição de uma variável binária para que a leitura ocorra apenas uma vez; troca do número total de amostras de 2500 para 500, para que cada coleta de dados preencha a tela inteira; e a troca da referência do valor máximo de 1023 para 1100 para melhorar a visualização.
Com esses ajustes feitos, podemos ver a onda gerada com o plotter serial.
Observe que a cada reinício (que pode ser feito com o botão físico de reinício presente no Arduino Mega), uma coleta de 500 amostras é realizada.
Conclusão
Apresentamos o desenvolvimento passo-a-passo de funcionalidades de osciloscópio com Arduino Mega, e visualizamos a onda quadrada PWM com sucesso.
Diferente do meu artigo anterior, desta vez mostramos o raciocínio por trás da construção das funcionalidades desejadas.
O código está disponível em GitHub.
O desenvolvimento e compartilhamento de ferramentas de bancada com Arduino é uma iniciativa do projeto LabEAD, que busca viabilizar laboratórios remotos neste contexto de distanciamento social na USP e UFABC.Se interessou? Dê uma olhada nos vídeos da playlist no Youtube, e na página no Facebook.





Achei curiosíssimo porque na lista de “materiais” impõe-se computador windows já que no GNU-Linux (e, suponho, no Mac) o código funciona do mesmo jeito.
Oi Romualdo,
Deixamos apenas computador Windows pois é o que testamos na época.
Se você conseguiu rodar tudo no Linux, agradeço se puder deixar descrito aqui os detalhes (versão por exemplo) para que as próximas pessoas que seguirem o tutorial já tenham esta informação.
Att.
Victor