Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Uno'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 18 wyników

  1. Witam, jestem nowy na forum więc liczę na wyrozumiałość 🙂 Ogólnie chciałbym zacząć swoją przygodę z Arduino i mam następujace pytanie: Czy to co mam w koszyku (załącznik) jest zgodne z pierwszą częścią kursu (tzn. czy zawiera wszystko co potrzebne i pasuje to wszystko do siebie). Wiem, że pytanie należy do tych bardziej głupich no ale po prostu się nie znam (jeszcze) Pozdrawiam 😄
  2. Witam, mam problem nagłej potrzeby. Prostu układ: esp8266 nodemcu v3 podłączony pod zasilacz impulsowy 12V przekaźnik 8 kanałowy z optoizolacją zasilany na 5V Z Zasilania 12V idzie też prąd na stabilizator 5V - ten zasila tylko i wyłącznie wejście Vcc płytki przekaźnika. problem jest taki, że przekaźnik normalnie działa w przypadku gdy styk IN1 załącze z arduino leonardo. Wszystko jest idealnie z arduino. Natomiast gdy spróbuję to samo zrobić z esp zamiast arduino, to na przekaźniku zapala się tylko LED że 1 styk został załączony, jednak nie słychać nawet charakterystycznego "trzasku" przełączania styku a sam kanał nie działa i nic się nie dzieje oprócz led sygnalizującego załączenie styku. Problem palący czasowo, ktos wie czemu arduino normalnie załącza styk na przekaźniku a esp już nie? I jak to rozwiązać?
  3. Próbuję przy pomocy płytki arduino zrobić światła ledowe na przycisk zasilane kablem usb i jak podłączam arduino do zasilacza 12 V to momentalnie zaczyna się płytka podgrzewać okolicach gniazda zasilania. Skrypt jest prosty. niedawno przerobiłem sobie drugi poziom kursu arduino ale chyba brakuje mi wiedzy tylko nie wiem jakiem :/. Załączam także jak na podstawie zasilania buzzera podłączyłem wejście usb do zasilania ledów. bool light=false; void setup() { pinMode(A5, OUTPUT); //Konfiguracja A5 jako wyjście pinMode(2,INPUT_PULLUP); digitalWrite(A5, LOW); } void loop() { if(digitalRead(2)==LOW&&light==false){ digitalWrite(A5, HIGH); //Cykliczna zmiana stanu wyjścia delay(200); light=true; } else if(digitalRead(2)==LOW&&light==true){ digitalWrite(A5, LOW); delay(200); light=false; } }
  4. Witam wszystkich!!! Po długiej przerwie w końcu znalazłem czas aby opublikować swój kolejny projekt. Po mojej serii ostatnich artykułów dotyczących zalet Arduino UNO ten będzie można uznać poniekąd za ostatni z tej serii. Uważam bowiem, że temat sposobów ułatwiających wgrywanie sketchy oraz bootloaderów do procesorów Atmega8/168/328 stosowanych w popularnym Arduino UNO (głównie ten ostatni) został przeze mnie wyczerpany. Dziękuje wszystkim, którzy przeczytali moje poprzednie artykuły i sprawia mi ogromną satysfakcję, jeżeli informację w nich zawarte komuś mogły pomóc. Tyle tytułem wstępu. Teraz przejdę do opisu mojego projektu dlaczego powstał i dlaczego zrealizowałem go w taki, a nie inny sposób. Dotąd projektowałem dość proste układy, które realizowałem na zaprojektowanych przez siebie PCB tylko jednowarstwowych i wykonanych w warunkach domowych metodą termo transferu z wykorzystaniem elementów THT. Jako, że pracuję jako technik w jednej z firm gdzie mam okazję montować urządzenia na profesjonalnych PCB z wykorzystaniem elementów SMD poczułem chęć zrealizowania jakiegoś swojego projektu w tej właśnie technologii, a także zaprojektowania płytki PCB dwuwarstwowej. Jako, że ostatnie moje artykuły są związane z Arduino UNO oraz, że mam też swoją wizję tej platformy. Dlatego postanowiłem zaprojektować właśnie odpowiednik Arduino UNO wg swojej koncepcji. Nazwa odpowiednik nie jest bez powodu bo nie jest to typowy "klon" tej platformy. Generalnie powiem, że od razu nie poszedłem na całość tzn. planuje za jakiś czas zrobić drugą jego wersję, która będzie ostateczną bo będzie zawierać dodatkowe funkcje. Na początku skorzystałem z ułatwień takich jak posiadany przeze mnie konwerter USB UART RS232, który podłączany jest do złącza na płytce aby móc komunikować się z procesorem. Generalnie chciałem sprawdzić jak moja koncepcja sprawdzi się w rzeczywistości oraz czy PCB jest dobrze zaprojektowane, tzn. czy urządzenie działa poprawnie i nie ma w nim zakłóceń, które mogłyby wpłynąć na stabilność jego pracy. Po uruchomieniu urządzenia okazało się, że działa ono prawidłowo, oraz że moja koncepcja sprawdza się. Tak powstało MWuino UNO. Dwie pierwsze litery w nazwie pochodzą: pierwsza od mojego imienia a druga od nazwiska. Zatem czym MWuino UNO różni się od typowych klonów Arduino UNO. Zacznijmy od wizualnych różnic: 1. PCB ma zupełnie inny kształt i jest dłuższe w stosunku do oryginału i klonów o 1,5cm. MWuino UNO ma długość 8cm, szerokość zaś to 5cm. Krańce PCB zostały łagodnie zaokrąglone aby wygodnie można było trzymać płytkę w ręce. 2. Inne ułożenie elementów elektronicznych, aby można było je na powierzchni 5x8cm dobrze rozmieścić i odpowiednio poprowadzić ścieżki zarówno na stronie TOP jak i BOTTOM. Stąd też inne ułożenie gniazd/złącz sygnałowych dla procesora IC2 3. Najważniejsza widoczna różnica. Na PCB znajdują się dwa procesory IC1 oraz IC2, które zostaną omówione później. 4. Dodatkowe elementy, których nie ma w oryginalnym arduino, czyli: - włącznik zasilania. Koniec z wyciąganiem wtyczki z gniazda zasilania. Jednym ruchem palca możemy wygodnie wyłączyć zasilanie. - zamontowane złącza zarówno w wersji męskiej jak i żeńskiej. W zależności jakie przewody połączeniowe posiadamy możemy szybko podłączyć podłączyć elementy do gniazd procesora IC2 Poniżej zdjęcia prezentujące gotowe urządzenie: Strona TOP Strona BOTTOM Działające urządzenie z podłączonym konwerterem Nie chciałem wykonywać idealnej kopii tej platformy gdyż jest ich mnóstwo w internecie. Fakt, że niektóre z tych urządzeń mają bardzo ciekawe rozwiązania względem typowych kopii, które tak naprawdę nie oferują nic nowego poza niską ceną, a niekiedy ich jakość wykonania pozostawia wiele do życzenia. Ze względu na pewne rozwiązanie które jest mocną zaletą mojej wersji oraz tego aby wymiarowo było zbliżone do oryginału, pewne ułożenie elementów takich jak np: gniazda/złącza sygnałowe podłączone do procesora mają inne ułożenie niż ma to miejsce w oryginale. Generalnie dla mnie to nie jest problem, gdyż jak zaczynałem naukę z Arduino UNO nie czułem potrzeby używania tak zwanych shield -ów, tylko mając elementy łączyłem je na płytce stykowej, a z płytki stykowej za pomocą przewodów do odpowiednich pinów gniazd na płytce Arduino UNO. Co więcej takie ułożenie złącz przy procesorze gwarantuje najkrótsze połączenie z pinami procesora oraz ze względu na ich bliskość możliwość stosowania przewodów połączeniowych o zbliżonych długościach, gdyż przy rozstawie złącz w oryginalnym UNO oraz jego klonach, zdarzyło mi się kilka razy, że nie miałem przewodów o potrzebnej mi długości. Do urządzenia możemy podłączyć dowolny konwerter UART/RS232 TTL. Dzięki zastosowaniu złącz w wersji męskiej jak i żeńskiej nie będzie problemu z podłączeniem go do płytki za pomocą odpowiednich przewodów połączeniowych. Na zdjęciu jak widać mój konwerter jest wpięty bezpośrednio do gniazda żeńskiego na płytce, a to dlatego że na etapie projektowania linie sygnałowe i zasilania są dopasowane do wyprowadzeń posiadanego przeze mnie konwertera. Najważniejszą zaletą mojego projektu jest możliwość wgrywania bootloaderów do procesora IC2. Przedstawię najkrócej jak się da opis budowy i działania najważniejszych elementów układu. Dodatkowo w pliku do pobrania, zamieszczam schemat budowy, przydatny przy analizowaniu poniższego opisu, pliki gerber PCB w rev.2, zmodyfikowany skecz Arduino ISP-wymagany doi prawidłowego działania urządzenia, oraz listę elementów użytych do budowy-BOM. plik do pobrania:MWuinoUNO-rev.2.zip Starałem się możliwie w miarę zwięźle i ogólnie opisać działanie urządzenia. Tak więc: Procesor IC1 ma wgrany na stałe skecz Arduino ISP. Skecz tez został przeze mnie nieco zmodyfikowany tzn. dodano obsługę switcha S2(SELECT), Diody LED Status - BTLDR i PROGR oprócz standardowych (PMODE, HBEAT, ERROR) oraz sterowanie układami MUX/DEMUX - IC6,IC7, które są odpowiedzialne za przełączanie sygnałów TX,RX konwertera na odpowiednie wejścia RX,TX procesorów IC1 oraz IC2 oraz sygnałem z pinu (16) -IC1 na wejście (1)RESET IC2 – IC8. Układy MUX/DEMUX sterowane są z jednego wyjścia procesora IC1(4). Najprościej rzecz ujmując. Po uruchomieniu MWuinoUNO, zapalają się diody PROGR - zielona oraz HBEAT - niebieska. W tym trybie układy MUX/DEMUX nie są sterowane z IC1, a ich domyślne ustawienie powoduje, że sygnały RX,TX konwertera są podane na piny RX,TX procesora IC2. Ustawienie w tym trybie - PROGR, umożliwia nam wgrywanie skeczy do procesora IC2. Dla przykładu uruchamiamy środowisko Arduino IDE i wybierzmy standardowy skecz blink. Najpierw pamiętamy o ustawieniach czyli "Narzędzia" następnie "Port" COM - do którego podłączone jest nasz konwerter oraz "Płytka".Jeżeli w podstawce IC2 mamy procesor ATmega328 w polu "Płytka" wybieramy "Arduino UNO". Jeżeli używamy procesora ATmega8/168 to w polu "Płytka" wybieramy "Arduino NG or older" po czym ponownie klikamy na "Narzędzia" i w polu „Procesor” wybieramy właściwy, który aktualnie znajduje się w podstawce IC2. Kiedy wszystkie ustawienia są odpowiednie, klikamy na "Wgraj" i tu teraz jest bardzo ważna kwestia do omówienia. Jeżeli nasz konwerter ma tylko wyjścia TXD(TX), RXD(TX) oraz wyjścia zasilania, to tuż zanim nastąpi wgrywanie skecza do procesora musimy nacisnąć szybko przycisk S2(RESET) aby nasz procesor mógł się zaprogramować. Teraz napiszę jak to zrobić aby ta czynność przebiegła dość sprawnie. Klikamy "Wgraj" i patrzymy na napis na zielonym pasku nad czarnym okienkiem w którym pojawiają się informacje. Jeżeli jest napis "kompilowanie szkicu..." i obok jest pasek postępu, nie wciskamy przycisku S3(RESET). Kiedy pasek postępu dobiegnie końca i pojawi się komunikat "Wgrywanie" szybko wciskamy i puszczamy przycisk S3(RESET). Dlatego przed wgraniem dobrze jest mieć palec blisko tego przycisku i obserwować komunikaty, które powyżej napisałem. Osoby, które dysponują konwerterem z dodatkowym wyjściem oznaczonym jako DTR, nie muszą przed wgraniem skecza naciskać switcha S3(RESET), gdyż dzięki sygnałowi z DTR z konwertera, procesor IC2 zostanie automatycznie zresetowany. Bardzo istotną rzeczą przed wgrywaniem skeczy jest to aby programowany przez nas procesor posiadał wcześniej wgrany bootloader, gdyż bez niego nie wgramy skecza do procesora. W MWuinoUNO. Możemy wgrywać bootloadery do procesorów takich jak ATmega 8/168/328, gdyż Arduino IDE wspiera te procesory. Wystarczy że włożymy czysty procesor w podstawkę IC2 i możemy w ciągu chwili wgrać bootloader niż ma to miejsce w przypadku Arduino UNO i jego klonów, gdzie potrzebny jest shield do Arduino umożliwiający nam wykonanie tej czynności lub płytka stykowa z elementami takimi jak kwarc, kondensatory i rezystor(do pinu RESET procesora). Elementy te nie zawsze możemy mieć pod ręką, a i podłączenie całego układu zajmie nam chwilę i jak to bywa w przypadku płytek stykowych, może się okazać, że mamy przerwę w połączeniu i będzie problem z wgraniem bootloadera, a my dodatkowo stracimy kilka minut na poszukiwaniu usterki. Teraz opiszę jak wgrać bootloader do procesora IC2 w MWuinoUNO. Uruchamiamy środowisko Arduino IDE i sprawdzamy ustawienia programu tak samo jak opisałem to powyżej dla trybu PROGR. czyli "Port" i "Płytka". Następnie naciskamy i przytrzymujemy switch S2(SELECT) po czym zapala się czerwona dioda led opisana jako BTLDR. Jest to tryb w którym możemy wgrać bootloader do procesora IC2. W tym trybie procesor IC1 - z wgranym zmodyfikowanym skeczem "Arduino ISP" steruje układami MUX/DEMUX sprawiając, że układy IC6,IC7 przełączają komunikację konwertera (RX,TX) z procesora IC2 na procesor IC1 oraz IC8, z którego resetowanie procesora IC2 odbywa się z pinu (16) procesora IC1. Dzięki temu, wgrywanie bootloadera do procesora IC2 jest w pełni automatyczne i nie wymaga ręcznego resetowania procesora. Bootloader z PC zostaje wysłany przez konwerter do procesora IC1, który jest w tym momencie programatorem i z tego procesora liniami MISO, MOSI, SCK do linii MISO, MOSI, SCK procesora IC2 zostaje przesłany. Diody na liniach MOSI, MISO, SCK, sprawiają, że każda linia może przysyłać dane tylko w jednym kierunku. W przypadku linii MISO i SCK są dodatkowe rozwiązania z poziomu zmodyfikowanego przeze mnie skecza Arduino ISP. Ma to na celu sprawienie, że gdy wykorzystamy te piny w naszym programie, który wgramy do IC2, sygnały te nie będą absorbowane przez piny IC1. Szczególne znaczenie ma to dla linii SCK, gdyż tak samo jak w Arduino UNO i jego klonach podłączona jest dioda L, której działanie uaktywnia się na przykład po wgraniu standardowego skecza blink do IC2, a także jest aktywna w momencie wgrywania bootlodera do IC2, zatem może być sterowana zarówno z procesora IC1 jak i IC2 i nie nastąpi sytuacja aby wyjścia SCK obu procesorów w jednym czasie mogłyby nią sterować lub na przykład linia SCK IC1 będzie w stanie niskim absorbując sygnał w stanie wysokim z linii SCK IC2. Przekaźniki K1 oraz K2 przełączają zasilanie z konwertera na zasilanie podłączone z zewnętrznego źródła zasilania, czyli zasilacza podłączonego do DC jack. Oczywiście aby to nastąpiło najpierw musimy ustawić przełącznik S4 (ON, OFF) w odpowiedniej pozycji. Cewki przekaźnika pobierają zasilanie z zewnętrznego źródła zasilania jakim jest zasilacz, dzięki temu może nastąpić proces przełączenia zasilania z konwertera na zewnętrzne źródło zasilania. Oczywiście taki sposób przełączania zasilania nie jest idealny tzn. chodzi o szybkość. W momencie przełączania następuje resetowanie procesorów IC1,IC2 w wyniku chwilowego zaniku napięcia ich zasilania. Generalnie wiedziałem, że takie zjawisko wystąpi i myślę, że nie jest to duży problem. Częściowo można temu zaradzić dodając dodatkowy kondensator tantalowy o pojemności 100u za stykami przekaźnika, a dokładniej w okolicy zasilania najlepiej IC2. Unikniemy resetu w momencie podłączania zewnętrznego źródła zasilania jakim jest zasilacz. Niestety problem ten nie zniknie w momencie odłączania zewnętrznego źródła zasilania i ponownego przełączenia zasilania, na zasilanie z konwertera USB. Procesory ATmega328 dość szybko się uruchamiają w przeciwieństwie do ATmega8. Zauważyłem, że wszystkie procesory ATmega8 jakie posiadam potrzebują ok 8 sekund na uruchomienie programu (skecza). Opisałem najważniejsze koncepcje i sposoby ich realizacji w moim projekcie. Część z nich wynikała z tego, że wykorzystałem posiadane już przeze mnie elementy takie jak przekaźniki oraz konwerter oraz to, że pewne zjawiska takie jak ręczne resetowanie procesora przed wgraniem programu lub chwilowy zanik napięcia zasilania podczas jego przełączania dla mnie nie są jakoś specjalnie istotne. Najważniejsze, że cały projekt działa stabilnie oraz założenia, które w nim wdrożyłem także się sprawdziły. Tak jak wcześniej napisałem za jakiś czas przedstawię wersję bardziej rozbudowaną, w której będą wyeliminowane wyżej opisane niedogodności, a także dodatkowe nowe funkcje. Z ciekawości przejrzałem wszystkie możliwe klony Arduino UNO oraz rozwiązania i funkcje jakie zostały do nich dodane, a które naprawdę mogą się przydać większości użytkowników tej platformy. Obecnie wszystko mam już sprawdzone i jestem na etapie projektowania PCB. Pozostałe zdjęcia Na zakończenie chcę dodać, że przedstawione na zdjęciu urządzenie to rev.1 urządzenia. Zamieściłem pliki gerber w nowszej rewizji rev.2 mojego projektu, jeżeli ktoś będzie zainteresowany to bez problemu będzie mógł zamówić PCB. W skrócie wymienię różnice pomiędzy rev.1 a rev.2 MWuino UNO -Powiększone opisy pinów złącz/gniazd sygnałowych podłączonych do procesora IC2 -Obniżenie switcha S2(SELECT) oraz przesunięcie złącza zasilania J1 oraz kondensatora C2 w lewo, aby łatwiej było naciskać switch S2(SELECT) -Zmiana złącz konwertera z 5pin na 6pin oraz dodatkowe elementy R12,C21. Dodanie tym samym obsługi DTR z konwertera, dzięki czemu osoby które posiadają konwerter USB UART z linią DTR nie będą musiały ręcznie restartować procesora IC2 przed wgraniem do niego programu (skecza) -Przesunięty kondensator C9 w lewo aby łatwiej można było zamontować złącze JP1 (goldpin, żeńskie) -Dodany kondensator C20 do pinu RESET IC1. Urządzenie pracujące w obszarze dużych zakłóceń, a nawet dotknięcie palcem pinu RESET IC1 może zadziałać tak samo jak wciśnięcie switcha S1(RESET). Dodanie tego kondensatora eliminuje całkowicie ten problem. -Dodany C22 tantalowy do podtrzymania chwilowego zasilania procesora IC2 w momencie przełączania zasilania z konwertera na zewnętrzne źródło zasilania jakim jest zasilacz podłączony do gniazda J1 -Pady rezonatora kwarcowego GND podłączone do masy na PCB. Nie jest to konieczne, ale jeżeli producent opisał te piny jako GND, a ja generalnie trzymam się tego co jest napisane w dokumentacji. Wymagało to ode mnie zmodyfikowania domyślnej biblioteki rezonatorów kwarcowych programu Eagle, gdyż dostępne w tej bibliotece elementy szczególnie pasujące do zastosowanego przeze mnie rezonatora kwarcowego, piny te są pozostawione jako niepodłączone. -Poprawiono zamienione w rev.1 nazwy diod – HBEAT, ERROR -Dodanie rezystora R13-1M do pinu SCK procesora IC2 oraz IC1 (katoda diody D1). Do pinu SCK dodatkowo podłączone jest wejście nieodwracające wzmacniacza operacyjnego, pracującego w trybie wtórnika napięcia, którego zadaniem jest sterowaniem diody LED L, tak aby nie obciążać jednocześnie linii zegarowej SCK lub gdy ta linia pełni rolę we/wy. W momencie kiedy pin procesora IC2 nie jest zdefiniowany jako we/wy a tym samym nie ma ustawionego stanu H/L wejście wzmacniacza „wisi w powietrzu” powodując świecenie diody L. Tak duża wartość rezystora nie obciąża pinu SCK procesora, ale polaryzuje wejście wzmacniacza do masy w przypadku, gdy pin SCK nie jest określony jako we/wy a tym samym nie ma ustawionego stanu H/L. Co ciekawe oryginalne Arduino UNO oraz jego klony też nie posiadają rezystora polaryzującego wejścia wzmacniacza operacyjnego i tym samym wyżej opisane zjawisko w nich występuje (świecenie diody L) Powyższe zmiany jakie zostały wprowadzone do rev.2 MwuinoUNO. U mnie urządzenie w rev.1 działa bez najmniejszych problemów. Jedyną z powyższych zmian jaką zrobiłem to dolutowanie kondensatora do pinu (1)RESET-IC1 oraz rezystor do wejścia nieodwracającego wzmacniacza operacyjnego IC9. Wszystko sprawuje się dobrze i działa prawidłowo. Do prawidłowego działania urządzenia po zmontowaniu potrzebujemy koniecznie 1 szt. procesora z wgranym już bootloaderem. Jeżeli mamy czysty procesor oraz znamy kogoś kto ma Arduino nie koniecznie musi to być UNO i wie jak wgrywać bootloadery lub my sami posiadamy taką wiedzę, to już połowa sukcesu. Ewentualnie pozostaje nam zakup procesora z wgranym bootloaderem. Następnie co musimy zrobić to wgrać zmodyfikowany przeze mnie skecz Arduino ISP. Skecz ten wgrać możemy już w MWuinoUNO. Teraz kolejna zaleta w tym urządzeniu. Tryb PROGR działa także bez udziału IC1-jedynie diody LED status będą nieaktywne, z wyjątkiem diody L. Procesor umieszczamy w podstawce IC2 i wgrywamy zmodyfikowany sketch Arduino ISP (plik o nazwie „MwuinoUNO”). Po wgraniu wyjmujemy procesor z podstawki IC2 i umieszczamy w podstawce IC1. Od teraz możemy zamawiać czyste procesory Atmega8/168/328 tzn. bez wgranego bootloadera, i sami w łatwy sposób wgramy bootloader dla procesora, którego aktualnie zamierzamy używać. Poniżej link do filmu przedstawiającego działanie MWuinoUNO https://www.youtube.com/watch?v=oWh97v3rdZE
  5. dzień dobry mam problem z działaniem skryptu #include <Servo.h> Servo myservo; int val = 0; void setup() { Serial.begin(9600); myservo.attach(9); pinMode(7,INPUT_PULLUP); } void loop() { int pkt = 1; while (true) { if(digitalRead(7) == LOW) { if(pkt < 6) { pkt = 0; } else { if(pkt == 1) { myservo.write(90); delay(25); } if(pkt == 2) { myservo.write(100); delay(25); } if(pkt == 3) { myservo.write(110); delay(25); } if(pkt == 4) { myservo.write(115); delay(25); } if(pkt == 5) { myservo.write(125); delay(25); } if(pkt == 6) { myservo.write(135); delay(100); } } } } }
  6. Niedawno przyszło do mnie arduino uno. Chciałem go podłączyć przez USB i był wykrywany tylko jako nie znane urządzenie i nie było widziane jako port com. Próbującppodłączyć pod inne usb oraz po zainstalowaniu sterowników w końcu pokazał się port com z arduino. pomimo że na usb nadal widział go jako nie znane urządzenie. Wykorzystując ten port udało mi się wgrać program. co 20 sekund na 1 sekundę zapala się dioda na 13 pinie. I program działa. Potem odłączyłem arduino i mając wcześniej przygotowany już uklad z dioda i opornikiem. Podłączyłem go do 5v i masy. dioda ładnie świeci. Jeszcze potem wgrałem program z szablonem i klasą i obliczaniem sum różnic i z widocznym wynikiem na monitorze portu. i go wgrałem wszystko działało. Potem znów odłączyłem arduino przygotowując pod 11 pin. Jednak po ponownym podłączenie arduino przestało być widoczne jako urządzenie. I komputer przestał na nie reagować inny również. A program z mruganiem co 20 sekund nadal działa i dioda do 5v też świeci. 🙂 co mogłem rozwalić? a na kolejnym komputerze zobaczyło mi bez problemów i wszystko się ładnie ładuje.... 🙂
  7. Witam wszystkich!!! Opisane tutaj metody są przeznaczone dla posiadaczy Arduino UNO lub jego klonów, z procesorem THT 28 pin!!! Poprzednio opisywałem jak z pomocą Bootloader programmer i Arduino Uno wgrywać bootloadery do procesorów ATmega8/168/328. Tym razem omówię jak wgrywać sketche czyli programy do ATmeg, tak abyśmy nie musieli co chwilę przekładać procesora z Arduino UNO do zaprojektowanego przez nas urządzenia. Pewne ułatwienie w tej kwestii możemy sobie zafundować już na etapie projektowania naszej płytki PCB. Jest to też przydatne zwłaszcza kiedy przewidujemy rozbudowanie lub modyfikację programu w przyszłości. Przyda się to głównie początkującym osobom w programowaniu, gdzie będzie trzeba często poprawiać kod aby nasz program działał zgodnie z założeniami. Na poniższych zdjęciach widać fragment schematu oraz zdjęcie płytki PCB jednego z moich kilku urządzeń, które przedstawia dodanie switcha (S1) na linii RESET procesora oraz złączą do którego możemy podłączyć Arduino UNO lub Konwerter USB/TTL/UART/RS232. Głównie będą to porady dla osób zaczynających naukę programowania w środowisku Arduino IDE. Wiemy, że napisanie idealnego programu, który od razu będzie nam działał nie jest łatwe . Oczywiście nie mówię tu o najprostszych rzeczach takich jak na przykład sterowaniem diodami led, ale już bardziej złożonych urządzeniach, które realizują już dość konkretne funkcje. Jak widać na poniższym schemacie i zdjęciu jednego z moich projektów, wykorzystuje nawet piny, odpowiedzialne za programowanie procesora. Warto wiedzieć, że rola pinów RX, TX nie ogranicza się tylko do przesyłania nimi programu. Można je programować także jako we/wy i ustawić stan H/L. Dlatego wiedząc, że w przyszłości mogą mi być przydatne do przeprogramowania procesora, elementy które są z nich sterowane są podłączone za pośrednictwem zworek, tak aby elementy te nie obciążały pinów RX, TX procesora do których są wysyłane sygnały z Arduino lub konwertera USB/TTL/UART/RS232, aby tym samym nie zakłócać przebiegu wgrywania programu do procesora. Oczywiście niektórzy zwrócą uwagę, że jeżeli zastosowałem switche, które są normalnie rozwarte to po co stosować zwory w obwodzie, który ma już przerwę? Jak zauważymy obok switchy znajdują się kondensatory ceramiczne, które służą do eliminacji drgań styków switchy. W schemacie tego projektu, który przedstawiłem, switche są używane przez większą część pracy, dlatego generalnie w takich przypadkach do eliminacji drgań styków stosuje eliminację zarówno z poziomu softu jak i hardware'u - kondensatory. Tutaj problem przy wgrywaniu softu, stanowić będą kondensatory eliminujące drgania styków switchy, dlatego na czas wgrywania softu muszą być odłączone od pinów procesora Rx, Tx. 1. Z wykorzystaniem Arduino UNO z procesorem THT 28 pin Aby skorzystać z tego sposobu wgrywania programu, musimy z Arduino wyjąć właściwy procesor z jego podstawki. Następnie za pomocą przewodów połączeniowych (można skorzystać z przewodów do płytek stykowych), łączymy odpowiednio zasilanie, reset oraz linie komunikacyjne: z Arduino RX<-0 do Rx naszego procesora oraz z Arduino TX->1 do Tx naszego procesora, który zamierzamy programować. Kiedy wszystko mamy już podłączone postępujemy dokładnie tak samo jak byśmy wgrywali normalnie program do Arduino z procesorem w podstawce. Ważne: W przypadku Arduino nie ma możliwości wgrania programu do więcej niż jednego procesora w tym samym czasie. Dlatego istotne jest wyciągnięcie oryginalnego procesora z podstawki w Arduino, aby móc bez przeszkód zaprogramować procesor, który znajduje się w zaprojektowanym przez nas urządzeniu. Jak widać praktycznie wyeliminowaliśmy przekładanie procesora z Arduino do naszego projektu, ograniczyliśmy się jedynie do wyjęcia samego procesora z Arduino na czas programowania procesora w naszym projekcie. Dzięki temu oszczędzamy czas i nerwy oraz nie ryzykujemy uszkodzeniem pinów procesora, ukruszeniem jego obudowy a tym samym wyrobieniem pinów samego gniazda podstawki. Przydatne szczególnie gdy jesteśmy początkujący i uczymy się programowania - szukanie, eliminowanie błędów lub zmiana/modyfikowanie programu. Przewody zasilające: czerwony (+5V), czarny (GND), Komunikacja Rx, TX (pomarańczowy), RESET (żółty) 2. Z wykorzystaniem Konwertera USB/TTL/UART/RS232 Konwerter zbudowany z popularnym układem PL2303HX współpracuje ze środowiskiem Arduino UNO umożliwiając nam wgrywanie sketchy do procesorów ATmega. Konwertery oparte o układ PL2303HX charakteryzuje bardzo niska cena i duża dostępność. Jeżeli chodzi o podłączenie komunikacji konwertera jest to realizowane odwrotnie niż jak to ma miejsce w pkt.1, czyli: Pin RX konwertera podłączamy do pinu TX procesora. Następnie pin TX konwertera podłączmy do pinu RX procesora. Zasilanie programowanego procesora możemy podłączyć z konwertera lub zasilacza. Jeżeli procesor który zamierzamy programować ma wgrany tylko bootloader i wcześniej nie był programowany za pomocą Arduino, możemy śmiało przystąpić do wgrania programu do procesora. W przeciwnym razie jeżeli do procesora był już wgrany program poprzez Arduino, może a raczej na pewno zdarzy się sytuacja, że program, który będziemy chcieli wgrać za pośrednictwem konwertera nie wgra nam się do procesora. Jedynym wtedy wyjściem jest ponowne wgranie bootloadera do procesora i ponowna próba wgrania programu poprzez konwerter. Kolejną ważną rzeczą przy takim sposobie programowania procesora jest moment w którym musimy wcisnąć przycisk reset programowanego procesora. Teraz napiszę jak to zrobić aby ta czynność przebiegła dość sprawnie. Klikamy "Wgraj" i patrzymy na napis na zielonym pasku nad czarnym okienkiem w którym pojawiają się informacje. Jeżeli jest napis "kompilowanie szkicu..." i obok jest pasek postępu, nie wciskamy przycisku RESET. Kiedy pasek postępu dobiegnie końca i pojawi się komunikat "Wgrywanie" szybko wciskamy i puszczamy przycisk RESET. Dlatego przed wgraniem dobrze jest mieć palec blisko tego przycisku i obserwować komunikaty, które powyżej napisałem. Zamiana oryginalnego procesora ATmega 328 w arduino UNO na inny? Arduino UNO lub klon z procesorem THT 28pin Wiemy, że Arduino UNO nie ma na stałe zamontowanej ATmegi, tylko jest ona umieszczona w podstawce co jest dobrym rozwiązaniem w przypadku gdy procesor ten ulegnie uszkodzeniu. Obecnie standardowo w Arduino UNO montuje się procesor ATmega328. Nie znaczy to jednak, że tylko taki procesor może obsługiwać Arduino UNO. Procesory ATmega 8/168 mają identyczny układ pinów podobnie jak ATmega328 i tę samą obudowę. Możemy śmiało je stosować zamiennie w miejsce ATmega328. I teraz przejdę do sedna całej sprawy. Warto wspomnieć że pierwsze wersje Arduino UNO były wyposażone w procesor ATmega8. W przypadku kiedy w Arduino UNO zamienimy procesor ze standardowego (ATmega 328) na inny taki jak ATmega8 lub ATmega 168 musimy zmienić dwa ustawienia, które opiszę poniżej. Standardowe ustawienie "Arduino UNO" w polu "Płytka" jest zarezerwowane wyłącznie dla Arduino UNO i jego klonów sprzedawanych z procesorem ATmega328. W przypadku kiedy nasza płytka Arduino UNO ma inną wersję procesora, zmieniamy to ustawienie. Dla Arduino UNO z procesorem ATmega8/168 w interfejsie programu Arduino IDE klikamy "Narzędzia"/"Płytka" i zaznaczamy "Arduino NG or older" zamiast "Arduino Uno". Ponownie klikamy na "Narzędzia" najeżdżamy na pole "Procesor" i z menu rozwijanego wybieramy ten, który aktualnie znajduje się w naszym urządzeniu. Po zmianach wyżej opisanych parametrów programu, możemy wgrywać skecze do procesora. Oczywiście najpierw procesor musi mieć wgrany bootloader dla danej wersji procesora. Jak wgrywać bootloader do ATmeg opisałem wcześniej w Bootloader programmer for UNO R3 - rev.2. Wgrywanie bootloader-ów do ATmeg
  8. Na płytce cały czas świeci sie dioda podpisana L nigdy wczesniej nie swieciła bez przerwy. A tu zrzut błędu podczas wgrywanie. Takie dodatkowe pytanie zna ktos jakis fajny kod do paska led adresowalneg LED RGB WS2812B ?
  9. Od pewnego czasu próbuję "pożenić" dwa elementy ze sobą, płytkę do sterowania przekaźnikami z UNO https://botland.com.pl/pl/arduino-shield-ekspandery-wyprowadzen/2731-dfrobot-relay-shield-przekazniki-dla-arduino-v21.html i WiFiXBee https://botland.com.pl/pl/moduly-glowne-xbee/8606-dfrobot-wifibee-mt7681-modul-wifi-xbee.html Ten zestaw ma działać jako samodzielny układ nadzorujący środowisko (sterowanie grzałkami, wentylatorami) z użyciem sensorów (np. DHT21), ale też ma wysyłać dane o środowisku na serwer baz danych InfluxDB, oraz podgląd stanu na zbiorczy "komputer" w postaci albo ESP8266 NodeMCUv3 albo RaspberryPi. Generalnie łączność powinna być po WiFi. No i z tego centralnego "komputera" powinna być możliwość np. włączenia przekaźnika niezależnie od danych środowiskowych - czyli prosty interfejs www. XBee z siecią mi się poprawnie łączy. Mogę otworzyć w przeglądarce jego stronę z konfiguracją gpio. Rozumiem że do wysyłania danych na serwer powinienem użyć XBee jako klienta TCP... niestety nigdzie nie znalazłem jakiegokolwiek przykładu który mógłby mnie naprowadzić na rozwiązanie. Zastanawiam się też czy jednak nie powinien on pracować w trybie AP jeśli ma też przyjmować polecenia z zewnątrz? Wyprzedzające pewne odpowiedzi... Owszem można by użyć innych elementów... jednak zależy mi na tym by wykorzystać to co mam. Coś podpowiecie... w którym kierunku szukać?
  10. Witam wszystkich!!! W końcu po długiej nieobecności na forum, zrealizuje to do czego się zobowiązałem w moim wpisie pod projektem Bootlader programmer for UNO R3 - Rev.2, a dokładniej mówiąc opisze jak za pomocą Arduino UNO i wyżej przedstawionego urządzenia wgrywać Bootloadery do konkretnych ATmeg. Na warsztat weźmiemy procesory ATmega 8/168/328, gdyż środowisko Arduino IDE wspiera te procesory umożliwiając nam wgranie wybranego bootloadera. Cały proces przedstawię z wykorzystaniem Arduino UNO R3 wyposażonym w ATmegę 328. Opiszę cały proces od początku czyli od instalacji środowiska Arduino IDE, które jest dostępne na stronie producenta Arduino. Na razie nie podłączamy naszego Arduino do komputera tylko instalujemy Arduino IDE. Kiedy instalacja przebiegnie do końca bez jakichkolwiek problemów, wtedy podłączamy nasze Arduino i czekamy. Bywa także, że Windows musi doinstalować sterowniki aby prawidłowo rozpoznać podłączone urządzenie. Instalacja odbywa się automatycznie z Windows Update. System znajdzie i zainstaluje potrzebne nam drivery po czym wyświetli się komunikat, że sterowniki zostały prawidłowo zainstalowane oraz wyświetli nam nazwę podłączonego do komputera urządzenia. Po zakończeniu instalacji odłączamy nasze arduino i przygotujemy je do podłączenia Bootloader programmera. Najpierw zaczniemy od podłączenia płytki programatora do naszego Arduino tak jak to zostało przedstawione na zdjęciu. Aby ułatwić cały proces podłączenia, złącze programatora opisane zostało identycznymi oznaczeniami jakimi są opisane złącza Arduino UNO, dzięki temu proces podłączenia jest prosty i bezproble- mowy. Uwaga: Nie podłączamy linii RX, TX. W przypadku wgrywania bootloadera linie te nie mogą być podłączone. Następnym krokiem jest podłączenie Arduino do komputera oraz uruchomienie środowiska Arduino IDE po czym przechodzimy do ustawień środowiska Arduino IDE. Na początek sprawdzamy port, do którego podłączone jest nasze arduino. Jeżeli instalacja środowiska Arduino IDE przebiegła bez komplikacji to w zakładce "Narzędzia/Port" powinniśmy ujrzeć taki widok. Mamy do wyboru porty COM, wśród których znajduje się port do którego jest podłączone Arduino UNO. U mnie jest to port COM3. Możemy to rozpoznać po nazwie naszego urządzenia znajdującej się w nawiasie, po czym zaznaczamy wybrany port i przechodzimy do kolejnego ustawienia jakim jest wybór płytki. W tym celu klikamy "Narzędzia" i wybieramy opcję "Płytka". Z dostępnej listy wybieramy tą, która odpowiada naszej płytce podłączonej do komputera. W moim przypadku jest to: "Arduino UNO". Jest to bardzo ważne ustawienie bo od niego zależy wgrywanie sketch-ów czyli programów do Atmegi która jest sercem naszego Arduino, a także wgrywania bootloaderów do wybranych ATmeg z wykorzystaniem bootloader programmer. Ale wszystko po kolei. Po ustawieniu portu i wybraniu płytki klikamy "Plik/Przykłady" i z menu rozwijanego wybieramy "11.ArduinoISP/ArduinoISP". Jest to sketch, który czyni nasze arduino programatorem, które umożliwi nam wgranie do konkretnej ATmegi wybranego bootloadera z użyciem bootloader programmer. Naciskamy przycisk "wgraj" (strzałka w kółku) i czekamy na wgranie się sketcha. Po jego wgraniu klikamy na "Narzędzia/Programator" i z menu rozwijanego wybieramy "Arduino as ISP". Po zaznaczeniu tej opcji jesteśmy gotowi do wgrywania bootloaderów do ATmeg. Przejdziemy teraz do najważniejszej czynności czyli procesu wgrywania bootloadera. Bierzemy czysty procesor ATmega i umieszczamy go w podstawce bootloader programmera tak jak na zdjęciu. Jak widać na obudowie procesora z brzegu mamy półokrągle wycięcie a pod nim wgłębienie w postaci kółka które musi się znaleźć od strony dźwigni podstawki bootloader programmera. Opuszczamy na dół dźwignię podstawki tak aby piny złącza podstawki zostały dociśnięte do pinów procesora. Wgrywanie bootloadera do procesora ATMEGA 328 Klikamy na "Narzędzia i wybieramy "Wypal bootloader" po czym następuje wgrywanie bootloadera do naszej nowej czystej ATmegi. Proces ten może trwać od 15 sekund do jednej minuty. Diody: L, RX, TX na arduino powinny migać w trakcie wgrywania, a w dolnej części okna Arduino IDE powinniśmy ujrzeć taki komunikat w trakcie wgrywania oraz po zakończeniu wgrywania - zdjęcia poniżej. Po wszystkim możemy wyjąć procesor z podstawki i zaprogramować kolejny, jeżeli istnieje taka potrzeba. Wgrywanie bootloadera do procesora ATMEGA8/168 Tutaj zanim zaczniemy wypalać bootloader do jednego w powyższych procesorów, musimy dokonać zmiany jednego ustawienia. Klikamy "Narzędzia" i wybieramy opcję "Płytka" po czym z dostępnej listy wybieramy "Arduino NG or older" Ponownie klikamy "Narzędzia" i na liście wyboru pojawia nam się pole "Procesor" najeżdżamy na to pole kursorem, gdzie z menu rozwijanego mamy do wybory wyżej wymienione procesory. Klikamy na dany procesor do którego będziemy wgrywać bootloader. Następnie znów klikamy "Narzędzia" i opcję "Wypal bootloader" Proces ten może trwać od 15 sekund do jednej minuty. Diody: L, RX, TX na arduino powinny migać w trakcie wgrywania, a w dolnej części okna Arduino IDE powinniśmy ujrzeć taki komunikat w trakcie wgrywania oraz po zakończeniu wgrywania - zdjęcia poniżej. Po wszystkim możemy wyjąć procesor z podstawki i zaprogramować kolejny, jeżeli istnieje taka potrzeba. W przypadku kiedy wszystkie czynności zostały wykonane poprawnie a bootloader nie chce się wgrać, powinniśmy sprawdzić wszystkie połączenia płytek i procesora. Gdy to nie pomoże, warto na chwilę odłączyć arduino od komputera oraz zamknąć po czym ponownie uruchomić środowisko IDE Arduino. Za jakiś czas przedstawię kilka sposobów wgrywania sketch-y do procesora, który znajduje się już w gotowym projekcie. Tak aby obyło się bez zbędnych czynności w postaci ciągłego przekładania ATmegi z Arduino do gotowego projektu.
  11. Witam; Buduje urządzenie które ma za zadanie pobrać (wciągnąć) element na tackę, poprzez aktywowanie mikro przełącznika przy wprowadzaniu elementu. Posiadam Arduino Uno, Motor Shield Rev.3, mikroprzełącznik NO/COM/NC, silnik 12VDC. Proszę o pomoc w dopisaniu lub zmianę w kodzie, aby silnik pobierał element tylko w czasie wciśnięcia przycisku, poniżej przesyłam mój kod pętli. Z góry dziękuję za pomoc const int MotorPinA = 12; const int SpeedPinA = 3; const int BrakePinA = 9; const int Pobranie = HIGH; const int Zwrot = LOW; void setup() { pinMode(MotorPinA,OUTPUT); pinMode(SpeedPinA,OUTPUT); pinMode(BrakePinA,OUTPUT); Serial.begin(9600); } void loop() { digitalWrite(MotorPinA, Pobranie);//kierunek obrotu silnika Serial.println("Pobranie"); analogWrite(SpeedPinA, 100);//prędkość silnika od 0 do 255 Serial.println("szybkość 100"); delay(1000);//czas pracy silnika digitalWrite(BrakePinA,HIGH);//rozpoczęcie hamowania Serial.println("Hamowanie"); delay(500);//przerwa digitalWrite(BrakePinA,LOW);//zatrzymanie hamowania }
  12. Witam serdecznie. Mam program napisany w Pythonie, działa. Mam jedno wejście, zwykły przycisk, który przekazuje 5V. No i tutaj pojawia się problem, bo przekazując 5V jest ok podaje True, ale jak nie daje sygnału to daje losowo True albo False. Jak odłącze przewód od wejścia to jest False, jak daje kabelek na wejście i wisi w powietrzu to też szaleje True/False. Jak podłącze ten wiszący kabelek do GND to jest dobrze - False. No i tutaj pojawia się pytanie czy tak powinno być- domyślam się, że nie, no bo jak ma teraz prawidłowo działać układ? Kiedyś też miałem z tym problem tylko wejście było analogowe -> podłączyłem wiszący kabelek do wejścia i zmieniało się samo losowo w wartościach od 0.22 do 1.0 mimo braku sygnału. Jakieś rady? Pozdrawiam :)
  13. Witam, mam problem z płytką arduino uno którą kupiłem w zestawie do kursu. Podczas pisania programu nie mogę nadać funkcji pinu, ponieważ program nie zauważa numeru, np pinMode(8, OUTPUT), - podświetla się wszystko oprócz 8.
  14. Cześć Mam problemy z Arduino i z programatorem. 1 . Kupiłem Arduino z chin podziałało chwile i kaput , no trudno pomyślałem że kupie nówkę sztukę orginalną , no ale też nie działa więc ... „I CAŁY MISTERNY PLAN W PIZDU” Arduino:1.8.9 (Windows 8.1), Płytka:"Arduino/Genuino Uno" Opcje projektu zmienione, przeładuj całość Szkic używa 444 bajtów (1%) pamięci programu. Maksimum to 32256 bajtów. Zmienne globalne używają 9 bajtów (0%) pamięci dynamicznej, pozostawiając 2039 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów. avrdude: ser_open(): can't open device "\\.\COM3": Nie mo�na odnale�� okre�lonego pliku. Problem z wgrywaniem na płytkę. Sprawdź http://www.arduino.cc/en/Guide/Troubleshooting#upload w poszukiwaniu sugestii. Ten raport powinien zawierać więcej informacji jeśli w File -> Preferencje zostanie włączona opcja "Pokaż szczegółowe informacje podczas kompilacji" 2. Z programatorem to jest taka sprawa że w szkole na warsztatach sprawdziliśmy i działa atmega z płytki z chin ale sama płytka nie działa ( nie ważne ) , kupiłem programator ISP i nwm jak to podłączyć , żeby działało hehe ( oraz dalsze kroki postępowania ). PS . nie jestem jakimś mistrzem ale z schematów to umiem czytać , gorzej z programowaniem ... Z ewent. błędy ort. to sorry ...
  15. Dzień dobry, jestem świeżym użytkownikiem forum jak i Arduino. Zwracam się z prośbą o pomoc w rozwiązaniu problemu. Chcę wysyłać dane z Arduino Uno przy pomocy modułu ESP8266-01 (piny 2 i 3) do serwera MySQL (Xampp) przy pomocy skryptu PHP na serwerze i metody GET. Po uruchomieniu kodu (załącznik) moduł łączy się z siecią, problem jest jednak w połączeniu z serwerem. Połączenie albo nie zostaje nawiązane w ogóle, albo w pierwszym obrocie pętli (czasem kilka pierwszych obrotów) łączy się z serwerem, ale zwraca błędy. Później już połączenie z serwerem nie zostaje nawiązane. Informacje z Serial Monitora: [WiFiEsp] Connecting to 192.168.43.165 !!!Connected!!! [WiFiEsp] >>> TIMEOUT >>> [WiFiEsp] Data packet send error (2) [WiFiEsp] Failed to write to socket 3 [WiFiEsp] Disconnecting 3 [WiFiEsp] >>> TIMEOUT >>> [WiFiEsp] Connecting to 192.168.43.165 [WiFiEsp] >>> TIMEOUT >>> --> connection failed [WiFiEsp] Connecting to 192.168.43.165 [WiFiEsp] >>> TIMEOUT >>> --> connection failed i tak dalej... Po przeszukaniu podobnych tematów na forach polsko- i angielskojęzycznych niestety nie znalazłem rozwiązania. Jako, że dopiero zaczynam przygodę z Arduino, być może błąd jest bezpośrednio w kodzie, a ja nie potrafię go wychwycić. Mój kod: #include <WiFiEsp.h> #include <WiFiEspClient.h> #include <WiFiEspUdp.h> #include <SoftwareSerial.h> #include <PubSubClient.h> #include <SPI.h> char ssid[] = "OWN_NETWORK"; // network SSID char pass[] = "12345678"; // network password char server[] = "192.168.43.165"; int status = WL_IDLE_STATUS; // the Wifi radio's status WiFiEspClient espclient; SoftwareSerial soft(2,3); // RX, TX void setup() { Serial.begin(115200);// initialize serial for debugging soft.begin(115200); // initialize serial for ESP module WiFi.init(&soft); // initialize ESP module delay(5000); if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); // don't continue } while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to "); Serial.println(ssid); status = WiFi.begin(ssid, pass); } } void loop() { if (espclient.connect(server, 80)) { Serial.println("!!!Connected!!!"); espclient.println("Connection: close\r\n"); espclient.println(); } else { Serial.println("--> connection failed\n"); } delay(5000); } Znalazłem natomiast informacje o bibliotece MySQL Connector, która pozwala na bezpośrednie połączenie z bazą danych i wykonanie kwerendy. Rozwiązanie wydaje się być lepsze, jednak tutaj podobnie utknąłem na etapie połączenia z bazą danych. Połączenie zupełnie nie jest nawiązywane, tzn. zwracane jest w kółko "Connecting to..." i timeout . Kod dla podglądu: IPAddress ip(192,168,43,199); IPAddress server_addr(192,168,43,165); char ssid[] = "OWN_NETWORK"; // network SSID char pass[] = "12345678"; // network password char user[] = "arduino"; // MySQL user login username char password[] = "haslo"; // MySQL user login password int status = WL_IDLE_STATUS; // the Wifi radio's status WiFiEspClient espclient; SoftwareSerial soft(2,3); // RX, TX MySQL_Connection conn((Client *)&espclient); void setup() { Serial.begin(115200); // initialize serial for debugging soft.begin(115200); // initialize serial for ESP module WiFi.init(&soft); // initialize ESP module delay(5000); if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); // don't continue } while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to "); Serial.println(ssid); status = WiFi.begin(ssid, pass); } } void loop() { if (conn.connect(server_addr, 3306, user, password)) { delay(2000); Serial.println("Print po udanym polaczeniu"); } else { Serial.println("Connection failed."); } delay(10000); } Niestety zmagam się z tym problemem od kilku dni i brakuje mi już pomysłów co może być nie tak. Ponadto dodam, że urządzenia w sieci się wzajemnie pingują, wchodząc na serwer przez telefon mogę uruchomić skrypt PHP, który działa poprawnie.
  16. Co to jest timelapse? W razie, gdyby ktoś nie wiedział, co mało prawdopodobne, ale jednak - jest to przeciwieństwo slow-motion, czyli film, który jest kilka albo kilkanaście razy przyspieszony. Filmy takie pozwalają obejrzeć zjawiska, które ze swojej natury są bardzo wolne, na przykład wyrastanie ciasta, płynięcie chmur na niebie, rośnięcie roślin i tak dalej. Nagranie timelapse nie jest jakimś wielkim wyczynem, bo większość aparatów i kamerek sportowych ma taki tryb wbudowany, a na telefony komórkowe istnieją tysiące aplikacji realizujących takie właśnie nagranie. Do czego więc może służyć maszyna do timelapse? Najbardziej podstawową wersją timelapse jest oczywiście nieruchomy kadr - ustawiamy kamerę na statywie, uruchamiamy proces nagrywania i zostawiamy wszystko na odpowiedni czas. Filmy takie same w sobie robią już wrażenie, ale znacznie ciekawiej jest, gdy kadr jest zmienny, na przykład gdy zastosujemy panoramowanie (czyli powolny obrót) albo liniowe przesunięcie. Kłopot polega na tym, że obrót taki musi być realizowany bardzo wolno - w tempie dopasowanym do tempa robienia zdjęć. 45 stopni to być może dużo, ale jeżeli kamera ma zarejestrować, powiedzmy, 40 minut materiału przy 30 klatkach na sekundę, to mamy prędkość obrotu rzędu 45/(40*60) = 0,01875 stopnia na sekundę. Żeby było trudniej, kamera musi obracać się płynnie, bo timelapse będzie wyraźnie poszarpany. Do czegoś takiego trzeba już dedykowanego urządzenia: kupionego albo - co znacznie ciekawsze - zrobionego samodzielnie. Komponenty Tym razem kontrolerem stało się Arduino Uno, między innymi dlatego, że razem z shieldem z wyświetlaczem i klawiaturą zapewniło dosyć niskim kosztem interfejs użytkownika. Płynny i w pełni kontrolowany obrót zapewni silnik krokowy, a ten konkretny, czyli SY35ST26-0284A wybrałem w dużej mierze dlatego, że można go zasilić bezpośrednio dwucelowym akumulatorem LiPo. Do silnika należało oczywiście również kupić odpowiedni sterownik. Oprócz tego wyposażyłem się też w obudowę - być może efekt końcowy nie powala estetyką, ale bardzo nie lubię kończyć projektów z gmatwaniną sterczących przewodów i po ukończeniu jeżdżącego robota stwierdziłem, że będę dbał również o wygląd moich projektów. To nie był koniec zakupów - silnik krokowy oferuje 200 kroków na obrót, co daje 1,8 stopnia na krok. Tymczasem ja potrzebowałem stukrotnie większej dokładności, dlatego konieczne było zbudowanie przekładni zębatej. Zębatki Z przekonaniem, że w Internecie można znaleźć wszystko zacząłem szukać zębatek i okazało się, że wcale nie tak łatwo jest znaleźć zębatki do takiego projektu. Byłem ograniczony ich rozmiarem oraz sposobem montażu - nie posiadając wtedy drukarki 3D (na której pewnie sam wydrukowałbym potrzebne koła), miałem też ograniczone możliwości związane z montażem komponentów. W akcie desperacji napisałem email z zapytaniem ofertowym do krakowskiej firmy, która specjalizuje się w produkcji kół zębatych, ale koszty rzędu (o ile dobrze pamiętam) 800 PLN za cztery koła zębate przekraczały wielokrotnie mój budżet na ten projekt. Wróciłem więc do poszukiwań i w końcu znalazłem odpowiednie koła zębate w sklepie conrad.pl. Kupiłem dwa czterdziestozębowe i dwa trzydziestozębowe - w przypadku, gdyby te pierwsze nie zmieściły się wewnątrz obudowy. Oprócz tego kupiłem jedną piętnastkę oraz dwunastkę - ta ostatnia miała otwór na oś pasujący do kupionego przeze mnie silnika krokowego. Przekładnia Teraz musiałem zaprojektować przekładnię - skorzystałem w tym celu z darmowego Solid Edge Drafting - świetnego dwuwymiarowego cada. Pomierzyłem wszystkie przestrzenie suwmiarką i wyszło na to, że przekładnia zmieści się w całości w przedniej, podwyższonej części obudowy. Nie dysponuję żadną maszyną CNC, ale otwory w aluminiowych płytkach musiałem zrobić bardzo dokładnie, bo inaczej zębatki nie zazębiłyby się (w jedną albo drugą stronę) albo obracały ze zbyt dużym oporem. Wpadłem więc na pomysł - wydrukowałem układ otworków w obu płytkach przygotowany wcześniej w cadzie na papierze samoprzylepnym i przykleiłem go na obrabianym aluminium. Potem dociąłem płytki zgodnie z ramkami i wywierciłem otwory w oznaczonych miejscach - okazało się, że taka dokładność była wystarczająca i wszystko ładnie wskoczyło na swoje miejsca. Montaż Po zbudowaniu przekładni nie zostało już zbyt dużo do roboty - zamontowałem wewnątrz obudowy Uno z shieldem LCD, podłączyłem do przygotowanej wcześniej płytki prototypowej ze sterownikiem silnika, a do niej sam silnik. Potem skręciłem wszystko i dostałem (w miarę) zgrabne urządzenie. Programowanie Na potrzeby tego projektu napisałem specjalnie własny zestaw bibliotek, które ułatwiają budowanie wielopoziomowych menu na shieldzie LCD. Programik jest stosunkowo prosty - należy obrócić silnik w położenie źródłowe i docelowe, ustalić czas obrotu - i uruchomić. Program oblicza o jaki kąt obrócić silnik w jakim czasie i powolutku obraca oś z jednego położenia do drugiego. Ponieważ program z bibliotekami jest dosyć duży, nie będę go tu zamieszczał, ale można go ściągnąć z mojego repozytorium na gitlabie. Efekty Czy cel został osiągnięty? Definitywnie tak - nagrane filmy poddaję niewielkiej obróbce w VirtualDub (korzystam z plugina o nazwie deshaker), żeby odrobinę poprawić ich jakość, ale nawet i bez tej obróbki filmiki wyglądają całkiem przyzwoicie. Przykładowy poniżej: Wnioski Po pierwsze, maszyna jest niestety przeraźliwie głośna. Obracanie (przynajmniej na początku, podczas ustawiania zakresów) osi generuje dźwięk przypominający skrzyżowanie kosiarki do trawy i piły łańcuchowej. Winne są najprawdopodobniej pancerne zębatki oraz luzy na osiach - teraz, mając już drukarkę 3D, wydrukowałbym sobie wszystko z PLA spasowane do dziesiątych milimetra, podczas budowy tego urządzenia skazany byłem jednak tylko na własne ręce i montaż przekładni na pewno nie jest tak dokładny jaki mógłby być. Poza tym warto byłoby rozważyć również zastosowanie mniejszych, plastikowych zębatek, tylko obawiałem się trochę, czy będę w stanie zamontować je pewnie do osi - tak, by nie wyrobiły się i nie zaczęły obracać w miejscu. Plusem tej przekładni jest natomiast fakt, że jest po prostu pancerna - myślę, że spokojnie mógłbym zamontować na niej lustrzankę z solidnym obiektywem i ani przekładnia ani silnik nawet by nie sapnęły. Zdecydowanie warto było zainwestować w obudowę - kosztowała mnie raptem 15 złotych, a znacząco podniosła estetykę projektu (i przynajmniej w pewnym stopniu chroni elektronikę przed warunkami atmosferycznymi i kurzem. Wbrew pozorom dosyć wygodne okazało się zasilenie urządzenia z zewnątrz - wyprowadziłem sobie ze środka kabelek zakończony wtyczką T-Dean i gdy chcę uruchomić narzędzie, po prostu łapię jeden z dwucelowych akumulatorów LiPo walających się gdzieś po domu i maszyna może na nim działać naprawdę długo. Choć urządzenie powstało już jakiś czas temu, nie użyłem go jeszcze zbyt wiele razy; tak naprawdę zbudowałem je pod kątem filmowego projektu, który mam zamiar nakręcić, ale wymaga on dosyć dużo czasu w plenerze, a tego zasobu od jakiegoś czasu niestety trochę mi brakuje. Ale też nie tracę nadziei - być może za kilka lat zrealizujemy go razem z córką? Czas pokaże...
  17. Cześć!!! Podczas pisania kodu programu natrafiłem na problem. Pisze program w którym każdy solenoid (na razie dioda) odpowiada, numerowi. Na ekranie wyświetla się coś w stylu menu z liczbami, którym steruje się dwoma przyciskami (góra[1], dół[2]). Po wybraniu opcji zatwierdza się ją przyciskiem[3]. Problem polega na tym, że nie wiem jak zrobić aby program "wykrywał" pojedyncze liczby i zaświetlił odpowiednie diody. np. Liczba: 1 2 3 . 4 5 Diody: 4 5 6 2 7 8 Solenoidy będą naciskały klawiaturę numeryczną. Nie da się wpiąć bezpośrednio do urządzenia (Czyli do wielkich ekranów 7-dmio segmentowych, którymi steruje ww. klawiatura.). Kiedyś pisałem już temat na tym forum dotyczący tego samego programu: https://tiny.pl/txc4v Z góry dziękuję!!! #include <LCD.h> #include <LiquidCrystal.h> #include <LiquidCrystal_I2C.h> #include <Wire.h> #include <EasyButton.h> #define czasZatw 200 #define czasGoraDol 200 #define czas000 5000 #define czasSolen 1000 #define czasNaci 500 #define BACKLIGHT_PIN 3 LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7); EasyButton zatw(A0); EasyButton wdol(A1); EasyButton wgore(A2); int array[15] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 }; String a[17]; short b=-1; byte d=0; byte c=0; byte g=1; byte h=2; byte i=3; byte j=4; byte k=5; byte l=6; byte m=7; byte n=8; byte o=9; void setup() { 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); pinMode(12,OUTPUT); Serial.begin(115200); zatw.begin(); wdol.begin(); wgore.begin(); zatw.onPressed(ztawierdz); wdol.onPressed(dol); wgore.onPressed(gora); pinMode(13,OUTPUT); lcd.begin (16,2); lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); lcd.setBacklight(HIGH); lcd.setCursor(0,0); lcd.print("Aktualny: "); lcd.print(a[b]); lcd.setCursor(0,1); lcd.print("Nastepny: "); lcd.print(a[b+1]); a[16]="------"; a[15]="------"; a[14]="15.30"; a[13]="14.03"; a[12]="13.01"; a[11]="12.35"; a[10]="11"; a[9]="10"; a[8]="9"; a[7]="8.44"; a[6]="7"; a[5]="6.26"; a[4]="5.04"; a[3]="4.03"; a[2]="3"; a[1]="751.3"; a[0]="0.45"; } void ztawierdz() { if(b<16&&b>=0) { lcd.clear(); Serial.println("zatwierdzono!!!"); b++; c++; lcd.setCursor(0,0); lcd.print("Aktualny: "); lcd.print(a[b]); lcd.setCursor(0,1); lcd.print("Nastepny: "); lcd.print(a[b+1]); b=c; digitalWrite(13, HIGH); delay(czasZatw); digitalWrite(13, LOW); delay(czasZatw); digitalWrite(13, HIGH); delay(czasZatw); digitalWrite(13, LOW); delay(czasZatw); digitalWrite(13, HIGH); delay(czasZatw); digitalWrite(13, LOW); digitalWrite(2,HIGH); delay(czasSolen); digitalWrite(2,LOW); delay(czasNaci); if(a[0][0]%g){ digitalWrite(3,HIGH); delay(czasSolen); digitalWrite(3,LOW); delay(czasNaci); } if(a[0][0]%h) { digitalWrite(4,HIGH); delay(czasSolen); digitalWrite(4,LOW); delay(czasNaci); } if(a[c][d]==h) { digitalWrite(5,HIGH); delay(czasSolen); digitalWrite(5,LOW); delay(czasNaci); } if(a[c][d]==i) { digitalWrite(6,HIGH); delay(czasSolen); digitalWrite(6,LOW); delay(czasNaci); } if(a[c][d]==j) { digitalWrite(7,HIGH); delay(czasSolen); digitalWrite(7,LOW); delay(czasNaci); } if(a[c][d]==k) { digitalWrite(8,HIGH); delay(czasSolen); digitalWrite(8,LOW); delay(czasNaci); } if(a[c][d]==l) { digitalWrite(9,HIGH); delay(czasSolen); digitalWrite(9,LOW); delay(czasNaci); } if(a[c][d]<m) { digitalWrite(10,HIGH); delay(czasSolen); digitalWrite(10,LOW); delay(czasNaci); } if(a[c][d]==n) { digitalWrite(11,HIGH); delay(czasSolen); digitalWrite(11,LOW); delay(czasNaci); } if (a[c][d]==o) { digitalWrite(12,HIGH); delay(czasSolen); digitalWrite(12,LOW); delay(czasNaci); } d+1; } } void dol() { if(b<16&&b>=1) { lcd.clear(); Serial.println("w dol!!!"); b--; lcd.setCursor(0,0); lcd.print("Aktualny: "); lcd.print(a[b]); lcd.setCursor(0,1); lcd.print("Nastepny: "); lcd.print(a[b+1]); digitalWrite(13, HIGH); delay(czasGoraDol); digitalWrite(13, LOW); } } void gora() { if(b<15) { lcd.clear(); Serial.println("w gore!!!"); b++; lcd.setCursor(0,0); lcd.print("Aktualny: "); lcd.print(a[b]); lcd.setCursor(0,1); lcd.print("Nastepny: "); lcd.print(a[b+1]); digitalWrite(13, HIGH); delay(czasGoraDol); digitalWrite(13, LOW); } } void loop() { zatw.read(); wdol.read(); wgore.read(); }
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.