Beaglebone Black + Conversor A/D + Sensor Ultrassônico

sensor ultrassônico

Introdução

 

Conversores analógico/digital são circuitos eletrônicos fundamentais para sistemas embarcados, necessários para transformar sinais contínuos de tensão em representações discretas para que possam ser processados em sistemas digitais.

 

A Beaglebone Black possui sete entradas para o seu conversor A/D de aproximação sucessiva, com resolução de 12 bits, capaz de realizar 200 mil amostras por segundo, e com uma tensão de entrada que pode variar de 0 a 1,8V. Com uma divisão simples então podemos concluir que a Beaglebone Black pode detectar variações de tensão de até 0,439mV, suficiente para a maioria das aplicações.

 

Neste post vou mostrar como usar o sistema de arquivos do Linux para ler os valores adquiridos pelo conversor A/D, e também como isso poderá ser feito pela sua aplicação (aqui vamos exemplificar utilizando Python).

 

Para demonstrar vou utilizar o sensor de distância ultrassônico LV-MaxSonar-EZ0 que, entre outras interfaces de comunicação, possui uma saída analógica que entrega uma tensão proporcional à distância do sensor até a superfície que ele estiver apontando.

 

sensor ultrassônico
Figura 1 - Sensor de proximidade ultrassônico LV-MaxSonar-EZ0.

 

 

Na prática

 

Importante:

  • Não exponha a entrada analógica da Beaglebone Black a tensões superiores a 1.8V;
  • Para que o nosso sensor ultrassônico forneça tensões compatíveis com a Beaglebone Black tivemos que alimentá-lo com 3,3V;
  • No exemplo estou utilizando a última imagem oficial lançada para a Beaglebone Black com Debian, para saber mais acesse o artigo;
  • Caso você queira clonar o projeto utilizado no exemplo, irá precisar de acesso à internet na Beaglebone Black. Isso pode ser feito pela porta USB e foi abordado em um artigo anterior.


Caso você execute o comando abaixo, você poderá ver que as entradas analógicas não estão habilitadas.

 

cat /sys/devices/bone_capemgr.*/slots

 

sensor ultrassônico
Resultado do comando a cima.

 

Como a Beaglebone Black já possui um device tree overlay (DTO) para o conversor A/D pronto para uso, podemos habilitar as entradas analógicas facilmente apenas com o comando abaixo:

 

echo BB-ADC > /sys/devices/bone_capemgr.*/slots

 

Agora se repetirmos o primeiro comando podemos notar que as entradas analógicas estão habilitadas.

 

sensor ultrassônico
Nova verificação dos slots.

 

Agora conectando o sensor na Beaglebone Black conforme:

  • O VDD do sensor ultrassônico no +3,3V da Beaglebone Black (P9_03);
  • O GND do sensor ultrassônico no GNDA_ADC da Beaglebone Black (P9_34);
  • O sinal analógio do sensor ultrassônico na entrada AIN0 da Beaglebone Black (P9_39);

 

sensor ultrassônico
Conexões entre o sensor e a Beaglebone Black.

 

Já podemos fazer nossa primeira leitura utilizando o comando: 

cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw

 

sensor ultrassônico
Leitura do conversor A/D.

 

O valor recebido varia linearmente de 0 a 4095 à medida que a tensão na entrada varia de 0 a +1,8V. 

 

 

Utilizando Python

 

Agora vamos desenvolver um pequeno script em Python 2.7.3 para realizarmos a leitura do sensor ultrassônico, e exibir o resultado em centímetros na tela. O código está no GitHub e para clonar e rodar o projeto basta utilizar os três comandos seguintes: 

git clone https://github.com/igorTavares/bbb_ultrasonic_python.git
cd bbb_ultrasonic_python
python ultrasonic.py

 

sensor ultrassônico
Saída do script.

 

As explicações estão todas nos comentários do script, assim acho que fica mais fácil de visualizar o funcionamento do programa.

 

#!/usr/bin/env python

# Modulo para evocar novos processor
import subprocess 

# Recebe a saída do comando "cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw"
output = subprocess.check_output("cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw", shell=True)

# Regra de tres para achar o valor em volts
voltage = (float(output)*1.8)/4096.0

# Converte voltage para string para escrever na tela
print "Voltage = " + str(voltage) 

# Equacao do sensor. Vide datasheet.
inchs = (voltage*512.0)/3.3 

# Converte inchs para string para escrever na tela
print "Inchs = " + str(inchs) 

# Converte polegadas para centimetros
centimeters = inchs*2.54 

# Converte centimeters para string para escrever na tela
print "Centimeters = " + str(centimeters)

 

 

Referências

 

http://maxbotix.com/documents/LV-MaxSonar-EZ_Datasheet.pdf

https://github.com/igorTavares/bbb_ultrasonic_python

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

2
Deixe um comentário

avatar
 
2 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
0 Comment authors
Beaglebone Black + Conversor A/D + Sensor Ultrassônico - Peguei doBeaglebone Black - IoT com ThingSpeak Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
trackback

[…] “Conversores analógico/digital são circuitos eletrônicos fundamentais para sistemas embarcados, necessários para transformar sinais contínuos de tensão em representações discretas para que possam ser processados em sistemas digitais. Neste post vou mostrar como usar o sistema de arquivos do Linux para ler os valores adquiridos pelo conversor A/D, e também como isso poderá ser feito pela sua aplicação (aqui vamos exemplificar utilizando Python).” [referência: embarcados.com.br] […]

trackback

[…] LM35 [8] utilizando o conversor A/D da Beaglebone Black conforme explicado no post anterior [9], e irá subir essa e outras informações do dispositivo para o […]