Sensor De Estacionamento

by martimtchambel in Circuits > Arduino

46 Views, 1 Favorites, 0 Comments

Sensor De Estacionamento

img1.jpg

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

Node-MCU-Pinout.png
comp1.png

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

leds.png

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

Downloads