- Fluxo do Projeto:
- Requisitos do Projeto
- Diagrama de circuito:
- Instale dependências para osciloscópio Raspberry Pi:
- Código Python para osciloscópio Raspberry Pi:
- Osciloscópio Raspberry Pi em ação:
Oi pessoal, bem-vindos ao post de hoje. Uma das coisas mais fascinantes em ser um criador é saber como desenvolver ferramentas improvisadas, você nunca ficará preso em nenhum projeto quando tiver esse tipo de versatilidade. Portanto, hoje, estarei compartilhando como construir uma versão improvisada baseada em Raspberry Pi de uma das ferramentas mais importantes em engenharia elétrica / eletrônica; O Osciloscópio.
O osciloscópio é um instrumento de teste eletrônico que permite a visualização e observação de tensões de sinal variáveis, geralmente como um gráfico bidimensional com um ou mais sinais plotados contra o tempo. O projeto de hoje buscará replicar os recursos de visualização do sinal do osciloscópio usando o Raspberry Pi e um módulo conversor analógico para digital.
Fluxo do Projeto:
A replicação da visualização do sinal do osciloscópio usando o Raspberry Pi exigirá as seguintes etapas;
1. Execute a conversão digital para analógico do sinal de entrada
2. Prepare os dados resultantes para representação
3. Plote os dados em um gráfico de tempo ao vivo
Um diagrama de blocos simplificado para este projeto seria semelhante ao diagrama abaixo.
Requisitos do Projeto
O requisito para este projeto pode ser classificado em dois:
- Requisitos de Hardware
- Requisitos de software
Requisitos de hardware
Para construir este projeto, os seguintes componentes / peças são necessários;
- Framboesa pi 2 (ou qualquer outro modelo)
- Cartão SD de 8 ou 16GB
- Cabo LAN / Ethernet
- Fonte de alimentação ou cabo USB
- ADS1115 ADC
- LDR (opcional, pois é destinado ao teste)
- Resistor de 10k ou 1k
- Fios de ligação
- Tábua de pão
- Monitorar ou qualquer outra forma de ver a área de trabalho do pi (VNC inclusive)
Requisitos de software
Os requisitos de software para este projeto são basicamente os módulos python ( matplotlib e drawnow ) que serão usados para visualização dos dados e o módulo Adafruit para interface com o chip ADS1115 ADC. Mostrarei como instalar esses módulos no Raspberry Pi à medida que prosseguirmos.
Embora este tutorial funcione independentemente do SO Raspberry Pi usado, estarei usando o SO Raspberry Pi stretch e presumo que você esteja familiarizado com a configuração do Raspberry Pi com o SO Raspbian stretch e saiba como fazer SSH no Raspberry Pi pi usando um software de terminal como o putty. Se você tiver problemas com qualquer um desses, há muitos Tutoriais do Raspberry Pi neste site que podem ajudar.
Com todos os componentes de hardware no lugar, vamos criar os esquemas e conectar os componentes.
Diagrama de circuito:
Para converter os sinais de entrada analógicos em sinais digitais que podem ser visualizados com o Raspberry Pi, usaremos o chip ADS1115 ADC. Esse chip se torna importante porque o Raspberry Pi, ao contrário do Arduino e da maioria dos microcontroladores, não possui um conversor analógico para digital (ADC) integrado. Embora pudéssemos ter usado qualquer chip ADC compatível com raspberry pi, eu prefiro esse chip devido à sua alta resolução (16bits) e sua folha de dados bem documentada e instruções de uso da Adafruit. Você também pode verificar nosso tutorial Raspberry Pi ADC para saber mais sobre ele.
O ADC é um dispositivo baseado em I2C e deve ser conectado ao Raspberry Pi conforme mostrado nos esquemas abaixo.
Para maior clareza, a conexão de pino entre os dois componentes também é descrita abaixo.
Conexões ADS1115 e Raspberry Pi:
VDD - 3.3v
GND - GND
SDA - SDA
SCL - SCL
Com as conexões feitas, ligue seu pi e prossiga com a instalação das dependências mencionadas abaixo.
Instale dependências para osciloscópio Raspberry Pi:
Antes de começarmos a escrever o script python para extrair dados do ADC e plotá-los em um gráfico ao vivo, precisamos habilitar a interface de comunicação I2C do raspberry pi e instalar os requisitos de software mencionados anteriormente. Isso será feito nas etapas abaixo, portanto, é fácil de seguir:
Etapa 1: ativar a interface Raspberry Pi I2C
Para habilitar o I2C, a partir do terminal, execute;
sudo raspi-config
Quando os painéis de configuração abrirem, selecione as opções de interface, selecione I2C e clique em ativar.
Etapa 2: atualize o Raspberry pi
A primeira coisa que faço antes de iniciar qualquer projeto é atualizar o Pi. Com isso, tenho certeza de que tudo no sistema operacional está atualizado e não terei problemas de compatibilidade com nenhum software mais recente que escolher instalar no Pi. Para fazer isso, execute dois comandos abaixo:
sudo apt-get update sudo apt-get upgrade
Etapa 3: Instale a biblioteca Adafruit ADS1115 para ADC
Com a atualização feita, agora estamos prontos para instalar as dependências começando com o módulo python Adafruit para o chip ADS115. Verifique se você está no diretório inicial do Raspberry Pi executando;
cd ~
em seguida, instale os fundamentos da compilação executando;
sudo apt-get install build-essential python-dev python-smbus git
Em seguida, clone a pasta Adafruit git para a biblioteca executando;
git clone https://github.com/adafruit/Adafruit_Python_ADS1x15.git
Mude para o diretório do arquivo clonado e execute o arquivo de configuração;
cd Adafruit_Python_ADS1x1z sudo python setup.py install
Após a instalação, sua tela deve ser semelhante à imagem abaixo.
Etapa 4: Teste a biblioteca e a comunicação 12C.
Antes de prosseguirmos com o resto do projeto, é importante testar a biblioteca e garantir que o ADC possa se comunicar com o raspberry pi em I2C. Para fazer isso, usaremos um script de exemplo que vem com a biblioteca.
Ainda na pasta Adafruit_Python_ADS1x15, altere o diretório para o diretório de exemplos executando;
exemplos de cd
Em seguida, execute o exemplo sampletest.py que exibe o valor dos quatro canais no ADC em uma forma tabular.
Execute o exemplo usando:
python simpletest.py
Se o módulo I2C estiver habilitado e as conexões forem boas, você deverá ver os dados conforme mostrado na imagem abaixo.
Se ocorrer um erro, verifique se o ADC está bem conectado ao PI e a comunicação I2C está habilitada no Pi.
Etapa 5: Instale o Matplotlib
Para visualizar os dados, precisamos instalar o módulo matplotlib que é usado para plotar todos os tipos de gráficos em python. Isso pode ser feito executando;
sudo apt-get install python-matplotlib
Você deve ver um resultado como a imagem abaixo.
Etapa 6: instalar o módulo Drawnow python
Por último, precisamos instalar o módulo drawnow python. Este módulo nos ajuda a fornecer atualizações ao vivo para o gráfico de dados.
Estaremos instalando drawnow por meio do instalador de pacote python; pip , então precisamos garantir que ele seja instalado. Isso pode ser feito executando;
sudo apt-get install python-pip
Podemos então usar pip para instalar o pacote drawnow executando:
sudo pip install drawnow
Você deve obter um resultado como a imagem abaixo após executá-lo.
Com todas as dependências instaladas, agora estamos prontos para escrever o código.
Código Python para osciloscópio Raspberry Pi:
O código python para este osciloscópio Pi é bastante simples, especialmente se você estiver familiarizado com o módulo matplotlib python. Antes de nos mostrar o código inteiro, tentarei dividi-lo em partes e explicar o que cada parte do código está fazendo para que você tenha conhecimento suficiente para estender o código para fazer mais coisas.
Nesta fase, é importante mudar para um monitor ou usar o visualizador VNC, qualquer coisa através do qual você possa ver a área de trabalho do seu Raspberry Pi, já que o gráfico que está sendo plotado não aparecerá no terminal.
Com o monitor como interface, abra um novo arquivo python. Você pode chamá-lo do nome que quiser, mas vou chamá-lo de scope.py.
sudo nano scope.py
Com o arquivo criado, a primeira coisa que fazemos é importar os módulos que iremos usar;
import time import matplotlib.pyplot as plt from drawnow import * import Adafruit_ADS1x15
A seguir, criamos uma instância da biblioteca ADS1x15 especificando o ADC ADS1115
adc = Adafruit_ADS1x15.ADS1115 ()
Em seguida, definimos o ganho do ADC. Existem diferentes faixas de ganho e devem ser escolhidas com base na tensão que você espera na entrada do ADC. Para este tutorial, estamos estimando um 0 - 4,09v, então usaremos um ganho de 1. Para mais informações sobre o ganho, você pode verificar a ficha técnica ADS1015 / ADS1115.
GANHO = 1
A seguir, precisamos criar as variáveis do array que serão usadas para armazenar os dados a serem plotados e outra para servir como contagem.
Val = cnt = 0
A seguir, damos a conhecer as nossas intenções de tornar o enredo interativo conhecido de forma a permitir-nos traçar os dados ao vivo.
plt.ion ()
Em seguida, iniciamos a conversão ADC contínua especificando o canal ADC, neste caso, o canal 0 e também especificamos o ganho.
Deve-se notar que todos os quatro canais ADC no ADS1115 podem ser lidos ao mesmo tempo, mas 1 canal é suficiente para esta demonstração.
adc.start_adc (0, ganho = GANHO)
Em seguida, criamos uma função def makeFig , para criar e definir os atributos do gráfico que conterá nosso gráfico ao vivo. Em primeiro lugar, definimos os limites do eixo y usando ylim , depois do qual inserimos o título do gráfico e o nome do rótulo antes de especificar os dados que serão plotados e seu estilo de gráfico e cor usando plt.plot (). Também podemos indicar o canal (como o canal 0 foi informado) para que possamos identificar cada sinal quando os quatro canais do ADC estiverem sendo usados. plt.legend é usado para especificar onde queremos que as informações sobre aquele sinal (por exemplo, Canal 0) sejam exibidas na figura.
plt.ylim (-5000,5000) plt.title ('Osciloscope') plt.grid (True) plt.ylabel ('ADC outputs') plt.plot (val, 'ro-', label = 'lux') plt.legend (loc = 'inferior direito')
Em seguida, escrever o enquanto circuito que será utilizado constantemente dados lidos a partir do ADC e atualizar a trama em conformidade.
A primeira coisa que fazemos é ler o valor de conversão ADC
value = adc.get_last_result ()
Em seguida, imprimimos o valor no terminal apenas para nos dar outra forma de confirmar os dados traçados. Esperamos alguns segundos após a impressão e, em seguida, acrescentamos os dados à lista (val) criada para armazenar os dados desse canal.
print ('Canal 0: {0}'. format (value)) time.sleep (0.5) val.append (int (value))
Em seguida, chamamos drawnow para atualizar o gráfico.
drawnow (makeFig)
Para garantir que os dados mais recentes sejam os que estão disponíveis no gráfico, excluímos os dados no índice 0 a cada 50 contagens de dados.
cnt = cnt + 1 se (cnt> 50): val.pop (0)
Isso é tudo!
O código Python completo é fornecido no final deste tutorial.
Osciloscópio Raspberry Pi em ação:
Copie o código python completo e cole no arquivo python que criamos anteriormente, lembre-se de que precisaremos de um monitor para visualizar o gráfico, então tudo isso deve ser feito por VNC ou com um monitor ou tela conectada.
Salve o código e execute usando;
sudo python scope.py
Se você usou um nome diferente de scope.py, não se esqueça de alterar para corresponder.
Após alguns minutos, você deverá ver os dados do ADC sendo impressos no terminal. Ocasionalmente, você pode receber um aviso do matplotlib (conforme mostrado na imagem abaixo) que deve ser suprimido, mas não afeta os dados exibidos ou o gráfico de forma alguma. Para suprimir o aviso, no entanto, as seguintes linhas de código podem ser adicionadas após as linhas de importação em nosso código.
Avisos de importação import matplotlib.cbook warnings.filterwarnings ("ignore", categoria = matplotlib.cbook.mplDeprecation)
É isso nesse tutorial galera, para testar totalmente seu osciloscópio, você pode conectar um dispositivo analógico como um potenciômetro a um canal no ADC e você deve ver os dados mudando a cada giro do potenciômetro. Ou você pode inserir onda senoidal ou onda quadrada para testar a saída.
Obrigado pela leitura, se você tiver alguma pergunta (s) ou algo que gostaria que eu adicionasse, deixe-me um comentário.
Até a próxima vez, continue fazendo!