Skocz do zawartości

Przeszukaj forum

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

  • Szukaj wg tagów

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

Typ zawartości


Kategorie forum

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

Kategorie

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

Szukaj wyników w...

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


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

  1. Cześć, Napisałem program zajmujący się włączaniem pina przy określonej temperaturze oraz włączanie drugie pina o pewnej godzinie oraz pewnej wadze (moduł HX711). Problem wygląda tak, że kiedy w programie mam wykrywanie czasu i wprowadzenia alarmu to arduino przestaje wykrywać temperaturę i wypisuje ją równą -127 stopni. Kiedy usuwam linijki kodu z void setup oraz void loop związane z alarmem i zegarem arduino zaczyna wykrywać poprawna temperaturę. Biblioteki których użyłem do termometru są z kursu, a bibliotek której użyłem do alarmu to https://github.com/jarzebski/Arduino-DS3231. Czy jest coś co mogę na to poradzić? Oczywiście mój zamysł to włączanie funkcji pomiaru wagi o określonych godzinach wiec zmiana biblioteki i programu wchodzi w gre. #include <OneWire.h> #include <DallasTemperature.h> #include <DFRobot_HX711.h> #include <Wire.h> #include <DS3231.h> DS3231 clock; //Bibiloteka Zegar RTCDateTime dt; //Zmienna do odczytu DFRobot_HX711 MyScale(A2, A3); //Waga OneWire oneWire(A5); //Bibiloteka DallasTemperature sensors(&oneWire); //Bibilioteka Termometr //Przypisanie Termometrów DeviceAddress termometrZew = { 0x28, 0xFF, 0x48, 0x5A, 0x7C, 0x18, 0x1, 0xCC }; DeviceAddress termometrWod = { 0x28, 0xFF, 0x48, 0xA, 0x79, 0x18, 0x1, 0x21 } ; int i = 0; //Zmienna do Termometru int w = 0; //Zmianna do wagi void setup(void) { Serial.begin(9600); sensors.begin(); //Inicjalizacja czujnikow clock.begin(); //Inicjalizacja Zegara // Reset oraz wyłączenie alarmu clock.armAlarm1(false); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); pinMode(8, OUTPUT); pinMode(7, OUTPUT); //Ustawienie Alarmów clock.setAlarm1(0, 16, 0, 0, DS3231_MATCH_S); clock.setAlarm2(0, 23, 0, 0, DS3231_MATCH_S); } void loop(void) { //CZĘŚĆ ODPOWIEDZIALNA ZA PODGRZEWANIE WODY sensors.requestTemperatures(); //Pobranie temperatury czujnika //Wyswietlenie informacji (do weryfikacji czy termometry działają za pomoca aplikacji Arduino IDE) Serial.print("Temperatura otoczenia "); Serial.println(sensors.getTempC(termometrZew)); Serial.print("Temperatura wody "); Serial.println(sensors.getTempC(termometrWod)); Serial.print(MyScale.readWeight(), 1); Serial.println(" g"); //Pomiar tempertaury int Zew = sensors.getTempC(termometrZew); int Wod = sensors.getTempC(termometrWod); //Załączenie pina odpowiedzialnego za grzałke if (i == 0) { digitalWrite(8,LOW); }; if (Zew <= 15 && Wod <= 8) { i++; }; if (i > 0) { digitalWrite(8,HIGH); if (Wod >= 12) { digitalWrite(8,LOW); i = 0; } } //CZĘŚĆ ODPOWIEDZIALNA ZA PODAWANIE KARMY dt = clock.getDateTime(); //Odczytywanie daty int Waga = MyScale.readWeight(); //Pomiar wagi if (w == 0) { digitalWrite(9,LOW); }; //Załączanie wyjścia silnika za pomocą alarmów if (clock.isAlarm1()){ if (Waga < 200) { w++; }; } if (clock.isAlarm2()){ if (Waga < 200) { w++; }; } if (w > 0) { digitalWrite(9,HIGH); if (Waga >= 800) { digitalWrite(9,LOW); w = 0; } } delay(1000); }
  2. Dz ień dobry🙂Chciałbym się dowiedzieć czy mogę zasilać z baterii 9V plytkę arduino UNO i silniki 5V? Robięaktualnie projekt z dwoma silnikami i plytka arduino, chcę to zasilac z jednej bateri 9V i chcę to zrobić tak że podłączę do bateri plytkę i stabilizatory napięcia ktore z 9v beda robic 5v (dla silnikow) a stabilizatory do tranzystorow a tranzystory do plytki i silnikow. (Bede sterował napieciemdla silnikow poprzez płytkę) 😀
  3. - dzieci zasypiają z włączonym oświetleniem globusa Albi. - fakt że pobiera tylko 2.5 W mocy ale po co ma się świecić całą noc. - dorobimy "timer" na 30 minut a potem deep sleep Uno. - poniżej wersja beta programu, ma te zaletę że działa u mnie. // 2023.12.14, bubu321, working // // piny PWM 3,5,6,9,10,11 // analogWrite(pins, dutyCycle); // dutyCycle 0..255 // pin PWM #include <avr/sleep.h> #define pins 9 unsigned long int czas15min = 1800000; // 1.800.000 30 minut unsigned long int czas30sek; int dutyCycle = 255; // -------------------------- subroutine --------------------------- // -------------- void enterSleep() { set_sleep_mode(SLEEP_MODE_PWR_DOWN); analogWrite(pins, 0); sleep_enable(); // attachInterrupt(digitalPinToInterrupt(2), wakeUpNow, LOW); sleep_mode(); /* The program will continue from here. */ /* First thing to do is disable sleep. */ // sleep_disable(); // detachInterrupt(digitalPinToInterrupt(2)); } // ----------------------------------------- setup -------------------- void setup() { Serial.begin(250000); Serial.println("start"); Serial.println(czas15min); pinMode(13, OUTPUT); analogWrite(pins, dutyCycle); // czas15min = millis(); // 15 minut; } // ------------------------------------------ loop -------------------------- void loop() { if (millis() > czas15min ) { Serial.println("sleeping ..."); delay(500); enterSleep(); // Enter sleep method! } digitalWrite(13, HIGH); delayMicroseconds(100); digitalWrite(13, LOW); delayMicroseconds(1000 - 100); if (millis() > czas30sek) { dutyCycle -= 10; czas30sek = millis() + 60000; // co 60 sekund if (dutyCycle < 10) dutyCycle = 0; Serial.println(dutyCycle); Serial.println(millis()); } analogWrite(pins, dutyCycle); } // ------------- end ---------------- -
  4. Witam, posiadam dodatkowy wentylator od komputera (https://www.x-kom.pl/p/1131748-wentylator-do-komputera-endorfy-stratus-120-pwm-argb-120mm.html?gclid=Cj0KCQjw0bunBhD9ARIsAAZl0E17QlbeqJtevHRTiTL8x16SQjVjJxtv2IF8n47ChcsvsJAKe0gPOYgaAq8xEALw_wcB) Chciałbym podłączyć go do arduino uno R3, niestety nie wiem jak się za to zabrać. Nie mam pojęcia za co są odpowiedzialne piny wentylatora (4 piny) a tym bardziej RGB (3piny), bo w sieci znajduje tylko 4 pinowe RGB. Jeśli macie pomysł jak zabrać się za ten projekt to będę wdzięczny za odpowiedź.
  5. Nie mogę wgrać żadnego programu na płytkę. Najpierw ładuje się bardzo długo a potem wywala błąd avrdude: stk500_recv(): programmer is not responding i temu podobne zaczynające się na avrdude: . Wszystko szło bardzo dobrze robiłem już drugą część kursu arduino aż pewnego dnia nic nie mogę wgrać. próbowałem już zmiany kabla, prze instalowanie arduino, tak port jest wybrany dobry, uruchomienie arduino jako administrator i uruchomienie portu szeregowego (zawiesiło mi komputer i nie mogę teraz zamknąć tego okienka), przytrzymywanie przycisku reset podczas wgrywania na płytkę(zdaje się że wywaliło wtedy trochę inny błąd) mam podejrzenia co do botloadera ale na razie nie mam odpowiedniego kabla żeby wypalić na nowo proszę o pomoc bo zbliża się turniej robotyki a ja jestem z nie działającą płytką😧
  6. Więc mam taki problem Ostatnio kupiłem do Arduino zasilacz impulsowy 12v, ale po podłączeniu Arduino mocno się grzeje i śmierdzi spalonom elektroniką. Zasilacz szybko odłączyłem bo nie chce nic uszkodzić. Nie wiem co się dzieje jak ktoś chce mogę wysłać zdjęcie Arduino, dać link do zasilacza. Posiadam klona Arduino więc może z nim jest coś nie tak. Jakby ktoś potrzebował to spróbuję znaleźć link do niego.
  7. Cześć Mam problem, ponieważ nie potrafię uruchomić tego shielda (DFR0125) na moim Arduino UNO. Znalazłem w internecie kilka sposobów na uruchomienie tej nakładki, ale niestety w moim przypadku nic nie zadziałało. Układ jaki jest na płytce to Wiznet w5100s. Po wgraniu standardowego przykładu "WebServer" z biblioteki Arduino otrzymuję komunikaty wychodzące na porcie szeregowym po zaprogramowaniu. Mam wrażenie, że problem jest w wyborze pinu dla 'CS', ale to tylko moje zdanie.... Może komuś się udało to uruchomić i mógłby się podzielić rozwiązaniem, albo nakierować gdzie leży problem? Płytka oryginalna, kupiona w pewnym sklepie internetowym PS. Widziałem info, że należy podmienić plik "W5100.cpp". Zrobiłem to, ale niestety dalej bez pozytywnego rezultatu....
  8. cześć, potrzebuje pomocy z programem do sterowania rębaka no stress. Większość kodu zrobiłem lecz coś nie działa program i nie mam pomysłu co jest nie tak. program ten ma za zadanie po wykryciu 3000 obrotów RPM włączyć przekaźnik sterowania silnikiem do przodu, lecz gdy obroty spadną do 1000 ma on włączyć na 0,5s przekaźnik silnika do tyłu i go zatrzymać. Po osiągnięciu obrotów 3000 ma on od nowa uruchomić silnik do przodu. pin awaria - wyłącznik bezpieczeństwa(wyłącza oba silniki) zmienna walek - włączanie wyłączanie silnika do przodu prowizorycznie RPM zmieniam wartością zmiennej //#define czujnik 2 // - w projekcie obrotomierz jest jako RPM //#define walek 6 //(OPCJONALNIE) czy jest wlaczony walek #define awaria 5 // wyłącza posów #define cewkaPrzod 3 // przekaznik wlaczajacy posow w przod #define cewkaTyl 4 // przekaznik wlaczajacy posow w tyl int RPM = 3001; int a = 0; bool walek; void setup(){ //pinMode(czujnik, INPUT_PULLUP); //pinMode(walek, INPUT_PULLUP); // wlaczyc jesli jest czujnik wałka pinMode(awaria, INPUT_PULLUP); pinMode(cewkaPrzod, OUTPUT); pinMode(cewkaTyl, OUTPUT); } void loop(){ walek = false; if(walek == true){ digitalWrite(cewkaPrzod, HIGH); } if(walek == false){ digitalWrite(cewkaPrzod, LOW); } walek = false; digitalWrite(cewkaTyl, LOW); //digitalWrite(cewkaPrzod, LOW); while(digitalRead(awaria) == HIGH){ if(a == 0 && RPM < 1000) { walek = false; digitalWrite(cewkaTyl, HIGH); delay(500); digitalWrite(cewkaTyl, LOW); a = a + 1; } if(RPM > 3000){ walek = true; a = 0; } } }
  9. Witam, zwracam się do wszystkich praktykujących o pomoc, jak w temacie, ws. kodu w Arduino. Jak większość początkujących miłośników programowania w Arduino i ja zacząłem od czujnika temperatury. Z uwagi na bardzo znikomą ilość mojej wiedzy, po wielu tygodniach poszukiwań rozwiązania do mojego projektu, już wiem że programowanie nie jest takie proste jak się wydawało. A szukanie gotowego rozwiązania to jak szukanie przysłowiowej igły w stogu siana. Pewnie wszyscy powiecie, że nie tędy droga. Tak, trochę się z tym zgadzam i choć drogi są różne to ważne żeby dotrzeć do celu. A cel jest taki, żeby dodać przycisk, który "wyłącza/włącza" buzzer po przekroczeniu konkretnej temperatury - tylko po to, żeby nie "hałasował". I tu dodatkowo rozwinę o co chodzi z tym "włącza/wyłącza" buzzer. Po przekroczeniu danej temp. włącza się alarm (buzzer) a wciśniecie przycisku (coś typu mikrostyk) wyłącza dźwięk, kolejne wciśnięcie włącza dźwięk i tak w kółko pod warunkiem że nadal jest przekroczona temp. - trochę takie sprawdzenie czy dalej alarm jest włączony. Oczywiście, kiedy alarm nie jest włączony, wciśnięcie przycisku nie daje żadnej reakcji. Poniżej dotychczasowy kod jaki udało się wykonać (bez przycisku). #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 4 #define BUZZER 7 #define LED 8 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { pinMode(8,OUTPUT); pinMode(7,OUTPUT); Serial.begin(9600); Serial.println("Dallas DS18B20. Pomiar Temperatury."); sensors.begin(); } void loop(void) { Serial.print("Temperatura: "); Serial.print(sensors.getTempCByIndex(0)); sensors.requestTemperatures(); // Polecenie, aby uzyskać odczyty temperatury Serial.println(); delay(500); if (sensors.getTempCByIndex(0) >= 27) //Jeśli czujnik wskaże temp >27 stopni Celcjusza { digitalWrite(8, HIGH); //Włącz diodę tone(7, 1000, 100); // Uruchom brzęczyk delay(150); tone(7, 1000, 100); delay(150); tone(7, 1000, 100); delay(150); } if (sensors.getTempCByIndex(0) < 27) //Jeśli czujnik wskaże temp <27 stopni Celcjusza { digitalWrite(8, LOW); //Wyłącz diodę } } Z góry dziękuję wszystkim udzielającym rad, rozwiązań i innych propozycji do powyższego projektu. Pozdrawiam.
  10. Ten projekt będzie zliczał otwarcie szafki za pomącą kontaktronu i wyświetlał liczbę otworzeń. Do tego projektu potrzebujemy: Wyświetlacz LCD 2×16, Płytkę stykową, Przewody połączeniowe męsko-męskie, Arduino, Kontaktron, Potencjometr 5k, Projekt składamy zgodnie z poniższym schematem: Teraz pora na napisanie kodu. Mój wygląda tak: #include <LiquidCrystal.h> LiquidCrystal lcd(2, 3, 4, 5, 6, 7); int otworzenie = 0; #define kontaktron 8 int otwarcieP/F = 0; //narazie nie uzywana void setup() { digitalWrite(kontaktron, OUTPUT); lcd.begin(16,2); } void loop() { if(digitalRead(kontaktron) == HIGH && otwarcieP/F == 0) { otworzenie = otworzenie + 1; otwarcieP/F = otwarcieP/F + 1; }else if(digitalRead(kontaktron) == LOW && otwarcieP/F == 1) { otwarcieP/F = otwarcieP/F - 1; } lcd.setCursor(0, 0); lcd.print ( otworzenie); lcd.setCursor(0, 1); lcd.print("razy."); delay(1000); } Wgrywamy i potencjometrem regulujemy kontrast. Uwaga: Zamiast przycisku użyłem kontaktronu. Można też tak zrobić gdy się chcę mieć zliczanie otwarcia np. szafki, a nie naciśnięcia przycisku. Autor: Szymon, klasa 3 SP, 2021 ( Utworzenie).
  11. Witam! Wpadłem ostatnio na pomysł, aby Arduino wykonało kod zawarty w pliku zapisanym na karcie SD. Chciałbym móc zapisywać np. jakąś prostą gierkę na SD. Coś na kształt cartridge do gier. Moje pytanie brzmi: Jak to zrobić? Czy wgl da się to zrobić? A jak się nie da to propozycje innego rozwiązania mile widziane 😁 Z góry dziękuję za pomoc. Miłego dnia!
  12. Cześć wszystkim, Obecnie staram się skonstruować urządzenie dokonujące pomiarów stężenia tlenu (maksymalny zakres: 30%). Wybrałem odpowiednie komponenty, jednak nie jestem pewien czy całość zadziała. Potrzebuję rady osoby, która nieco bardziej zna się na Arduino, w porównaniu do mnie (początkującego) aby oceniła przygotowane przeze mnie bardzo uproszczone schematy 🙂 Zadaniem urządzenia, tak jak wspomniałem wcześniej, jest dokonywanie pomiarów stężenia tlenu. W momencie wykrycia stężenia większego niż 21,5% tlenu w atmosferze powinien uruchomić się buzzer: sygnał ostrzegawczy. Wyniki pomiarów mają wyświetlać się na ekranie LCD, zaś całość będzie zasilana baterią 9V. Dane pozyskam podłączając urządzenie do laptopa według 10 lekcji kursu Arduino, poziom I [Link], tak aby móc przedstawić uzyskane wyniki w postaci wykresów. Zależy mi na tym czy dane komponenty są odpowiednio podłączone. Dzięki temu będę mógł przejść do pisania kodu. Wykorzystane komponenty: - Arduino Uno R3 - Nakładka na Arduino: Base Shield v2 https://botland.com.pl/grove-nakladki-bazowe/4440-grove-base-shield-v2-nakladka-na-arduino-5904422368852.html - Czujnik tlenu https://botland.com.pl/grove-czujniki-gazow-i-pylow/17917--grove-czujnik-tlenu-mix8410-analogowy-.html - Buzzer https://botland.com.pl/grove-moduly-dzwiekowe/11298-grove-buzzer-modul-z-buzzerem-aktywnym-5903351246453.html - Wyświetlacz LCD https://botland.com.pl/grove-wyswietlacze/14736-grove-wyswietlacz-lcd-2x16-i2c-bialo-niebieski-z-podswietleniem-5904422322465.html Mam również pytanie co do wyboru zasilania. Czy zwykła bateria 9V wystarczy do pracy takiego urządzenia? W jaki sposób można to ewentualnie obliczyć? Z góry dziękuję za pomoc osobom chętnym 👍 Pozdrawiam, Wojciech (Wejmon) Ciecierski
  13. Zapraszamy do współpracy osoby, posiadające doświadczenie w pracy z Arduino, pasjonujące się nowoczesnymi technologiami i lubiącymi pracę z dziećmi. Robocode to młoda, progresywna firmą, oferująca szkolenia dla dzieci i młodzieży w wieku od 8 do 16 lat w zakresie robotyki, programowania i myślenia projektowego 🚀 🤖 W związku z otwarciem pierwszej w Katowicach szkoły poszukujemy nauczycieli/instruktorów zajęć, pragnących rozwijać ją razem z nami! Nauczyciel w Robocode odpowiada za: Przeprowadzanie zajęć w interesujący i zrozumiały sposób, Znalezienie wspólnego języka z dziećmi, Śledzenie trendów innowacji w IT, Bieżącą współpracę z menedżerem szkoły i zespołem. 😎 Instruktor Robocode jest ekspertem, przyjacielem i mentorem, więc jeśli czujesz, że chodzi o Ciebie, jeśli lubisz dzielić się wiedzą oraz jesteś aktywną, dobrze zorganizowaną i nastawioną na rozwój osobą, dołącz do nas! Zapewniamy niezbędne materiały oraz szkolenia dla efektywnej pracy i rozwoju Twoich kompetencji, proponujemy system podwyższenia stawki początkowej. Wymiar pracy dostosowany jest do Twojej dyspozycyjności. Brzmi interesująco? A w rzeczywistości wygląda jeszcze ciekawiej! 📩 📩 📩 Osoby zainteresowane prosimy o przesłanie CV z aktualną klauzulą RODO oraz kilku zdań o sobie na adres poland.robocode@gmail.com. Więcej o nas przeczytać można na stronie robocode.pl. Czekamy na Ciebie w naszym super zespole! 😊
  14. 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.
  15. Witam wszystkich!!! W poprzednim artykule przedstawiłem swoją wizję platformy Arduino UNO opartej o procesor ATmega 328 THT. Wizja nie do końca doskonała, choć dla mnie na chwilę obecną wystarczająca. Chciałem teraz, aby to było coś wyróżniającego się na tle klonów tej platformy. Coś z powiewem świeżości, nowego!!!. Bo nie sztuką jest zrobić klon 1:1 i to tylko aby zbić cenę a nieraz wykonanie niektórych klonów pod względem jakości jak i działania pozostawiało wiele do życzenia. Pierwsza wersja mojego urządzenia była tak naprawdę tylko wstępem do tego co teraz zamierzałem zrobić, co tym bardziej zachęciło mnie do zrobienia ostatecznej wersji mojego urządzenia. Wersji, która uważam zawiera ciekawe rozwiązania, których mi osobiście brakowało a na pewno znajdą się osoby, które myślą podobnie. Bo czym jest poświęcenie jednej ATmegi, której koszt wynosi mniej niż 10 PLN aby na stałe była zaprogramowana jako programator ISP , dzięki czemu możemy swobodnie wgrywać bootloader do drugiej wymiennej ATmegi, nie używając do tego dedykowanego shielda lub łącząc układ na płytce stykowej. Wygodnie prawda?. Możliwość podłączenia dowolnego konwertera, którego koszt nieraz jest mniejszy niż procesor ATmega 16U2, który dodatkowo trzeba zaprogramować lub inny układ odpowiadający za komunikację. A jako, że takie konwertery są tanie to opłaca się kupić kilka sztuk na tak zwaną "czarną godzinę" lub gdy mamy kilka projektów, które z nich korzystają. Na początku kilka słów samokrytyki!!! Pewne rozwiązania były zrobione na szybko. Owszem działały jednak na przykład: przełączanie zasilania z USB na zasilacz za pomocą przekaźników ogólnie nie jest idealne jak w oryginalnej platformie. Szczerze dla mnie osobiście to akurat było bez znaczenia gdyż tu sugerowałem się posiadanymi przeze mnie elementami oraz tym, że mi osobiście reset procesora nie przeszkadzał w momencie przełączania zasilania z USB za zasilacz i odwrotnie, ale jednak względem oryginalnej platformy, funkcjonalność ta znacznie odbiegała. Tak więc skoro moja wizja ma dorównać a docelowo być lepsza od oryginału i jego klonów, zatem działanie pewnych elementów urządzenia musi być takie samo. Poniżej kilka zdjęć nowej wersji MWuinoUNO-rev3.1 W przedstawionej przeze mnie wersji zrezygnowałem z użycia konwertera, a komunikację z procesorami wykonałem z użyciem układu FTDI232RQ. W plikach urządzenia, przygotowałem łącznie cztery wersje urządzenia. Plik do pobrania jest na końcu artykułu. Pierwszą wersję Rev3.1, którą aktualnie będę przedstawiał z użyciem FTDI 232RQ. Drugą wersja Rev3.2, także z użyciem FTDI232RQ, z tym, że zastosowany jest wydajniejszy stabilizator dla linii 5V - LM340MP-5.0/NOPB o wydajności prądowej 1,5A. Kolejne dwie wersje Rev4.1 oraz Rev4.2 gdzie do komunikacji możemy wykorzystać konwerter, tak jak miało to miejsce w prezentowanej jakiś czas temu pierwszej odsłonie mojego urządzenia, z tym że podobnie jest podobnie jak w Rev3.2, Rev4.2 ma wydajniejszy stabilizator dla linii 5V. Powstanie dodatkowych Rewizji 3.2 oraz 4.2 było podyktowane innymi rolami wyprowadzeń stabilizatora dla linii 5V - LM340MP-5.0/NOPB niż ma stabilizator NCP1117ST50T3G. Zatem obu tych stabilizatorów nie można używać zamiennie w tym przypadku. Podsumowując!!! Poprawiłem pewne niedostatki z wersji pierwszej wprowadzając odpowiednie modyfikację. Przejrzałem dostępne klony platformy UNO R3 z ATmegą 328 THT oraz ciekawe rozwiązania zaadaptowałem w swojej wersji urządzenia oraz dodałem drobne funkcje od siebie. Poniżej zdjęcia prezentujące pierwszą wersję urządzenia MWuinoUNO Rev.1 oraz aktualna prezentowana wersja MWuinoUNO Rev3.1 Uważam, że wszystko jest jak należy i więcej nic nie potrzeba dodawać. Urządzenie jest zbliżonych rozmiarów względem oryginału, a oferuje znacznie więcej niż oryginalna platforma lub jej klony. najważniejszą zaletą jest wygoda!!! W końcu dla hobbystów jak i amatorów wyeliminowanie pewnych rzeczy, które mogą nas irytować uważam że jest ważne. W końcu dla mnie elektronika oprócz zarabiania na życie to pasja, a ta raczej powinna nam zapewnić spokój i skupienie się na tym co robimy. Wiadomo, że nie jesteśmy w stanie wszystkiego przewidzieć, ale zawsze możemy próbować eliminować pewne niedogodności z tym związane. Przejdźmy zatem do omówienia mojego projektu. Porównajmy teraz moją wersję platformy Uno z oryginalną i jej wiernie wykonanymi klonami. Najważniejsze różnice są przedstawione poniżej: Cecha: UNO R3 oraz klony 1:1 MWuinoUNO Rev3.1 MWuinoUNO Rev3.2 MWuinoUNO Rev4.1 MWuinoUNO Rev4.2 Napięcie pracy 5V 5V/3,3V 5V/3,3V 5V/3,3V 5V/3,3V Jumper Bootloader Nie Tak Tak Tak Tak Złącze USB USB B micro USB micro USB nie dotyczy-brak nie dotyczy-brak Włącznik zasilania Nie Tak Tak Tak Tak Wyjście 3,3V* Prąd 150mA Prąd 300/500mA Prąd 300m/500mA Prąd 300/500mA Prąd 300/500mA Wyjście 5V Prąd 1A Prąd 1A Prąd 1,5A Prąd 1A Prąd 1,5A Oscylator Ceramiczny Kwarcowy Kwarcowy Kwarcowy Kwarcowy Wgrywanie bootloaderów Tylko z użyciem shielda Tak Tak Tak Tak lub podłączonego układu na płytce stykowej Sterownik USB ATmega16U2 FT232RQ FT232RQ UART/RS232 TTL UART/RS232 TTL konwerter konwerter Sterowanie diodą (L) wzmacniacz operacyjny MOSFET BSS138 MOSFET BSS138 MOSFET BSS138 MOSFET BSS138 *- Montujemy jeden z dwóch stabilizatorów w zależności od naszych potrzeb. Ze względu na to, że ich wyprowadzenia pełnią taką samą rolę można ich używać zamiennie. W prezentowanej wersji zamontowany jest stablizator o wydajności 300mA, gdyż 500mA na chwilę zamawiania elementów do montażu, nie był dostępny. Napięcie pracy: 5V/3,3V Przełącznik konfiguracji napięcia 3,3V/5V: ustala jakim napięciem jest zasilany mikrokontroler a tym samym z jaka logiką pracuje cały system, do wyboru 3,3V lub 5V. Jumper Bootloader: W trybie ON płytka się zresetuje po podłączeniu napięcia zasilania lub portu USB. W trybie OFF : program zapisany ruszy natychmiast po podłączeniu zasilania, płytka nie zresetuje się po podłączeniu portu USB do PC. Złącze USB: Możliwość użycia popularnego mniejszego kabla micro USB używanego w większości smartphonów, itp. Włącznik zasilania: Aby odłączyć urządzenie od zasilania nie trzeba już wyciągać wtyczki z gniazda. Można to zrobić włącznikiem ON/OFF. Wyjście 3,3V: MWuinoUNO zapewnia wyższą wydajność prądową stabilizatora 3,3V. Wyjście 5V: MWuinoUNO w Rev3.2 oraz Rev4.2 zapewnia wyższą wydajność prądową stabilizatora 5V. Oscylator: Rezonator kwarcowy zapewnia wyższą dokładność taktowania. Wgrywanie bootloaderów: W MWuinoUNO wystarczy do podstawki IC2 włożyć czysty procesor i wykonując odpowiednie czynności wgrać bootloader. Sterownik USB: Układ FT232 w MWuinoUno jest wspierany w każdym popularnym systemie operacyjnym lub wersja bez układu komunikacji FT232, gdzie możemy podłączyć dowolny konwerter UART/RS232 TTL. Sterowanie diodą (L): Sterowanie diodą LED w UNO i klonach podyktowane jest oszczędnością a tym samym wykorzystaniem drugiego wzmacniacza operacyjnego gdyż LMV358 zawiera dwa wzmacniacze. To zastosowanie ma pewne wady takie jak, że wzmacniacz operacyjny nie przenosi pełnego pasma sygnału CLK. Tak więc jasność LED nie będzie dobrze oddawała pinu CLK. Lepiej do tego celu nadaje się tranzystor, który steruje LED-em. Tranzystory MOSFET są sterowane napięciowo, więc podobnie jak wzmacniacz w konfiguracji wtórnika emiterowego, nie obciąża sygnału z pinu CLK. Tutaj też się przyznam, że większość z rozwiązań są skopiowane. Po przejrzeniu klonów platformy UNO wybrałem te użyteczne. Fakt faktem nie było tego dużo, więc wybrałem prawie wszystkie. Moje rozwiązania to tak jak w pierwszej odsłonie projektu zintegrowanie programatora ISP, dzięki, któremu możemy wgrywać bootloader do wymienialnego procesora IC2. Urządzenie posiada także sygnalizację zasilania z USB diodą LED. Rozwiązanie to niesie ze sobą dodatkową korzyść. Jak widać na schemacie załączonym w pliku: MWuinoUNO.zip - na przykład Rev3.1. Dioda LED USB jest sterowana stanem niskim wzmacniacza operacyjnego, pełniącego rolę komparatora. Generalnie do porównywania napięć przeznaczone są do tego celu komparatory. Jako, że nie mam ostatnio czasu bawić się w eksperymenty zastosowałem coś co jest sprawdzone i działa choć tutaj zastosowałem wzmacniacz, który był użyty w poprzedniej wersji do sterowania dioda użytkownika (L). Dobierając wtedy ten wzmacniacz patrzyłem pobieżnie na pewne parametry, ale zaryzykowałem i przy okazji postanowiłem zobaczyć czy się sprawdzi. No i jak widać wszystko działa dobrze. Teraz napiszę na czym polega dodatkowa korzyść z zastosowania diody LED USB oraz jej sterowania z wyjścia wzmacniacza. Rozwiązanie ze wzmacniaczem w roli komparatora jest skopiowane. Przeanalizujmy najpierw działanie wzmacniacza operacyjnego (IC10) w roli komparatora. Opis ten odnosi się do rev3.1 oraz 4.1, gdzie rezystory R18,R19 dzielnika napięć mają jednakową wartość rezystancji-10k. Zatem: Napięcie z zasilacza (VIN) jest podane na dzielnik napięcia złożonego z rezystorów R18, R19 o wartości 10 kOhm każdy, który działa w proporcji 1:2. Napięcie mierzone przez wzmacniacz (na wejściu nieodwracającym +) jest na rezystorze R19 dzielnika i jest porównywane z napięciem wzorcowym 3,3V mierzonym na (wejściu odwracającym -) wzmacniacza, które pochodzi z dodatkowego stabilizatora (IC5). Więc jeśli napięcie zasilania (VIN) jest równe lub nieco wyższe od 6,6V, tranzystor T1 nie jest sterowany z wyjścia wzmacniacza i tym samym nie przewodzi. Dioda LED USB nie świeci i do zasilania całego urządzenia wykorzystywany jest zasilacz. Najprościej rzecz ujmując: Napięcie na rezystorze R19 osiąga wartość 3,3V przy napięciu zasilania równym lub nieco wyższym od (VIN)=6,6V. Wyjście wzmacniacza operacyjnego sterującego tranzystorem T1 i diodą LED USB jest w stanie wysokim przez co tranzystor ten nie przewodzi oraz nie świeci dioda LED USB, co informuje nas, że do urządzenia podłączone jest zewnętrzne zasilanie, które także zasila nam całe urządzenie. Tutaj kluczowa jest też wartość napięcia zasilacza ze względu na minimalną wartość napięcia zasilania stabilizatora 5V. Standardowy stabilizator zastosowany w UNO i niektórych jego klonach na wejściu potrzebuje minimum 6,5V aby na jego wyjściu napięcie stabilizowane, którym zasilane są wszystkie podzespoły urządzenia, wyniosło 5V. W przypadku zastosowania stabilizatora LM340MP-5.0/NOPB minimalne napięcie zasilania tego stabilizatora wynosi 7,5V. Zatem aby urządzenie przełączało nam zasilanie z USB na zasilacz i tym samym aby mieć napięcie 5V na wyjściu tego stabilizatora, musimy zmienić wartość jednego z rezystorów dzielnika napięcia tak aby przy napięciu zasilania z zasilacza - 7,5V na rezystorze R19, napięcie wynosiło 3,3V. Zatem od czego najpierw zaczynamy. Z poniższego rysunku, (aby było nam łatwiej ustalić parametry dzielnika) widzimy, że musimy ustalić: Spadki napięć "UR18", "UR19" na rezystorach, prąd "Ir" płynący przez rezystory naszego dzielnika oraz wartość rezystancji "R18". Pierwszym krokiem będzie ustalenie rozkładu napięcia VIN na poszczególnych rezystorach dzielnika. Jako że wejście nieodwracające (+) wzmacniacza jest podłączone pomiędzy R18 a R19 to znaczy, że wzmacniacz mierzy napięcie na R19. Wiemy, że napięcie na R19 ma wynieść 3,3V przy napięciu zasilania VIN=7,6V. Zatem UR19=3,3V Znając napięcie na R19 Obliczymy teraz spadek napięcia jaki musi być na R18. Wystarczy, że od napięcia VIN odejmiemy napięcie na R19 UR18=VIN-UR19=6,7V-3,3V=4,3V. Zatem spadek napięcia na R18 wynosi 4,3V. Jak widać napięcie VIN jest sumą spadków napięć na poszczególnych rezystorach naszego dzielnika zatem: VIN=UR18+UR19=4,3V+3,3V=7,6V. Ustalamy wartość jednego z rezystorów dzielnika. Jest to istotne aby obliczyć prąd płynący przez dzielnik. Dla ułatwienia wybrałem R19 i niech będzie miał on wartość 10k. Jak widać dzielnik napięcia to po prostu połączone ze sobą dwa rezystory szeregowo. Cechą szeregowego połączenia rezystorów jest to, że płynie przez nie ten sam prąd "Ir". Zatem znając wartość rezystora R19 i spadek napięcia na nim, możemy obliczyć prąd "Ir" płynący przez oba rezystory, korzystając z prawa Ohma I=U/R zatem Ir=UR19/R19=3,3V/10k=0,33mA Z kolei znając wartość prądu płynącego przez rezystory R18, R19 dzielnika oraz spadek napięcia na R18, znów korzystając z prawa Ohma po przekształceniu wzoru I=U/R do postaci R=U/I, obliczmy rezystancję rezystora R18. Zatem R18=UR18/Ir=4,3V/0,33mA=13k Jak widzimy nasz rezystor R18 ma wartość 13k Jak widzimy w tym przypadku wyliczenie wartości potrzebnego nam rezystora jest bardzo łatwe. Dzięki temu nasz układ przełączając się z zasilania USB na zasilacz dostarczy do stabilizatora odpowiednio wysokie napięcie na jego wejście, aby na wyjściu tego stabilizatora uzyskać napięcie 5V potrzebne do zasilania podzespołów naszego urządzenia, a my dzięki diodzie LED USB będziemy wiedzieć czy tak się stało. Właśnie to jest ta zaleta. Oczywiście aby to działało sprawnie musimy obserwować diodę USB oraz ustawić odpowiednią wartość napięcia zasilania na zasilaczu. Po podłączeniu zasilania z zasilacza powinna zapalić się zielona dioda LED PWR, a niebieska USB zgasnąć. Musimy pamiętać, że zasilacze wtyczkowe regulowane przełącznikiem, mają podane na sztywno zakresy przełączanych napięć a nie wszyscy mogą wiedzieć że stabilizator aby dać napięcie 5V na wyjściu, musi mieć podane na wejście konkretną wartość napięcia. Najważniejsze, żeby pamiętać aby nie przekroczyć maksymalnego napięcia zasilania dla stabilizatora, aby tym samym go nie uszkodzić oraz innych elementów naszego urządzenia. W zależności od modelu stabilizatora, napięcie jego zasilania może mieć inną wartość. Jeżeli po podłączeniu zasilacza dioda LED USB nie zgaśnie może się okazać, że nasz zasilacz podaje zbyt niskie napięcie niż jest potrzebne do przełączenia się urządzenia z zasilania USB na zasilanie z zasilacza, a tym samym podania na wejście stabilizatora odpowiedniej wartości napięcia, aby na jego wyjściu uzyskać 5V. Będziemy też wiedzieć czy zasilacz jaki zastosowaliśmy ma odpowiednie napięcie aby zasilić nasze urządzenie. Aby ułatwić sprawę napiszę jaką wartość napięcia zasilania można podać dla danego typu stabilizatora: -stablizator NCP1117ST50T3G 5V, 1A. Producent napisał, że maksymalne napięcie wejściowe to max 20V. Natomiast minimalne to 6,5V -stabilizator LM340MP-5.0/NOPB 5V, 1,5A Producent napisał, że maksymalne napięcie wejściowe to max 35V. Natomiast minimalne to 7,5V Jak też widać pomimo, że mechanizm przełączania zasilania jest identyczny jak w platformie uno i jej klonach, to trochę podrążyłem temat co przedstawiłem powyżej. Być może komuś te informacje okażą się przydatne przy projektowaniu własnego urządzenia z użyciem dzielnika napięcia. Dodanie do obwodu diody led oraz podstawowa wiedza na temat stabilizatorów oraz dzielnika napięcia z zastosowaniem wzmacniacza operacyjnego w roli komparatora, dała nam przydatną funkcję, dzięki której wszystkie elementy urządzenia, jak i te które przyłączymy do niego, będą zasilane odpowiednią wartością napięcia. Podsumowując dzięki diodzie LED USB wiemy, czy nasze urządzenie przełączyło się na zasilanie zewnętrzne (zasilacz) tym samym przełączenie to nastąpiło w momencie, kiedy nasz zasilacz ma odpowiednią wartość napięcia potrzebną do zasilenia stabilizatora, aby ten na wyjściu dał napięcie 5V potrzebne z kolei do zasilania podzespołów urządzenia oraz elementów do niego podłączonych. W największym skrócie - jak widać zależność napięcia wejściowego "VIN" (zasilacz), do którego podłączony jest stabilizator, do napięcia wyjściowego "UR19", które steruje wzmacniaczem operacyjnym w roli komparatora, którego rolą jest przełączanie źródła zasilania jest uzależniona od wartości rezystancji dzielnika napięcia. Znając wartość napięcia potrzebnego do zasilenia stabilizatora oraz fakt, że przy tej wartości napięcie na wyjściu dzielnika ma wynieść 3,3V dobieramy odpowiednią wartość rezystorów dla tego dzielnika. Dodam jeszcze, że zrezygnowałem z połączeń pomiędzy dwoma procesorami na liniach MISO, MOSI, SCK za pośrednictwem diod, tak jak to miało w pierwszej odsłonie urządzenia. Okazało się, że w przypadku linii MISO i MOSI jest to zbędne i urządzenie działa bez problemu. Inaczej jest w przypadku lini SCK, ale tutaj zastosowałem rozwiązanie z poziomu hardware niż softu. Jako, że miałem zamówionych więcej układów analog. MUX/DEMUX, to wolałem użyć go do połączenia pinów SCK procesorów IC1 i IC2 niż bawić się w modyfikację kodu. Efekt działania w końcu jest ten sam tylko metoda prowadząca do tego efektu inna. Kolejną rzeczą choć może mniej istotną jest możliwość uśpienia programatora ISP. Jeżeli na przykład drażnią kogoś świecące się diody led. Co mi rzadko ale bywa, że przeszkadza, szczególnie jak nie używamy programatora ISP aktualnie go do wgrywania bootloderów. Oszczędzanie energii w tym przypadku nie jest specjalnie duże (około 50mA), choć z drugiej strony lepiej mieć mniej niż wcale, szczególnie gdzie port USB ma wydajność 500mA. Aby aktywować uśpienie programatora naciskamy najpierw switch S1-RESET, a następnie przez chwilę przytrzymujemy S6-IC1 SLEEP. Diody: PMODE, HBEAT, ERROR powinny na chwilę zamrugać, a następnie razem z diodami BTLDR i PROGR nie powinny się zapalić. Wtedy programator jest uśpiony. W zależności od potrzeb i upodobań danego użytkownika, przygotowałem kilka różnych wersji zmodyfikowanego sketcha ArduinoISP. Mamy do dyspozycji z przytrzymywaniem switcha S2-SELECT na czas wgrywania bootloadera, z trybem uśpienia jak i bez, oraz bez przytrzymywania switcha S2-SELECT bez funkcji uśpienia. W tej wersji urządzenia, zaraz po zmontowaniu potrzebujemy 1szt. procesora z wgranym już bootloaderem, który będzie pełnił rolę programatora ISP - IC1. Najlepiej niech to będzie ATmega8, ze względu na fakt, że jest to do dziś najtańszy procesor oraz ilość pamięci jaką posiada jest wystarczająca do wgrania skecza ArduinoISP. Sam skecz wykorzystuje około 60% pamięci tego procesora. W poprzedniej wersji urządzenia aby wgrać skecz ArdunoISP, trzeba było najpierw ten procesor umieścić w podstawce IC2. Teraz można umieścić go bezpośrednio w podstawce IC1, dzięki czemu nie ma konieczności przekładania go - niekiedy dość upierdliwa czynność. Po włożeniu procesora do podstawki IC1, zakładamy zworkę na piny IC1PROGR. Zapala na się dioda LED IC1-PROGR. Włączamy środowisko Arduino IDE. O tym jak powinno być ono skonfigurowane dla danej wersji procesora i jak wgrać skecz do procesora opisałem w artykule: https://forbot.pl/forum/topic/19357-mwuinouno-bootloader-programmer-i-arduino-w-jednym/ Aby ułatwić szukanie opisu wgrywania skeczy, szukamy podtytuł (pogrubiona czcionka) "Tak więc:" i w tekście poniżej-siódma linijka tekstu, od zdania zaczynającego się od słów "Dla przykładu". Oczywiście zamiast switcha S2 używamy switch S1 i podstawka IC2 używamy IC1. Tutaj jak widać procesor IC1 musimy zresetować ręcznie switchem S1. Na początku myślałem aby to było robione z układu FTDI232RQ, ale w sumie nikt nie będzie często przeprogramowywał tego procesora ewentualnie raz na jakiś czas o ile zajdzie taka potrzeba, a obwód to raz, że więcej elementów, niepotrzebny koszt i stopień komplikacji urządzenia. Chyba lepsze jest aktualne rozwiązanie. Łatwiej jest raz na jakiś czas przed programowaniem nacisnąć przycisk reset niż bawić się w przekładanie procesora z podstawki do podstawki. Gdybyśmy nie mieli zworki tylko przewód połączeniowy, to jeden koniec przewodu podłączamy do pinu VCC a drugi do pinu złącza IC1PROGR oznaczonego kropką. Oczywiście dla urządzenia z układem FTDI232RQ. w momencie wgrywania skecza do procesora IC2 przed wgraniem następuje jego RESET jak to ma miejsce w platformie UNO i jej klonach. W przypadku wersji wymagającej podłączenia zewnętrznego konwertera jest to uzależnione właśnie od posiadanego przez nas konwertera, czy może on resetować procesor przed wgraniem skecza. Zatem jak widać bazowałem przede wszystkim na rozwiązaniach niespotykanych w oryginalnej platformie, a niektórych klonach tej platformy. Mimo wszystko jest też kilka moich pomysłów oraz co najważniejsze i trudne to zaprojektować PCB tak aby te rozwiązania mogły być zintegrowane oraz samo urządzenie możliwie zbliżone do wymiarów oryginalnej platformy UNO. Jak widać wiązało się to z pewnymi zmianami takimi jak inny układ pinów gniazd procesora IC2. Nie podłączymy co prawda do nich shieldów czyli nakładek zwiększających możliwości naszego urządzenia, lecz dzięki bliskości tych złącz, łącząc układ na płytce stykowej powinny nam wystarczyć przewody jednakowej długości, aby wykorzystać wszystkie piny procesora. Wiedzmy też, że prócz shieldów możemy też kupić funkcjonalne moduły na mniejszych PCB niż zaprojektowane shieldy i przy pomocy przewodów połączeniowych podłączyć je do urządzenia. Tak więc pomimo niestandardowego układu wyprowadzeń, dalej jesteśmy w stanie zbudować potrzebne nam urządzenie. Niewielką rekompensatą tego rozwiązania jest umieszczenie dodatkowych złączy w wersji męskiej. Dzięki czemu możemy stosować przewody połączeniowe z końcówka męską lub żeńską. Jednak postanowiłem jeszcze oprócz samego urządzenia i korzystając z tego, że JLCPB ceny są dość atrakcyjne, zaprojektować trzy nakładki do swojego urządzenia. Pierwsza "adapter shield" to nakładka, która umożliwia przejście z niestandardowego układu pinów mojej wersji platformy uno, na układ pinów zgodny z oryginalną platformą, dzięki czemu można używać dedykowanych shieldów. Zauważyłem, że niektóre shieldy mają dodatkowo złącze ICSP w wersji żeńskiej do podłączenia, jako że nie posiadam takiego shielda, nie jestem w stanie określić czy będzie on działać w pełni po podłączeniu do adapter shield. Jeżeli nie to pozostaje tylko skorzystać modułu w postaci PCB podłączanego do pinów przewodami połączeniowymi. Tak jak mamy na przykład ethernet shield oraz moduł ethernet w postaci małej płytki PCB z wyprowadzeniami podłączanymi przewodami połączeniowymi. To co wyróżnia się najbardziej to otwory na PCB, umieszczone nad diodami USB i PWR MwuinoUNO, dzięki czemu nie ma potrzeby stosowania diod LED na nakładce oraz zawsze niewielka, ale oszczędność pobieranego prądu. Mamy również otwory pod przełącznik napięcia 3,3V/5V oraz na włącznik zasilania Co jest widoczne na zdjęciach poniżej. 1. Wszystkie nakładki - strona BOTTOM 2. Nakładka "adapter shield" strona TOP podłączona do MWuinoUNO Drugą nakładką jest sensor shield. Płytka z pinami do podłączeń, sensorów i różnych modułów PCB, pozwalająca tworzyć nam bardziej zaawansowane układy. To co wyróżnia się najbardziej to otwory na PCB, umieszczone nad diodami USB i PWR MwuinoUNO, dzięki czemu nie ma potrzeby stosowania diod LED na nakładce oraz zawsze niewielka, ale oszczędność pobieranego prądu. Shield ten od większości dostępnych dla oryginalnej platformy UNO, posiada filtrację zasilania składającą się z kondensatorów ceramicznych i elektrolitycznych. Dwie pary kondensatorów. W każdej parze kondensator ceramiczny z kondensatorem elektrolitycznym umieszczone w odpowiedniej odległości aby zapewnić odpowiednią filtrację zasilania modułów, czujników itp. Dzięki temu mamy pewność, że nasz projekt będzie działać niezawodnie i stabilnie. Mamy również otwory pod przełącznik napięcia 3,3V/5V oraz na włącznik zasilania Co jest widoczne na zdjęciach poniżej. Nakładka "sensor shield" strona TOP podłączona do MWuinoUNO Trzecią nakładką jest gniazdo procesora, a dokładniej podstawka testowa ZIF. Umożliwia nam ona szybką wymianę procesora, za pośrednictwem dźwigni dociskającej jego piny do styków podstawki. Domyślnie można na PCB dla podstawki zamontować rezonator kwarcowy z kondensatorami i używać jej kiedy mamy do zaprogramowania dużą ilość procesorów. Możemy także na niej zamontować dodatkowo kondensatory filtrujące zasilanie, dławik, rezystor oraz switch do pinu reset. Mamy tym samym spełnione minimalne podłączenie procesora i możemy podpiąć przewodami połączeniowymi jakiś prosty moduł celem sprawdzenia jego działania z procesorem. Możemy też do jego gniazd włożyć listwę kołkową męską i wystające piny listwy wpiąć na płytkę stykową, nie podłączając elementów wymaganych do samej pracy procesora a podłączać tylko te którymi nasz procesor ma sterować lub te, które mają dostarczać sygnały do niego. Nakładka IC2 socket adapter strona TOP podłączona do MWuinoUNO Na zakończenie dodam, że jest to już ostatni artykuł z serii o Arduino UNO, gdzie starałem przedstawić się zalety jak i swoją wizję tej platformy. Następne moje projekty będą się tyczyć urządzeń zbudowanych a oparciu o platformę UNO. Mam nadzieję, że wszystkie informację, które do tej pory przedstawiłem okazały się pomocne, szczególnie dla osób początkujących, które zdecydowały się na wybór Arduino UNO jako platformy, z którą zaczynają naukę programowania i budowania urządzeń. Plik do pobrania: MWuinoUNO.zip W pliku tym znajdziemy dokumentację oraz wszystkie niezbędne pliki, gdybyśmy chcieli wykonać urządzenie, w tym skecze ArduinoISP do zaprogramowania IC1, a nawet sterownik dla układu FTDI232RQ dla WIN10.
  16. Witam, mam mały problem z sterowaniem serwomechanizmem za pomocą modułów bluetooth HC-05. Wartością wysyłaną jest sygnał z czujnika zginania, jest on zmapowany. Łącząc to na jednym arduino wszystko śmiga jak powinno, czyli odpowiednio zginając czujnik - rusza się serwomechanizm o dany kąt. Problem pojawia się gdy próbuję wysłać ten sygnał za pomocą bluetooth (być może kod jest zły, zaczerpnięty z internetu, ale komuś podobno działało, wstawię niżej). Moje moduły bluetooth zaprogramowałem wydaje mi się prawidłowo, jest między nimi połączenie (lecz musiałem je programować na arduino uno, bo na nano po wpisywaniu komend nic się nie działo). Domyślnie były one na 9600 baud rate. Układ z arduino nano jest moim masterem. Zmapowany sygnał z czujnika zginania wziąłem pod monitor i widać takie wartości: M332 L330 J331 K330 J331 K330 J330 Moim zdaniem powinny być same liczby, a nie jakieś cyferki dodatkowo. (może tu jest problem?) Układ z arduino uno jest slavem i biorąc pod monitor watości dostarczone tutaj otrzymuje: 13 10 83 51 51 51 10 51 Więc jakby liczby są prawidłowe, ale strasznie one skaczą i zginanie czujnika nie skutkuje zmianą tych wartości. Oto kod dla MASTERA: int val1; int state=0; void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.read(); // Reads the data from the serial por } val1 = analogRead(A0); // reads the value of the potentiometer (value between 0 and 1023) int val1map = map(val1, 0, 400, 0, 180); // scale it to use it with the servo (value between 0 and 180) Serial.println(val1map); Serial.write(val1map); delay(10); } Oto kod dla SLAVE'a: #include <Servo.h> Servo kciuk; // create servo object to control a servo int state=20; void setup() { kciuk.attach(5); // attaches the servo on pins to the servo object Serial.begin(9600); } void loop() { if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.read(); } kciuk.write(state); Serial.println(state); delay(10); } Może arduino nano jakoś inaczej trzeba łączyć z bluetoothem? Ja oba bluetoothy połączyłem tak: RX z bluetooth'a do TX na arduino, TX z blue do RX na arduino, GND wiadomo do GND na arduino, Vcc do 5V na arduino. Potrzebuje pilnie pomocy i z góry dziękuję za każdą wiadomość!
  17. Witam. Na chińskim serwisie aukcyjnym kupiłem taki zestaw: Chciał bym z tego zrobić inny projekt. Mianowicie dołożyć jeszcze 4 serwa SG90. Silniki miały by poruszać się w równym tempie z jednostajna prędkością, możliwie jak najszybciej z możliwością płynnego sterowania prędkością przez potencjometr, a serwa przeskakiwać o mały kąt. Planuje sterować wszystkim za pośrednictwem Arduino UNO ( oryginalne, to z zestawu pójdzie do czegoś innego) i teraz pytania: 1. Czy da się tym wszystkim sterować za pomocą jednego Arduino? Chce zrezygnować z tej tarczy CNC shield i podłączyć bezpośrednio sterowniki A4988 na płytce stykowej z arduino żeby nie zająć wszystkich pinów Arduino. Oraz podłączyć kontroler serw PCA9685. Dodatkowo potencjometr do sterowania prędkością. Czy mój tok myślenia jest dobry? 2. Czy da się to zasilać jednym zasilaczem czy lepiej silniki jednym, serwa drugim a logikę jeszcze z innego? Jeżeli tak to jakieś propozycje? 3. Czy do zasilenia jednego, może dwóch silników nada się taki zasilacz nie muszą chodzić na maksymalnych obrotach, tylko poprawnie, chodzi mi o wykorzystanie czasu dopóki nie zdobędę wszystkich podzespołów. Za wszystkie rady, podpowiedzi oraz konstruktywną krytykę będę bardzo wdzięczny😉 tu jeszcze cos odnośnie silnikow PS mam nadzieję że dobry dział bo chodzi mi tutaj głównie o parametry zasilania:)
  18. Witam, jestem nowy więc nie wiem czy to dobry dział na forum, ale ten najbardziej był adekwatny. Otóż mam problem z komunikacją Arduino UNO z czujnikiem MPU-6050(GY-521). Głównie problem jest taki, że przy wykorzystywaniu biblioteki pana Jarzębskiego i po odpaleniu serial monitora, wyskakuje błąd: Pomimo iż, podłączyłem zgodnie z poradnikami, czyli VCC do 5V, SCL do SCL(Bądź A5), SDA do SDA(Bądź A4) oraz INT do pinu Digital 2. Ta sama sytuacja następuje przy wykorzystaniu biblioteki Jeffa Rowberga I2Cdev, tak samo próbowałem podpinać i nadal ten sam błąd: Co dziwne, czujnik jest sprawny ponieważ gdy chce wyświetlić surowe dane, to nie ma problemu i mogę je z niego normalnie odczytać.
  19. Cześć Mam następujący problem. Zbudowałem poniżej przedstawiony układ w programie Tinkercard: Ma on na celu przedstawienie użycia elektromagnesów w szerszym projekcie, który buduję. Cewka oraz dioda imitują elektromagnes, a diody świecące mają za zadanie sygnalizować, który "elektromagnes" jest obecnie używany. Stosując poniższy kod chcę włączyć elektromagnes sterowany sygnałem z portu 13 i wyłączyć sygnał z wyjścia 12. Jednak pojawia się problem, gdyż po włączeniu kodu działają obie diody, czyli cel nie został osiągnięty. Gdy odłączę jedną cewkę to układ zachowuje się poprawnie. Wartości dla rezystorów i cewek zostały dobrane "na oko", tak aby udało się zrealizować animację. void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); } void loop() { digitalWrite(12, LOW);// Zmiana stanu na NISKI, na wyjsciu 12 digitalWrite(13,HIGH);// Zmiana stnau na WYSOKI, na wyjsciu 13 } Bardzo proszę o wyjaśnienie na czym polega problem. Z góry wielkie dzięki.
  20. Witam. Nigdy nie pracowałem wcześniej w środowisku ROS, jednak teraz jest mi potrzeba biblioteka mapująca do mojego robota mobilnego spełniajacego wymagania SLAM dlatego potrzebuję porady odnośnie użycia biblioteki Hector Slam. Każdy temat jaki sprawdzałem sugerował użycie Lidarów czy też innych "laserowych" czujników. Czy ta biblioteka będzie w stanie przekonwertować dane liczbowe otrzymywane z czujników ultradźwiękowych HC-SR04? Czy moze powinienem użyć innej metody/biblioteki do mapowania? Jakby ktoś chciał wiedzieć więcej na temat mojej teorii rozwiązania przesyłu i obródki danych: Główny program(pisany w Pythonie 3) znajduje się na płytce BeagleBone Black, nastomiast pomiary z czujników są pobierane na płytkę Arduino Uno Rev3, przeliczane na centymetry i wysyłane przez USB do BBB skąd mają być użyte do wykrywania potencjalnej kolizji z otoczeniem i przerobiane na mapę(wystarczyłoby abym wyznaczał punkt w miejscu potencjalnej kolizji). Oczywiście zdaję sobie sprawę że mógłbym to robić tylko na jednej płytce ale w tak późnej fazie nie chcę już zmieniać konceptu. Poza tym, to jest mój pierwszy robot którego tworzę od zera więc nie mam doświadczenia.
  21. Pojazd składa się z podanych elementów: Arduino UNO, MOTOR Shield L293D, Moduł Bluetooth HC-05, 4x silniki 5V 1:48 z podwójnym wałem /PLY153. Zbudowany jest na platformie ze sklejki, do tego ma dojść jeszcze cała obudować. Razem będzie ważył z 3 kg. Na ten moment zasilam go 3x 18650 i na wyjściu mam 11.95V - 12.15V. Kiedy trzymam go w powietrzu wszystko jest ok. Jednak jak dochodzi tarcie w czasie jazdy, to napięcie potrafi spaść do 8-9V i rozłącza mnie z nim. Tak się dzieje jeszcze z samą płytą dolną, a co dopiero jak dojdzie obciążenie. Na ten moment mój pomysł to, zrobienie koszyka na baterie 8x sztuk dzięki czemu wyjdzie mi 33V przy pełnym naładowaniu i ok 27V w normalnej jeździe. Czy jest to dobra koncepcja? Jak można ustabilizować napięcie do 12V by nie spalić płytki?
  22. Witam. Jestem świeżym posiadaczem Arduino uno. Chciałem przejść kurs Arduino poziom 1. I już przy pierwszym zadaniu mam problem. Zadanie polega na złączeniu diody. Przepisałem program ze strony kursu. Klikam na "Zweryfikuj" i następuje sprawdzenie kompilacji. I ta czynność programu trwa i trwa w nieskończoność. Czekałem 4 godziny na zakończenie kompilacji i nic.Kompilacja się nie zakończyła. Czy to normalne tak powinno być czy może trzeba komputer zastawić na noc. Przyznam że jestem zniechęcony. To samo dotyczy przykładowego programu Blink. Jeśli możecie pomóżcie. System XP. Program wykrywa własciwy port oraz płytke. Program Blink | Arduino 1.8.14 Hourly Build 2020/14/04
  23. Witam, zastanawiam się nad tym, czy jest możliwość podłączenia 3 serwomechanizmów, czujnika odległośści i płytki LCD do arduino uno i oczywiście płytki stykowej 😉 Jeśli nie, to jakie są inne możliwości podłączenia tych rzeczy? Jestem dopiero początkująca we własnych projektach, ale chcę zrobić mojej przyjaciółce prezent na urodziny, czyli robota ruszającego rękami i głową w której jest czujnik odległości trzymającego płytę LCD z życzeniami urodzinowymi.
  24. Dzień dobry, Posiadam Arduino UNO. Za pomocą tej płytki robiłem zamieszczony tutaj kurs dla początkujących. Przy pierwszym podłączeniu wszystko było ok. Zrobiłem kilka części kursu(zatrzymałem się na LCD). Problem, jaki pojawił się w pewnym momencie to brak możliwości zaprogramowania płytki poprzez port USB, używając do tego dedykowanego środowiska (ver. 1.8.12). Pracuję na Win10. Sprawdziłem ustawienia i połączenia: 1. Menedżer urządzeń rozpoznaje płytkę -> Porty->Arduino Uno(Com4) 2. W środowisku mam wybrane: płytkę Arduino UNO, port COM4 programator AVRISP mkii Na powyższych ustawieniach pracowałem do tej pory. Wszystko zasilane z USB, ewentualnie z zewnętrznego zasilacza(kurs o serwomechanizmie). Zasilanie sygnalizowane przez zieloną diodę. Zanim napisałem ten post, poczytałem forum odnośnie takich przypadków. W większości ten problem to skasowany bootloader. Zaznaczam, że do programowania płytki używałem tylko połączenia USB(nie posiadam zewnętrznego programatora). Sprawdziłem też inny przewód USB. Postanowiłem też kupić procesor z wgranym już bootloaderem. Po zmianie procesora, problem nadal istnieje. Błąd jaki otrzymuję to: Czy ktoś z Forumowiczów spotkał się z takim problemem? Pozdrawiam, Łukasz
  25. Cześć. Właśnie korzystam z modułu bluetooth HC-06 podłączonego do Arduino UNO i mam z nim jeden problem, bo jak działa wysyłanie danych z aplikacji na Arduino (sterowanie np. autkiem) to niestety nie działa komunikacja ze strony Arduino. To znaczy, że aplikacja nie szczytuje mi informacji podanych z Arduino. Zrobiłem projekt na podstawie filmu z yt: https://www.youtube.com/watch?v=8DOg8onUvks w celu sprawdzenia działania modułu, i jak mogę sterować serwomechanizmem to niestety jak naciskam przyciski (informacja o stanie przycisku wyświetla się na monitorze portu szeregowego) to nie wyświetla mi się ona na telefonie. Kod zamieszam poniżej: #include <Servo.h> Servo myServo; void setup() { Serial.begin(9600); pinMode(8, INPUT_PULLUP); pinMode(9, INPUT_PULLUP); pinMode(13, OUTPUT); myServo.attach(10); } char cmd[100]; byte cmdIndex; boolean prz1, prz2, prz1_old = true, prz2_old = true; void exeCmd() { if (cmd[0] == 's') { unsigned int val = atof(cmd+2); myServo.write(val); } } void loop() { 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++; } } prz1 = digitalRead(8); prz2 = digitalRead(9); if (prz1 != prz1_old) { prz1_old = prz1; if(prz1) { Serial.println("a 0\n"); // wysyłanie danych na monitor portu szeregowego kiedy przycis jest nie załączony } else { Serial.print("a 1\n"); // wysyłanie danych na monitor portu szeregowego kiedy przycis jest załączony } } if (prz2 != prz2_old) { prz2_old = prz2; if(prz2) { Serial.println("b 0\n"); // wysyłanie danych na monitor portu szeregowego kiedy przycis jest nie załączony } else { Serial.print("b 1\n"); // wysyłanie danych na monitor portu szeregowego kiedy przycis jest załączony } } } Sam moduł HC-06 podłączyłem za pomocą dzielnika napięcia i na krzyż (TX/RX). A w samej aplikacji także wszystko zostało poprawnie ustawione, ponieważ slajder działa i mogę bez problemu sterować serwomechanizmem. I zatem mam pytanie, czy robię coś źle (wiem że coś robię źle, bo jak bym robił prawidłowo to by działało 😅), czy jest coś o czym nie wiem przez co własnie nie mogę zrealizować komunikacji ze strony Arduino? Z góry dziękuje za pomoc.
×
×
  • Utwórz nowe...

Ważne informacje

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