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 - 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 10 wyników

  1. 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ć?
  2. 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.
  3. 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 }
  4. 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 :)
  5. 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.
  6. 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 ...
  7. 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.
  8. 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...
  9. 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...