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

https://maxbotix.com/documents/LV-MaxSonar-EZ_Datasheet.pdf
https://github.com/igorTavares/bbb_ultrasonic_python
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Hardware » Placas de desenvolvimento » Beaglebone Black + Conversor A/D + Sensor Ultrassônico

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: