Sensor De Estacionamento
Usei uma board nodemcu e um sensor Hc-R0 para calcular a distância entre um objeto e o sensor para depois o arduion se conectar ao raspberry pi para conseguir mudar a cor da lâmpada de acordo com a distância. É possível não usar o raspberry pi desde que a board suporte bluetooth
Downloads
Supplies
- Nodemcu arduino
- HC-R0 sensor
- bread board
- pequenos fios para se ligar o arduino e o sensor
- raspberrypi
- lâmpada bluetooth
- leds, de preferência amarelos, verdes e vermelhos
Connection
Primeiro é preciso conectar o arduino com o sensor, é de realçar que em vez de se ligar o vcc ao vin, vamos antes ligar ao vu, porque o vin é para quando o arduino recebe corrente de outro lado que não o cabo usb, e não ligamos ao 3.3v porque não é o suficiente, por isso é que se liga ao vu.
Pode-se também adicionar uns leds para se fazerem os teste para saber se o sensor está a funcionar devidamente. Neste caso vamos usar apenas 3 e usamos os pins D0, D1, D2, que são o 16, 5 e 4 respetivamente.
Arduino
Já ligados entre si, vamos agora programar o arduino:
#define SOUND_VELOCITY 0.034
#define CM_TO_INCH 0.393701
float duration;
float distance;
float distanceInch;
int i = 0, ii = 0;
int value = 0;
Função para dar preparar o arduino para correr a função loop:
void setup() {
Serial.begin(115200); // Starts the serial communication
pinMode(0, OUTPUT); // O pin 0 serve para Transmitir
pinMode(2, INPUT); // O pin 2 serve para Reveber
// Estes três pins serverm para se testar o sensor
pinMode(16, OUTPUT); // verde
pinMode(5, OUTPUT); // amarelo
pinMode(4, OUTPUT); // vermelho
// Serial para se conseguir ler o output do arduino
Serial.begin(115200);
}
Função onde tem de estar o código essencial do programa, a partir deste ponto qualquer código que for adicionado vem parar aqui:
void loop() {
// esta parte serve para ativar o transmissor e o receptor para se calcular
// a que distancia se encontra o objeto
digitalWrite(0, LOW); //começa em 0 (para o caso de não ter ficado em zero na ultima ativação)
delayMicroseconds(10);
digitalWrite(0, HIGH); // ativa o transmissor por 10 microsegundos
delayMicroseconds(10);
digitalWrite(0, LOW); // desativa o transmissor após 10 microsegundos
// lê o pin 2 e calcula a duraç~´ao entre o envio e a receção
duration = pulseIn(2, HIGH);
Serial.println(duration);
Distâncias ficam dentro do loop:
// Calculate the distance
distance = (duration * SOUND_VELOCITY)/2;
// Converter a distancia em Inch
distanceInch = distanceCm * CM_TO_INCH;
// Escreve a distância no Serial Monitor
Serial.print("Distance (cm): ");
Serial.println(distance);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);
Downloads
Leds
Depois do teste ter corrido bem, vamos agora adicionar os leds
Para ativar o led vermelho:
if(distance < 45){
digitalWrite(5, LOW);
digitalWrite(16, LOW);
digitalWrite(4, HIGH );
Serial.println("red");
}
Para ativar o led amarelo:
if (distance > 45 && distance < 100){
digitalWrite(16, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH );
Serial.println("yellow");
}
Para ativar o led verde:
if (distance > 100){
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(16, HIGH );
Serial.println("green");
}
Raspberry Pi
A melhor forma de ligar o arduino ao pi é através de um cabo usb e instalar o gatttool que é uma ferramenta para se comunicar com dispositivos BLE(Low Energy Bluetooth) que é o caso da lampada eurodomest usada neste exemplo.
Lampada
Depois de instalado o gatttool, cria-se um ficheiro sript.sh na main directory
O ficheiro tem começar assim:
#!/bin/bash
Se tiver // antes é por questões de segurança
Depois é preciso inserir uma linha para que se consiga automaticamente ler o output do arduino através do serial output como já foi visto no step 2:
stty -F 7dev/ttyUSB0 115200
onde está USB0 é possível que tenha de ser alterado, de acordo com a porta usb onde está inserido o arduino
Definir o Mac address do dispossitivo:
MAC="FC:58:FA:C1:AD:DF"
Se não souber pode usar o hcitool para encontrar
Definir as cores e a mudança de cor:
RED="00ff010000ff01ff0100"
YELLOW="01ff010000ff01ff0100"
GREEN="01ff010000ff00ff0100"
color=$RED
state="green"
Fazer um loop para que não pare a menos que o arduino seja desconectado:
while read -r state < /dev/ttyUSB0, do
case "$state" do
"red")
echo=$state
color=$RED
::
"yellow")
echo=$state
color=$YELLOW
::
"green")
echo=$state
color=$GREEN
::
esac
done
E por fim a linha de comando que vai fazer a alteração da cor da lampada:
echo gatttool -b $MAC --char-write-req -a 0x002a -c $color
gatttool -b $MAC --char-write-req -a 0x002a -c $color
E para acabar é só escrever na consola:
sh script.sh