Witam,
chciałbym przedstawić Wam swój prosty, ale dość ciekawy projekt stroboskopu.
Efekt stroboskopu powstaje wtedy, kiedy poruszający się obiekt, będziemy oświetlać “migającym” światłem. Miganie ująłem w cudzysłów, bo w większości przypadków nasze oko migania nie jest wstanie dostrzec, ale o tym później.
Do czego wykorzystujemy stroboskop? Pomijając zabawy dyskotekowe, używamy go do “zamrożenia ruchu”, co przekłada się np. na możliwość pomiaru prędkości obrotowej np. działającego wiatraka.
Co nam będzie do tego potrzebne?
- Arduino (do kupienia chociażby na Nettigo.pl)
- Białe diody LED Clear (koniecznie Clear, czyli przezroczyste – dlaczego? To również wyjaśnię w dalszej części wpisu)
- Tranzystor, do wysterowania diód (najlepiej NPN, ja użyłem tip102, ale może być słabszy)
- Potencjometr (użyłem 10k Ω np. taki)
- Płytka stykowa (wystarczy taka malutka)
- Kabelki do połączenia płytki stykowej z Arduino (również dostępne na Nettigo.pl)
- Kilka rezystorów (nie podaję konkretnych wartości, bo zależą od użytych diód LED itd. (w moim projekcie dla diód LED 150Ω, przy tranzystorze oraz dodatkowo przy potencjometrze po 10kΩ), dla początkujących zestaw rezystorów i kondensatorów)
Schemat przygotowałem we Fritzingu (do pobrania z oficjalnej strony: http://fritzing.org/)
Podłączenie banalne i, tak mi się wydaje, nie wymaga większego komentarza:
Teraz trochę więcej teorii, jak nasz stroboskop będzie działać
Wyobraźmy sobie, że mamy wiatraczek, który obraca się z prędkością 60 obrotów na minutę. Łatwo obliczyć, że w ciągu sekundy wiatrak wykona jeden pełen obrót, czy jak kto woli, w ciągu sekundy łopatka wiatraka zatoczy pełen okrąg (360°).
Jeżeli będziemy oświetlać wiatrak błyskiem światła, jaśniejszym od otoczenia dokładnie co sekundę, zobaczymy oświetlone skrzydło wiatraka za każdym razem w tym samym miejscu.
Jednak błysk, błyskowi nie równy. Im dłużej będzie trwał błysk, tym bardziej rozmyty obraz śmigła zobaczymy. W przypadku tak wolnego obrotu, jak w naszym przykładzie, nie będzie to właściwie widoczne, jednak w przypadku np. wiatraka komputerowego, który obraca się z prędkością około 3500 obr./min (58 obr./s) to ma już duże znaczenie.
Możemy pokusić się o wyprowadzenie wzoru, dzięki którego będziemy mogli obliczyć jaki powinien być czas błysku, aby nasze oko widziało maksymalnie ostry obraz, ale matematyką nie będziemy się zajmować :).
Z mojego doświadczenia można przyjąć, że czas błysku (błyskiem w tym przypadku nazywam moment, w którym dioda LED świeci) może wynosić 100 µs (mikrosekund). Im większa moc źródła światła, tym wartość ta może być mniejsza.
Ktoś mógłby zapytać, dlaczego nie ustawić najmniejszego możliwego czasu błysku, pomijając całą część teoretyczną. Odpowiedź jest prosta – im mniejszy czas błysku, tym mniejsza energia światła, a co za tym idzie może być ono niewystarczające, aby być jaśniejsze od otoczenia, a w skrajnych przypadkach może nie mieć energii aby oświetlić obiekt w całkowitej ciemności w sensownej odległości od tego właśnie obiektu.
Tak, czy owak – dioda LED musi się dość szybko zaświecać i równie szybko gasnąć. I nie ma z tym generalnie żadnych problemów, poza jednym – jeżeli mamy diodę mleczną, czyli matową. Materiał, którym jest ona pokryta, nie jest tak “szybki” jak dioda i gaśnie trochę wolniej, przez co możemy zauważyć smużenie, a dalsze zmniejszanie czasu błysku nie przyniesie większych, pozytywnych efektów.
Zaświecenie diody jest pierwszym krokiem, który na potrzeby tego artykułu uznamy za niezmienny i równy 100 µs.
Jak już ją zaświecimy, to musimy ją zgasić. Po jakim czasie? To jest kluczowe. Od tego czasu zależeć będzie częstotliwość stroboskopu. Czym jest częstotliwość? W skrócie – ilość błysków w ciągu sekundy. Tę wartość wyrażamy w Hertzach [Hz]. 1 Hz oznacza jeden, 100-mikrosekundowy błysk na sekundę. 2 Hz – dwa, 100-mikrosekundowe błyski na sekundę itd. Im częstotliwość wyższa, tym nasze oko słabiej reaguje na błyski. Przy 100 Hz błyski są niedostrzegalne.
Jak obliczyć jaka powinna być przerwa między kolejnymi błyskami, aby uzyskać wybraną przez nas częstotliwość?
przerwa między błyskami = 1/częstotliwość [Hz]
Przykład:
śmigło helikoptera obraca się z prędkością 300 obr./min.
Jaki czas jest potrzebny, dla jednego, pełnego obrotu śmigła?
300 obr./min. = 5 obr./s
W ciągu sekundy śmigło wykona 5 obrotów. A zatem jego częstotliwość wynosi 5 Hz.
czas pełnego obrotu śmigła = (1/5) sekundy = 0,2 s.
Śmigło potrzebuje 0,2 sekundy, aby wykonać pełen obrót.
A zatem, jeżeli w naszym stroboskopie będziemy zapalać diody co 0,2 s. odniesiemy wrażenie, że śmigło pozostaje nieruchome.
Podsumowując nasz stroboskop ma zaświecać diodę na 100 µs, gasić diodę, a przed kolejnym jej zaświeceniem czekać określony przez nas czas.
Trochę praktyki
po dość przydługawej części teoretycznej, która, mam nadzieję, że nieco pozwoli zrozumieć co tak na prawdę będziemy robić, czas na zajęcia praktyczne.
Po zmontowaniu układu zgodnie ze schematem, który umieściłem na początku artykułu, a którego zdjęcia pokazuję powyżej (kolory kabelków są nieco inne niż na schemacie o czym wiem i nie znaczy to wcale, że jestem daltonistą ;), czas na napisanie programu dla Arduino.
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 |
#define stroboPin 3 #define onTime 100 unsigned long StroboFlash(unsigned long ontime = 100, unsigned long offTime = 10000) { float czasBlysku = (ontime + offTime)/1000000.0; // zmienna informacyjna zawierajaca pelen czas blysku w sekundach float czestotliwosc = 1/czasBlysku; bool bigOffDelay = false; if (offTime >= 100000) // jezeli czas miedzy blyskami jest wiekszy niz 100 000 us { offTime = offTime / 1000; // niech czas przerwy bedzie podawany w milisekundach bigOffDelay = true; // a informacja, ze tak wlasnie jest, niech bedzie widoczna dla reszty funkcji }; bool bigOnDelay = false; if (ontime >= 100000) // jezeli czas blysku diody LED jest wiekszy niz 100 000 us { ontime = ontime / 1000; // niech czas blysku bedzie podawany w milisekundach bigOnDelay = true; // a informacja, ze tak wlasnie jest, niech bedzie widoczna dla reszty funkcji }; digitalWrite(stroboPin, HIGH); // wlacz diode LED if (bigOnDelay) { delay(onTime); // na czas podawany w milisekundach } else { delayMicroseconds(onTime); // albo mikrosekundach } digitalWrite(stroboPin, LOW); // wylacz diode LED if (bigOffDelay) { delay(offTime); // na czas podawany w milisekundach } else { delayMicroseconds(offTime); // albo mikrosekundach } return czestotliwosc; } void StroboFlash(float Czestotliwosc = 10.0f) // ta funkcja generuje blyski z zadana czestotliwoscia { if (Czestotliwosc > 100) // czestotliwosc wieksza niz 100 Hz { digitalWrite(stroboPin, HIGH); delayMicroseconds(onTime); digitalWrite(stroboPin, LOW); delayMicroseconds((1000000.0f-onTime)/Czestotliwosc); // 1 000 000 us = 1 s. musimy odjac czas blysku, aby obliczenia byly dokladne } else { digitalWrite(stroboPin, HIGH); delayMicroseconds(onTime); digitalWrite(stroboPin, LOW); delay((1000/Czestotliwosc)); // tutaj nasze 100 us mozemy pominac, nie bedzie zauwazalne } } void setup() { Serial.begin(9600); pinMode(stroboPin, OUTPUT); } void loop() { static int oldAnalog; int analog = analogRead(A0); float Czestotliwosc = StroboFlash(onTime, analog * 15); // odczytana wartosc mnozymy przez 15: przy maksymalnym przekreceniu potencjomatru i odczytaniu wartosci 1023 * 15 otrzymamy czestotliwosc blyskow odpowiadajaca co najmniej 65 Hz, czyli 3900 blyskow/obrotow na minute. // zmniejszajac wartosc 15 uzyskamy wyzsze czestotliwosci. if (abs(oldAnalog-analog) > 0 ) // jezeli poprzedni odczyt jest rozny od obecnego, to wyslij informacje o czestotliwosci przez port COM { oldAnalog = analog; Serial.print("Czestotliwosc blyskow [Hz]: "); Serial.println(Czestotliwosc); }; } |
Jeżeli coś wymaga głębszego komentarza, proszę o komentarze.
A poniżej filmik obrazujący działanie.
oraz drugi – tu został zwiększony czas błysku ze 100 na 400 mikrosekund – dobrze widać, jak iks się rozmywa. Dodatkowo, poza X widać też stroboskop oraz jego “obsługę”, bo w pierwszym filmie istotnie, nie było to pokazane.
Już niedługo wpis pokazujący na początek prostą komunikację Arduino z PC (przez aplikację napisaną w C#).
Strasznie długi ten wpis, mam nadzieję, że kogoś zainteresuje.
Przyznaje się, że nie czytałem artykułu ale nie rozumiem jednego. Po drodze LED, LED, LED a na końcu X. Heh? Nie tak wygląda stroboskop.
X na papierku obracając się obrazuje synchronizację pomiędzy prędkością obrotową silnika a częstotliwością i czasem trwania impulsu diod LED.
Kolega widząc opis stroboskop pomyślał sobie pewnie o “DISCO UPSY UPSY” a tu error, bo to stroboskop w mini skali, ale do zastosowania w mechanice. Duży stroboskop z lampą stosowany był do ustawiania zapłonu w samochodach przez mechaików.
no ja właśnie planuje zrobić coś takiego by sprawdzać prędkość obrotową silniczków
ja nie rozumiem po co rysowac schematy z wykorzystaniem płytki prototypowej przecież to jest mniej czytelne..
Mniej czytelne niż…?
…niż zwyczajny schemat ideowy.
Za wmówienie ludziom, że czytanie tych bohomazów, jest łatwiejsze niż czytanie schematów ideowych, powywieszałabym twórców fritzinga na suchych gałęziach.
Do it! :)
Jednak, masz trochę racji – w nieco większych projektach, tak właśnie jest, w tym, prostym, uważam, że jest wystarczająco czytelny. Dodatkowo, jeżeli ktoś nie zajmuje się elektroniką na co dzień, złożenie układu z takiego schematu jest dziecinnie proste, a mając tylko schemat ideowy, niekoniecznie wiedziałby co, z czym połączyć.
Dla mnie super. Jestem początkujący i o wiele łatwiej jest mi się połapać w takich obrazkach, niż w typowych schematach, których najczęściej nie rozumiem.
Po co tutaj tranzystor?
W tym przypadku pewnie Pin ATMEGI by dał bez problemu wystarczający prąd, bo to tylko 3 LED-y (przyznam, szczerze, że nawet nie chce mi się tego liczyć), jednak docelowo LED-ów powinno być więcej, albo może jedna, ale wysokiej mocy, a wtedy już tranzystor jest konieczny. To tyle – w skrócie :).
BC547 wystarczy?
Jeżeli w uproszczeniu przyjmiemy, że jedna dioda pobierze maksymalnie 20 mA, bez tranzystora możemy zasilić dwie diody połączone szeregowo pobiorą 40 mA – to jest graniczna, bezpieczna wartość prądu pobieranego z pinu w Arduino.
Podłączając przez tranzystor BC547, którego maksymalny prąd wynosi 100 mA, można podłączyć 5 LED-ów – 100 [mA] / 20 [mA] = 5.
A jak moje tłumaczenie jest mętne, albo błędne, to poczytaj tutaj o tranzystorach :)
http://starter-kit.nettigo.pl/2009/12/gdy-pradu-brakuje/
A pisząc o diodach połączonych szeregowo, miałem na myśli połączenie równoległe :).
moze z innej paki.. zmien avatar zebys był traktowany powazniej i nie gorszył innych swoimi zainteresowaniami satanizmem.
:) NC, ale dziękuję za uwagę
Swoim wpisem powodujesz, że sam będziesz traktowany mniej poważnie. Nie jesteśmy na blogu o poglądach, tylko o majsterkowie i nic Ci do tego, kto jakie ma zainteresowania poza majsterkowaniem.
W naszym kraju istnieje wolność poglądów i wyznania, zapewniana przez Konstytucję RP oraz Powszechną Deklarację Praw Człowieka.
Zresztą, to, co kogoś gorszy, jest kwestią gustu. Mnie na przykład gorszy krucyfiks, ale czy to znaczy, że ze szkół, z urzędów itp. ma on zniknąć? Nikt dla mnie nie zdejmie tego symbolu teistycznego, bo mi się to nie podoba, tak samo jak autor nie musi zmieniać avatara, bo Tobie się on nie podoba.
Nie mieszajmy spraw ideologicznych w majsterkowanie, bo to już zakrawa na paranoję. Gdzie nie spojrzeć, katoliccy i narodowi aktywiści, tłamszący wszystko, co sprzeczne z ich ograniczoną wizją świata.
Dajcie spokój… Mam nadzieję, że ten post nie zostanie usunięty, gdyż uważam Internet za OSTATNIĄ ostoję wolności wyznania, bo w naszym kraju nie będąc katolikiem nie da się już żyć…
Pozdrawiam serdecznie i oczywiście z szacunkiem dla wszystkich normalnych, niefanatycznych wyznawców jakiegokolwiek wierzenia :)
Słuchaj chłopczyku:
Po.1 Nie unos sie tak bo ci jeszcze żyłka pęknie.
Po.2 Myslisz ze kazdy kto przeczyta ten post wstanie z krzesła i zacznie ci bic brawo? Tak oczywiscie jest to blog o Majsterkowaniu ale to znaczy ze ktos moze miec i męskie genitalia na avatarze ktory bedzie pokazywany na stronie głownej? Bo w “W naszym kraju istnieje wolność poglądów i wyznania, zapewniana przez Konstytucję RP oraz Powszechną Deklarację Praw Człowieka. ” i komus sie przeciez mogą podobac męskie genitalia.. idąc twoim tokiem myslenia tak?
Po.3 Nie jestem Katolikiem jestem od urodzenia Ateista. i (“bo w naszym kraju nie będąc katolikiem nie da się już żyć…”) jakoś żyje: )
donau, Andrzej:
tylko dlatego, że nie uznaję cenzury, jako takiej, nie usunę powyższych komentarzy, ale bardzo proszę o zakończenie tej dyskusji.
Avatara nie zmienię – jeśli się komuś nie podoba – nie mój problem. Jeżeli Pan Łukasz uzna, że jest niewłaściwy, to jako gospodarz on jedyny może mi zwrócić uwagę.
Zaprezentowałem tu swój projekt, opisałem i liczę na to, że to on będzie komentowany, a nie mój avatar.
Swoją drogą, ocena książki po okładce, jest w nie najlepszym guście.
Dziękuję
“Swoją drogą ocena książki po okładce, jest w nie najlepszym guście” – powiadasz? ja sądzę że ciebie tylko po tym można ocenić
Biedaku :). Jakieś konkrety? Czy tak tylko chciałeś napisać?
Oczywiscie masz racje. Nie napisałem swojego komentarza ze wzgledu ze mi nie odpowiada tylko znam ludzi bo juz troche lat zyje i kazdy roznie moze na to zareagowac.
Niepotrzebnie pan Andrzej zaczął mnie atakowac,ale i tak bywa: )
Wszystko ładnie i pięknie ale “zaprzęganie” całego Arduino do migania trzema diodami ? Całość można by zrobić na NE555, dwóch rezystorach (potencjometrach) i kondensatorze :)
Oczywiście, że tak, jednak w stroboskopie celem “migania” nie jest miganie samo w sobie, tylko wyciąganie jakiś wniosków z tego migania :). W projekcie, jak widzisz, dostajesz odpowiedź o częstotliwości, która bezpośrednio przekłada się na prędkość obrotową, a bez mikrokontrolera wyświetlenie czegoś chociażby na wyświetlaczu LCD jest chyba dość trudne.
Nie wiem jakie tutaj masz wnioski. właśnie leży mi na stole uly7855 z 1 potencjometrem, 3 rezystorami i 3 pojemnościami. a jest to bogatsza wersja (odporna na zmianę napięcia).
w porównaniu do twojego projektu:
jest tak z 70 razy tańszy
jest dużo mniejszy (kawałek płytki uniwersalnej 3x5cm)
spokojnie operuje na napięciach 12V (14,4V)
Nie bardzo rozumiem o co Ci chodzi? Co w związku z tym, że Ci leży na stole parę elementów? Możesz jakoś rozwinąć swoją wypowiedź, ale odnosząc się jakoś dokładniej do mojego projektu?
Do tego projektu to arduino wprawdzie nie jest konieczny ale wygodny,,,
mam tylko jedno pytanie czy ktoś ma pomysł jak zrobić lampę strobo do ustawiania zapłonu z wyborem przesunięcia o kąt…
pzdr Grzegorz
Brawo Dla CB. Właśnie Tego tematu szukałem i znalazłem i w dodatku najlepszy jaki znalazłem w sieci. W Dodatku plan całego projektu jest bardzo dobrze wytłumaczony ,w dodatku jeszcze dodałeś napisany program do Arduino ,opisałeś co ,jak i dlaczego trzeba zrobić. Serdeczne Dzięki Materiał Jest ZAJEBIŚCIE Zrobiony i Objaśniony ,Myślę Że Każdy Początkujący Będzie Wiedział o Co Chodzi. Jak dla mnie Celująca Ocena. :D (y)
Fajny projekt i fajnie, że autor udostępnił go w sieci. Szkoda tylko tej fali wrogości i hejtu… Wnioski? Jak coś fajnego zrobisz, to się tym nie chwal w necie… Oj polaczki, polaczki…
darekry – 70zł za arduino? Ok. 6pln kosztuje atmega, do tego 2 kondzielce 20piko i kwarc – w dyszce się zamkniesz. Wypalasz bootloader i nawet Arduino IDE można działać. I do tego masz rs’a do zrzucania danych na kompa. Poza tym dużo bardziej rozwojowe od Twojego uly7855. Pozdro