Skocz do zawartości

Przeszukaj forum

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

  • 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 - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - 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
    • Kosz

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


Znaleziono 317 wyników

  1. Witam. Mam problem z zasileniem arduino nano i sewomechanizmów z powerbanka, a mianowicie, zrobiłem przejściówkę z USB na dwa żeńskie wtyki plus i minus do których podlaczone są przewody zasilajace od serwa. Gdy arduino i serwo są podłączone do oddzielnych gniazd USB w laptopie (arduino poprzez gniazdo miniUSB) to wszystko działa jak należy. Problem pojawia się gdy któreś z nich podłączam do powerbanka , wtedy serwo zaczyna wariować tzn. drży i nie może ruszyć się z pozycji 0. Nie wiem w czym problem , rozebrałem powerbank i w środku są dwa ogniwa lipo 18650 3.7V , na wyjsciu USB do którego podłączam np. serwo jest 5.1V więc wszystko moim zdaniem powinno być ok. Poniżej zamieszczam zdjęcia powerbanka . Czy jeśli zbudował bym swój uklad na tych ogniwach i użyłbym przetwornicy step-up , ładowarki do li-xx , oraz stabilizatora napięcia to bylo by to samo? Docelowo ma to zasilać robota 4-nożnego z 12toma serwami sg90. Pozdrawiam
  2. Witam, Zaciekawiony ostatnim wpisem na forum na temat lampki sterowanej gestami, postanowiłem, że ja również wykonam taki projekt. Niestety ze względu na brak niektórych komponentów, mój projekt wyglądać będzie trochę inaczej. I napotkałem następujący problem: Czujnik HC-SR04 co pół sekundy wykonuję pomiar. Gdy odległość będzie mniejsza od 30cm, arduino ma dać prąd na odpowiednim wyjściu, i włączyć przekaźnik. Następnie ma czekać znowu na na mniej niż 30 cm i go wyłączyć. I nie wiem w jaki sposób to zrobić. Napsałem kod, używając if ale gdy odległość wynosi mniej niż 30 zapalają się, i za chwilę gasną. Podpowiedzcie, jak należy to zrobić?
  3. Witam wszystkich czytelników. Zainspirowałem się w wakacje postem użytkownika @Krzysiek97, który przedstawił swoją kierownice do gier na bazie arduino leonardo: Kierownica PC - wersja 2. Z racji tego że lubię grać w gry wyścigowe i symulatory postanowiłem zbudować własną kierownicę z dodatkowymi akcesoriami. Nie chciałem przerabiać starej gotowej kierownicy do komputera, więc wpadłem na pomysł aby zbudować całe stanowisko. Materiał o tym stanowisku/ projekcie znajduję się na moim kanale na YT do którego was zapraszam Kierownica do komputera na bazie arduino Chciałem aby w tym stanowisko znajdowała się kierownica o kącie obrotu 900 stopni, sprzęgło, gaz, hamulec, 8 biegów + wsteczny (8 biegów ponieważ tyle mają niektóre samochody np. w Forza Horizon 4), hamulec ręczny, 2 joystiki (do sterowania maszynami w Farming Simualtor), button matrix 4x5 = 20 przycisków (przypisanych do rożnych akcji w grach) i zegary do wyświetlania prędkości i obrotów. Tak więc gdzieś w połowie lipca zacząłem szukać potrzebne części. Pierwszym problemem z którym się spotkałem była niewystarczająca ilość wejść w arduino leonardo. Ktoś na tym forum podsunął mi płytki Nucleo 64 na STM32, obawiałem się jednak czy programy które wcześniej znalazłem w internecie będą z nimi współpracować. Bawiłem się naco wcześniej arduino lecz nucleo nie stąd moja niepewność ponieważ zaczynałem dopiero wtedy zabawę z tym wszystkim. Zdecydowałem się jednak zostać przy arduino i zakupiłem 3 płytki, po jednej dla każdego programu który obsługuję inną część stanowiska, ponieważ i tak nie ma prgoramu który ogarnie wszystkie moje rzeczy na raz. A więc tak: Arduino Leonardo - program EMC Utility Lite (z początku korzystałem z RFR Whell Configuration elcz sprawiał on problemy) - obsługuję kierownicę, pedały, hamulec ręczny - Link do programu EMC, Jak zainstalować program Pierwsze Arduino Pro Micro - program MMJoy2 - obsługuję button matrix i 2 joysticki - Link do programu MMJoy2, Jak zainstalować program Drugie Arduino Pro Micro - program SimHub - obsługuję zegary/wyświetlacze - Link do programu SimHub Zamówiłem też 20 guzików (push button) 10 styczników krańcowych 2 Joysticki 2 wyświetlacze Tm1638, 1 wyświetlacz Max7219 (zamówiłem też sterownik silnika BTS7960 lecz na razie nie zakładałem FFB). Rzeczy które miałem w domu to: 2 potencjometry 10k Ohm, stycznik krańcowy ls-11s, kable kawałki plastiku, materiału i gumy. Za postawę stanowiska posłużyła mi deska rozdzielcza i fotel od mazdy mx-5 i kierownica od mazdy 626. Całość jest przyspawana do rurki i przykręcona do euro palety. Z racji tego że deska pochodzi z anglika to nie mogłem zamontować zwykłych zegarów w miejscu poduszki pasażera. Zamieszczam tutaj schematy podłączeń danych elementów: Drugim problemem który chce tu opisać, było przeniesienie/ zczytanie obrotu z kierownicy do arduino. Na początku chciałem wykorzystać enkoder optyczny z swojej starej drukarki, lecz gubił się on często i nie działał dokładnie, więc kupiłem enkoder inkrementalny 600ppr. Nie będę się już tak rozpisywał co jak i gdzie jest skręcone dlatego wszystko pokazane i omówione jest w filmiku do którego link jest na początku posta. Więc to jest dodatkowy materiał dla ciekawych. Podsumowując: koszt budowy stanowiska zamknął się dla mnie w kwocie 300zl, czas realizacji od pierwszego pomysłu do zbudowania całości i upewnienia się że wszystko jest sprawne to 6 miesięcy. Tak oto prezentuję się kierownica i jej działanie w grze Forza Horizon 4 Na koniec pytanie głownie do administratora, czy i kiedy będzie znowu dostępny konkurs Opisz elektroniczne DIY i odbierz 50 zł rabatu do Botland?
  4. Dzień dobry, na wstępie opiszę z grubsza założenia projektu - w przyszłości pracy inżynierskiej. Priorytetowym zadaniem, jakie ma stanąć przed moim robotem jest okrążenie kampusu mojej uczelni. Teren nie jest prosty, robot będzie miał do pokonania wyboiste drogi(częściowo przejazd przez las), krawężniki, trawniki i parkingi. Sterowanie ma być ręczne, realizowane zdalnie, za pośrednictwem internetu. Okrążenie to około 3km, zakładany czas przejazdu to niecała godzina. Konstrukcja opiera się na ramie zbudowanej z profili alu, o wymiarach 400x600. Do ramy będzie przymocowane większość osprzętu robota. Zawieszenie niezależne, 4 wahacze wzdłużne zawieszone na amortyzatorach do samochodów rc. Jako napęd 4 silniki wraz z przekładniami od samochodów dla dzieci. Koła 12 cali od wózka dziecięcego Część elektroniczna składa się z: Raspberry Pi 3, ICSTATION UNO, 4xmostek H VNH2SP30, przetwornica napięcia 5v USB, czujniki odległości(jeszcze nie wybrane), kamera(prawdopodobnie internetowa usb) Tyle z założeń, robot jest już w zaawansowanej fazie budowy. Zaczęło się od projektu w semestrze zimowym 2019/2020, projekt został zaliczony, jego dokumentacja tutaj(dokumentacja), a filmik zaliczeniowy z pierwszej jazdy terenowej poniżej Na tej fazie robot całą elektronikę miał zamontowaną "na taśmę", ze względu na zamówienie niewłaściwych kołków do pcb, a termin gonił. Obecnie robot jest rozebrany z całej elektroniki, powstaje miejsce w którym pojawią się akumulatory i elektronika(puszka elektryczna), osobny wyłącznik awaryjny oraz doprowadzenie kabli do silników. Poniższe zdjęcie przedstawia obecny stan robota: Aktualnie czekam na osłony na silniki wydrukowane w 3d, po zamontowaniu wszystkiego z zewnątrz będę mógł przejść do środka. W środku planuję zrobić ramkę z kątownika alu 20x20, w której będą miejsca na akumulatory(dwa akumulatory umieszczone po bokach), a pomiędzy nimi ma zostać umieszczona elektronika w sposób warstwowy(poziom 1: mostki H, poziom 2: ICSTATION UNO, poziom 3: Raspberry Pi 3). Poza tymi warstwami muszę znaleźć jeszcze miejsce na przetwornicę napięcia i mobilny ruter wifi. Całą ramkę chcę umieścić na gąbce, która by amortyzowała wstrząsy, tak samo zabezpieczyłbym moduł od góry. Dziękuję za uwagę, postępy i pytania będę starał się wrzucać tu na bieżąco.
  5. Witam, na wstępie przepraszam, jeśli podobny temat już był, sam jednak nie mogłem znaleźć tego o co mi chodzi. Mój problem wygląda tak. Podczas jednego z kursów Arduino na Forbocie prawdopodobnie zepsułem swój mikroprocesor. Środowisko pokazuje, że kod został wgrany bez problemów lecz nie wykonuje się on, a na płytce prototypowej miga dioda z podpisem "L". Na szczęście mam drugą atmegę328, lecz kupiłem wersję bez bootloadera ponieważ była tańsza, a sam chciałem wypalić loader przy pomocy Arduino. Teraz skoro atmega nie działa zastanawiam się nad kilkoma opcjami. 1. Kupno nowej atmegi z bootloaderem i wypalenie bootloadera na drugiej. 2. Kupienie programatora. W przypadku programatora mam kilka pytań. Czy przy pomocy programatora da się w jakiś sposób wypalić bootloader na czystej atmedze? Jakiego rodzaju programator byłby dobry na początek i czy potrzeba do niego jakieś szczególne sterowniki (nie ukrywam, że wolałbym mieć coś kompatybilnego z linuxem, ponieważ używam praktycznie tylko tego systemu). Jeśli miałbym programator, to jak wygląda pisanie kodu w czystym C na atmegę? Czy istnieją alternatywne środowiska do Atmel Studio, które działają na systemie z pingwinem? Z góry dziękuje za wszelkie odpowiedzi i pozdrawiam!
  6. Witam, Czy jest jakis przyjazny link za pomoca ktorego mozna wydrukowac od razu caly kurs np. Podstaw Arduino (zoptymalizowany do wydruku czyli sam kurs ze zdjeciami/schematami pomijajacy linki do innych artykulow, podzial stron) itp ? P.S. Tak wiem ze moge otworzyc 11 oddzielnych stron w przegladarce z kazdym rozdzialem osobno i wydrukowac kazdy z nich ale to nie bedzie to samo (np. podzial stron) ;) Pozdrawiam.
  7. Witam Elektroniką zajmuję się od dwóch miesięcy, kiedy to po raz pierwszy zaświeciłem diodą z kursu: FORBOT - podstawy elektroniki - zestaw elementów + kurs ON-LINE. Kurs tak mi się spodobał że ukończyłem go w dwa dni i kupiłem 4 kolejne: FORBOT - podstawy elektroniki 2 - zestaw elementów + kurs ON-LINE, FORBOT - technika cyfrowa - zestaw elementów + kurs ON-LINE, FORBOT - zestaw do nauki lutowania elementów THT oraz FORBOT - zestaw do kursu podstaw Arduino + gadżety i Box (wersja PLUS). Jak tylko je połknąłem pojawił mi się w głowie pomysł na pierwszy projekt którym chciałbym się Wami podzielić. Projekt został oparty o Arduino Pro Mini i jest to Szachownica która gra za mną w szachy Bardzo zależało mi żeby była to tradycyjna duża drewniana szachownica, którą będę się mógł cieszyć przez lata. Całość prezentuje się tak: Najpierw należało zacząć od wykrywania pozycji bierek. Do tego zdecydowałem się (być może nieco pochopnie) na użycie małego ładnego zgrabnego komponentu o nazwie sg-2bc. SG-2BC to nic innego jak dioda IR i fototranzystor w jednej małej (4mm średnicy) ceramicznej obudowie. Ma jednak jedną wadę w zastosowaniu do którego go potrzebowałem - jego fototranzystor jest bardzo wrażliwy na światło słoneczne. Musiałem więc odróżnić jakoś światło słoneczne od światła odbitego diody IR. Zaprojektowałem w tym celu prosty obwód oparty o ne555, który generuje sygnał PWM o częstotliwości około 32kHz i wypełnieniu 33%. Układ ten daje sygnał na diodę IR oraz sprawdza za pomocą 3 komparatorów (dwa lm393 - 2 komparatory na układ) i filtra RC czy odebrał sygnał o odpowiedniej charakterystyce po stronie fototranzystora (czyli na polu stoi bierka). Na wyjściu wystawia stan wysoki jeśli to mu się udało. W ten sposób powstał mój pierwszy w życiu projekt płytki drukowanej Oczywiście zdarzyło mi się wlutować jeden z komparatorów odwrotnie a potem to poprawiać. I tu uwaga do Forbota: w kursie lutowania brakuje informacji i praktyki w wylutowywaniu układów scalonych - na prawdę by się przydało! Jakoś to jednak poszło i efekt był taki: Z racji uśredniania na filtrze RC który jest częścią obwodu czas odpowiedzi na sygnał to 3ms. Oczywiście nie chciałem takiego obwodu powtarzać dla każdego testowanego pola szachownicy, zastosowałem więc multipleksowanie - obwód załączany jest tranzystorami kolejno do wszystkich czujników, co jak łatwo policzyć daje <200ms na zeskanowanie stanu szachownicy (uwzględniając szybkość I2C i czasy przełączania w praktyce są to 3 pełne skany na sekundę - wystarcza). Skoro już umiałem testować pojedyncze pole, nadszedł czas na zaprojektowanie płytek do samej szachownicy. Tu użyłem ekspandera wyprowadzeń MCP23017 oraz demultiplexera MC74HC154. Skoro i tak nie mogę testować więcej niż jednego pola na raz, demultiplexer zapewnił mi rozsądne wykorzystanie wyprowadzeń MCP23017 - dzięki temu wystarczył jeden ekspander na 16 pól szachownicy (każde ma jedną diodę świecącą i jeden czujnik wspomniany wczesniej SG-2BC). Prototyp tego rozwiązania wyglądał następująco: Projekt płytki pokrywającej 16 pól (przed ułożeniem ścieżek, wizualizacja ze ścieżkami, gotowe płytki): Na całą szachownicę użyłem 4 takich samych równolegle połączonych płytek: Czemu nie dwóch - po jednej na stronę szachownicy? Z tej oto przyczyny że darmowa licencja DIPTrace pozwala na 300 padów na płytkę Po polutowaniu i zmontowaniu całości otrzymałem taki oto efekt: W montażu najtrudniejsze okazało się jednoczesne wcelowanie 32-ma okrągłymi elementami w wywiercone otwory: Aby tego dokonać ułatwić płytki umieściłem na mosiężnych dystansach 1cm przyklejonych klejem na ciepło do wewnętrznej strony szachownicy, przewlokłem diody i czujniki przez płytkę, zakleilłem otwory w szachownicy od jej frontowej strony przezroczystą taśmą klejącą i manewrowałem cierpliwie elementami oraz samą płytkę aż wskoczyły na swoje miejsce. Dopiero wtedy płytkę przykręcałem a nóżki elementów lutowałem. Pozostało to oprogramować Jako że programuję od ponad 20 lat i do tej pory nie pisałem jeszcze enginu szachów, postanowiłem nie używać „cudzego” i napisać własny. Biorąc pod uwagę ograniczenia Arduino było to naprawdę fajnym wyzwaniem i zajęło mi około 2 tygodnie. Zaimplementowałem mini-max z przycinaniem alpha-beta i iteracyjnym pogłębianiem. Engine nie alokuje żadnej pamięci dynamicznie, a ze stosu bierze nie więcej niż 600B, co uważam za swój sukces. Ostatecznie wygrywa nie tylko ze mną (żaden ze mnie wybitny szachista), ale i z Stockfishem na poziomie 3, z czego jestem dumny Ostateczny kształt szachownicy w działaniu wygląda tak: Szachownica rozpoznaje ustawienie początkowe i sygnalizuje to spiralnym zaświeceniem wszystkich diod. Grę rozpoczynamy białymi lub sygnalizujemy szachownicy ze chcemy grać czarnymi poprzez podniesienie na chwile czarnego króla. Po podniesieniu bierki gracza, szachownica pokazuje dostępne pola na które figura ta może się ruszyć umieszczonymi w ich rogach diodami (mój niespełna 6-cio letni syn bardzo to docenia). Ruch szachownicy również sygnalizowany jest diodami i szachownica czeka aż zostanie wykonany. Dodatkowe dwie małe diody na krawędzi szachownicy sygnalizują po czyjej stronie jest ruch. Zdjęcie dwóch własnych bierek z szachownicy jest dla niej gestem do zapisania stanu gry do EEPROMU. Po tym można ją wyłączyć i wznowić grę np. za tydzień. Po włączeniu szachownica czyta stan z EEPROMU i czeka aż jeden ze stanów (początkowy lub zapisany) zostanie ustawiony na szachownicy. Jeśli nie była w tym czasie składana, a bierki nie były ściągane - grę można kontynuować natychmiast po włączeniu. Szachownicę można normalnie składać, niestety nie mieszczą się już do niej szachy Mam nadzieje mój pierwszy projekt się Wam spodobał, ja jeszcze wciąż się nim cieszę jak dziecko. Chciałbym przy tym podziękować Forbotowi za naprawdę świetne kursy które nie tylko dały mi niezbędną w realizacji wiedzę, ale też zainspirowały to zrobienia tejże zabawki. Pozdrawiam, Okjak
  8. Hej Planuję budowę prostego układu inteligentnego oświetlenia do pokoju. Składać się będzie z: Arduino (NANO) Moduł bluetooth Czujnik ruchu Czujnik temp/wilgotności Wyświetlacz oled Projekt zakłada zasilenie wszystkich powyższych układów zasilaczem podłączonym bezpośrednio do sieci - napięcie i masa wspólne z żarówką. Nie mam jednak bladego pojęcia, jak bezpiecznie sterować napięciem prądu żarówki (zależy mi na możliwości sterowania jasnością światła), zwykły przekaźnik 230V więc tutaj nie zadziała. Załączam też prosty schemat dla zobrazowania: Z góry dzięki za pomoc
  9. Cześć, może komuś by się chciało napisać coś na temat pisania bibliotek do Arduino? Temat nie poruszany a potrzebny. Baaaaaardzo potrzebny
  10. Autonomiczny robot mobilny z nawigacją GSP W życiu każdego studenta przychodzi monet, kiedy musi się spiąć i zrobić pracę inżynierską. Jako, że większość proponowanych tematów przez uczelnię nie wpadło w obszar moich zainteresowań, a już od jakiegoś czasu chciałem „pobawić się” w budowę robota z GPS to właśnie taki temat zaproponowałem promotorowi i bez problemów został zaakceptowany (kierunek – AiR). Potem jak się okazało nie był to do końca dobry pomysł z uwagi na problemu w testowaniu GPS – testy przypadły głównie na styczeń – a więc w tym roku deszcze itp. a nawigację trzeba jednak testować na dworze. To tyle tytułem wstępu a teraz do bardziej praktycznych zagadnień. Robot z założenie miał być 2 kołowy + jedno koło wleczone, posiadać moduł bluetooth do wstępnej kalibracji i wpisywaniu współrzędnych, sterowany za pomocą Arduino Nano (w tym przypadku klon), a jego zmysłami poznawania świata miał być: moduł GPS Neo-6m, magnetometr oraz 3 czujniki ultradźwiekowe z przodu do wykrywania przeszkód. Przeszukałem pełno gotowych platform mobilnych ale żadna mi do końca nie pasowała, a że od niedawna byłem właścicielem drukarki 3D to postanowiłem zaprojektować własną i wydrukować z PLA. Projekt owej platformy zrobiłem w środowisku CAD w programie Solid Edge i wyglądał tak jak poniżej. Składa się z 2 platform oraz miejsca na czujniki ultradźwiękowe: dolna na arduino, sterownik i akumulator, a górna na pozostałe podzespoły. Jak widać pokusiłem się o zamodelowanie również felg do już gotowych kół – okazało się że mają efekt „ósemkowania” co uniemożliwiało prostą jazdę. Koło wleczone zastąpiłem jednak Ball Caster'em, ponieważ te które użyłem miało straszne luzy i również powodowało samoczynną jazdę po łuku. A tak prezentuje się już wydrukowana i złożona platforma: Jako że wszystko było zamodelowane w CAD’zie to mogłem porobić rysunki złożeniowe rodem jak z sklepów meblowych (może projektowanie mechaniczne to dobry pomysł na artykuł ) Kolejnym krokiem było zrobienie elektroniki. Aby wyglądało to w miarę estetyczniej to pokusiłem się o zrobienie płytki PCB – projekt w KiCad'zie a potem termotransferem na laminat (tam gdzie Arduino to płytka dwustronna, a tam gdzie moduły jedno) Jeszcze tylko zasilanie – Li-Pol 2s firmy Redox (pomocny w ogarnięciu tego tematu był artykuł na Forbocie – wielkie dzięki za kompendium wiedzy w pigułce) i możemy zaczynać programować – a to dla mnie było największym wyzwaniem. Wrzuciłbym kod ale to jest 700 linijek napisanych raczej łopatologicznie więc tylko ja się w nim odnajduję Jak byście mieli jakieś pytania odnośnie działania jakiejś części to podrzucę i postaram się wyjaśnić. Jako, że byłem na AiR no to fajnie by było wrzucić jakiś nawet prosty regulator – zdecydowałem się na Proporcjonalny a układ regulacji wygląda następująco: (KSN – kompensacja strefy nieczułości) Działał on dosyć dobrze, im robot "był dalej" od zadanego kontu tym szybciej obracał się a im bliżej tym zwalniał, zaś przeregulowanie było znikome. Gotowy robot prezentuje się tak: Niestety wszystko nie było takie piękne i proste, a to niektóre napotkane problemy Magnetometr praktycznie nie działał. Wskazywał azymut w przedziale może z 0-15o. Powodem było pole magnetyczne wytwarzane przez magnesy silników. Google jednak nie znały odpowiedzi co zrobić z tym faktem więc testowałem po kolei różne warianty i tak o to idealnym rozwiązaniem okazało się umieszczenie silników w stalowe rurki. Z powody złych warunków na dworze testowanie robota nie było zawsze możliwe. Arduino też nie wyrabiał jak dostawał tyle danych (GPS okazał się bardzo obciążający – w momencie kiedy dostawał pakiet danych to Ardu zaczęło wariować). GPS i bluetooth nie mogły działać w tym samym momencie więc nie miałem możliwości zdalnie dowiedzenia się co robot w danej chwili „miał na myśli”. Generalnie to wszystko działało ale osobno: jak testowałem unikanie przeszkód i ustawianie się na dany kąt to była gitara. Dołożyłem do tego GPS to raz działało a raz nie – jak wspomniałem po dostaniu pakietu danych zaczynał wariować przez chwilę. W planach mam zamianę Ardu na STM32 i spróbowanie ponownie ruszyć temat. Dodatkowo napisałem prostą aplikację w C#, która komunikowała się z robotem przez bluetooth i można było łatwiej testować podzespoły i wprowadzać współrzędne. Praca została obroniona na 5 więc było warto poświęcić nad tym dużo czasu. Zapraszam do komentowania
  11. Jakiś czas temu zakupiłem sobie ESP32 CAM, niestety nie umiałem dla niej znaleźć jakiegoś sensownego zastosowania. Przeleżała z pół roku a może i więcej, aż wpadłem na pomysł zrobienia foto-pułapki. I tak oto powstała: Po mojej posiadłości często biegają dzikie zwierzęta takie jak: sarny, bażanty, dziki i zające. Te ostatnie to raczej szkodniki ale lecimy z tematem dalej. Założenia: Zapis zdjęć na karcie SD Wysyłka zdjęć na FTP Wysyłka zdjęć na maila jakiś czujnik temperatury praca możliwie jak najdłużej z jednej baterii wspomaganej panelem PV Po ogarnięciu softu na biurku podłączeniu czujnika PIR wszystko ładnie działało. Za zasilanie odpowiada jedno ogniwo 18650, przetwornica podnosząca napięcie do 5V i mały panel PV 6V 167mA. Jak widać powyżej kamera jest przylepiona klejem dwuskładnikowym, tak by uniknąć uszkodzenia tasiemki. Wszystko zostało umieszczone w obudowie po NanoStation Loco M5. Która została dostosowana do zamontowania panelu PV, czujnika PIR oraz kamery. Poniżej etap pasowania elementów. Został również wydrukowany daszek oraz uchwyty dla szyby która osłania kamerę od deszczu. Obudowa Została dodatkowo pomalowana na czarno - ale chyba będę jej robić jakieś malowanie taktyczne, lub pójdzie w ruch “termoglut” i trzcina żeby się lepiej wtapiała w otoczenie. Pierwsze wyjście w teren i klapa, wszystkie zdjęcia były przejaśnione. Po kilku próbach okazało się że kamera potrzebuje 2s! aby dostosować czas ekspozycji, (lekka tragedia bo przy zajączkach to już go może dawno nie być w kadrze) oczywiście w warsztacie wszystko działało jak należy. Następnym nietrafionym pomysłem okazało się wysyłanie zdjęć na maila, trwa to stosunkowo długo a co za tym idzie zużycie energii jest większe, co doprowadziło do rozładowania baterii po 2 dniach. Konieczne było zrezygnowanie z wysyłki zdjęć na maila. W tej chwili kamera działa bez ładowania już 5 dni. Przykładowe zdjęcia z kamery poniżej: Trapi mnie jeszcze jeden problem mianowicie jeśli na zdjęciu jest więcej szczegółów np: cały kadr trzciny lub trawy, to obraz jest obcinany tak około 100-200px z dołu. Nie jest to chyba problem buforu w ESP bo przy kompresji ustawionej w sofcie na 10 zdjęcia zajmują 384KB jeśli zwiększę kompresje zdjęcia zajmują mniej a obraz i tak jest obcinany. Oprócz zdjęć wyzwalanych czujnikiem ruchu, procesor budzi się co 30 min wykonuje zdjęcie i wysyła je na FTP. To aby mieć pewność że bateria nie uległa rozładowaniu. A i jest jeszcze nieszczęsny czujnik temperatury DS18B20, nie było łatwo go tam upchać bo okazało się że wszystkie piny na płytce są wykorzystywane i jedyny wolny pin który mogę wykorzystać to pin serial RX, co niesie za sobą konieczność wypięcia czujnika w razie chęci przeprogramowania układu. Lista wykorzystanych elementów: ESP32-CAM AI-Thinker Przetwornica step-up 5V wraz z modułem ładowania ogniw 18650 Koszyk na ogniwo 18650 Czujnik PIR Mini panel PV 6V 167mA Antena 2.4 Ghz Podsumowując, działa aczkolwiek widać pewne ograniczenia tego układu chociażby czas jaki kamera potrzebuje na uruchomienie się. Z ciekawostek do ESP32 została podłączona zewnętrzna antena, gdzie przetestowany zasięg to około 200 m :), ale pewnie to też zasługa tego że łącze się do AP który mam wystawiony na dworze. Kodu programu pozwolę sobie w tej chwili nie udostępnić bo mam tam niezły bałagan, a jeszcze staram się uporać z obcinaniem fotek, za jakiś czas na pewno go zamieszczę.
  12. Woltomierz, amperomierz, watomierz, termometr, higrometr, barometr, czujnik zewnętrznej termopary, luksomierz w jednym urządzeniu. Projekt typu "weź wszystko co masz pod ręką, podłącz i zaprogramuj, będzie fajnie!" Dane logować można z terminala portu szeregowego (w tym do pliku - Windows/Linux). Wyniki pomiarów prezentowane są również na stronie WWW, a odczyty odświeżają się na żywo dzięki zastosowaniu technologii AJAX. Część do pomiaru prądu przypomina mój poprzedni projekt multimetru, przy czym wykorzystałem dokładniejszy moduł oparty na INA226 zamiast INA219. Podobnie jak tam zasilacz dla mierzonego obwodu podłączamy z boku do gniazda DC, a odbiornik "karmi się" z gniazd bananowych 4 mm. /* I2C D4 - SCL D3 - SDA */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> //#include <Adafruit_INA219.h> #include <INA226.h> //https://github.com/jarzebski/Arduino-INA226 #include <BH1750.h> //https://github.com/claws/BH1750 #include "max6675.h" //https://github.com/adafruit/MAX6675-library #include <LiquidCrystal_I2C.h> char* ssid = "Arduino Multimeter"; //const char *password = ""; //http://github.com/adafruit/MAX6675-library/issues/9#issuecomment-168213845 const int thermoDO = D6; const int thermoCS = D7; const int thermoCLK = D8; ESP8266WebServer server(80); Adafruit_BME280 bme; //Adafruit_INA219 ina219; INA226 ina226; BH1750 lightMeter; MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO); LiquidCrystal_I2C lcd(0x27, 20, 4); unsigned long lastTimeLCD = 0; void setup() { Serial.begin(9600); Wire.begin(D3, D4); Wire.setClock(100000); if (!bme.begin(0x76)) //changed from default I2C adress 0x77 { Serial.println("Nie odnaleziono czujnika BMP085 / BMP180"); while (1) { } } uint32_t currentFrequency; //ina219.begin(); // Default INA226 address is 0x40 ina226.begin(); // Configure INA226 ina226.configure(INA226_AVERAGES_1, INA226_BUS_CONV_TIME_1100US, INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT); // Calibrate INA226. Rshunt = 0.01 ohm, Max excepted current = 4A ina226.calibrate(0.01 * 1.318, 3); lightMeter.begin(BH1750::CONTINUOUS_HIGH_RES_MODE); IPAddress apIP(192, 168, 1, 1); WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // WiFi.softAP(ssid, password); WiFi.softAP(ssid); server.on("/", handleRoot); server.on("/sensors", handleSensors); server.begin(); lcd.begin(); // lcd.backlight(); } void loop() { server.handleClient(); if (lastTimeLCD == 0 || millis() - lastTimeLCD >= 500) { lastTimeLCD = millis(); lcd.clear(); /* lcd.print(ina219.getBusVoltage_V()); lcd.print("V "); lcd.print(ina219.getCurrent_mA()); lcd.print("mA "); lcd.print(ina219.getPower_mW()); lcd.print("mW"); lcd.setCursor(0, 1); */ float volt = ina226.readBusVoltage(); float amp = 1000.0 * ina226.readShuntCurrent(); float power = 1000.0 * ina226.readBusPower(); int lux = lightMeter.readLightLevel(); float tempThero = thermocouple.readCelsius(); float temp = bme.readTemperature(); float hum = bme.readHumidity(); float pres = bme.readPressure(); lcd.print(volt); lcd.print("V "); lcd.print(amp, 1); lcd.print("mA "); lcd.setCursor(0, 1); lcd.print(power, 0); lcd.print("mW "); lcd.print(lux); lcd.print(" lx "); lcd.print(tempThero); lcd.print("C"); lcd.setCursor(0, 2); lcd.print(temp, 1); lcd.print("C "); lcd.print(hum, 1); lcd.print("% "); lcd.print(pres, 0); lcd.print("Pa"); Serial.println(String(volt) + "V " + String(amp, 1) + "mA " + String(power, 0) + "mW " + String(lux) + " lx " + String(tempThero) + "C " + String(temp, 1) + "C " + String(hum, 1) + "% " + String(pres, 0) + "Pa"); } } void handleRoot() { String content = "<html> <head><title>Ardunio Multimeter</title></head><body>"; content += "<DIV style=\"display:table; font-size: large;\"><DIV style=\"border-style: solid;\">BME280:<BR>Temperature: <span id=\"tempBME\"></span>C / <span id=\"tempBMEF\"></span>F<br>Humidity: <span id=\"humBME\"></span>%<br>Pressure: <span id=\"presBME\"></span>Pa<br></DIV><DIV style=\"border-style: solid;\">INA219:<BR>Voltage: <span id=\"voltage\"></span>V<br>Current: <span id=\"current\"></span>mA<br>Power: <span id=\"power\"></span>mW<br></DIV> <DIV style=\"border-style: solid;\">BH1750:<BR>Illuminance: <span id=\"illuminance\"></span>lx</DIV> <DIV style=\"border-style: solid;\">MAX6675:<BR>Temperature: <span id=\"thermocouple\"></span>C / <span id=\"thermocoupleF\"></span>F</DIV></DIV>"; content += "<script>myTimer();var myVar = setInterval(myTimer, 1000);function myTimer() {var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var str = this.responseText; var values = str.split(\";\"); document.getElementById(\"tempBME\").innerHTML = values[0]; document.getElementById(\"tempBMEF\").innerHTML = (values[0]*9/5 + 32).toFixed(2); document.getElementById(\"humBME\").innerHTML = values[1]; document.getElementById(\"presBME\").innerHTML = values[2]; document.getElementById(\"voltage\").innerHTML = values[3]; document.getElementById(\"current\").innerHTML = values[4]; document.getElementById(\"power\").innerHTML = values[5]; document.getElementById(\"illuminance\").innerHTML = values[6]; document.getElementById(\"thermocouple\").innerHTML = values[7]; document.getElementById(\"thermocoupleF\").innerHTML = (values[7]*9/5 + 32).toFixed(2);} }; xhttp.open(\"GET\", \"sensors\", true); xhttp.send();}</script>"; content += "</body></html>"; server.send(200, "text/html", content); } void handleSensors() { //String content = String(bme.readTemperature()) + ";" + String(bme.readHumidity()) + ";" + String(bme.readPressure()) + ";" + String(ina219.getBusVoltage_V()) + ";" + String(ina219.getCurrent_mA()) + ";" + String(ina219.getPower_mW()) + ";" + String(lightMeter.readLightLevel()) + ";" + String(thermocouple.readCelsius()) + ";"; String content = String(bme.readTemperature()) + ";" + String(bme.readHumidity()) + ";" + String(bme.readPressure()) + ";" + String(ina226.readBusVoltage()) + ";" + String(1000.0 * ina226.readShuntCurrent()) + ";" + String(1000.0 * ina226.readBusPower()) + ";" + String(lightMeter.readLightLevel()) + ";" + String(thermocouple.readCelsius()) + ";"; server.send(200, "text/plain", content); } Z zestawem łączy się prymitywna aplikacja napisana w C++. Potrafi zapisywać pomiary do pliku tekstowego i baz danych MySQL oraz SQLite. Jej pracę kończymy w bardzo "brutalny" sposób: Ctrl + C (podobnie, jak w loggerze dla poprzedniego multimetru). Przy pisaniu skorzystałem z poradnika (uwaga, strona zawiera dziwne, procesorożerne skrypty, które mogą nawet zawiesić przeglądarkę, radzę zatrzymać jej ładowanie [przycisk "X"] tuż po otwarciu) Server and client example with C sockets on Linux. Kompilacja: g++ webclient2mysql.cpp -L/usr/lib/mysql -lmysqlclient -l sqlite3 -o webclient2mysql -std=c++17 Jako parametry wywoływanego programu podajemy adres strony www urządzenia z wartościami pomiarów oraz interwał czasu (w sekundach), z jakim mają być zapisywane pomiary, np: ./webclient2mysql http://192.168.1.1/sensors 5 //g++ webclient2mysql.cpp -L/usr/lib/mysql -lmysqlclient -l sqlite3 -o webclient2mysql -std=c++17 //www.binarytides.com/server-client-example-c-sockets-linux/ /* #define DB_USER "" #define DB_PASSWORD "" #define DB_HOST "" #define DB_PORT 3307 #define DB_NAME "" */ #define DB_TABLE_NAME "logeddata" #define DB_SQLite_FILE "database.db" #define LOG_FILE "log.txt" #define CSV_DELIMITER ';' #define CSV_DELIMITER_COUNT 8 //Quantity of delimiters in one CSV row. #include <stdio.h> //printf #include <string.h> //strlen #include <sys/socket.h> //socket #include <arpa/inet.h> //inet_addr #include <unistd.h> #include <netdb.h> #include <iostream> #include <string> #include <vector> #include <chrono> #include <ctime> #include <thread> // std::this_thread::sleep_for #include <regex> #ifdef DB_HOST #include <mysql/mysql.h> //libmysqlclient-dev #endif #ifdef DB_SQLite_FILE #include <sqlite3.h> //sudo apt-get install sqlite3 libsqlite3-dev #endif #ifdef LOG_FILE #include <fstream> #endif const std::vector<std::string> explode(const std::string& s, const char& c); const std::string variables[][2] = { {"temperature", "float"}, {"humidity", "float"}, {"pressure", "float"}, {"voltage", "float"}, {"current", "float"}, {"power", "float"}, {"luminosity", "float"}, {"temperaturethermocouple", "float"}}; int main(int argc, char *argv[]) { if (argc != 3) { puts("Usage: ./webclient device_webpage_URL time_interval"); return 0; } const std::string s = argv[1]; std::smatch match; std::regex rgx("\/\/(.+?)\/"); std::string hostname, port; if (std::regex_search(s.begin(), s.end(), match, rgx)) { hostname = std::string(match[1]); if (hostname.find(":") != std::string::npos) { port = hostname.substr(hostname.find(":") + 1); hostname = hostname.substr(0, hostname.find(":")); } else { port = "80"; } } rgx = "\/\/.+?(\/.+)"; std::string path; if (std::regex_search(s.begin(), s.end(), match, rgx)) path = std::string(match[1]); std::cout << hostname << " " << port << " " << path << "\n"; int sock; struct sockaddr_in server; char server_reply[2000]; #ifdef DB_HOST MYSQL mysql; mysql_init(&mysql); if(mysql_real_connect(&mysql, DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_PORT, NULL, 0)) printf("Connected to database!\n"); else printf("Can't connect to database: %d, %s\n", mysql_errno(&mysql), mysql_error(&mysql)); #endif #ifdef DB_SQLite_FILE char * error = 0; int rc; sqlite3 * db; sqlite3_stmt * steatment; sqlite3_open(DB_SQLite_FILE, & db); #endif #ifdef LOG_FILE std::ofstream myfile; myfile.open(LOG_FILE, std::ios::out | std::ios::app); #endif std::string query; #ifdef DB_HOST query = "CREATE TABLE IF NOT EXISTS " + std::string(DB_TABLE_NAME) +" (ID int NOT NULL AUTO_INCREMENT,"; for(int i = 0; i < sizeof(variables) / sizeof(variables[0]); i++) { query += variables[i][0] + " " + variables[i][1] + ","; } query += "date_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (ID))"; std::cout << query << std::endl; mysql_query(&mysql, query.c_str()); #endif #ifdef DB_SQLite_FILE query = "CREATE TABLE IF NOT EXISTS " + std::string(DB_TABLE_NAME) +"(ID integer primary key,"; for(int i = 0; i < sizeof(variables) / sizeof(variables[0]); i++) { query += variables[i][0] + " " + variables[i][1] + ","; } query += "date_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP)"; sqlite3_exec(db, query.c_str(), 0, 0, & error); // std::cout << error; #endif query = ""; while (1) { //Create socket sock = socket(AF_INET, SOCK_STREAM, 0); if (sock == -1) { printf("Could not create socket"); } puts("Socket created"); server.sin_addr.s_addr = inet_addr(hostname.c_str()); server.sin_family = AF_INET; server.sin_port = htons(stoi(port)); //Connect to remote server if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) { perror("connect failed. Error"); return 1; } puts("Connected\n"); std::string message = "GET " + path + " HTTP/1.1\r\nHost: " + hostname + "\r\n\r\n"; puts(message.c_str()); //Send some data if (send(sock, message.c_str(), strlen(message.c_str()), 0) < 0) { puts("Send failed"); return 1; } std::string httpContent = ""; char cur; while ( read(sock, &cur, 1) > 0 ) { //Receive a reply from the server httpContent += cur; } httpContent = httpContent.substr(httpContent.find("\r\n\r\n") + 4); std::time_t currentTime = std::time(nullptr); std::vector<std::string> results; results = explode(httpContent, CSV_DELIMITER); std::cout << results.size() << "\n"; if(results.size() == CSV_DELIMITER_COUNT){ std::cout << currentTime << " " << httpContent << "\n"; #ifdef LOG_FILE myfile << currentTime << " "; for (int i = 0; i < sizeof(variables) / sizeof(variables[0]); i++){ myfile << " " << results[i]; } myfile << " " << std::endl; #endif query = "INSERT INTO " + std::string(DB_TABLE_NAME) + " ("; for (int i = 0; i < sizeof(variables) / sizeof(variables[0]); i++){ query += variables[i][0]; if(i < sizeof(variables) / sizeof(variables[0]) - 1) {query += ",";} } query += ") VALUES ("; for (int i = 0; i < sizeof(variables) / sizeof(variables[0]); i++){ query += "'" + results[i] + "'"; if(i < sizeof(variables) / sizeof(variables[0]) - 1) {query += ",";} } query += ")"; // query = "INSERT INTO " + std::string(DB_TABLE_NAME) + " (temperature, humidity, pressure" + ") VALUES ("+ "'" + std::string(results[0]) +"'," + "'" + std::string(results[1]) +"',"+ "'" + std::string(results[2]) +"'" +")"; #ifdef DB_HOST mysql_query(&mysql, query.c_str()); #endif #ifdef DB_SQLite_FILE sqlite3_exec(db, query.c_str(), 0, 0, & error); //std::cout << error; #endif } close(sock); std::this_thread::sleep_for(std::chrono::seconds(atoi(argv[2]))); } #ifdef LOG_FILE myfile.close(); #endif #ifdef DB_HOST mysql_close(&mysql); #endif #ifdef DB_SQLite_FILE sqlite3_close( db ); #endif return 0; } const std::vector<std::string> explode(const std::string& s, const char& c) //http://www.cplusplus.com/articles/2wA0RXSz/ { std::string buff{""}; std::vector<std::string> v; for(auto n:s) { if(n != c) buff+=n; else if(n == c && buff != "") { v.push_back(buff); buff = ""; } } if(buff != "") v.push_back(buff); return v; } Podgląd bazy SQLite z wynikami pomiarów (SQLite Browser) Składniki: ESP8266 wyświetlacz LCD 4x20 z konwerterem I2C LCM1602 moduł miernika napięcia i natężenia prądu z magistralą I²C INA226 BME280 czujnik termopary MAX6675 czujnik natężenia światła BH1750 bezpiecznik (zastosowałem PPTC 3A) gniazdo oraz wtyki bananowe 4 mm gniazdo DC 5.5/2.1 mm
  13. Cześć majsterkowicze! Jakiś czas temu zakupiłem konsolę Nintendo Switch, po wielu godzinach frajdy jaką mi dała włączył mi się instynkt majsterkowicza i zrodziła idea zbudowania własnej konsoli. Początkowo rozważałem użycie Raspberry Pi i zbudowanie handheldowego emulatora na Retro Pi. Jednak biorąc pod uwagę, że z zawodu jestem programistą a tam nie miałbym za wiele do "kodzenia" stwierdziłem, że zejdę poziom niżej i spróbuję coś zrobić w oparciu o AtMegę. Zamysł był prosty, stworzyć konsolę na AtMedze z własnym firmware i silnikiem do tworzenia gier a potem zaprogramować na nią jakieś gry. Pod ręką jednak nie miałem żadnego wolnego "odpowiednio mocnego" mikrokontrolera od MicroChipa, więc musiałem się poratować Arduino ProMini z AtMegą 328. Do interakcji z użytkownikiem wykorzystałem TactSwitche (4 jako przyciski kierunkowe, 1 akcji ale rozważam dodanie 2 przycisku akcji aby stworzyć układ znany z klasycznego GameBoya) oraz wyświetlacz OLED 128x64 komunikujący się z Arduino przez I2C. Do tego wszystkiego dołączyłem Buzzer aby dodać efekty dźwiękowe i proste melodyjki Zasilanie całej konsoli odbywałoby się przez stabilizator 7805 z baterii 9V (wiem, że jest niekonieczny przy Arduino ale zostawiłem go na wypadek późniejszej wymiany Arduino na suchą AtMege :D). Poniższy schemat pokazuje nieskomplikowaną budowę konsoli. Jako pierwszą grę stworzyłem klona kultowego Pong ale dla jednego gracza (drugą paletką kieruje sztuczna inteligencja). Kod gry można zobaczyć poniżej: #include <Adafruit_SSD1306.h> #include "engine.h" #define PLAYER_SPEED 50 #define ENEMY_SPEED 80 #define BALL_START_SPEED 40 #define BALL_MAX_SPEED 60 float player_y; float enemy_y; float enemy_movement; unsigned long last_decision; unsigned long last_incrementation; float ball_x; float ball_y; short ball_speed; short ball_motion_x; short ball_motion_y; short player_score; short enemy_score; long currentTime; long oldTime; float deltaTime; void resetBall() { ball_x = 62; ball_y = 30; ball_motion_x = -1; ball_motion_y = 1; ball_speed = BALL_START_SPEED; delay(500); } void gameSetup() { player_y = 22; enemy_y = 22; enemy_movement = 0; player_score = 0; enemy_score = 0; resetBall(); } void gameLoop(short axis_x, short axis_y, bool action) { oldTime = currentTime; currentTime = millis(); deltaTime = (float)(currentTime - oldTime) / 1000; player_y += PLAYER_SPEED * axis_y * deltaTime; enemy_y += ENEMY_SPEED * enemy_movement * deltaTime; // Enemy AI float distance = sqrt(pow(ball_x - 121, 2) + pow(ball_y - enemy_y, 2)); enemy_movement = 0; if (distance > 15 && distance < 100) { if (millis() - last_decision > 50) { if (ball_y > enemy_y + 10) { enemy_movement = 1; } else if (ball_y < enemy_y + 10) { enemy_movement = -1; } last_decision = millis(); } } player_y = constrain(player_y, 0, 44); enemy_y = constrain(enemy_y, 0, 44); // Ball movement ball_x += ball_speed * ball_motion_x * deltaTime; ball_y += ball_speed * ball_motion_y * deltaTime; if (ball_y >= 64 - 4 || ball_y <= 0) { ball_motion_y *= -1; } if (ball_x >= 4 && ball_x <= 7 && ball_motion_x < 0) { if (ball_y > player_y - 4 && ball_y < player_y + 20) { ball_motion_x *= -1; } // Increment ball speed with every successfull bounce if (ball_speed < BALL_MAX_SPEED) { ball_speed++; } } if (ball_x >= 121 && ball_x <= 124 && ball_motion_x > 0) { if (ball_y > enemy_y - 4 && ball_y < enemy_y + 20) { ball_motion_x *= -1; } } // Count score if (ball_x > 128) { player_score += 1; resetBall(); } if (ball_x < 0) { enemy_score += 1; resetBall(); } // Game over condition if (enemy_score > 10) { gameOver(); } // Win condition if (player_score > 10) { playerWins(); } } void gameDraw(Adafruit_SSD1306 display) { display.clearDisplay(); // Draw player display.fillRect(0, player_y, 3, 20, SSD1306_WHITE); // Draw enemy display.fillRect(125, enemy_y, 3, 20, SSD1306_WHITE); // Draw ball display.fillRect(ball_x, ball_y, 4, 4, SSD1306_WHITE); // Draw mid line for (int i = 0; i < 32; i++) { int position = 4 + (4 * (i-1)); display.fillRect(63, position, 2, 2, SSD1306_WHITE); } // Draw score display.setTextColor(SSD1306_WHITE); display.setTextSize(1); display.setCursor(50, 0); display.println(player_score); display.setCursor(72, 0); display.println(enemy_score); display.display(); } Nie jest to "samowystarczalny" kod Arduino, do działania wymaga on jeszcze firmware i silnika do gier, którego ze względu na niedopracowanie nie mogę go teraz pokazać (ale gdy tylko go skończę udostępnię całość na GitHub :D). Kod gry jest banalny. Do grafiki używam biblioteki od AdaFruit. Sztuczną inteligencją kieruje implementacja algorytmu "Chaser" do gry PONG z małymi moimi modyfikacjami (reakcja dopiero w momencie gdy piłka będzie na odpowiednim dystansie oraz opóźnienie reakcji AI aby ją bardziej "uczłowieczyć" i dać jakieś szanse na zwycięstwo graczowi (aczkolwiek i tak z tym cieżko bo czas reakcji bota jest dosyć niski XD, obecnie jest to ok. 50ms. Dla porównania człowiek przeciętnie ma reakcję po ok. 200ms). Gra się kończy gdy jeden z graczy zdobędzie 10 punktów, punkty zdobywamy odbijając piłeczkę tak aby przeciwnik nie mógł jej odbić (gdy piłka "wyleci za paletkę" punkt otrzymuje gracza używający przeciwnej paletki). W silniku brakuje jeszcze wielu rzeczy min. obliczania delta time wewnątrz silnika i przekazywanie wyniku do gry czy bardziej dopracowanego kodu odpowiedzialnego za sterowanie dźwiękiem (w tym prostego "odtwarza" melodyjek zapisanych jako sekwencja dźwięków). Do tego nie ma jeszcze obsługi ekranu końca gry (oraz zwycięstwa) i tak zwane splash screenu przed startem. Jednak gra jest grywalna co można zobaczyć na filmiku na samym dole. Prototyp prezentuje się tak: Jest zbudowany na płytce stykowej (podłączone są na razie tylko dwa przyciski, które są wykorzystywane w grze. Odłączony tak samo jest Buzzer, który na razie odtwarza w pętli trzy dźwięki). W planach jest również stworzenie na drukarce 3D obudowy w tym przeniesienie całego układu na PCB by zrobić z urządzenia pełnoprawną konsole Gdy uda mi się skończyć firmware i silnik w planach mam dalsze wspieranie konsoli tworząc na nią kolejne gry (następne w kolejce są klon Froggera i Tetrisa). Z powodu dodawania kolejnych gier może dojść potrzeba dołączenia dodatkowej pamięci EEPROM lub modułu z kartą SD. (Koncepcja finalnego produktu. Wiem, że artysta ze mnie średni :D) Link do wideo z działaniem konsoli
  14. Każdy zapewne ma rzeczy które chce mieć schowane i zabezpieczone przed ciekawskimi osobami stąd też zrodził się u mnie pomysł na zaadoptowania do tego celu drewnianej skrzynki która stała u mnie od dłuższego czasu zawalając tylko przestrzeń. Przede wszystkim zależało mi na tym by z zewnątrz nie było widać żadnych modyfikacji. Poza skrzynką wykorzystałem arduino nano, shielda do nano, serwomechanizmu no i oczywiście modułu RFID, jako zasilania użyłem akumulatora Li-Pol. MECHANIKA Co do samej skrzynki to ma ona wymiary: 9,5 cm szerokości, 13 cm długości i 8 cm wysokości. Grubość w każdym miejscu wynosi 8 mm. Z przodu jest zamykana na prosty bardziej ozdobny niż przydatny zamek. Całe zamknięcie jest oparte na serwomechanizmie który podobnie jak wszystko inne jest przyklejony . Haczyk przykręcony do serwomechanizmu blokuje się w razie nieautoryzowanego otwarcia zaczepia o kawałek wystającej deski. ELEKTRONIKA Wszystkie wymienione wyżej elementy elektroniczne połączyłem za pomocą przewodów połączeniowych jedynie złącze od akumulatora jest przylutowane do shield dla arduino nano. KOD #include <SPI.h> #include <MFRC522.h> #include<Servo.h> #define SS_PIN 10 #define RST_PIN 9 MFRC522 rfid(SS_PIN, RST_PIN); const byte poprawna_karta[] = {0x47,0x35,0x8E,0x7A}; Servo myservo; void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); myservo.attach(5); myservo.write(0); delay(2000); myservo.write(70); } void loop() { if ( ! rfid.PICC_IsNewCardPresent()) return; if ( ! rfid.PICC_ReadCardSerial()) return; if (rfid.uid.uidByte[0] == poprawna_karta[0] || rfid.uid.uidByte[1] == poprawna_karta[1] || rfid.uid.uidByte[2] == poprawna_karta[2] || rfid.uid.uidByte[3] == poprawna_karta[3] ) { myservo.write(0); delay(2000); myservo.write(70); }else{ myservo.write(70); } rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } FILM DZIAŁANIE Działanie kodu polega na odszukaniu karty(22 linijka), odczytaniu(24 linijka), porównaniu odczytanego z karty kodu z tablicą poprawna_karta[] i otwarcie w przypadku dobrej karty lub dalsze zamknięcie w przypadku złej. Wbrew pozorom zawartość skrzynki jest bardzo bezpieczna z czterech powodów, po pierwsze nikt nie zwraca uwagi na starą skrzynkę leżącą w tym samym miejscu od kilku lat(nie tak jak w przypadku nowej zupełnie skrzynki), po drugie nie widać śladów modyfikacji zwiększającej bezpieczeństwo(tak jak w przypadku tradycyjnego zamka) a także karta RFID(choć w moim przypadku bryloczek) można łatwo schować no i w końcu trudność otwarcia zamka nie posiadając karty. Jedyną wadą jest to że można lekko odchylić wieko jednak to kwestia spasowania haczyka.
  15. Witam Tak jak napisałem w temacie mam problem z obsługą 2rf24l01 a dokładnie po kilku godzinach prób nie udało mi się uruchomić ani jednego programu na Arduino nano. Czy moglibyście coś mi doradzić w związku z tymi modułami ? Dodam że przylutowałem kondensatory 3.3µF. Poniżej wklejam jeden z przykładów jaki próbowałem zastosować. Nadajnik #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> int przycisk = 7; const uint64_t pipe = 0x1CF8361637LL; RF24 radio(7, 8); int stan; void setup() { pinMode(przycisk,INPUT); radio.begin(); radio.openWritingPipe(pipe); } void loop() { stan = digitalRead(przycisk); radio.write(&stan, sizeof(int)); / } Odbiornik #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> const uint64_t pipe = 0x1CF8361637LL; int dioda = 8; RF24 radio(7, 8); int stan; void setup() { pinMode(dioda,OUTPUT); delay(1000); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available()) { radio.read(&stan, sizeof(int)); if(stan == 0) { digitalWrite(dioda,HIGH); }else digitalWrite(dioda,LOW); } }
  16. Pięć lata temu miałem termometr avt. Zepsuł się po roku więc kupiłem kolejny, kolejny też się zepsuł. Pół roku temu postanowiłem zrobić termometr na arduino. Termometr cały czas udoskonalam. Obecnie posiada cztery czujniki : jeden czujnik DS18B20, Czujnik wilgotności i temperatury DHT11, Dwa czujniki temperatury i wilgotności DHT22. Pozostałe rzeczy, które użyłem to: Wyświetlaczem 4x20 znaków Konwerterem i2C LCD Moduł RTC DS3231 Koszyk na baterie AA do podtrzymania zegara Dwie baterie AA Czujnik ruchu Arduino uno Początkowo nie wiedziałem jak zapisać godzinę i datę w pamięci modułu RTC więc całość posiadało akumulator 12v 7Ah po to by godzina i data była prawdziwa a nie odczytywana z kodu po podaniu zasilania. Nie posiadał w tedy też czujnika ruchu więc posiadał włącznik, którym włączało się podświetlenie LCD. W tym momencie posiadał tylko trzy czujniki temperatury DS18B20 oraz jeden DHT11. Teraz termometr włącza się gdy ktoś przed nim się poruszy, mierzy temperaturę maksymalną i minimalną z każdego z czujników. Oraz posiada zasilacz 12V 1A. Całość umieściłem w obudowie z sklejki 6 mm pomalowanej szarą farbą. Z przodu znajduje się wyświetlacz, czujnik ruchu oraz dioda informująca że termometr oczekuje na ruch wyłącza się jeśli ktoś przednim się poruszy i włączy się wyświetlacz. Po lewej stronie znajduje się czujnik DHT22 mierzący temperaturę w pokoju. Specjalnie oddaliłem go od obudowy, żeby wynik był jak najbardziej prawidłowy. Na arduino wytrawiłem płytkę moją wytrawiarką do PCB (ma się dobrze i ostatnio dorobiłem do niej pompkę powietrza) są do niej podłączone wszystkie rzeczy. Czujniki które są poza pokojem jeden na zewnątrz DS18B20 i DHT11 drugi na dole DHT22 są podłączone przez złącze RJ45 do arduino. Do modułu RTC na miejsce fabrycznej baterii przylutowałem koszyczek na baterie AA ponieważ zegar na fabrycznej baterii wytrzymał 4 miesiące. Temperatury maks. i min. wyświetliłem na osobnym ekranie. Od lewej Strzałki oznaczają temperaturę minimalną i maksymalną oraz jest ona wyświetlana najpierw minimalna potem maksymalna. Galeria pozostałych ekranów: Dziękuję za przeczytaniem oraz liczę na komentarze.
  17. Witam chciałem zbudować kroczącego robota na arduino i pojawił się problem wyczuwaniem podłoża przez nogę robota czy da się zrobić to poprzez pomiar prądu pobieranego przez serwo? Jeżeli da się to proszę o podpowiedź jak to zrobić i ewentualnie czego użyć.
  18. Witam serdecznie. Kupiłem do testów zawór elektromagnetyczny 12V - 3/4'' - SparkFun ROB-10456 ze sklepu Botland. Do wzmocnienia napięcia użyłem przetwornicę step-up XL6009 regulowaną 4V-35V 3A . I tak, jeśli wepnę przewody do pinów 5V i GND, napięcie wyjściowe jest ok. 4.86V i takie dochodzi do przetwornicy . Zostaje wzmocnione do ok 12V, chociaż zawór działa prawidłowo już przy niecałych 9V i wszystko jest OK. Ustawiam stan wysoki na pinie 8 i napięcie wyjściowe jest 4.88V. Na wejściu przetwornicy jest już tylko 2.90V (???) a na wyjściu aż 17.69V, czasami wartość mniejsza niż na wejściu np. wejście 2.60V, wyjście 2.30V i regulacja potencjometrem nic nie daje. Jednak po zmniejszeniu napięcia wyjściowego elektrozawór nie działa. Przy tym wysokim napięciu słychać ciche puknięcie w cewce, jednak po zmniejszeniu napięcia do wartości rzędu 8-12V, zawór nie podnosi się. Po ponownym podłączeniu do pinu 5V i wyregulowaniu napięcia na przetwornicy, znów wszystko działa poprawnie. Dlaczego???? Chcę programować otwarcie i zamknięcie elektrozaworu (docelowo trzech), jednak tą metodą nie działa. Proszę o pomoc, w co należy wyposażyć układ, aby było możliwe zasilenie elektrozaworu z pinów cyfrowych? Dodam, że wszystko ma być zasilane z Arduino jednym zasilaczem 7V 1A.
  19. Cześć, pewnego razu na spotkaniu ze znajomymi okazało się, że na hasło „polej” nikt nie zareagował. Wtedy zrodził się pomysł, aby zaradzić takim przykrym sytuacjom w przyszłości postanowiłem stworzyć robota do nalewania alkoholi wysokoprocentowych. Z założenia robot miał nalewać alkohol do każdego kieliszka jaki się postawi oraz miał być zasilany przy pomocy baterii. Pierwsze prototypy zawierały prostą elektronikę opartą na czujnikach i przekaźnikach – jestem laikiem oraz samoukiem w kwestiach elektroniki. Projekty nie spełniały oczekiwań, ponieważ w normalnym użytkowaniu zawodziły. Około rok temu natknąłem się na Arduino i zacząłem pogłębiać swoją wiedzę w tym kierunku. Wydruki 3D wykonałem na swojej drukarce. Robot spełnił założenia. Poprzez zastosowanie czujnika ultradźwiękowego jest w stanie nalać do każdego kieliszka, a potencjometrem można ustawić ilość nalewanej wódki w zakresie około 10 - 50ml. Do zasilania użyłem 8 akumulatorów AA. Wykonałem obudowę z kilku elementów żeby mieć lepszy dostęp do podzespołów. Rynienka na pompce została stworzona po zalaniu układu... z wyciekiem sobie poradziłem ale dla pewności została Części których użyłem do budowy: Płytka stykowa 170 pól - 1 szt Stabilizator L7805CV 5V 1,5A – 1 szt Ultradźwiękowy czujnik odległości HC-SR04 2-200cm – 1szt Potencjometr liniowy 1K – 1 szt Wtyk DC 2,1/5,5mm z zaciskami skręcanymi – 1 szt Pompa membranowa - silnik R385+ - 12V - 3W - mini pompa wodna – 1szt Moduł sterownika L298N do silników DC – 1 szt Przełącznik kołyskowy 15x10mm – 1 szt Koszyk na baterie 8xAA (R6) – 1 szt Arduino Nano – 1 szt Uniwersalny Proto Shield do Arduino Nano – 1 szt Serwo TowerPro MG-995 – 1szt. Zawór zwrotny – 2szt. Moduł dioda LED RGB 5050 wspólna katoda – 1 szt. Magnesy neodymowe 10x5 – 8 szt Przycisk monostabilny – 1 szt. Rurka sylikonowa – 0,5m Rezystory Przewody połączeniowe Aby "polewacz" był mobilny jego elementy zaprojektowałem tak, aby zmieściły się w drewnianej skrzyni 30x20x15cm.
  20. Witam chciał bym zaprezentować , drugą "lepszą wersję " kierownicy do komputera opartej na Arduino Leonardo. Film pokazujący jak dziala kierownica i Force Feedback: Jest to wersja elektronicznie taka sama jak poprzednia, wszystko opisane wcześniej link do poprzedniej tutaj : W tej wersji zmieniłem obudowę na znacznie mniejszą , lżejszą , łatwa do zamocowania przy stole, biurku itp. Obudowa została wykorzystana z kupionej przeze mnie za 50 zł kierownicy Logitech Formula Force Ex o obrocie 180* i Force Feedback. Dzięki temu że kierownica miała już przekładnie i ogólnie jest prosta w budowie , bardzo łatwo i tanio można ją przerobić tak aby miala kąt skrętu taki jak ustawimy sobie w programie np 720*,900* i Force Feedback do tego kąta obrotu. Tutaj link do gotowego software na Arduino Leonardo , od razu mówię że na Arduino Uno nie zadziała , link do pobrania w opisie filmu: Ja zrobiłem to tak: Na początku przez środek starej przekładni , dodałem pręt gwintowany o średnicy 10mm ,do którego z jednej strony mocowana jest kierownica, a z drugiej enkoder z drukarki canon ip2770. Aby zamocować enkoder musiałem wyciąć dziure jak widać na zdjęciu poniżej : Aby enkoder nie tarł o blat , dodałem plastikowe podkładki : A tak wygląda już gotowa sama kierownica: Wyjścia enkodera i do silnika , zostały przerobione na standardowych wyjściach które były w kierownicy i wchodzą do dodatkowej skrzynki w której znajduje się reszta elektroniki czyli w sumie tylko Arduino Leonardo i sterownik silników BTS7960: Jeszcze pedal box został przerobiony na taki aby miał 3 jednakowe pedały więc musiałem dokupić drugie takie same i wyciąć jeden i dokleić tak jak na zcjeciach . Schemat podłączenia wszystkiego w linku do wcześniejszej wersji. Efekt końcowy (pedały jeszcze stare): To by było na tyle , jeśli czegoś ktoś potrzebuje , śmiało pisać
  21. Witam, Zrobiłem proste urządzenie które prowadzi uchwyt spawalniczy (TIG) po linii prostej (Arduino nano + l297 + silnik DC 12V). Jednak pojawił się duży problem z zakłóceniami powstającymi podczas zajarzenia łuku elektrycznego. Według mnie źródła tych zakłóceń są 3. - Cewka elektrozaworu wypuszczającego gaz. - Układ HF do bezstykowego zajarzenia łuku (generator wysokiej częstotliwości który powoduje przeskakiwanie "iskierek" z igły na spawany metal). - Moment w którym łuk elektryczny zostaje zajarzony. Przechodząc do sedna. Arduino nano uszkadza się trwale po 2-3 błyskach spawarki (w odległości około 50 cm od łuku elektrycznego i 50cm od spawarki). Zastosowałem więc obudowę plastikową oklejoną dwiema warstwami folii aluminiowej i podłączyłem ten "ekran" do masy układu. Teraz arduino nie pada tak szybko ale resetuje się przy każdym zajarzeniu łuku (i tylko wtedy). Podczas ciągnięcia spawu wszystko jest ok. Moje pytanie: czy ma sens zastosowanie dodatkowej obudowy z blachy 5mm i podłączenie jej do masy układu? Czy grubość zastosowanej obudowy ma znaczenie dla odporności układu na zakłócenia. Zaznaczę że bez zajarzania spawu wszystko działa prawidłowo, więc zakłócenia wewnątrz obudowy odpadają. Przewód od sterownika do sinika (około 200cm) zastosowałem ekranowany z jednego końca ekran podłączyłem do masy, a konkretnie do ekranu obudowy. Urządzenie ma pracować przez jeden dzień więc nie chcę się bawić w projektowanie płytki itd. Dlatego też zastanawiam się czy będzie miało sens poświęcenie czasu na konstrukcję obudowy z grubej stali. Z góry dziękuję za pomoc.
  22. Witam chciałem przedstawić wam mój projekt który ostatnio zbudowałem jest to prosta ręka robota oparta o 3 serwach sg90 są to proste serva modelarskie pozwalające na precyzyjne ruchy oraz są stosunkowo tanie. do sterowania układem zastosowałem Arduino Uno Rev3 ale może być to każdy inny moduł, w moim projekcje zastosowałem również moduł bluetooth, przydadzą się również płytka stykowa i kable połączeniowe. Dodatkowo postanowiłem wykonać pudełko drewnianych patyczków. Cały projekt przedstawia się następująco: Teraz trochę o podłączeniu Same podłączenie nie powinno stanowić problemu. Trzeba jednak pamiętać, że pin TX na arduino do pinu RX na module bluetooth a RX do TX Uwaga!!! jeśli macie płytkę Arduino Uno musicie podłączyć konwerter napięć gdyż posiada ono informacje na 5V a moduł bluetooth przyjmuje 3,3V ale możecie drobić taki z dwóch rezystorów przestawiony po niżej, ważne by te rezystory wynosiły minimum 10kΩ Dzielnik napięć Schemat projektu Kod projektu #include<Servo.h> // dodajemy bibliotekę do sterowania serwomechanizmem Servo servo; Servo servo2; // twożymy 3 obiekty klasy servo Servo servo3; void setup() { Serial.begin(9600); //rospoczynamy komunikację z prętkością 9600 botów servo.attach(2); servo2.attach(3); servo3.attach(4);// podpisujemy serva pod odpowiednie piny servo3.write(0); // ustawiamy servo 3 do poziomu startowego } char cmd[100]; byte cmdIndex; // przechwytujemy znaki z telefonu void execmd(){ if(cmd[0] =='a') // dla indeksu a wykonujemy poniższe polecenia { unsigned int val = atof(cmd+2); servo.write(val); // w zależności od zmiennej z indeksem a obracamy servem } if(cmd[0] =='b') { unsigned int val = atof(cmd+2); servo2.write(val); } if(cmd[0] =='c') { servo3.write(180); } if(cmd[0] =='d') { servo3.write(0); }} void loop() { if(test==0){ if(Serial.available() >0) { char c =(char)Serial.read(); if (c == '\n') { cmd[cmdIndex]=0; execmd(); cmdIndex=0; }else{ cmd[cmdIndex]=c; if(cmdIndex<99){cmdIndex++;} } } } } Aplikacja Do obsługi ramienia użyłem aplikacji RoboRemoFree jest to darmowa aplikacja ze sklepu play poniżej przesyłam konfigurację tej aplikacji Myślę ze każdy może wykonać taki projekt nie jest to trudne a nauczy nas trochę o samej komunikacji bluetooth z arduino. PS. jest to mój 1 post tutaj więc jeśli ktoś ma jakieś sugestię lub uwagi to był bym wdzięczy z konstruktywną krytykę
  23. Witam, jest to mój pierwszy wpis na tym forum dlatego witam wszystkich bardzo serdecznie. Swoją przygodę z Arduino zacząłem około 5 lat temu, przez ten czas udało mi się zgromadzić wiele czujników, modułów oraz rozwinąć się w dziedzinie programowania i elektroniki. Dodam jeszcze, że wszystko to traktuję jako jedno z wielu hobby, które w "zdrowy" sposób zapełnia mój wolny czas. To tyle o mnie Dawno temu zakupiłem moduł akcelerometru GY-521 oparty o scalak MPU-6050, przeleżał dość długo nieużywany (właściwie nigdy nie sprawdzony) aż niedawno nadszedł czas na praktyczne jego wykorzystanie. Do obsługi tego modułu posłużyłem się gotową biblioteką znalezioną na blogu pana Korneliusza (jarzebski.pl) adres: https://github.com/jarzebski/Arduino-MPU6050. Po załadowaniu biblioteki wziąłem się do podłączenia modułu z płytką Arduino Nano. Scalak z modułu pracuje pod napięciem 3,3V, jednak zamontowany jest w nim stabilizator napięcia stąd został podłączony bezpośrednio pod 5V z Arduino. W module piny SDA i SCL są "fabrycznie" podciągnięte na płytce rezystorami 2,2kΩ pod 3,3V. Jako że I2C w Arduino działa w konfiguracji otwarty dren zrezygnowałem z konwertera stanów logicznych podłączając bezpośrednio piny A5 i A4 do akcelerometru. Reasumując podłączenie wygląda w sposób następujący: 5V -> VCC GND -> GND A4 -> SDA A5 -> SCL Nadszedł czas na pierwszy program, był to gotowy przykład z wyżej wymienionej biblioteki MPU6050_gyro_pitch_roll_yaw gdyż idealnie nadawał się do krótkiej modyfikacji i zmontowania układu już na gotowo. Po wgraniu i przetestowaniu byłem bardzo mile zaskoczony stabilnością działania tego modułu gdyż wszystkie wartości wyświetlane na SerialMonitorze odpowiadały rzeczywistości. W pełni zadowolny wziąłem się za szybką modyfikacje, która polegała na tym, że gdy moduł zostanie odchylony o co najmniej 5 stopni w jednej z trzech osi to zostanie uruchomiony alarm. Wszystko przebiegło bez żadnych problemów, program działa bardzo stabilnie ale... tylko wtedy kiedy jest podłączony do komputera przez USB a na SerialMonitorze wyświetlam wartości kąta odchylenia. Nie mogę pojąć tego ewenementu i nie mam pojęcia co robię źle. Sytuacja wygląda tak, zamówiłem nowy, taki sam moduł - efekt ten sam, wgrałem program na inna płytkę Nano - problem ten sam co wcześniej, zamieniłem Nano na Uno - nic to nie zmieniło. Po wielu godzinach spędzonych na szukaniu odpowiedzi w internecie oraz rozmyślaniu o rozwiązaniu i kolejnych próbach uruchomienia stwierdziłem, że sprawdzę czy moduł cokolwiek "mówi" do Arduino kiedy komputer "nie patrzy". Nie posiadam oscyloskopu więc wymyśliłem bardzo prosty test z diodami. Moduł leży poziomo: kiedy obrót w prawo - uruchamia prawą diodę, kiedy w lewo - lewą. Tu problem był dokładnie taki sam, kiedy Arduino wpięte jest do komputera i uruchomiony jest SerialMonitor to działa bez zarzutu, bardzo stabilnie. Kiedy uruchamiane jest z powerbanka, czy to z gniazda DC baterią 9V (w przypadku UNO) czy chociażby przetwornicą DC DC ustawioną na 7,5V wpiętą pod Vin to diody przy obrocie nie świecą albo wariują. Dodam też, że po wpięciu płytki Arduino do komputera w przypadku, w którym to nie uruchamiam SerialMonitora, raz działa a raz nie, z SerialMonitorem za każdym razem działa poprawnie. Na obecną chwilę skończyły mi się pomysły, próbowałem kompilacji na różnych wersjach AdruinoIDE, wywalałem z kodu cały Serial do komunikacji z komputerem i nic. Czy ktoś z was spotkał się z takim problemem z modułem GY-521? Bardzo proszę o pomoc lub sugestie. Pozdrawiam
  24. Dzisiaj próbowałem nauczyć się sterować kilkoma funkcjami jednym przyciskiem za pomocą "switch case" i coś mi nie wyszło. Z założenia program po wciśnięciu przycisku miał zapalać diodę, gasić ją po 2 sekundach .Po kolejnym przyciśnięciu przycisku zapalać następną diodę , gasić po 2 sekundach i tak dalej... Zamiast tego diody same zapalają się i gasną po kolei . Z góry dziękuje za odpowiedzi. szkic programu: #define przycisk 6 #define led1 7 #define led2 8 #define led3 9 #define led4 10 byte x = 0; void setup (){ digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led4,LOW); pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); pinMode(led4,OUTPUT); pinMode(przycisk,INPUT_PULLUP); } void loop(){ if(digitalRead(przycisk == LOW)){ switch(x){ case 0: digitalWrite(led1,HIGH); delay(2000); digitalWrite(led1,LOW); x=1; break; case 1: digitalWrite(led2,HIGH); delay(2000); digitalWrite(led2,LOW); x=2; break; case 2: digitalWrite(led3,HIGH); delay(2000); digitalWrite(led3,LOW); x=3; break; case 3: digitalWrite(led4,HIGH); delay(2000); digitalWrite(led4,LOW); x=0; break; } }else{ digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led4,LOW); } }
  25. Cześć, Jestem tu nowy i zielony w te klocki dlatego proszę Was o pomoc i wyrozumiałość. Słyszałem że jak podepnę Arduino Uno złączem DC to z jednego pinu Digital mogę uzyskać do 30mA ale jeśli zasilę Arduino przez Vin będę mógł budować układy które wymagają większego natężenia. Moje pytanie brzmi jak podłączyć Arduino przez Vin? Czy potrzebuje jakiś dodatkowych elementów ? Posiadam zasilacz 12v 1A czy taki zasilacz się nada do zasilania przez DC i Vin ? Jestem na etapie kupowania czujników, przewodów, diod led itp więc chciałbym od razu kupić wszytko za jednym razem jeżeli okazało by się że coś potrzebuje do tego zasilania Arduino. A.. i jeszcze jedno, kupuje też tranzystory, kondensatory- zestawy (różnych po trochu) i znalazłem też zestaw rezystorów (wiem że ludzie używają je jak coś budują z Arduino albo jak się porostu uczą- nie wiem jeszcze co to robi i jest to dla mnie dziwne, ale z czasem to ogarnę ) czy możecie zobaczyć czy ten zestaw na wasze oko jest spoko jak na początek ? link do tego zestawu --> https://abc-rc.pl/product-pol-12082-Zestaw-tranzystorow-bipolarnych-NPN-PNP-200szt.html czy może taki --> https://allegro.pl/oferta/zestaw-180-sztuk-tranzystorow-bipolarnych-pnp-npn-8591976509 Dzięki za odp.
×
×
  • Utwórz nowe...