Assistente Inteligente de Estacionamento na Garagem com Feedback de LED RGB
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Nano R3 | 1 |
| Sensor Ultrassônico - HC-SR04 (Genérico) | 1 |
| Capacitor 1000 µF | 1 |
| 1N4148 – Diodo de Comutação Rápida de Uso Geral | 1 |
| Resistor Passante, 470 ohm | 1 |
| Fita LED WS2812B 1M IP30 5VDC | 1 |
Ferramentas e Máquinas Necessárias
- Impressora 3D (genérica)
- Ferro de Solda (genérico)
Sobre o Projeto
Este é um sensor de estacionamento de garagem usando LEDs RGB endereçáveis para fornecer feedback ao motorista do veículo enquanto ele se aproxima e finalmente atinge a posição de parada (estacionamento). Veja o vídeo em ação:
Projetei isso em torno de algum material acrílico de meia polegada de diâmetro, meio redondo, que eu tinha em mãos (cortado a 20-7/16 polegadas de comprimento) para usar como uma lente que também serve para manter as seções de cauda de andorinha juntas. Isso pode ser facilmente comprado na internet por cerca de $0.66 por pé, no entanto, também incluí um modelo de lente que pode ser impresso em segmentos usando filamento transparente.
PASSO 1
Prepare a fita LED (fita LED WS2812b individualmente endereçável RGB Smart Pixel 30 LEDs, fita de 1 metro de comprimento). Corte a fita em dois (2) segmentos de 15 LEDs e solde os fios em cada segmento no início de cada fita. As setas na fita apontam 'PARA LONGE' de onde os fios são necessários.
PASSO 2
Monte todas as seções do trilho (um Trilho Externo e dois segmentos de Trilho Interno por lado) com o gabinete no meio.
PASSO 3
Passe os fios das fitas LED para dentro do gabinete em cada lado e fixe com fita adesiva. Nota: as fitas LED pararão cerca de 1/2 polegada de cada extremidade do Trilho Externo.
PASSO 4
Deslize a lente em cada extremidade até o fundo do gabinete para travar todas as caudas de andorinha no lugar. Se estiver usando lente impressa, serão 4 necessárias para cada lado. Elas destinam-se a cobrir as áreas de cauda de andorinha.
PASSO 5
Monte a montagem com tampas de extremidade em uma placa de apoio (usei MDF de 1/2" cortado a 2" de largura por 45-1/8" de comprimento). Fixe a montagem usando parafusos de cabeça pan ou chata pequenos (nota: não use cabeça redonda, caso contrário o cabo USB não caberá no slot depois, se necessário para reprogramar parâmetros.)
PASSO 6
Faça a fiação da eletrônica. Observe a localização do capacitor. O capacitor é necessário para evitar picos de tensão da fonte. Um resistor é usado no fio de sinal (pino 7) para LEDs, e um diodo é usado no Arduino (V+) para evitar retroalimentação de tensão no caso de USB ser inserido sem a fonte de alimentação ligada. Sem o diodo, o Arduino tentará fornecer tensão aos LEDs, causando corrente excessiva através do regulador de tensão onboard. Diodo e resistor são soldados em linha com a fiação e cobertos com tubo termorretrátil. O gabinete precisará ser furado do lado de fora perto da parte inferior sob o Arduino para passar os fios da fonte de alimentação. Não projetei isso no modelo, pois o tamanho dependerá do tipo de fio usado. Recomendo fio 18/2. Usei fio de campainha e coloquei um conector logo fora do gabinete.
PASSO 7
Use parafuso de 2.5mm para fixar o Arduino e complete as conexões de fiação ao Arduino. As extremidades de fixação progridem em furos quadrados no gabinete. Removi os pinos mais externos do Arduino (não utilizados) para facilitar a instalação.
PASSO 8
Use parafusos de 2.5mm para fixar o detector ultrassônico (HC-SR02) na tampa com fixação. Complete as conexões de solda ao sensor. NOTA: certifique-se de que os fios fiquem voltados para o centro do sensor para não interferir na parede lateral ao montar.
PASSO 9
Instale a tampa no gabinete com parafusos de 3mm.
PASSO 10
Programe o Arduino usando o código abaixo. Atualize as bibliotecas da sua IDE com 'FastLED' e 'QuickStats' antes de compilar seu programa. Nota: Ajuste parâmetros para 'startdistance' (ponto onde o sensor detectará pela primeira vez a aproximação do veículo) e 'stopdistance' (posição final de estacionamento do veículo). O alcance do sensor é de 3 cm a 400 centímetros, então os parâmetros de início e parada precisam estar dentro desses limites.
PASSO 11
No abridor de porta da garagem, instale um adaptador de soquete de lâmpada com tomada embutida. Conecte sua fonte de alimentação 5VDC a esta linha e leve até a unidade de barra de luz. A barra de luz só ficará ligada desde o momento em que a porta abre até que a luz da porta expire. Isso evita que a barra de luz fique sempre ligada.
Código
- Código Arduino
Código Arduino Arduino
/*
* Sensor de Estacionamento de Garagem - Publicado por Bob Torrence
*/
#include <FastLED.h>
#include <QuickStats.h>
QuickStats stats; //inicializa uma instância desta classe
// definindo os pinos
#define LED_PIN 7
#define NUM_LEDS 15
const int trigPin = 9;
const int echoPin = 10;
// definindo variáveis
CRGB leds[NUM_LEDS];
float duration;
float durationarray[15];
int distance;
int stopdistance=115; //posição de estacionamento a partir do sensor (CENTÍMETROS)
int startdistance=400; //distância do sensor para começar a varredura quando o carro entra (CENTÍMETROS)
int increment=((startdistance-stopdistance)/15);
void setup() {
pinMode(trigPin, OUTPUT); // Define trigPin como Saída
pinMode(echoPin, INPUT); // Define echoPin como Entrada
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
Serial.begin(9600); // Inicia comunicação serial
}
void loop() {
for (int i=0;i<=14;i++){
// Limpa o trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Define trigPin em HIGH por 10 microssegundos
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lê o echoPin, retorna o tempo de viagem da onda sonora em microssegundos
durationarray[i] = pulseIn(echoPin, HIGH);
distance= durationarray[i]*0.034/2;
Serial.print(distance);
Serial.print(" ");
}
duration = (stats.median(durationarray,15)); // Calculando a distância (mediana de 15 leituras)
distance= duration*0.034/2;
// Imprime a distância no Monitor Serial
Serial.print("Distance: ");
Serial.println(distance);
if (distance<stopdistance){
for (int i = 0; i <= 14; i++) {
leds[i] = CRGB ( 255, 0, 0); // Vermelho - posição de parada
}
FastLED.show();
}
else if (distance<stopdistance+increment){
for (int i = 1; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 0; i++) { leds[i] = CRGB ( 255, 255, 0); } // Amarelo - 1 LED
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*2){
for (int i = 2; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 1; i++) { leds[i] = CRGB ( 255, 255, 0); } // Amarelo - 2 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*3){
for (int i = 3; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 2; i++) { leds[i] = CRGB ( 255, 255, 0); } // Amarelo - 3 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*4){
for (int i = 4; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 3; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 4 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*5){
for (int i = 5; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 4; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 5 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*6){
for (int i = 6; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 5; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 6 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*7){
for (int i = 7; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 6; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 7 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*8){
for (int i = 8; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 7; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 8 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*9){
for (int i = 9; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 8; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 9 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*10){
for (int i = 10; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 9; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 10 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*11){
for (int i = 11; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 10; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 11 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*12){
for (int i = 12; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 11; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 12 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*13){
for (int i = 13; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 12; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 13 LEDs
FastLED.show(); delay(50);
}
else if (distance<stopdistance+increment*14){
for (int i = 14; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); }
for (int i = 0; i <= 13; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - 14 LEDs
FastLED.show(); delay(50);
}
else if (distance>=stopdistance+increment*14){
for (int i = 0; i <= 14; i++) { leds[i] = CRGB ( 0, 255,0); } // Verde - todos 15 LEDs
FastLED.show(); delay(50);
}
}
Peças Personalizadas e Caixas
Modelos para impressão 3D disponíveis na seção de download.
Esquemáticos
Atualizado em 21-04-19 para corrigir direção do Diodo
Processo de manufatura
- Detector de Idiomas TinyML com Edge Impulse no Arduino Nano 33 BLE Sense
- Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
- Dados Digital com Arduino: Gere Números Aleatórios 1-6 em LCD 16x2
- Construa Seu Próprio Jogo de Roleta com 37 LEDs e Arduino Nano
- ATtiny85 Mini Arcade: Snake – Construa um Console Portátil de Jogos OLED
- Detector de Alcance Portátil – Kit DIY Arduino Nano com HC-SR04, Bateria 18650 e Gabinete 3D
- Lâmpada de Mesa Reativa a Áudio com Arduino Nano
- Assistente Pessoal de Saúde (PHA) – Solução IoT Inteligente para Saúde Comunitária
- Projeto de Galvanoplastia de Cobre: Construa um Sistema Inteligente com Arduino UNO
- Jogo Pong Neon em Matriz NeoPixel com Arduino Nano