- Como funciona
- Componentes Requeridos
- Esquemas
- Código do Osciloscópio Arduino
- Script Python (Plotter)
- Código Arduino
- Osciloscópio Arduino em ação
O Osciloscópio é uma das ferramentas mais importantes que você encontrará na bancada de qualquer engenheiro ou fabricante de eletrônicos. Ele é usado principalmente para visualizar a forma de onda e determinar os níveis de tensão, frequência, ruído e outros parâmetros de sinais aplicados em sua entrada que podem mudar com o tempo. Ele também é usado por desenvolvedores de software integrado para depuração de código e técnicos para solucionar problemas de dispositivos eletrônicos durante o reparo. Esses motivos tornam o osciloscópio uma ferramenta indispensável para qualquer engenheiro. O único problema é que podem ser muito caros. Os osciloscópios que executam as funções mais básicas com a menor precisão podem custar US $ 45 a US $ 100, enquanto os mais avançados e eficientes custam mais de US $ 150. Hoje vou demonstrar como usar o Arduinoe um software, que será desenvolvido com minha linguagem de programação favorita, Python, para construir um osciloscópio Arduino de 4 canais de baixo custo, capaz de realizar as tarefas para as quais alguns dos osciloscópios baratos são implantados, como a exibição de formas de onda e determinação de níveis de tensão para sinais.
Como funciona
Existem duas partes para este projeto;
- O conversor de dados
- O Plotter
Os osciloscópios geralmente envolvem a representação visual de um sinal analógico aplicado ao seu canal de entrada. Para conseguir isso, primeiro precisamos converter o sinal de analógico para digital e, em seguida, plotar os dados. Para a conversão, estaremos aproveitando o ADC (conversor Analógico para Digital) do microcontrolador atmega328p usado pelo Arduino para converter os dados analógicos da entrada do sinal para um sinal digital. Após a conversão, o valor por hora é enviado via UART do Arduino para o PC, onde o software plotter que será desenvolvido em python converterá o fluxo de entrada de dados em uma forma de onda plotando cada dado em relação ao tempo.
Componentes Requeridos
Os seguintes componentes são necessários para construir este projeto;
- Arduino Uno (qualquer uma das outras placas pode ser usada)
- Tábua de pão
- Resistor de 10k (1)
- LDR (1)
- Fios de ligação
Softwares necessários
- IDE Arduino
- Pitão
- Bibliotecas Python: Pyserial, Matplotlib, Drawnow
Esquemas
O esquema do Osciloscópio Arduino é simples. Tudo o que precisamos fazer é conectar o sinal a ser examinado ao pino analógico especificado do Arduino. No entanto, usaremos o LDR em uma configuração simples de divisor de tensão para gerar o sinal a ser examinado, de forma que a forma de onda gerada descreva o nível de tensão, com base na intensidade da luz ao redor do LDR.
Conecte os componentes conforme mostrado nos esquemas abaixo;
Após a conexão, o setup deve gostar da imagem abaixo.
Com todas as conexões feitas, podemos prosseguir com a escrita do código.
Código do Osciloscópio Arduino
Estaremos escrevendo códigos para cada uma das duas seções. Para o Plotter, conforme mencionado anteriormente, estaremos escrevendo um script python que aceita os dados do Arduino via UART e Plots, enquanto para o conversor, estaremos escrevendo um esboço do Arduino que obtém os dados do ADC e os converte para níveis de tensão que são enviados para o plotter.
Script Python (Plotter)
Como o código python é mais complexo, começaremos com ele.
Estaremos usando algumas bibliotecas, incluindo; drawnow, Matplotlib e Pyserial com o script python conforme mencionado anteriormente. O Pyserial nos permite criar um script python que pode se comunicar pela porta serial, Matplotlib nos dá a capacidade de gerar gráficos a partir dos dados recebidos pela porta serial e drawnow fornece um meio para atualizarmos o gráfico em tempo real.
Existem várias maneiras de instalar esses pacotes no seu PC, sendo a mais fácil via pip . O Pip pode ser instalado via linha de comando em uma máquina Windows ou Linux. O PIP é empacotado com o python3, portanto, aconselho você a instalar o python3 e marcar a caixa sobre como adicionar o python ao caminho. Se você estiver tendo problemas com a instalação do pip, verifique este site oficial do python para obter dicas.
Com o pip instalado, agora podemos instalar as outras bibliotecas de que precisamos.
Abra o prompt de comando para usuários do Windows, terminal para usuários do Linux e digite o seguinte;
pip install pyserial
Feito isso, instale matplotlib usando;
pip instalar matplotlib
Drawnow às vezes é instalado junto com matplotlib, mas só para ter certeza, execute;
pip install drawnow
Com a instalação concluída, agora estamos prontos para escrever o script python.
O script python para este projeto é semelhante ao que escrevi para o osciloscópio baseado em Raspberry Pi.
Começamos importando todas as bibliotecas necessárias para o código;
import time import matplotlib.pyplot as plt from drawnow import * import pyserial
A seguir, criamos e inicializamos as variáveis que serão usadas durante o código. O array val será usado para armazenar os dados recebidos da porta serial e cnt será usado para contar. Os dados no local 0 serão excluídos a cada 50 contagens de dados. Isso é feito para manter os dados sendo exibidos no osciloscópio.
val = cnt = 0
Em seguida, criamos o objeto de porta serial por meio do qual o Arduino se comunicará com nosso script Python. Certifique-se de que a porta de comunicação especificada abaixo seja a mesma porta de comunicação por meio da qual sua placa Arduino se comunica com o IDE. A taxa de baud 115200 usada acima foi usada para garantir a comunicação de alta velocidade com o Arduino. Para evitar erros, a porta serial do Arduino também deve ser habilitada para se comunicar com essa taxa de baud.
porta = serial.Serial ('COM4', 115200, tempo limite = 0,5)
A seguir, tornamos o enredo interativo usando;
plt.ion ()
precisamos criar uma função para gerar o gráfico a partir dos dados recebidos, criando o limite superior e mínimo que esperamos, que neste caso é 1023 baseado na resolução do ADC do Arduino. Também definimos o título, rotulamos cada eixo e adicionamos uma legenda para facilitar a identificação do gráfico.
# criar a função de figura def makeFig (): plt.ylim (-1023,1023) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('saídas ADC') plt.plot (val, 'ro - ', rótulo =' Canal 0 ') plt.legend (loc =' inferior direito ')
Feito isso, agora estamos prontos para escrever o loop principal que pega os dados da porta serial quando disponíveis e os plota. Para sincronizar com o Arduino, um handshake de dados é enviado ao Arduino pelo script python para indicar sua prontidão para ler os dados. Quando o Arduino recebe os dados do handshake, ele responde com os dados do ADC. Sem esse handshake, não seremos capazes de plotar os dados em tempo real.
while (True): port.write (b's ') #handshake com Arduino if (port.inWaiting ()): # se o arduino responde value = port.readline () # leia a resposta print (value) #print para que possamos monitorá-lo número = int (valor) #converter dados recebidos para impressão inteira ('Canal 0: {0}'. formato (número)) # Dormir por meio segundo. time.sleep (0.01) val.append (int (number)) drawnow (makeFig) #update plot para refletir a nova entrada de dados plt.pause (.000001) cnt = cnt + 1 if (cnt> 50): val.pop (0) #manter o gráfico atualizado excluindo os dados na posição 0
O código Python completo para o osciloscópio Arduino é fornecido no final deste artigo mostrado abaixo.
Código Arduino
O segundo código é o esboço do Arduino para obter os dados que representam o sinal do ADC e, em seguida, aguarde para receber o sinal de handshake do software do plotter. Assim que receber o sinal de handshake, ele enviará os dados adquiridos ao software da plotadora via UART.
Começamos declarando o pino do pino analógico do Arduino ao qual o sinal será aplicado.
sensorpin int = A0;
Em seguida, inicializamos e iniciamos a comunicação serial com uma taxa de transmissão de 115200
void setup () { // inicializa a comunicação serial em 115200 bits por segundo para coincidir com o script python: Serial.begin (115200); }
Por último, a função voidloop () que lida com a leitura dos dados e os envia por serial para o plotter.
void loop () { // lê a entrada no pino analógico 0: float sensorValue = analogRead (sensorpin); dados de byte = Serial.read (); if (dados == 's') { Serial.println (sensorValue); atraso (10); // atraso entre as leituras para estabilidade } }
O código completo do Osciloscópio Arduino é fornecido abaixo, bem como no final deste artigo mostrado abaixo.
sensorpin int = A0; void setup () { // inicializa a comunicação serial em 115200 bits por segundo para coincidir com o script python: Serial.begin (115200); } void loop () { // ler a entrada no pino analógico 0: ######################################## ############################## float sensorValue = analogRead (sensorpin); dados de byte = Serial.read (); if (dados == 's') { Serial.println (sensorValue); atraso (10); // atraso entre as leituras para estabilidade } }
Osciloscópio Arduino em ação
Faça upload do código para a configuração do Arduino e execute o script python. Você deve ver os dados começarem a ser transmitidos por meio da linha de comando do Python e o gráfico variando com a intensidade da luz, conforme mostrado na imagem abaixo.
Então é assim que o Arduino pode ser usado como Osciloscópio, também pode ser feito usando o Raspberry pi, confira aqui o tutorial completo do Osciloscópio baseado no Raspberry Pi.