Skocz do zawartości

Usohaki

Użytkownicy
  • Zawartość

    7
  • Rejestracja

  • Ostatnio

Reputacja

11 Dobra

O Usohaki

  • Ranga
    2/10
  • Urodziny 15.02.1998

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Wrocław
  • Języki programowania
    C, Python
  • Zainteresowania
    Elektronika :)
  • Zawód
    Student AiR

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. @Treker Mam pytanie odnośnie opisu. Opisałem budowę światłoluba i chciałbym stworzyć robota sterowanego przez IR, ale z wykorzystaniem tego samego podwozia. Czy będzie się on kwalifikował do akcji biorąc pod uwagę że będzie wyglądał podobnie? Pozdrawiam
  2. @matiut2 pewnie, sposobów na rozbudowę jest całe mnóstwo więc to dodatkowy plus projektu. Myślałem też nad zrobieniem generatora liczb losowych, tak żeby kolory zmieniały się co jakiś czas w dowolny sposób
  3. Cześć, tym razem chciałbym się z Wami podzielić moim pierwszym jeżdżącym robotem - światłolubem. Wybrałem ten typ robota ze względu na jego prostą konstrukcję i łatwy w napisaniu program do sterowania. Do stworzenia podwozia postanowiłem wykorzystać płytę HDF. Jest ona lekka ale wystarczająco sztywna żeby utrzymać robota i co ważne łatwo dostępna i tania. Konstrukcja pod względem mechanicznym jest dosyć duża i niezgrabna, jednak było to zaplanowane. Na dosyć sporym kawałku HDFu zmieściłem 2 koszyki na baterie, jeden na 6 baterii AA, drugi na 2, dzięki czemu mam do dyspozycji 9 i 12V, Arduino Uno oraz płytkę stykową - dzięki takiemu rozwiązaniu mogę w łatwy sposób przerobić robota na innego. Koszyki na baterie przykleiłem do podwozia za pomocą kleju na ciepło, żeby nie mogły się one przemieszczać, Arduino przykręciłem za pomocą 4 długich śrub w taki sposób, że nie przylega ono do powierzchni płyty (jest to spowodowane sposobem montażu tylnego koła) a płytkę stykową przykleiłem na taśmie dwustronnej, która zabezpiecza jej spód. Silniki przymocowałem w taki sposób, jaki został przedstawiony w kursie budowy robotów. Do styków przylutowałem przewody, które następnie wyprowadziłem przez wcześniej nawiercone otwory. Tylne koło (obrotowe) zamocowałem za pomocą 4 śrub, niestety dysponowałem tylko jednym rodzajem więc mocno wystają one ponad powierzchnię podwozia. Kolejnym krokiem było stworzenie elektroniki, która będzie odpowiedzialna za ruch robota i znajdywanie najmocniejszego źródła światła. Do sterowania silnikami wykorzystałem sterownik silników L293D, który podłączyłem tak jak zostało to przedstawione w kursie programowania Arduino. W podwoziu zrobiłem 3 nacięcia (2 z przodu i 1 z tyłu, żeby robot mógł także cofać) do których włożyłem, a następnie zalałem klejem na ciepło fotorezystory 20-30k, które następnie podłączyłem do płytki stykowej i stworzyłem dzielnik z rezystorami 4k7 na których za pomocą pinów analogowych Arduino mierzony jest spadek napięcia. Dzielnik zasiliłem z wyjścia 5V Arduino. Na koniec zostało napisanie programu, który będzie wszystko koordynował. Było to najbardziej pracochłonne zajęcie i wymagało zdecydowanie najwięcej czasu. Program nie jest szczególnie skomplikowany, jednak żeby robot jeździł tak jak trzeba musiałem określić np. wartości różnicy między napięciami na fotorezystorach, żeby nie skręcał on w przypadku, gdy jeden z czujników jest minimalnie mocniej oświetlony. #define L_MOTOR_F 4 //definiowanie pinów #define L_MOTOR_B 5 #define L_MOTOR_PWM 6 #define R_MOTOR_F 2 #define R_MOTOR_B 7 #define R_MOTOR_PWM 3 #define L_O A4 #define R_O A5 #define B_O A3 #define ROZNICA_MIN -200 //okreslenie maksymalnej i minimalnej roznicy miedzy odczytanymi wartosciami napiecia #define ROZNICA_MAX 200 #define ROZNICA_PROG_G 10 //okreslenie roznicy, ktora nie bedzie powodowala skretu #define ROZNICA_PROG_D 10 void setup() { pinMode(L_MOTOR_F, OUTPUT); //deklaracja pinow na wyjscia pinMode(L_MOTOR_B, OUTPUT); pinMode(R_MOTOR_F, OUTPUT); pinMode(R_MOTOR_B, OUTPUT); pinMode(L_MOTOR_PWM, OUTPUT); pinMode(R_MOTOR_PWM, OUTPUT); } void loop() { int lewy=analogRead(L_O); //odczyt wartosci napiec z fotorezystorow int prawy=analogRead(R_O); int tyl=analogRead(B_O); int roznica=lewy-prawy; //obliczenie roznicy miedzy wartosciami przednich fotorezystorow int srednia=(lewy+prawy)/2; //obliczenie sredniej wartosci spadkow napiec na przednich fotorezystorach if (roznica < ROZNICA_MIN) roznica = ROZNICA_MIN; //ograniczenie roznicy else if (roznica > ROZNICA_MAX) roznica = ROZNICA_MAX; else if (roznica<=ROZNICA_PROG_G && roznica>=ROZNICA_PROG_D) //jezeli roznica jest mniejsza od progu, jedzie prosto roznica=0; if(srednia>tyl){ //jezeli natezenie swiatla z przodu jest wieksze niz z tylu - jazda do przodu int zmianaPredkosci = map(roznica, ROZNICA_MIN, ROZNICA_MAX, -40, 40); L_MOTOR(60-zmianaPredkosci); R_MOTOR(60+zmianaPredkosci); } else{ //w przeciwnym wypadku jazda w tyl L_MOTOR(-60); R_MOTOR(-60); } } void L_MOTOR(int V){ //funkcja sterujaca predkoscia lewego silnika if(V>0){ V=map(V,0,100,0,255); digitalWrite(L_MOTOR_F,HIGH); digitalWrite(L_MOTOR_B,LOW); analogWrite(L_MOTOR_PWM,V); } else{ V=abs(V); V=map(V,0,100,0,255); digitalWrite(L_MOTOR_B,HIGH); digitalWrite(L_MOTOR_F,LOW); analogWrite(L_MOTOR_PWM,V); } } void R_MOTOR(int V){ //funkcja sterujaca predkoscia prawego silnika if(V>0){ V=map(V,0,100,0,255); digitalWrite(R_MOTOR_F,HIGH); digitalWrite(R_MOTOR_B,LOW); analogWrite(R_MOTOR_PWM,V); } else{ V=abs(V); V=map(V,0,100,0,255); digitalWrite(R_MOTOR_B,HIGH); digitalWrite(R_MOTOR_F,LOW); analogWrite(R_MOTOR_PWM,V); } } void STOP(){ //zatrzymanie silnikow analogWrite(R_MOTOR_PWM,0); analogWrite(L_MOTOR_PWM,0); } W ten sposób robot został ukończony. Projekt ten bez wątpienia dużo mnie nauczył. Może nie ze strony elektroniki, ale na pewno ze strony programowania. I co najważniejsze miałem dużo zabawy tworząc go Pozdrawiam ~Usohaki
  4. @Leoneq Dzięki za miłe słowa, cieszę się że komuś podoba się mój projekt. Co do sterowania uznałem że proste rozwiązanie będzie w tym przypadku najlepsze. Siedząc przy biurku mam bezpośredni dostęp do przycisków Pomysł z mikrofonem jest super, chętnie spróbuję wykorzystać go do rozbudowy układu. Sterowanie przez pilota IR wykorzystałem w innym projekcie, który w wolnej chwili na pewno opiszę na forum, jednak na razie nie mam na to czasu Pozdrawiam i życzę miłego dnia
  5. Cześć, Myślę że każdy kojarzy monitory, które mają wbudowane oświetlenie z tyłu. Zawsze uważałem to za fajny dodatek, jednak producenci często słono sobie za takie monitory liczą. Dlatego postanowiłem, że stworzę własną wersję w oparciu o Arduino i taśmę LED RGB i chciałbym się z Wami podzielić efektami mojej pracy. Zacznę od spisu niezbędnych materiałów: Arduino Nano (ja użyłem klona) Taśma LED RGB 12V Zasilacz 12V, minimum 1A 3 tranzystory MOSFET IRL540N 3 tact switche Przełącznik bistabilny suwakowy 3 rezystory 10k Listwa goldpin żeńska Płytka prototypowa Przewody Niezbędna będzie też lutownica (i oczywiście cyna), przydatny jest także pistolet z klejem na ciepło oraz płytka stykowa i pojedyncza dioda RGB ze wspólną anodą (i 3 rezystory 330R) w celu sprawdzenia czy układ działa poprawnie zanim zaczniemy lutować. Jak już mamy skompletowany cały zestaw możemy zabierać się do pracy. Na początek schemat układu: Całość ma działać w taki sposób, że po naciśnięciu przycisku jasność danego koloru wzrasta, a jeżeli przestawimy pozycję przełącznika to tym samym przyciskiem będziemy przyciemniać wybrany kolor. Natężenie światła będzie regulowane przez sygnał PWM na portach Arduino, które będą podłączone do bramek tranzystorów unipolarnych. Warto zacząć od złożenia całości na płytce stykowej w celu skontrolowania czy układ działa poprawnie. U mnie wygląda to tak: Oczywiście żeby dioda zaświeciła potrzebny jest program dla Arduino: #define oswietlenieG 10 //PWM do bramki tranzystorów sterujących oświetleniem (przez R 10k) #define oswietlenieR 11 // -//- #define oswietlenieB 9 // -//- #define przyciskG 3 //przycisk zmieniajacy natezenie B #define przyciskB 4 //przycisk zmieniajacy natezenie G #define przyciskR 5 //przycisk zmieniajacy natezenie R #define przycisk 2 //przelacznik do zmiany znaku "zmiany" int R=0; //jasność koloru czerwonego int G=0; //jasność koloru zielonego int B=0; //jasność koloru niebieskiego int zmiana=5; //wartość o jaką zmieni się natężenie przy pojedynczym kliknięciu void setup() { pinMode(przycisk,INPUT_PULLUP); //definiowanie pinów pinMode(przyciskR,INPUT_PULLUP); pinMode(przyciskG,INPUT_PULLUP); pinMode(przyciskB,INPUT_PULLUP); pinMode(oswietlenieR,OUTPUT); pinMode(oswietlenieG,OUTPUT); pinMode(oswietlenieB,OUTPUT); } void loop() { if(digitalRead(przycisk)==LOW) //sprawdzenie czy przełącznik jest w pozycji "on" { if(digitalRead(przyciskR)==LOW) //sprawdzenie czy przycisk do zmiany koloru czerwonego jest wciśnięty { R=R-zmiana; //zmniejszenie wypełnienia if(R<=0) R=0; delay(20); //niwelacja drgań styków } if(digitalRead(przyciskG)==LOW) { G=G-zmiana; if(G<=0) G=0; delay(20); } if(digitalRead(przyciskB)==LOW) { B=B-zmiana; if(B<=0) B=0; delay(20); } } else { if(digitalRead(przyciskR)==LOW) { R=R+zmiana; if(R>=255) R=255; delay(20); } if(digitalRead(przyciskG)==LOW) { G=G+zmiana; if(G>=255) G=255; delay(20); } if(digitalRead(przyciskB)==LOW) { B=B+zmiana; if(B>=255) B=255; delay(20); } } analogWrite(oswietlenieR,R); //ustawienie zadanego wypełnienia na pinie R analogWrite(oswietlenieG,G); // -//- G analogWrite(oswietlenieB,B); // -//- B } Jeżeli wszystko jest połączone poprawnie dioda powinna zmieniać kolor gdy naciskamy przyciski. Jak już wiemy, że nasz układ działa, możemy przejść do lutowania go na płytce prototypowej. Zacząłem od przylutowania listwy goldpin do której będziemy wpinać nasze Arduino. Co prawda powinno się zaczynać od małych elementów, jednak w ten sposób łatwiej jest określić gdzie mają się znajdować tranzystory. Kolejno na płytce pojawiły się rezystory oraz mosfety. Na koniec przylutowałem wyprowadzenia zasilacza, przewody które będą biegły do modułu z przyciskami i piny z taśmy LED. Trzeba pamiętać o podłączeniu zasilania do wejścia taśmy. Do tworzenia połączeń bardzo dobrze się nadają odcięte końcówki wyprowadzeń rezystorów. Gotowa płytka wygląda u mnie tak: (tył jest lekko ubrudzony, bo pokryłem całość klejem na ciepło i nie udało mi się usunąć całego do zdjęcia) Następnie stworzyłem moduł sterowania. Połączyłem każdy przycisk, oraz wyprowadzenie przełącznika do wspólnej masy a do poszczególnych przycisków dolutowałem przewody z płytki. Całość zamknąłem w tekturowym opakowaniu, które zalałem klejem na ciepło: Co prawda nie wygląda to zbyt ładnie, jednak przykleiłem to na bocznej ściance głośnika, więc nie jest to widoczne. Teraz jest dobry moment żeby przeprowadzić test całości, jeszcze zanim pokryjemy całość klejem na ciepło (ja popełniłem ten błąd że nie zrobiłem testu i miałem przez to dodatkową robotę z usuwaniem kleju jak okazało się że jeden z tranzystorów nie działa). Jeżeli wszystko jest tak jak powinno możemy przejść do przycinania taśmy na właściwą długość a następnie polutowania odpowiednich wyprowadzeń (ponownie przydatne są ucięte "nóżki" od rezystorów) tak żeby stworzyć prostokąt który będzie pasował do naszego monitora. Gdy taśma jest już gotowa warto ponownie zrobić test i jeżeli wszystko działa poprawnie "zaizolować" łączenia za pomocą kleju na ciepło a następnie przykleić taśmę do monitora. Ja moją dodatkowo dokleiłem za pomocą taśmy izolacyjnej, żeby się lepiej trzymała: Teraz wystarczy podłączyć taśmę do naszej płytki, wpiąć Arduino i całość powinna nam pięknie świecić: Mam nadzieję, że mój projekt się Wam spodoba i sami spróbujecie stworzyć takie oświetlenie, bo efekt jest naprawdę warty poświęcenia czasu. PS. Zamiast przycisków można by użyć np. modułu bluetooth albo odbiornika podczerwieni i dowolnego pilota od telewizora, ale ze względu na to, że sterowanie w moim przypadku znajduje się w łatwo dostępnym miejscu uznałem że byłaby to niepotrzebna komplikacja. Pozdrawiam ~Usohaki
×