Skocz do zawartości

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


Pomocna odpowiedź

Napisano

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

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.

thequeash, super - cieszę się, że elementy wykorzystywane w kursie cały czas się przydają! Jakieś dalsze plany rozbudowy 😉?

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
  • 1 rok później...

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

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

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...