Parkovací Senzor
Upozornenie!! Tento projekt ešte nieje hotový, očakávajte zmeny.
Parkovacie senzory slúžia na uľahčenie parkovania najmä na miestach, kde je ledva dostatok miesta na zaparkovanie.
V novších modeloch áut už nájdeme zabudované parkovacie senzory, ale ľudia, ktorí nevlastnia také autá môžu mať niekedy problém zaparkovať do malej garáže.
Tento parkovací senzor nielen že vám pomôže zaparkovať, ale vás aj informuje aká je teplota a vlhkosť v garáži.
Použité súčiastky
Na to, aby sme vytvorili tento parkovací senzor, potrebujeme následovné:
- Arduino NANO / UNO
- HC-SR04
- 1K Rezistor
- SHT 31D
- VS 1838B a IR ovládač
- HW-456-SR505
- dátový RGB LED pás
- káble
Zapojenie
Zatiaľ čo na obrázkoch nevidno presné zapojenie, v kóde sú presne popísané zapojené piny.
Výsledky
Po zapojení Arduino dosky do USB siete, sa vykoná inicializácia a vizuálny test zasvietením 15 lediek na červeno, následne zeleno a potom na modro. Po skončení inicializácie je možne IR ovládačom púštať funkcie programu.
- ">||" tlačítko spustí samotný parkovací senzor
- "EQ" tlačítko vypíše na konzolu teplotu a vlhkosť priestoru
- "0" tlačítko znovu spustí test RGB LED pásu
Roadmap
- Namodelovanie krabičku pre celý obvod
- Navrhnutie web server pomocou ESP-8266 a ESP-01, kde budú vypísané informácie o počte zaparkovaní, teplota a vlhkosť a pod.
- (Prípadne)Implementácia časovač
- (Prípadne)Implementácia BCD displej alebo 2-line Liquid Crystal displej na zobrazenie teploty a vlhkosti pre rýchly prístup
- (Prípadne)iné....podľa aktuálneho nápadu
Zdrojový kód
Upozornenie!!
Tento kód je v ALPHA fáze vývoja. Očakávajte zmeny.
#include <Arduino.h> #include <FastLED.h> #include <QuickStats.h> #include <IRremote.h> #include <Wire.h> #include "Adafruit_SHT31.h" QuickStats stats; #define LED_PIN 7 //D pin LED pas #define N_LEDS 15 //kolko bude svietit #define M_LED 3 //D pin motion senzor //ir ovladanie int ir_input_pin = 2; // D2 IRrecv irrecv(ir_input_pin); decode_results results; //teplota vlhkost Adafruit_SHT31 sht31 = Adafruit_SHT31(); //SCL v A5, SDA v A4 //parkovacka int p_status = 0; const int trigPin = 10; const int echoPin = 9; const int start_distance = 88; //maximum(CM) const int stop_distance = 10; //minimum(CM) CRGB leds[N_LEDS]; int distance = 0; int state = (start_distance - stop_distance) / 15; //vypocet stadia polohy, urcene na moznu zmenu start a stop vzdialenosti float duration = 0; float durationarray[15]; ///////////////////////////////////////////////////// void led_check() { //test ci svietia vsetky ledky for (int i = 0; i <= 14; i++) { leds[i] = CRGB (255, 0, 0); // 15 lediek RED FastLED.show(); } delay(1000); for (int i = 0; i <= 14; i++) { leds[i] = CRGB (0, 255, 0); // 15 lediek GREEN FastLED.show(); } delay(1000); for (int i = 0; i <= 14; i++) { leds[i] = CRGB (0, 0, 255); // 15 lediek BLUE FastLED.show(); } delay(1000); for (int i = 0; i <= 14; i++) { leds[i] = CRGB (0, 0, 0); // 15 lediek nesvieti FastLED.show(); } } void parking_sensor() { for (int i = 0; i <= 14; i++) { digitalWrite(trigPin, LOW); delay(2); digitalWrite(trigPin, HIGH); delay(10); digitalWrite(trigPin, LOW); durationarray[i] = pulseIn(echoPin, HIGH); } duration = (stats.median(durationarray, 15)); //Kalkulacia vzdialenosti distance = duration * 0.034 / 2; Serial.println(distance); if (distance < stop_distance) { // ak DISTANCE je mensia ako STOP for (int i = 0; i <= 14; i++) { leds[i] = CRGB (255, 0, 0); // 15 lediek RED FastLED.show(); } } else if (distance < stop_distance + state) { //ak DISTANCE je vacsia ako STOP + STATE for (int i = 1; i <= 14; i++) { //14 lediek nesvieti leds[i] = CRGB (0, 0, 0); } for (int i = 0; i <= 0; i++) { //1 ledka YELLOW leds[i] = CRGB (255, 255, 0); } FastLED.show(); delay(50); // delay je na to aby pri prechode rapidne nepreblikaval } else if (distance < stop_distance + state * 2) { //ak DISTANCE je vacsia ako STOP + STATE * 2 for (int i = 2; i <= 14; i++) { //13 lediek nesvieti leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 1; i++) { //2 ledky YELLOW leds[i] = CRGB ( 255, 255, 0); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 3) { //ak DISTANCE je vacsia ako STOP + STATE * 3 for (int i = 3; i <= 14; i++) { //12 lediek nesvieti leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 2; i++) { //3 ledky YELLOW leds[i] = CRGB ( 255, 255, 0); } FastLED.show(); delay(50); } else if (distance < (stop_distance + state) * 4) { for (int i = 4; i <= 14; i++) { //11 lediek nesvieti leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 3; i++) { //4 ledky GREEN leds[i] = CRGB ( 0, 255, 0); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 5) { for (int i = 5; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 4; i++) { //5 lediek GREEN leds[i] = CRGB ( 0, 255, 0); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 6) { for (int i = 6; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 5; i++) { //6 lediek GREEN leds[i] = CRGB ( 0, 255, 0); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 7) { for (int i = 7; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 6; i++) { //7 lediek GREEN leds[i] = CRGB ( 0, 255, 0); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 8) { for (int i = 8; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); } for (int i = 0; i <= 7; i++) { //8 lediek GREEN leds[i] = CRGB ( 0, 255, 0); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 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); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 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); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 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); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 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); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 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); } FastLED.show(); delay(50); } else if (distance < stop_distance + state * 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); } FastLED.show(); delay(50); } else if (distance >= stop_distance + state * 14) { for (int i = 0; i <= 14; i++) { //vsetky ledky GREEN leds[i] = CRGB ( 0, 255, 0); } FastLED.show(); delay(50); } if(digitalRead(M_LED) == LOW) { //ak Motion senzor nezisti pohyb p_status = 0; for (int i = 0; i <= 14; i++) { leds[i] = CRGB ( 0, 0, 0); } FastLED.show(); } } int temp_hum() { float temp = sht31.readTemperature(); float hum = sht31.readHumidity(); if (! isnan(temp)) { Serial.print("Teplota: "); Serial.print(temp); Serial.println("°C"); } else { Serial.println("ERROR: Nepodarilo sa zistit teplotu"); } if (! isnan(hum)) { Serial.print("Vlhkost vzduchu: "); Serial.print(hum); Serial.println("%"); } else { Serial.println("ERROR: Nepodarilo sa zistit vlhkost vzduchu"); } return; } void setup() { Serial.begin(9600); //setup parkovacka pinMode(M_LED, INPUT); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, N_LEDS); //setup ovladac irrecv.enableIRIn(); //setup teplota/vlhkost while (!Serial) delay(100); if (! sht31.begin(0x44)) { Serial.println("ERROR: Nenasiel sa SHT31 chip"); } led_check(); } void loop() { if (p_status == 1) { parking_sensor(); } if (irrecv.decode(&results)) { //decoduje hodnotu na hex //Serial.println(results.value); switch (results.value) { case 0xFF906F: //"EQ" temp_hum(); } if (p_status == 0) { switch (results.value) { case 0xFFC23D: //">||" p_status ++; } } switch (results.value) { case 0xFF6897: //"0" led_check(); } irrecv.resume(); } }