thequeash Napisano Kwiecień 28, 2017 Udostępnij Napisano Kwiecień 28, 2017 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: -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 :-> 😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Kwiecień 29, 2017 Udostępnij Kwiecień 29, 2017 thequeash, super - cieszę się, że elementy wykorzystywane w kursie cały czas się przydają! Jakieś dalsze plany rozbudowy 😉? Cytuj Link do komentarza Share on other sites More sharing options...
thequeash Kwiecień 30, 2017 Autor tematu Udostępnij Kwiecień 30, 2017 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. 🙂 1 Cytuj Link do komentarza Share on other sites More sharing options...
control Maj 6, 2018 Udostępnij Maj 6, 2018 thequeash, Mógłbyś mi powiedzieć jakich czujników użyłeś do tego projekty i jak one są podpięte? Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
MAZ543 Maj 7, 2018 Udostępnij Maj 7, 2018 thequeash - szacun za projekt, bardzo mi się podoba 😉 Control - wydaje mi się że wszystko zostało wyjaśnione w opisie. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 8, 2018 Udostępnij Maj 8, 2018 control, projekt został wykonany na podstawie elementów, które znajdują się w zestawach do tego kursu: https://kurs.forbot.pl/arduino Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!