Skocz do zawartości

Automatyczny parking w arduino - projekt dla początkujących


thequeash

Pomocna odpowiedź

Witam. 😅

Chciałbym wam przedstawić mój pierwszy projekt zrobiony w arduino. Wykorzystałem w nim wiedzę z kursu arduino jak i również elementy tam zawarte (z zestawu z botlandu). Myślę, że jest warty uwagi chociażby właśnie z tego powodu, dla użytkowników tego serwisu jest wybawieniem po skończonym kursie. Łatwa konstrukcja, a jej budowa sprawiła mi wiele frajdy bez potrzeby inwestowania w dodatkowe elementy.

Główne zadanie parkingu to wyświetlanie na wyświetlaczu LCD ilość dostępnych miejsc parkingowych, uwzględnianie przyjeżdżających i wyjeżdżających samochodów, otwieranie bramy, komunikowanie się przy pomocy diod i buzzera. Zresztą zobaczcie sami:

Schemat połączeń:

- wyświetlacz:

Arduino_LCD.png

-serwomechanizm: pin 11 (zasilanie z baterii --> Vin --> stabilizator 5V --> serwo)

-przyciski: pin 9,10

-diody LED: pin 12,13

-buzzer: pin 8

Całość zadebiutowała na dniach otwartych szkoły, u części gimnazjalistów nawet wzbudziła zainteresowanie 😅 Najistotniejszą rolę odgrywa tutaj ciekawie zbudowany przycisk, na który najeżdżają samochodziki. Przedstawiam wam jego bardzo uproszczony (narysowany w paincie) schemat:

Kod programu (wraz z opisem):

#define ledgreen 13
#define ledred 12
#define bramaopen 9
#define bramaclose 10
#define buzzer 8

int a = 3; //tutaj wpisz pozycje startowa w jakiej ma sie ustawic serwo (brama)
int b = 93; //tutaj wpisz jak bardzo ma sie wychylic brama gdy bedzie otwarta z polozenia rownowagi (a)
int x = 2; //tutaj wpisz ilosc dostepnych miejsc na twoim parkingu
int y = 2500; //tutaj wpisz czas jaki brama ma byc otworzona (ms)

int freeslots = x; //ilosc wszystkich miejsc jakie sa dostepne na naszym parkingu

#include <Servo.h> //biblioteka serwomechanizm
Servo serwomechanizm; //obiekt do ktorego mozna sie potem odwolac
int pozycjaserwa = a; //pozycja poczatkowa serwa
boolean openstatus = 0; //umozliwa wyjscie z if'a, powoduje wykonanie polecen tylko raz

#include <LiquidCrystal.h> //biblioteka lcd
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // wyswietlacz piny
// 1-GND; 2-VCC; 3-srodek potencjometru, pozostale 2 do VCC, GND; 4-2; 5-GND; 6-3; 11-4; 12-5; 13-6; 14-7; 15-VCC; 16-GND;

void setup() {
 serwomechanizm.attach(11); //serwomechanizm podlaczony do pinu 11
 serwomechanizm.write(a); //ustaw serwo w pozycji poczatkowej

 pinMode(ledgreen, OUTPUT); //deklaraja pinow
 pinMode(ledred, OUTPUT);
 digitalWrite(ledred, HIGH); //wlacz czerwona diode
 digitalWrite(ledgreen, LOW); //wylacz zielona diode
 pinMode(bramaopen, INPUT_PULLUP);
 pinMode(bramaclose, INPUT_PULLUP);
 pinMode(buzzer, OUTPUT); //buzzer
 digitalWrite(buzzer, LOW); //wylacz buzzer

 lcd.begin(16, 2); //deklaracja typu wyswietlania
 lcd.setCursor(0, 0); //ustaw kursor
 lcd.print("Wolne miejsca: "); //wyswietl napis
 lcd.setCursor(0, 1); //daj kursor na dol
 lcd.print(x); //wyswietl poczatkowa ilosc miejsc parkingowych (edycja na gorze)
}

void loop() {
 if ((digitalRead(bramaopen) == LOW) && (openstatus == 0) && (freeslots > 0)) { //jesli przycisk OPEN jest wcisniety
   digitalWrite(ledgreen, HIGH); //zapal zielona diode
   digitalWrite(ledred, LOW); //i jednoczesnie zgas czerwona

   freeslots --; //odejmij 1 miejsce
   if (freeslots < 0) { //jesli freeslots chce zejsc ponizej zera
     freeslots = 0; //ustaw z powrotem na 0
   }
   lcd.setCursor(0, 1); //ustaw kursor na lcd
   lcd.print (freeslots); //wyswietl na lcd pozostale miejsca parkingowe

   pozycjaserwa = b; //jak bardzo ma sie wychylic nasza brama (max 255)
   serwomechanizm.write(pozycjaserwa); //otworz brame na wychylenie b
   digitalWrite(buzzer, HIGH); //wlacz buzzer
   delay(y);
   digitalWrite(buzzer, LOW); //wylacz buzzer

   openstatus = 1; //wyjscie z if'a
 }
 else { //powrot do ustawien sprzed wcisniecia przycisku OPEN
   digitalWrite(ledgreen, LOW); //zgas zielona diode
   digitalWrite(ledred, HIGH); //zapal czerwona diode
   pozycjaserwa = a; //pozycja poczatkowa serwa
   serwomechanizm.write(pozycjaserwa); //zamknij  na wychylenie poczatkowe (a)
   openstatus = 0;
 }

 if ((digitalRead(bramaclose) == LOW) && (openstatus == 0) && (freeslots < x)) { //jesli przycisk CLOSE jest wcisniety
   digitalWrite(ledgreen, HIGH); //zapal zielona diode
   digitalWrite(ledred, LOW); //i jednoczesnie zgas czerwona

   freeslots ++; //dodaj 1 miejsce
   if (freeslots > x) { //jesli freeslots chce byc wieksze od x
     freeslots = x; //ustaw z powrotem na x
   }
   lcd.setCursor(0, 1); //ustaw kursor na lcd
   lcd.print(freeslots); //wyswietl na lcd pozostale miejsca parkingowe

   pozycjaserwa = b; //jak bardzo brama ma sie wychylic (max 255)
   serwomechanizm.write(pozycjaserwa); //otworz brame na wychylenie b
   digitalWrite(buzzer, HIGH); //wlacz buzzerbrame
   delay(y);
   digitalWrite(buzzer, LOW); //wylacz buzzer

   openstatus = 1; //wyjscie z if'a
 }
 else { //powrot do ustawien sprzed wcisniecia przycisku CLOSE
   digitalWrite(ledgreen, LOW); //zgas zielona diode
   digitalWrite(ledred, HIGH); //zapal czerwona diode
   pozycjaserwa = a; //pozycja poczatkowa serwa
   serwomechanizm.write(pozycjaserwa); //zamknij brame na wychylenie poczatkowe (a)
   openstatus = 0;
 }
 if ((freeslots == 0) && (digitalRead(bramaopen) == LOW)) { //jesli bramaopen jest wcisniety i miejsc na parkingu jest 0
   lcd.clear(); //wyczysc ekran
   lcd.setCursor(0, 0); //ustaw kursor
   lcd.print("Brak miejsc!"); //wyswietl komunikat o braku miejsc

   digitalWrite(buzzer, HIGH); //krotki komunikat buzzerem
   delay(250);
   digitalWrite(buzzer, LOW);
   delay(250);
   digitalWrite(buzzer, HIGH);
   delay(250);
   digitalWrite(buzzer, LOW);
   delay(300); //odczekaj jeszcze chwile
   lcd.clear();

   //ponowne ustawienia lcd z void setup
   lcd.setCursor(0, 0); //ustaw kursor na gorna linijke
   lcd.print("Wolne miejsca: "); //wyswietl napis "wolne miejsca"
   lcd.setCursor(0, 1); //daj kursor na dol
   lcd.print(freeslots); //wyswietl na lcd aktualna ilosc miejsc parkingowych
 }
}

Zaznaczam, że pomysł nie należy do mnie, główna jego idea jest zaczerpnięta

. Mój projekt oczywiście w dużej mierze odbiega od tego, wprowadziłem kilka dodatkowych modyfikacji.

Pozdrawiam :-> 😉

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

Podoba Ci się ten projekt? Zostaw pozytywny komentarz i daj znać autorowi, że zbudował coś fajnego!

Masz uwagi? Napisz kulturalnie co warto zmienić. Doceń pracę autora nad konstrukcją oraz opisem.

Raczej nie, nie mam nawet specjalnie pomysłu jak to rozbudować. Ewentualnie może kiedyś to wykorzystam w jakimś innym projekcie. Miałem w planach mini projekt inteligentnego domu, ale na razie przerzucę się na coś bardziej mobilnego. Na dniach zamawiam silniczki i ruszam z jakimiś robotami - czas sprawdzić się w tej dziedzinie. Dzięki za fajny kurs, potrafi zainteresować w przeciwieństwie do lekcji fizyki z prądu. 🙂

  • Lubię! 1
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

thequeash - szacun za projekt, bardzo mi się podoba 😉

Control - wydaje mi się że wszystko zostało wyjaśnione w opisie.

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.