Difference between revisions of "Parkovací Senzor"

From Digitálne technológie výroby
Jump to: navigation, search
(Created page with "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é park...")
 
Line 111: Line 111:
 
     FastLED.show();
 
     FastLED.show();
 
   }
 
   }
  delay(1000);
 
 
}
 
}
  
Line 117: Line 116:
 
   for (int i = 0; i <= 14; i++) {
 
   for (int i = 0; i <= 14; i++) {
 
     digitalWrite(trigPin, LOW);
 
     digitalWrite(trigPin, LOW);
     delayMicroseconds(2);
+
     delay(2);
 
     digitalWrite(trigPin, HIGH);
 
     digitalWrite(trigPin, HIGH);
     delayMicroseconds(10);
+
     delay(10);
 
     digitalWrite(trigPin, LOW);
 
     digitalWrite(trigPin, LOW);
 
     durationarray[i] = pulseIn(echoPin, HIGH);
 
     durationarray[i] = pulseIn(echoPin, HIGH);
Line 144: Line 143:
 
     }
 
     }
 
     FastLED.show();
 
     FastLED.show();
     delay(50);
+
     delay(50); // delay je na to aby pri prechode rapidne nepreblikaval
 
   }
 
   }
  
Line 364: Line 363:
 
     switch (results.value) {
 
     switch (results.value) {
 
       case 0xFF6897: //"0"
 
       case 0xFF6897: //"0"
         led_check;
+
         led_check();
 
     }
 
     }
 
     irrecv.resume();
 
     irrecv.resume();

Revision as of 10:15, 11 June 2020

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

  • Zapojenie 01
  • Zapojenie 02
  • 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.


    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();
      }
    }