Chciałbym wam zaprezentować mój pomysł na zabawkę dla dzieci – symulator świateł ulicznych.
Jak wszyscy wiedzą najlepsze zabawki to nowe zabawki. Kierując się tą zasadą stworzyłem wraz z dziećmi sygnalizację uliczną.
Założenia były dwa:
- w budowie miały uczestniczyć dzieci i to one miały zdecydować, jak to będzie wyglądało
- zabawka miała być tak zrobiona, aby można było wykorzystać wszystkie użyte części, tak, aby za jakiś czas można było stworzyć zupełnie coś innego.
Okazało się, iż te dwa założenia wzajemnie się uzupełniają. Sygnalizator stworzony został w oparciu o platformę Arduino, do której jak wiadomo można szybko załadować nowy program. Natomiast obudowa została stworzona przez dzieci z pudełka kartonowego. Więc, gdy zabawka się znudzi, zamiast odkładać ją na półkę pudełko zostanie wyrzucone, a mi pozostanie Arduino do następnych projektów.
Wykorzystane części
- arduino uno
- diody led wraz z rezystorami
- powerbank
- pudełko kartonowe
Schemat
Zabawka składa się z dwóch sygnalizatorów ulicznych oraz dwóch sygnalizatorów dla pieszych. Dzieci dostały zadania narysować je na pudełku oraz umieścić w środku diody led.
Środek wygląda następująco:
Całość zasilana jest z powerbanku tak, aby można było spokojnie przenosić zabawkę.
Przewody przylutowane do diód zostały z drugiej strony przylutowane do listwy goldpin. Dzięki temu mogę w każdym momencie odłączyć ledy, aby wykorzystać Arduino do innego projektu.
Pomalowana całość prezentuje się następująco:
Światła działają tak, jak prawdziwa sygnalizacja uliczna. Zostały odwzorowane wszystkie etapy zmiany świateł.
Kod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
int czerwone1=2; int zolte1=3; int zielone1=4; int czerwone_piesi1=5; int zielone_piesi1=6; int czerwone2=7; int zolte2=8; int zielone2=9; int czerwone_piesi2=10; int zielone_piesi2=11; void setup() { //ustawienie pinów jako wyjściowych pinMode(2, OUTPUT); pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); //włączenie wszystkich świateł - sprawdzenie, iż układ działa for(int i=2; i<12; i++){ digitalWrite(i, HIGH); delay(100); } //wyłączenie wszytkich świateł for(int i=2; i<12; i++){ digitalWrite(i, LOW); delay(100); } } void loop() { // numerami oznaczać będę kolejne etapy zmiany sygnalizacji //1 ulica_a(2); piesi_a(1); ulica_b(1); piesi_b(1); delay(2000); //2 ulica_a(3); piesi_a(2); delay(10000); //3 mrugaj_piesia(); //4 ulica_a(4); piesi_a(1); delay(4000); //5 ulica_a(1); delay(2000); //6 ulica_b(2); delay(2000); //7 ulica_b(3); piesi_b(2); delay(30000); //8 mrugaj_piesib(); //9 ulica_b(4); piesi_b(1); delay(4000); //10 ulica_b(1); delay(2000); } void ulica_a(int swiatlo){ switch (swiatlo) { case 1: //czerwone digitalWrite(czerwone1, HIGH); digitalWrite(zolte1, LOW); digitalWrite(zielone1, LOW); break; case 2: //żółte+czerwone digitalWrite(czerwone1, HIGH); digitalWrite(zolte1, HIGH); digitalWrite(zielone1, LOW); break; case 3: //zielne digitalWrite(czerwone1, LOW); digitalWrite(zolte1, LOW); digitalWrite(zielone1, HIGH); break; case 4: //żółte digitalWrite(czerwone1, LOW); digitalWrite(zolte1, HIGH); digitalWrite(zielone1, LOW); break; default: //wyłącznie światła digitalWrite(czerwone1, LOW); digitalWrite(zolte1, LOW); digitalWrite(zielone1, LOW); break; } } void ulica_b(int swiatlo){ switch (swiatlo) { case 1: //czerwone digitalWrite(czerwone2, HIGH); digitalWrite(zolte2, LOW); digitalWrite(zielone2, LOW); break; case 2: //żółte+czerwone digitalWrite(czerwone2, HIGH); digitalWrite(zolte2, HIGH); digitalWrite(zielone2, LOW); break; case 3: //zielone digitalWrite(czerwone2, LOW); digitalWrite(zolte2, LOW); digitalWrite(zielone2, HIGH); break; case 4: //żółte digitalWrite(czerwone2, LOW); digitalWrite(zolte2, HIGH); digitalWrite(zielone2, LOW); break; default: //wyłącznie światła digitalWrite(czerwone2, LOW); digitalWrite(zolte2, LOW); digitalWrite(zielone2, LOW); break; } } void piesi_a(int swiatlo){ switch (swiatlo) { case 1: //czerwone digitalWrite(czerwone_piesi1, HIGH); digitalWrite(zielone_piesi1, LOW); break; case 2: //zielone digitalWrite(czerwone_piesi1, LOW); digitalWrite(zielone_piesi1, HIGH); break; default: //wyłącznie światła digitalWrite(czerwone_piesi1, LOW); digitalWrite(zielone_piesi1, LOW); break; } } void piesi_b(int swiatlo){ switch (swiatlo) { case 1: //czerwone digitalWrite(czerwone_piesi2, HIGH); digitalWrite(zielone_piesi2, LOW); break; case 2: //zielone digitalWrite(czerwone_piesi2, LOW); digitalWrite(zielone_piesi2, HIGH); break; default: //wyłącznie światła digitalWrite(czerwone_piesi2, LOW); digitalWrite(zielone_piesi2, LOW); break; } } void mrugaj_piesia() { //mruganie zielonym światłem dla pieszych for(int i=1; i<5; i++){ digitalWrite(zielone_piesi1, LOW); delay(500); digitalWrite(zielone_piesi1, HIGH); delay(500); } } void mrugaj_piesib() { //mruganie zielonym światłem dla pieszych for(int i=1; i<5; i++){ digitalWrite(zielone_piesi2, LOW); delay(500); digitalWrite(zielone_piesi2, HIGH); delay(500); } } |
Program do Arduino jest bardzo prosty.
W pierwszej kolejności ustawiane są piny jako wyjścia, następnie testowo zapalam a później gaszę diody – tak aby sprawdzić, czy fizyczne połączenia nie uległy uszkodzeniu.
Następnie w pętli z użyciem funkcji
- ulica_a
- ulica_b
- piesi_a
- piesi_b
- mrugaj_piesia
- mrugaj_piesib
zmieniane są światła.
Podsumowanie
Tak jak pisałem, zabawka została wykonana razem z dziećmi. Dzięki temu, iż sami coś stworzyli zobaczyli, co to znaczy majsterkowanie, zobaczyli, iż to co się samemu zrobi też może być fajne. Tak jak pisałem, w każdej chwili pudełko z ledami może zostać odłączone od Arduino, abym mógł stworzyć następną zabawkę.
Gdzie pętle ? Program można by było o dużo skrócić … -,-
Cel był taki, aby dzieci miały frajdę z roboty manualnej, a ja żebym mógł się czegoś nauczyć.
Jak widzisz są różne konstrukcje w projekcie – trochę pętli, funkcje, case. Tak wszystkiego po trochu abym mógł zapoznać się z technologią.
Jak się okazało największym wyzwaniem i tak było odtworzenie z pamięci cyklu świateł. To wcale nie jest takie oczywiste, jak by się mogło wydawać
I co za różnica ? skrócisz raptem o 1kb – jakby to miało jakiekolwiek znaczenie przy takim projekcie :) najważniejsze, że działa i że twórca jest zadowolony :)
Sygnalizatory super hehe :)
1 kb to dużo w Arduino
jak zacznie mu brakować miejsca na mruganie diodą to wtedy się tym będzie przejmował. tak jak napisał Sławek jeśli twórca jest zadowolony to jest dobrze.
Zgrabme i szybkie.
A mnie interesuje wykładzina – w jakim sklepie została kupiona? Bo jestem na etapie szukania tego typu… :)
Ja widziałem w Castoramie, więc szukaj w takich marketach. Poszukaj w Google pod hasłem wykładzina village.
Ja wykładzinę kupowałem w Komforcie – ale to już było z 5 lat temu.
A projekt miał być “szybki” – dzisiaj światła, jutro zupełnie coś innego.
pozdrawiam
Skrzyżowanie ze światłami robiliśmy w podstawówce pod koniec lat 80-tych, gdzie w kiosku kupowało się żarówki do latarki i baterie płaskie :) a tu taka mechanizacja, pozdrawiam
Oła, moja córka by oszalała z radości dostając coś takiego. Pewnie z przełącznikiem ręcznym czerwone/żółte/zielone byłoby prościej zrobić, prawda? Kiedyś mój wujek robił takie cuda z płaską baterią i kawałkami drutu. :)
prościej jest to zrobić na arduino, ponieważ to tylko wpięcie nóżek diod led i napisanie prostego programu
Widziałem podobny projekt w jakiejś książce o podstawach Arduino
Racja. Zwykły plagiat.
To sam zrób coś lepszego zamiast hejtować.
WITAM,
CZY KTOŚ MOZE MI POWIEDZIEĆ CZY DO DRUGIEGO ZESTAWY ŚWIATEŁ POTRZEBA DRUGA PRŁYTKE ARDUINO CZY WYSTARCZ PODŁĄCZYĆ DIODY RÓWNOLEGLE (CHODZI MI O ZROBIENIE SKRZYZOWANIA, WIEC CZTERY ZESTAWY SWIATEŁ DLA SAMOCHODÓW I CZTERY DLA PIESZYCH), TYLKO CZY OPORNIKI NIE MUSZĄ BY INNE. KOD ROZUMIEM, ZE WTEDY MOŻE ZOSTAĆ TEN SAM.
@YARO: tutaj zostały użyte prawie wszystkie wyprowadzenia, ale możesz zwiekszyć ich ilośc używając expandera, dzięki temu bedziesz mógł sterować większą ilością diód.
P.S. nie używaj proszę tak nagminnie CAPS LOCK :)
Możesz diody połączyć równolegle, każda z rezystor np 1k Ohm. Przy napięciu 5V i diodzie na 2V pozostaje do wytracenia 3V i zakładając 3/1000 to daje nam 3mA na diodę. Przy połączeniu 2 diod masz 6mA. Na pewno będzie działało i dobrze świeciło. Jeden pin Output arduino wytrzymuje 20 ma więc nawet jest zapas.