Skocz do zawartości

Czujnik parkowania oparty o moduł ultradźwiękowy


grabarz666

Pomocna odpowiedź

Witam,

dopiero zaczynam przygodę z arduino i postanowiłem że tak powiem skopiować najpierw ten projekt i sprawdzić czy działa, udało mi się wszystko się uruchomiło tylko teraz chciałbym to ulepszyć. jest mi ktoś w stanie wytłumaczyć jak dodać kolejne diody aby zapalały się po zmianie odległośći? chciałbym jeszcze wstawić tryb czuwania żeby cały czas nie musieć wyłączać zasilania. link do tematu http://technovade.pl/poradniki/zeszytprojektowyarduino/zpa-016.html

 

 

 

Link do komentarza
Share on other sites

Możesz przeskalować odległość na zakres, odpowiadający liczbie diod i w pętli for zapalać ilość diod, proporcjonalną do odległości:

for(int i=0; i<odlegloscPrzeskalowana; i++){
          digitalWrite(numerDiody,HIGH);
          numerDiody++;
        }

 Jak dokładnie miałby działać ten tryb czuwania?

 

  • Lubię! 1
Link do komentarza
Share on other sites

Ja bym tam dodal do tego kodu tablice w ktorej byly by wpisane nr pinow (wtedy nr nie musza byc systematyczne...czyli 1/2/3...a moga byc 1/5/7/13 itp...i uzywac jako indeksu zmiennej "i" z for...i dwie takie petle w "gore" i w "dol" i chodzi porzadnie...niech kolega @grabarz666 wrzuci tu swoj kod...

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

#include "LiquidCrystal.h"
#define pin_nadajnik 6  //Definicja pinu, do którego podłączamy nadajnik (pin TRIG)
#define pin_odbiornik 7 //Definicja pinu, do którego podłączamy odbiornik (pin ECHO)
#define pin_buzzer 1
#define dioda_ostrzegawcza 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Definicja pinów do których podłączamy wyprowadzenia ekranu

int odleglosc;          //Zmienna przechowująca odległość
long czas_impulsu = 0;  //Zmienna przechowująca czas trwania impulsu na pinie ECHO
 
void setup()
{
 lcd.begin(16,2); //Inicjalizacja pracy LCD
 pinMode(pin_nadajnik, OUTPUT);
 pinMode(pin_odbiornik, INPUT);
 pinMode(dioda_ostrzegawcza, OUTPUT);
 pinMode(dioda_ostrzegawcza, OUTPUT);
}
 
void loop()
{
 digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
 delayMicroseconds(10); //Czas trwania 10us
 digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
 
 czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
 odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
}

//Zabezpieczenie przed przekroczeniem zakresu pomiarowego
  if ( odleglosc < 5 || odleglosc> 200 )
  {
   lcd.setCursor(0,0);
   lcd.print("Pomiar niedostepny");
  }
  
  else
  {
   lcd.setCursor(0,0);
   lcd.print("Odleglosc: ");
   lcd.setCursor(11,1);
   lcd.print(odleglosc);
   lcd.print("cm");
  }
   delay(1000);
   lcd.clear();

  //Sygnał dzwiękowy
  if (odleglosc<=20 && odleglosc>=10)
  {
   tone(pin_buzzer, 2000, 200);  
  }

  //Dioda ostrzegawcza
  
  if(odleglosc>50)
  {
   digitalWrite(dioda_ostrzegawcza, LOW);
  }
  if (odleglosc<50)
  {
    digitalWrite(dioda_ostrzegawcza, HIGH);
  {
   tone(pin_buzzer, 3000, 200);
    digitalWrite(dioda_ostrzegawcza, HIGH);
  }

mam to w ten sposób zrobione i działa, buzer jest fizycznie niepodłaczony bo go nie mam ale poza tym wszystko działa, zmodyfikować odległość żeby zapalała się dioda umiem ogarnąć, natomiast jak chce dodać kolejną to już mi to nie działa, bo docelowo chce dać 3 diody, czerowna zielona i żółta i w zależności od odległości będą się zapalały po kolei, tylko nie wiem jak to fizycznie ugryźć 

Link do komentarza
Share on other sites

#include "LiquidCrystal.h"
#define pin_nadajnik 6  //Definicja pinu, do którego podłączamy nadajnik (pin TRIG)
#define pin_odbiornik 7 //Definicja pinu, do którego podłączamy odbiornik (pin ECHO)
#define pin_buzzer 1
#define dioda_ostrzegawcza 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Definicja pinów do których podłączamy wyprowadzenia ekranu

int odleglosc;          //Zmienna przechowująca odległość
long czas_impulsu = 0;  //Zmienna przechowująca czas trwania impulsu na pinie ECHO
 
void setup()
{
 lcd.begin(16,2); //Inicjalizacja pracy LCD
 pinMode(pin_nadajnik, OUTPUT);
 pinMode(pin_odbiornik, INPUT);
 pinMode(dioda_ostrzegawcza, OUTPUT);
 pinMode(9, OUTPUT);
}
 
void loop()
{
 digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
 delayMicroseconds(10); //Czas trwania 10us
 digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
 
 czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
 odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm


//Zabezpieczenie przed przekroczeniem zakresu pomiarowego
  if ( odleglosc < 5 || odleglosc> 200 )
  {
   lcd.setCursor(0,0);
   lcd.print("Pomiar niedostepny");
  }
  
  else
  {
   lcd.setCursor(0,0);
   lcd.print("Odleglosc: ");
   lcd.setCursor(11,1);
   lcd.print(odleglosc);
   lcd.print("cm");
  }
   delay(1000);
   lcd.clear();

  //Sygnał dzwiękowy
  if (odleglosc<=20 && odleglosc>=10)
  {
   tone(pin_buzzer, 2000, 200);  
  }

 static byte tab[3] = {8,9,4}; //ledy piny

byte skala = map(odleglosc, 0, 190, 0, 3);

for (byte i = 0; i < skala; i++) {
  digitalWrite(tab[i], HIGH);
  }
for (byte i = 3; i > skala; i--) {
  digitalWrite(tab[i-1], LOW);
   }
 }

Powinno dzialac...ewentualnie nawiasy klamrowe pogubilem...w tej tablicy podajesz nr pinow od ledow...

Edytowano przez farmaceuta
  • Lubię! 1
Link do komentarza
Share on other sites

(edytowany)

dzięki, skopiowałem wgrałem i wyskoczyły błędy:


 

Arduino:1.8.15 (Windows 10), Płytka:"Arduino Uno"

sketch_nov19a:31:3: error: expected unqualified-id before 'if'
   if ( odleglosc < 5 || odleglosc> 200 )
   ^~
sketch_nov19a:37:3: error: expected unqualified-id before 'else'
   else
   ^~~~
sketch_nov19a:45:9: error: expected constructor, destructor, or type conversion before '(' token
    delay(1000);
         ^
sketch_nov19a:46:4: error: 'lcd' does not name a type
    lcd.clear();
    ^~~
sketch_nov19a:49:3: error: expected unqualified-id before 'if'
   if (odleglosc<=20 && odleglosc>=10)
   ^~
sketch_nov19a:58:1: error: expected unqualified-id before 'for'
 for (byte i = 0; i < skala; i++) {
 ^~~
sketch_nov19a:58:18: error: 'i' does not name a type
 for (byte i = 0; i < skala; i++) {
                  ^
sketch_nov19a:58:29: error: 'i' does not name a type
 for (byte i = 0; i < skala; i++) {
                             ^
sketch_nov19a:61:1: error: expected unqualified-id before 'for'
 for (byte i = 3; i > skala; i--) {
 ^~~
sketch_nov19a:61:18: error: 'i' does not name a type
 for (byte i = 3; i > skala; i--) {
                  ^
sketch_nov19a:61:29: error: 'i' does not name a type
 for (byte i = 3; i > skala; i--) {
                             ^
exit status 1
expected unqualified-id before 'if'


Ten raport powinien zawierać więcej informacji jeśli w 
File -> Preferencje zostanie włączona opcja "Pokaż
szczegółowe informacje podczas kompilacji"

 

jeżeli mam diody podłączone na pinach 8 i 9 to powinienem wpisać numery pinów? i w których nawiasach?

Edytowano przez Gieneq
Link do komentarza
Share on other sites

30 minut temu, grabarz666 napisał:

jeżeli mam diody podłączone na pinach 8 i 9 to powinienem wpisać numery pinów? i w których nawiasach?

Tak musisz zainicjowac piny w setup i wpisac tam gdzie masz tab...2/3/4 to moje piny...ty wpisz swoje...bledy masz bo brakuje nawiasow pewnie...dorzuc na dole klamrowy zamykajacy..

 

edit poprawilem ten kod...sprawdz czy dziala

Edytowano przez farmaceuta
  • Lubię! 1
Link do komentarza
Share on other sites

działa wszystko zapalają się 3 diody, a jak bym chciał żeby każda dioda zapalała się od danej odległości?

np 1 od nieskończoności do np 50 cm, druga od 50 cm do 20 i trzecia od 20 do 0? 

static byte tab[3] = {8,9,4}; //ledy piny

byte skala = map(odleglosc, 0, 190, 0, 3);

for (byte i = 0; i < skala; i++) {
  digitalWrite(tab[i], HIGH);
  }
for (byte i = 3; i > skala; i--) {
  digitalWrite(tab[i-1], LOW);
   }
 }

to w miejsce 3 musiał bym wpisac 1 i led 8 na początek i reszte skopiowac zmieniając dane odleglosci?

Link do komentarza
Share on other sites

16 minut temu, grabarz666 napisał:

to w miejsce 3 musiał bym wpisac 1 i led 8 na początek i reszte skopiowac zmieniając dane odleglosci?

To juz lepiej na warunkach if bo funkcja map() dzieli wartosci na rowne czesci...mozna zrobic np tak.

if (odleglosc > 50) {     //led 51-...cm
  digitalWrite(8, HIGH);
} else {
    digitalWrite(8, LOW);
}
if (odleglosc < 50 && odleglosc > 20) { //led 49-21 cm
  digitalWrite(9, HIGH);
} else {
    digitalWrite(9, LOW);
}
if (odleglosc < 20 && odleglosc > 0) { // 19-1 cm
  digitalWrite(10, HIGH);
} else {
    digitalWrite(10, LOW);
}

tamten kod wywal wczesniejszy a wstaw to...wywal to co ja dopisalem a twoj zostaw,,

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

podpowiedział byś jak? zmieniłem diode na pin 10 bo mialem wolny akurat i nie działa. czarna magia to jest dla mnie, ogólnie chciałem to zrobić w ten sposób, żeby te diody zapalały się po kolei i chciałem jeszcze zrobić jakieś czuwanie i zasilanie bateryjne, ale widze że z takimi podstawami sobie nie radzę i chyba odpuszczę temat

Link do komentarza
Share on other sites

8 minut temu, grabarz666 napisał:

podpowiedział byś jak? zmieniłem diode na pin 10 bo mialem wolny akurat i nie działa. czarna magia to jest dla mnie, ogólnie chciałem to zrobić w ten sposób, żeby te diody zapalały się po kolei i chciałem jeszcze zrobić jakieś czuwanie i zasilanie bateryjne, ale widze że z takimi podstawami sobie nie radzę i chyba odpuszczę temat

Spokojnie...bez stresu, nie ma jednego czlowieka na swiecie ktory sie urodzil i moglby powiedziec "Ja wiem"...😉 kazdy sie musi nauczyc...masz powyzej juz kod z tymi zakresami...sprawdz czy dziala jak chcesz i mozna dzialac dalej...

  • Lubię! 1
Link do komentarza
Share on other sites

3 minuty temu, grabarz666 napisał:

dzięki za wyrozumiałość 🙂 zmieniłem i działa ale nadal ta jedna dioda nie prądzi, zmieniałem na pin 10 pin 13 i w wartościach też to zmieniałem i nie działa

Tam masz takie cos jak 

pinMode(10,OUTPUT)

to jest funkcja ustalajaca tryb dzialania pinu...w setup() wpisz sobie to co powyzej i bedzie dzialac...

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.