RaV-uino Napisano Maj 11, 2010 Udostępnij Napisano Maj 11, 2010 Witam,niedawno rozpocząłem przygodę z programowanie i sterowaniem różnymi serwami i silniczkami. Po poczytaniu trochę w sieci, zdecydowałem się na początek wybrać Arduino. Ale do rzeczy, jakiś czas temu, przy okazji kolejnych zabaw z automatycznym włączaniem się diód, natknąłem się na dziwne (jak dla mnie) zjawisko. Mianowicie, napisany program miał zapalać i gasić kolejne diody, coś źle napisałem w kodzie - niestety nie wiem co, tworząc takie coś - dwie z trzech diód paliły się non-stop, a jedna zapalała się po zbliżeniu palca w okolicę pinów podłączeniowych lub prawej strony ATMegi. Zjawisko ilustruje filmik zamieszczony poniżej. Dodam, że jest to prosty układ - 3 diody podłączone przez oporniki 200ohm do różnych cyfrowych wyjść Arduino oraz do GND. Nie znam się na elektronice, a zjawisko mnie zainteresowało i ciekaw jestem dlaczego działo się tak, a nie inaczej. Może ktoś z Was zna odpowiedź? Przecież Arduino nie ma żadnych czujników zbliżeniowych (chyba)... W najbliższym czasie postaram się spróbować powtórzyć to doświadczenie i zobaczę co z tego wyjdzie. Link do filmiku http://w418.wrzuta.pl/film/3cSNUivVKk8/cuda_arduino#none Pozdrawiam Cytuj Link do komentarza Share on other sites More sharing options...
esiu_ Maj 11, 2010 Udostępnij Maj 11, 2010 jak dla mnie bardzo możliwe że twój program za szybko przełącza diody i oko postrzega to jako permanentne świecenie. W rzeczywistości może się zmieniać. Zwiększ opóźnienie lub przeskaluj przerwanie w zależności z czego korzystasz no a efekt diody niebieskiej? może problem ze stykaniem przewodu, chociaż ja pamiętam podobne zjawisko w innym procesorze i niestety jak się później okazało był uszkodzony. Nie znaczy to jednak że u ciebie może być to samo, może inni członkowie forum będą wiedzieć coś na temat dziwnego zachowania diody nr 3 Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Maj 11, 2010 Udostępnij Maj 11, 2010 Moim zdaniem odczytujesz stan linii która nie jest do niczego podłączona. Pin "wisi" w powietrzu i zbiera różne śmieci. Na palcu masz ładunek i jak zbliżasz do pinu indukuje się na nim napięcie. Domyślam się, że program odczytuje coś z takiej linii i steruje diodą. Cytuj Link do komentarza Share on other sites More sharing options...
viper_dp Maj 11, 2010 Udostępnij Maj 11, 2010 RaV-uino jeśli możesz to wkej fragment kodu (szczególnie początek gdzie konfigurujesz pod jakie piny są podpięte diody i jakie spełniają one fukcje). Przy programowaniu w Arduino ustalasz czy dany pin ma pracować jako wejście czy wyjście Jak powinno wyglądać podłączenie diody i przykładowy program by migała masz oczywiście tutaj const int ledPin = 13; // pod pin 13 podpięta dioda int ledState = LOW; // początkowy stan dla diody (LOW czyli nie świeci) pinMode(ledPin, OUTPUT); // PIN 13 jako wyjście reszta kodu to juz zapalanie i gaszenie diody w utalonym interwale czasu. Pozdrawiam Viper 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
RaV-uino Maj 11, 2010 Autor tematu Udostępnij Maj 11, 2010 Dzięki za posty, sprawiły, że poważnie zacząłem się zastanawiać nad swoimi umiejętnościami manualno-elektronicznymi 😉 viper_dp, niestety już nie mam tamtego kodu, ale tym razem się przygotowałem... Zrobiłem kostkę do gry. I znów cuda - nie muszę wciskać przycisku aby kostka działała, wystarczy dotknąć kabelek i działa. Baa powiem więcej wystarczy usiąść przy biurku i działa. A żeby nie było, że to przez luźny kabelek, to dotykając przewód kombinerkami nic się nie dzieje... Tu filmik: http://w49.wrzuta.pl/film/6wY43g0p9VL/video0006 Tu zdjęcia układu: http://w49.wrzuta.pl/obraz/5oVUKNIIaG5/imgp6001 http://w49.wrzuta.pl/obraz/6nG4GvyFLVn/imgp6002 http://w49.wrzuta.pl/obraz/4FpzCxKcgHf/imgp6003 A tu cały kod: int pinLeds1 = 10; int pinLeds2 = 9; int pinLeds3 = 8; int pinLed4 = 7; int buttonPin = 6; int buttonState; int ran; int time = 2000; void setup () { pinMode (pinLeds1, OUTPUT); pinMode (pinLeds2, OUTPUT); pinMode (pinLeds3, OUTPUT); pinMode (pinLed4, OUTPUT); pinMode (buttonPin, INPUT); randomSeed(analogRead(0)); } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH){ digitalWrite (pinLeds1,HIGH); delay (100); digitalWrite (pinLeds2,HIGH); delay (100); digitalWrite (pinLeds3,HIGH); delay (100); digitalWrite (pinLed4,HIGH); delay (100); digitalWrite (pinLeds1,LOW); delay (100); digitalWrite (pinLeds2,LOW); delay (100); digitalWrite (pinLeds3,LOW); delay (100); digitalWrite (pinLed4,LOW); delay (100); ran = random(1, 7); if (ran == 1){ digitalWrite (pinLed4, HIGH); delay (time); } if (ran == 2){ digitalWrite (pinLeds1, HIGH); delay (time); } if (ran == 3){ digitalWrite (pinLeds3, HIGH); digitalWrite (pinLed4, HIGH); delay (time); } if (ran == 4){ digitalWrite (pinLeds1, HIGH); digitalWrite (pinLeds3, HIGH); delay (time); } if (ran == 5){ digitalWrite (pinLeds1, HIGH); digitalWrite (pinLeds3, HIGH); digitalWrite (pinLed4, HIGH); delay (time); } if (ran == 6){ digitalWrite (pinLeds1, HIGH); digitalWrite (pinLeds2, HIGH); digitalWrite (pinLeds3, HIGH); delay (time); } } digitalWrite (pinLeds1, LOW); digitalWrite (pinLeds2, LOW); digitalWrite (pinLeds3, LOW); digitalWrite (pinLed4, LOW); } Jakieś pomysły? Pozdrawaim Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Maj 11, 2010 Udostępnij Maj 11, 2010 Hmm, może jakieś odsprzęgające 100nF do masy? Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Maj 11, 2010 Udostępnij Maj 11, 2010 Dodaj do funkcji setup(): digitalWrite (buttonPin,HIGH); [ Dodano: 11 Maj 10 07:57 ] Żeby nie było, że to magia - nie dałeś pullup-a. Można go włączyć w procesorze, ale jeśli nie dasz go na zewnątrz, a nie nie włączysz w procesorze, to pin "wisi" w powietrzu. Działa wtedy jak antena i zbiera zakłócenia. Cytuj Link do komentarza Share on other sites More sharing options...
viper_dp Maj 11, 2010 Udostępnij Maj 11, 2010 Prawidłowy pull-up i pull-down z Arduino masz tutaj Zamiast wklejać zdjęcia lepiej jak będziesz wklejał schemat. Cytuj Link do komentarza Share on other sites More sharing options...
RaV-uino Maj 11, 2010 Autor tematu Udostępnij Maj 11, 2010 Tu po sugestji Elvisa, http://w907.wrzuta.pl/film/9n7sUclB31f/video0009 proces rzutu kostką został totalnie zautomatyzowany Schemat zgrubny: diody LE są podłączone przez oprniki 220ohm do wyjść cyfrowych 7 do 10. pushbutton do pinu 6 oraz do 5V i przez opornik 2,2kOhm do GND tak jak opisano tu: http://www.instructables.com/id/Arduino-Led-Dice/step3/Schematic-Intro/ Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Maj 11, 2010 Udostępnij Maj 11, 2010 do pinu 6 oraz do 5V "Źle". Podepnij odwrotnie - pushbutton do gndi do pinu. Wywal ten zewnętrzny pull-down, daj może równolegle też kondensator niewielki i zastosuj wstawkę elvisa :] Aha, i zmień program tak, żeby losowanie odbywało się po otrzymaniu 0. Cytuj Link do komentarza Share on other sites More sharing options...
viper_dp Maj 11, 2010 Udostępnij Maj 11, 2010 Schemat zgrubny: diody LE są podłączone przez oprniki 220ohm do wyjść cyfrowych 7 do 10. pushbutton do pinu 6 oraz do 5V i przez opornik 2,2kOhm do GND tak jak opisano tu: http://www.instructables.com/id/Arduino-Led-Dice/step3/Schematic-Intro/ Przecież na podanym schemacie pushbutton jest przez 10kohm do masy. Wiec jeśli budujesz coś ze "wzoru" to wzoruj się w miarę dokładnie. Program podany dalej w linku jaki podajesz działa OK. A przy tym co masz to w pętli setup powinno być digitalWrite (buttonPin, LOW); czyli stan początkowy klawisza "niski" Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Maj 11, 2010 Udostępnij Maj 11, 2010 viper_dp, źle mówisz. Ten setup pushbuttona na wysoki miał być, bo włączał wewn. pullupa. RaV-uino musi zmienić żeby program włączał losowanie gdy dostanie "LOW", a nie "HIGH" jak jest teraz. Wtedy będzie mógł wyrzucić zewn. pull-downa i włączyć wewn. pull-upa - przejrzyściej. Cytuj Link do komentarza Share on other sites More sharing options...
viper_dp Maj 11, 2010 Udostępnij Maj 11, 2010 no to sorka , ale się pogubiłem co wkońcu zastosował, czy propozycje Elvisa (pull-up) czy to co było w tutorialu (pull-down). Cytuj Link do komentarza Share on other sites More sharing options...
Bobby Maj 11, 2010 Udostępnij Maj 11, 2010 Teraz ('automatyczne losowanie') wywoływane jest tym, że zastosował oba rozwiązania :> Wewnętrzny pull-up (Elvis) i zewnętrzny pull-down (instructables). Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Maj 11, 2010 Udostępnij Maj 11, 2010 W sumie to cały temat nie ma zbyt wiele wspólnego z robotyką, ale jedna rzecz jest ciekawa i pouczająca. Przykład z tutoriala arduino jest błędny - rezystor 10k jest wpięty nie tam gdzie powinien. W tutorialu to połączenie +5V z GND przez rezystor 10k nic nie daje, tylko prąd pobiera. To nawet nie jest pull-down. Prawdopodobnie miał być, ale "wyszło" po złej stronie przełącznika. Jak przełącznik jest rozwarty, to tylko wbudowany pull-up może uratować sytuację. Wniosek jest ważny: nie można bezkrytycznie ufać temu co się w sieci wyczyta. Swoją drogą warto byłoby do autora tutoriala jakiegoś maila napisać, żeby to poprawił. 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!