Skocz do zawartości

belkocik

Użytkownicy
  • Zawartość

    30
  • Rejestracja

  • Ostatnio

Wszystko napisane przez belkocik

  1. Cześć. Mam pytanie odnośnie mostkowania mostka H TB 6612fng. Czy jest mozliwe nalutowanie jednego mostka na drugi w celu zwiekszenia wydajnosci pradowy oto tego mostka w dwoch kanalach? Z tego co wyczytalem prad ciągly bylby w granicach 2x1.2A = 2.2A, a maksymalny prad na kanal na pare sekund 2x3.2A = 6.2A czy tylko 3.2A? Chce uzyskac taki prad na obydwa kanaly. Drugie pytanie: Jakbym zmostkowal jeden taki mostek tb6612 to mialbym tylko jeden kanal o pradzie ciaglym 2.2A?
  2. Wyczytalem ze: Dzieki wielkie wszystkim za sugestie i cenne informacje
  3. @ethanak To nie dostaje zasilania 3,3V z pinu arduino? Kondensator moge zmienic bo to nie problem tylko dodanie stabilizatora juz tak bo zamowilem juz plytke. Jak cos nie bedzie dzialalo to dodam ten stabilizator 3.3V. Przeciez kondensatory sa obok pinow zasilania - chyba chodzi Ci ze od dolu (w moim przypadku, wtedy musialbym przedluzyc troche plytke :D), bo u mnie sa z boku tych pinow. Czytalem tez ze niektorzy wlutywuja kondensatory smd na wystajace piny u gory nrfa.
  4. A mozecie mi wytlumaczyc dlaczego wszystko dziala jak mam zmontowane na plytce stykowej? Dlugo ten uklad nie "pochodzi"? Co jest nie tak z tym napieciem logicznym 3,3V, ze trzeba dodawac dodatkowe konwertery poziomow logicznych i do tego stabilizator na 3,3V?
  5. @Gieneq Dziekuje za obszerna odpowiedz Nie wiem jaka wersja nano to jest (jak klikam view datasheet to przeprowadza mnie na stronke na ktorej datasheetu nie ma ;/. Wzialem schemat z zakladki System w EasyEDA. PCB juz zamowilem, wyszlo mnie 7 zlotych z groszami za 5 sztuk (z wliczona przesylka) tak jak cos zrobilem zle to tak duzej straty nie bedzie. Mam takie nano: https://www.banggood.com/ATmega328P-Nano-V3-Controller-Board-Compatible-Arduino-p-940937.html?rmmds=myorder&cur_warehouse=CN mostek: https://pl.aliexpress.com/item/32856351192.html?spm=a2g0s.9042311.0.0.2a8e4c4drm58oV Wzialem schemat z: (zalacznik)
  6. Czesc. Mozecie ocenic, doradzic czy dobrze wykonalem schemat? - a w szczegolnosci dobor kondensatorow przy zasilaniu mikrokontrolera i nrfa czy je dobrze dobralem pojemnosci kondensatorow. Co do mostka h i silnikow to beda one pobieraly srednio 1,2A na kanal - jaki kondensator ceramiczny przylutowac do stykow silnika? Czy polecacie jakies inne sprawdzone rozwiazanie? Odrazu mowie nie mam oscyloskopu ;/ Zasilanie VIN - pakiet 2s1p 8,4V pomylka w schemacie: 47uf low esr zamiast 44uf
  7. Czesc. Bylby ktos mi w stanie wyjaśnić dlaczego silnik nie kreci sie? Troche jest pomieszany opis na stronie botlandu: https://botland.com.pl/pl/sterowniki-silnikow-moduly/12059-pololu-tb9051ftg-jednokanalowy-sterownik-silnikow-28v26a.html i na stronie producenta: https://www.pololu.com/product/2997 Dane sa inne np. stany na EN - domyslnie niski, a na ENB wysoki, a na stronie producenta jest na odwrot \/. Robilem wedlug tych tabel ze strony botland i producenta sterownika i dalej nie moge dojsc do konkluzji z tym sterownikiem. edit: Napisalem do botlandu ijednak wszystko dziala wystarczylo USTAWIC na pinie [EN] stan niski. Tylko trzeba uzyc 4 pinow I/O do sterowania tym mostkiem h ;/ TB9051FTG simplified truth table (PWM1 + PWM2 + EN) #define B1 7 #define B2 8 #define PWM_PIN 3 void setup() { pinMode(B1, OUTPUT); pinMode(B2, OUTPUT); pinMode(PWM_PIN, OUTPUT); analogWrite(PWM_PIN, 100); } void loop() { digitalWrite(B1, 0); digitalWrite(B2, 1); }
  8. Mam taki multimetr: https://botland.com.pl/pl/mierniki-uniwersalne/5151-miernik-uniwersalny-dpm-dt9205a-5906881199107.html Moglbys mi wytlumaczyc jaki ma to zwiazek z tym pomiarem?
  9. Ten l298n wzialem bo mam go pod reka, a trzeba troche pocwiczyc na starociach zeby zrozumiec co i jak, a pozniej wloze tam tb6612 i tb9051 i bede wiedzial co robic. Jeszcze tb6612 nie mam przy sobie tylko tb9051 tak wiec bede dzialal jak przyjdzie i dam znac czy mi sie udalo Edit: @marek1707 @ethanak Mam juz tb6612.Podpialem do niego jeden silnik i oto co otrzymalem: przy wypelenieniu = 150 jest 4V na silniku / 180 =5V / 210=6V. Zwiekszajac co 30 mam ok. 1V w gore. Najgorsze jest to ze zostal mi jeden pin pwm i na nim musze ustawic odpowiednie wypelnienie aby bylo 6V na dwoch mostkach h. Teraz mi pozostaje tylko podlaczyc drugi silnik do tb6612 i dolozyc ten drugi mostek h i zbadac na nim napiecie i ustawic tak pwm aby nie przekraczalo 6V na dwoch mostkach. Pewnie ten tb6612 ma wiekszy spadek od tego DRV tak jak pisales i na nim bedzie 6V a na tym tb6612 mniejsze. Jakbym mial jeszcze jeden wolny pin pwm to bym ustawil na dwoch te 6V
  10. Chcialbym aby na wyjsciu bylo to 6V i chce sie upewnic ze tam jest zanim podlacze tam silnik 6V. Dobra czyli w taki sposob to robic zasilanie mostka = napiecie na wyjsciusilnika? Jest juz tam uwzgledniony spadek napiecia na mostku? Podpialem l298n do pakietu 2s i zasilanie mostka = 8V. Akumulatory maja 8,2V. Czyli: 75 procent z 8V to 6V. 75 procent z 255 to 191,25. Ustawiam wypelenienie 191,25 na pinie 3 i bedzie to 6V na wyjsciu silnika'? A co ze spadkiem napiecia na mostku?
  11. Mam pytanie jak zmierzyc napiecie sterowane pwmem na wyjsciach silnika w mostku H? Podpialem wszystko tak jak nalezy lecz na wyjsciu silnika na mostku h jak przykladam sondy to nic nie pokazuje. Rozumiem ze musze tam jakies obciazenie podpiac? Silnik boje sie podpiac bo jak ustawilem za duze wypelnienie to sie zjara. W takim wypadku prykrecic tam na chwile rezystor z jak najnizsza rezystancja jaka bede mial i zmierzyc jego napiecie (mam rezystor 100 ohmow)? Dopisalem taka linijke do kodu w celu sprawdzenia tego napiecia: #define PWM_PIN 3 void setup() { pinMode(PWM_PIN, OUTPUT); analogWrite(PWM_PIN, 170); } 70 procent z 8,4V = 5.88V 70 procent z 255 = 178.5 Dobrze to licze? Chcialbym 6V na wyjsciu, tylko jak to sprawdzic czy rzeczywiscie tyle jest na wyjsciu? Macie jakis patent jak to zmierzyc?
  12. Zakupilem co trzeba. Tak to ma byc podlaczone? Bedzie podpiety do tego pakietu 2s2p ten bms: https://abc-rc.pl/product-pol-7891-Modul-BMS-PCM-PCB-ladowania-i-ochrony-ogniw-Li-ion-2S-8-4V-5A-18650.html Moge ten niebieski przewod od wtyczki xh przylutowac bezposrednio do pada <BM>? Tak jak na zdjeciu nr 2?
  13. Z gory dziekuje za zainteresowanie sie tematem i pomoc bo widac ze chcesz pomagac poczatkujacym. Dobra w takim razie robie 2s2p i dam jakas mala przetwornice 5V na logike bo akurat mam . Tylko teraz jak to ladowac i jaka wtyczke wstawic w obudowe do ladowania tych akumulatorow? Nie mam ladowarki sieciowej do ladowania takiego pakietu w takim razie co mi radzisz zeby kupic? Jest taka ladowarka sieciowa, ale do Li-Pol - jest o wiele tansza: https://botland.com.pl/pl/ladowarki-lipol-sieciowe/1446-ladowarka-li-pol-imax-b3-pro-z-balanserem.html slyszlaem ze mozna ja przerobnic zeby mozna bylo ladowac li ion, ale czy gra warta swieczki jak nie wiem jak to zrobic? (gdzies widzialem ostatnio temat w sieci o tym, ale nie moge teraz znalezc) Druga opcja jest kupienie takiego cuda: https://botland.com.pl/pl/ladowarki-lipol-sieciowe/1832-ladowarka-lipo-life-liion-nimh-nicd-z-balanserem-gpx-greenbox.html albo https://botland.com.pl/pl/ladowarki-lipol-sieciowe/9347-ladowarka-li-pol-li-ion-li-fe-ni-cd-ni-mh-z-balanserem-imax-b6-czujnik-temperatury.html? Albo co innego polecisz bo za bardzo nie wiem co wybrac. Tylko teraz kwestia jaka wtyczke zenska mam wstawic w obudowie zeby mozna bylo to ladowac i jak podlaczyc ten pakiet 2s2p do tej wtyczki??
  14. To jak inaczej mam rozwiazac ladowanie jesli chcialbym zrobic pakiet 3s - musialbym kupic i przerobic ladowarke modelarska (wlozenie jej do srodka tez wchodzi w gre, ale miejsca brak) lub ladowac poprzez zasilacz llaboratoryjny.
  15. @marek1707 Juz tak mam ze mnie ciezko zrozumiec Dziekuje bardzo za porady. Odnosnie zasilania to rozdzielilem akusy tak aby mozna bylo latwo je ladowac - 2x18650 beda na boku obudowy w koszyczku z dolutowanym bmsem gdzie bedzie pokrywka do sciagniecia, a nastepnie mozna wyjac latwo akusy i wlozyc je do ladowarki dla akumulatorow 18650. Odnosnie zasilania logiki to bedzie to 1x 18650 z modulem do ladowania przez micro usb (TP4056). Dlatego przy tym zasilaniu logiki zastouje przetwornice step up do 5V (MT3608) powinno byc ok? Odnosnie kontrolowania stanu silnikow to wystarczy taki czujnik temperatury przyczepiony do silnika mg 996R?: https://botland.com.pl/pl/czujniki-temperatury/165-czujnik-temperatury-ds18b20-cyfrowy-1-wire-tht.html i do tego buzzer jak przekroczy jakos tam temperature - tylko ile stopni Celsjusza ustawic zeby syrena wyła :D? Mysle ze tylko jeden czujnik wystarczy do tego silnika? Dwa pozostale silniki odpowiedzialne za ruch przod tyl nie beda dostawaly tak po tylku jak ten mg 996R. Chce aby to bylo latwe do zrobienia. A co by dala kontrola obrotow silnika i jak ja mniej wiecej wykonac to poczytam i moze sie skusze. Co do tego mostka h to ten bedzie dobry dla tego mg996r?: https://botland.com.pl/pl/sterowniki-silnikow-moduly/12059-pololu-tb9051ftg-jednokanalowy-sterownik-silnikow-28v26a.html PWM z silnikow bedzie podpiety do 5V z arduino tak wiec ciagle pelne obroty. Wole sie dopytac jesli: silnik ma napiecie zasilania 6V, a mam sterownik silnika ktory ma zasilanie silników(VMOT): od 4,5 V do 13,5 V to bezpiecznie moge podac tam 13,5V jesli mam podpiety tam silnik ktorego napiecie zasilania to 6V? Mostek H dobiera odpowiednie napiecie dla danego silnika wtedy? Tak wiec smialo moge podpiac 2x18650 bezposrednio do mostka bez przetwornicy ktora obnizala by napiecie do 6V - tak jak wspomniales
  16. Przepraszam ze tak pozno. Serwo przerobione na silnik zostalo podpeite do l293d w celu wstepnego napisania programu do sterowania oraz nauki co do czego lecz teraz jest problem bo chcialbym dobrac sterownik zeby wykorzystywal prawie caly potencjal z tego serwa. Serwo to MG 996R - wczytalem ze pobiera 2A przy zablokowanym wale - 500mA bez obciazenia. Do orczyka ktore jest przupomocowane do serwa bedzie przykrecony swider na ktorym beda lopatki ktore beda mialy za zadanie wyrzucanie lisci/galazek na zewnatrz rynny, tak wiec troche mocy potrzebuje. Zasilanie to 2x 18650 z przetwornica step down do 6V podlaczone do silnikow. Te dwa silniki odpowiedzialne ze ruch przod tyl beda podpeite do TB6612. Teraz napotkalem problem co zrobie z tym mg 996r. Mam malo miejsca w obudowie tak wiec musze upchac sterownik na plytce uniwersalnej, tak wiec ten Pololu DRV8838 bylby dobrym rozwiazaniem. Myslalem nad l298n - ma on 2A na kanal, lecz raczej go nie upcham w obudowie jakos sensownie i do tego jest dwukanalowy lecz to chyba nie problem bo tam jest 2A na kanal, a nie przy polaczonych kanalach? Moze jeszcze wspomne ze odzielne bedzie zasilalanie do logiki - 1x 18650 z przetwornica step up ustawiona na 5V na wyjsciu. edit: zamowilem jeszcze taki l298n w wersji "mini" do lutowania. Ma 1,5A na kanal tak wiec tez moze byc dobry - doda sie jakis radiator i powinno byc dobrze? https://pl.aliexpress.com/item/32854762955.html?spm=a2g0s.9042311.0.0.73725c0fChAoGz
  17. Czesc. Ma ktos ten sterownik: https://botland.com.pl/pl/sterowniki-silnikow-dc/2695-pololu-drv8838-jednokanalowy-sterownik-silnikow-11v17a.html --- Pololu DRV8838? Chcialbym sie dowiedziec jaki ma spadek napiecia na mostku. Napisalem do botlandu lecz oni tez nie wiedza - w nocie katalogowej nie ma takiej informacji. Bawil sie ktos tym sterownikiem? Z gory dzieki.
  18. Tresc z monitoru portu szereowego: 19:11:45.517 -> CheckConnection Starting 19:11:45.517 -> 19:11:45.517 -> FIRST WITH THE DEFAULT ADDRESSES after power on 19:11:45.550 -> Note that RF24 does NOT reset when Arduino resets - only when power is removed 19:11:45.618 -> If the numbers are mostly 0x00 or 0xff it means that the Arduino is not 19:11:45.721 -> communicating with the nRF24 19:11:45.755 -> 19:11:45.755 -> STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0 19:11:45.821 -> RX_ADDR_P0-1 = 0x0000000000 0x0000000000 19:11:45.855 -> RX_ADDR_P2-5 = 0x00 0x00 0x00 0xff 19:11:45.889 -> TX_ADDR = 0xffffffffff 19:11:45.924 -> RX_PW_P0-6 = 0xff 0x00 0x00 0x00 0x00 0x00 19:11:45.992 -> EN_AA = 0x00 19:11:45.992 -> EN_RXADDR = 0x00 19:11:46.026 -> RF_CH = 0x00 19:11:46.026 -> RF_SETUP = 0x00 19:11:46.060 -> CONFIG = 0x00 19:11:46.060 -> DYNPD/FEATURE = 0x00 0x00 19:11:46.095 -> Data Rate = 1MBPS 19:11:46.129 -> Model = nRF24L01 19:11:46.129 -> CRC Length = Disabled 19:11:46.164 -> PA Power = PA_MIN 19:11:46.199 -> 19:11:46.199 -> 19:11:46.199 -> AND NOW WITH ADDRESS AAAxR 0x41 41 41 78 52 ON P1 19:11:46.268 -> and 250KBPS data rate 19:11:46.268 -> 19:11:46.268 -> STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0 19:11:46.336 -> RX_ADDR_P0-1 = 0x0000000000 0x0000000000 19:11:46.403 -> RX_ADDR_P2-5 = 0x00 0x00 0x00 0xff 19:11:46.436 -> TX_ADDR = 0xffffffffff 19:11:46.469 -> RX_PW_P0-6 = 0xff 0x00 0x00 0x00 0x00 0x00 19:11:46.503 -> EN_AA = 0x00 19:11:46.536 -> EN_RXADDR = 0x00 19:11:46.536 -> RF_CH = 0x00 19:11:46.571 -> RF_SETUP = 0x00 19:11:46.571 -> CONFIG = 0x00 19:11:46.605 -> DYNPD/FEATURE = 0x00 0x00 19:11:46.638 -> Data Rate = 1MBPS 19:11:46.638 -> Model = nRF24L01 19:11:46.672 -> CRC Length = Disabled 19:11:46.705 -> PA Power = PA_MIN 19:11:46.705 -> 19:11:46.705 -> po wgraniu tego kodu do sprawdzania polaczenia pomiedzy arduino a nrfem ( w tym przypadku joystick shield + arduino i nrf. Jest duzo tych 0x00 wiec cos jest nie tak. // 18 Mar 2018 - simple program to verify connection between Arduino // and nRF24L01+ // This program does NOT attempt any communication with another nRF24 #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <printf.h> #define CE_PIN 9 #define CSN_PIN 10 const byte thisSlaveAddress[5] = {'R','x','A','A','A'}; RF24 radio(CE_PIN, CSN_PIN); char dataReceived[10]; // this must match dataToSend in the TX bool newData = false; void setup() { Serial.begin(9600); printf_begin(); Serial.println("CheckConnection Starting"); Serial.println(); Serial.println("FIRST WITH THE DEFAULT ADDRESSES after power on"); Serial.println(" Note that RF24 does NOT reset when Arduino resets - only when power is removed"); Serial.println(" If the numbers are mostly 0x00 or 0xff it means that the Arduino is not"); Serial.println(" communicating with the nRF24"); Serial.println(); radio.begin(); radio.printDetails(); Serial.println(); Serial.println(); Serial.println("AND NOW WITH ADDRESS AAAxR 0x41 41 41 78 52 ON P1"); Serial.println(" and 250KBPS data rate"); Serial.println(); radio.openReadingPipe(1, thisSlaveAddress); radio.setDataRate( RF24_250KBPS ); radio.printDetails(); Serial.println(); Serial.println(); } void loop() { } A tutaj sam nrf i arduino: 19:17:14.033 -> CheckConnection Starting 19:17:14.033 -> 19:17:14.033 -> FIRST WITH THE DEFAULT ADDRESSES after power on 19:17:14.101 -> Note that RF24 does NOT reset when Arduino resets - only when power is removed 19:17:14.168 -> If the numbers are mostly 0x00 or 0xff it means that the Arduino is not 19:17:14.271 -> communicating with the nRF24 19:17:14.304 -> 19:17:14.304 -> STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 19:17:14.372 -> RX_ADDR_P0-1 = 0x3130303030 0x4141417852 19:17:14.405 -> RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6 19:17:14.438 -> TX_ADDR = 0xe7e7e7e7e7 19:17:14.472 -> RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00 19:17:14.539 -> EN_AA = 0x3f 19:17:14.539 -> EN_RXADDR = 0x02 19:17:14.572 -> RF_CH = 0x4c 19:17:14.572 -> RF_SETUP = 0x01 19:17:14.606 -> CONFIG = 0x0e 19:17:14.606 -> DYNPD/FEATURE = 0x00 0x00 19:17:14.640 -> Data Rate = 1MBPS 19:17:14.674 -> Model = nRF24L01+ 19:17:14.674 -> CRC Length = 16 bits 19:17:14.674 -> PA Power = PA_MIN 19:17:14.708 -> 19:17:14.708 -> 19:17:14.708 -> AND NOW WITH ADDRESS AAAxR 0x41 41 41 78 52 ON P1 19:17:14.775 -> and 250KBPS data rate 19:17:14.775 -> 19:17:14.775 -> STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 19:17:14.842 -> RX_ADDR_P0-1 = 0x3130303030 0x4141417852 19:17:14.911 -> RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6 19:17:14.946 -> TX_ADDR = 0xe7e7e7e7e7 19:17:14.981 -> RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00 19:17:15.016 -> EN_AA = 0x3f 19:17:15.051 -> EN_RXADDR = 0x02 19:17:15.051 -> RF_CH = 0x4c 19:17:15.086 -> RF_SETUP = 0x21 19:17:15.086 -> CONFIG = 0x0e 19:17:15.121 -> DYNPD/FEATURE = 0x00 0x00 19:17:15.154 -> Data Rate = 250KBPS 19:17:15.154 -> Model = nRF24L01+ 19:17:15.187 -> CRC Length = 16 bits 19:17:15.221 -> PA Power = PA_MIN 19:17:15.221 -> 19:17:15.221 -> EDIT: Zmienilem joystick shield na inny bo mam drugi i przesyla dane (wczesniej zrobiilem ten test i nie bylo duzo tych 0x00. Boze ale mam przeboje. Wszystko dziala tak jak nalezy - winny byl joystick shield. Na cale szczescie mialem zapasowy.
  19. Zaczalem od komunikacje pomiedzy dwoma nrfami. Wgralem kod do sprawdzania z robotbloga (nie wiem czy moge kopiowac, ale skopiowalem zeby nie trzeba bylo wchodzic): kod nadajnika #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #define CE_PIN 9 #define CSN_PIN 10 #define JOYSTICK_X A0 #define JOYSTICK_Y A1 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int joystick[6]; int upbut = 2; int rightbut = 3; int downbut = 4; int leftbut = 5; void setup() { Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); pinMode(upbut,INPUT); digitalWrite(upbut,LOW); pinMode(rightbut,INPUT); digitalWrite(upbut,LOW); pinMode(downbut,INPUT); digitalWrite(downbut,LOW); pinMode(leftbut,INPUT); digitalWrite(leftbut,LOW); } void loop() { joystick[0] = analogRead(JOYSTICK_X); joystick[1] = analogRead(JOYSTICK_Y); joystick[2] = digitalRead(upbut); joystick[3] = digitalRead(rightbut); joystick[4] = digitalRead(downbut); joystick[5] = digitalRead(leftbut); radio.write( joystick, sizeof(joystick) ); Serial.print("X = "); Serial.print(analogRead(JOYSTICK_X)); Serial.print(" Y = "); Serial.print(analogRead(JOYSTICK_Y)); Serial.print(" Y = "); Serial.print(" Up = "); Serial.print(digitalRead(upbut)); Serial.print(" Right = "); Serial.print(digitalRead(rightbut)); Serial.print(" Down = "); Serial.print(digitalRead(downbut)); Serial.print(" Left = "); Serial.println(digitalRead(leftbut)); } kod odbiornika: #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define CE_PIN 9 #define CSN_PIN 10 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int joystick[6]; void setup() { Serial.begin(9600); delay(1000); Serial.println("START"); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening();; } void loop() { if ( radio.available() ) { bool done = false; while (!done) { done = radio.read( joystick, sizeof(joystick) ); int joystickX = map(joystick[0],0,1023,0,180); int joystickY = map(joystick[1],0,1023,0,180); int upbut = joystick[2]; int rightbut = joystick[3]; int downbut = joystick[4]; int lefttbut = joystick[5]; Serial.print("X = "); Serial.print(joystickX); Serial.print(" Y = "); Serial.print(joystickY); Serial.print(" Up = "); Serial.print(joystick[2]); Serial.print(" Right = "); Serial.print(joystick[3]); Serial.print(" Down = "); Serial.print(joystick[4]); Serial.print(" Left = "); Serial.println(joystick[5]); delay(15); } } else { Serial.println("Nie znaleziono nadajnika"); } } Do tego zmienilem linijke: void loop() { if ( radio.available() ) { bool done = false; while (!done) { done = radio.read( joystick, sizeof(joystick) ); int joystickX = map(joystick[0],0,1023,0,180); int joystickY = map(joystick[1],0,1023,0,180); (...) na void loop() { if ( radio.available() ) { radio.read( joystick, sizeof(joystick) ); int joystickX = map(joystick[0],0,1023,0,180); int joystickY = map(joystick[1],0,1023,0,180); (...) bo nie chcialo sie kompilowac i to rozwiazanie znalazlem w sieci: https://forum.arduino.cc/index.php?topic=302380.0 I pozniej w monitorze portu szeregowego nadajnika pokazuje mi te wspolrzedne joysticka i zmieniaja sie przy zmianie polozenia joysticka oraz stany na przyciskach. Z drugiej strony w monitorze portu szeregowego odbiornika wyskakuje ze "nie znaleziono nadajnika" i jak ruszam to nie pokazuje wspolrzednych joysticka i stanow na przyciskach podczas klikania jak w przypadku nadajnika. Juz nie wiem co robic kompletnie.
  20. Przechylam joystick w osi y na przod -> ponad 600 = 0 reakcji ze strony silnikow, tak samo w druga strone. Ide pokombinowac z tym zasilaniem. https://drive.google.com/open?id=1-HuTl9_AoYUIMBWx9DNJNppB8HiJU4-C Czasami cos przycina i te wartosci powoli sie pojawiaja gdy zmieniam polozenie joysticka.
  21. Na wstepie dziekuje, ze sie zainteresowales tematem bo to dla mnie bardzo wazne W zalaczniku jest schemat. Mam nadzieje ze jest czytelny. Zasilanie 6V z jest wpiete do gniazda zasilajacego 2.1/5.5 w arduino. Czyta pozycje joysticka jak przechylam w tyl i przod. Jest warunek, jesli zadnych z tych nie jest spelniony to silniki nie kreca sie (jak joystick jest na srodku): else{ digitalWrite(OUT1,0); digitalWrite(OUT2,0); digitalWrite(OUT3,0); digitalWrite(OUT4,0); } Czy raczej zrobic to tak?: if ( 300 < Y < 350) { digitalWrite(OUT1,0); digitalWrite(OUT2,0); digitalWrite(OUT3,0); digitalWrite(OUT4,0); } No coz ide dalej testowac.
  22. Czesc. Zmontowalem sobie uklad ktory bedzie sterowal silnikami: przod i tyl. Program wgrany do nadajnika i odbiornika, ladnie pieknie wszystko pokazane w monitorze portu szergowego, ze pozycje joysticka sa odczytane lecz silniki nie ruszaja sie. Moze mi ktos wytlumaczyc dlaczego tak sie dzieje? Zasilanie 2x 18650 przetwornica wyregulowane na 6V - silniki + arduino uno/ joystick shield + uno - zasilanie z portu usb. Silniki normalne kreca sie podpiete jak na schemacie i podanie tych wartosci co w kodzie, ale bez nrfa i joysticka wiec sa sprawne oraz mostek h. Sprawdzalem tez na innym joystick shieldzie i tez tez nie dziala Czasami mi w terminalu takie cos wyskakuje (zalacznik) To nie sa bledy? RF24 wersja 1.1.6 Kod Nadajnika (joystick shield+ uno): #include <SPI.h> #include "RF24.h" #define ce 9 #define csn 10 RF24 myRadio (ce, csn); byte addresses[][6] = {"0"}; struct package { int X=1; int Y=1; }; typedef struct package Package; Package data; void setup() { Serial.begin(115200); delay(100); myRadio.begin(); myRadio.setChannel(115); myRadio.setPALevel(RF24_PA_MIN); myRadio.setDataRate( RF24_250KBPS ) ; myRadio.openWritingPipe( addresses[0]); delay(100); } void loop() { myRadio.write(&data, sizeof(data)); Serial.print("X:"); Serial.print(data.X); Serial.print(" Y"); Serial.println(data.Y); data.X = analogRead(A0); data.Y = analogRead(A1); delay(100); } Kod odbiornika (uno + silniki): #include <SPI.h> #include "RF24.h" #define ce 9 #define csn 10 RF24 myRadio (ce, csn); struct package { int X=351; int Y=328; }; byte addresses[][6] = {"0"}; int OUT1 = 5; int OUT2 = 6; int OUT3 = 7; int OUT4 = 8; typedef struct package Package; Package data; void setup() { Serial.begin(115200); delay(1000); myRadio.begin(); myRadio.setChannel(115); myRadio.setPALevel(RF24_PA_MAX); myRadio.setDataRate( RF24_250KBPS ) ; myRadio.openReadingPipe(1, addresses[0]); myRadio.startListening(); pinMode(OUT1, OUTPUT); pinMode(OUT2, OUTPUT); pinMode(OUT3, OUTPUT); pinMode(OUT4, OUTPUT); } void loop() { if ( myRadio.available()) { while (myRadio.available()) { myRadio.read( &data, sizeof(data) ); } Serial.print("X:"); Serial.print(data.X); Serial.print(" Y"); Serial.println(data.Y); int X = data.X; int Y = data.Y; if(Y>400){ digitalWrite(OUT1,1); digitalWrite(OUT2,0); digitalWrite(OUT3,0); digitalWrite(OUT4,1); }else if(Y<200){ digitalWrite(OUT1,0); digitalWrite(OUT2,1); digitalWrite(OUT3,1); digitalWrite(OUT4,0); } else{ digitalWrite(OUT1,0); digitalWrite(OUT2,0); digitalWrite(OUT3,0); digitalWrite(OUT4,0); } } }
  23. Szkola programowania Stefana Prata, ale nie od deski do deski tylko zagadnienia ktore byly mi potrzebne i to pol roku temu i do pare tematow z cpp0x z tego co pamietam. Mialem malo wspolnego z programowaniem dlatego mam teraz wielki problem. Zrobic kurs to jedno bo wszystko masz na przykladach, a pozniej zrobic cos samemu zeby dzialalo to trzeba glowkowac. Nawet proste funkcje nie chca mi dzialac.
  24. Dziekuje za odpowiedz Mozna bardziej rozwinac mysl o budowie tego licznika. Nie za bardzo rozumiem jak by mial ten kod wygladac. Troche pobuszowalem po sieci i nie moge znalezc informacji o budowie licznika i wykorzystaniu go do takiej funkcji. O drzenie stykow to w przypadku tego rozwiazania jakbym uzywal jeden przycisk do dwoch funkcji - 1. wlaczanie lewych obrotow, 2. zatrzymanie sie -zytalem ze odstepy czasowe zalatwiaja sprawe, a co jesli przypisze jedna funkcje do jednego przycisku - (bo jest ich 7 na joystick shield wiec mam pole do manewru) to nie bede musial kombinowac z tym timerem i eliminacja drzenia stykow? Szczerze mowiac to ciezko znalezc cokolwiek na ten temat. ;/ Chcialbym zeby kod byl najlatwiejszy do napisania poniewaz jestem bardzo slaby z programowania. Ewentualnie jakich zagadnien mam szukac w ksiazkach/sieci. edit: wgralem ten kod. Serwa ciagle kreca sie powoli w jedna strone, nie reaguja na ruch joysticka.
  25. Czesc. Podlaczylem serwa wedlug schematu w zalaczniku tylko zasilanie jest 6v z dwoch aku 18650 zamiast baterii 9v. Arduino uno i joystick shield zasilany bedzie z portu USB do komunikacji. Mialem problem z napisaniem programu zeby tym sterowac i nie jestem pewny czy go wgrywac zeby nie bylo fajerwerkow tak wiec wole sie zapytac czy kod jest poprawny. Zostal napisany prze zemnie sugerujac sie projektami z sieci oraz roznych poradnikow. Jestem raczej zielony w te klocki tak wiec jest tam pewnie masa bledow. ;/ Celem jest aby dwa serwa (micro praca ciagla 360) krecily sie do przodu jesli skieruje joystick na pozycje gorna, a w przypadku krecenia w druga strone to joystick skierowany w dol (poruszanie tylko w osi y - przod, tyl). Trzecie serwo typu standard tez o pracy ciaglej 360 po nacisneciu przycisku na joystick shield np. (A) ma krecic sie w jedna strone - ponowne jego nacisniecie spowoduje zatrzymanie sie serwomechanizmu, a po nacisnieciu np. przycisku (B) ma krecic sie w druga strone i tez po ponownym nacisnieciu ma sie zatrzymac serwomechanizm. Tego zabraklo w kodzie bo nie mam pojecia jak za to sie zabrac. Bardzo prosze o pomoc o sprawdzenie kodu oraz jesli cos nie gra to nakierowanie czego mam sie douczyc i czego szukac. Dziekuje bardzo z gory edit: Przy okazji zapytam, czy plytka stykowa wytrzyma ok. 3A - przy zablokowanych walach (jak wlacze wszystkie serwa)? //JOYSTICK SHIELD + UNO #include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #define CE_PIN 9 #define CSN_PIN 10 #define y_axis A1 // y axis #define button1 8 // joystick button #define button2 2 // A button #define button3 3 // B button #define button4 4 // C button #define button5 5 // D button #define button6 6 // E button #define button7 7 // F button const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int data[8]; void setup() { radio.begin(); radio.openWritingPipe(pipe); pinMode(button1, INPUT); pinMode(button2, INPUT); pinMode(button3, INPUT); pinMode(button4, INPUT); pinMode(button5, INPUT); pinMode(button6, INPUT); pinMode(button7, INPUT); } void loop() { data[0] = analogRead(y_axis); data[1] = digitalRead(button1); data[2] = digitalRead(button2); data[3] = digitalRead(button3); data[4] = digitalRead(button4); data[5] = digitalRead(button5); data[6] = digitalRead(button6); data[7] = digitalRead(button7); radio.write( data, sizeof(data) ); } // UNO + serwa #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #include <Servo.h> #define A1 3 // pin PWM - sygnal SERVO micro [servo1m] #define A2 5 // pin PWM - sygnal SERVO micro [servo2m] #define A3 6 // pin PWM - sygnal SERVO standaard [servo3s] Servo servo1m, servo2m, servo3s; int pozycja = 0; int zmiana = 6; //NRF CONFIG { #define CE_PIN 9 #define CSN_PIN 10 const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(CE_PIN, CSN_PIN); int data [8]; // } void setup() { pinMode(A1, OUTPUT); pinMode(A2, OUTPUT); pinMode(A3, OUTPUT); servo1m.attach(A1); servo2m.attach(A2); // servo3s.attach(A3); Serial.begin(9600); radio.begin(); radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1,pipe); radio.startListening(); } void przod() { if (pozycja < 360) { //Jeśli pozycja mieści się w zakresie servo1m.write(pozycja); //Wykonaj ruch pierwszego serwa servo2m.write(pozycja); //Wykonaj ruch drugiego serwa } pozycja = pozycja + zmiana; // ruch w przod (+) } void tyl() { if (pozycja < 360) { //Jeśli pozycja mieści się w zakresie 0-360 servo1m.write(pozycja); //Wykonaj ruch pierwszego serwa servo2m.write(pozycja); //Wykonaj ruch drugiego serwa } pozycja = pozycja - zmiana; // ruch w tyl (-) } void loop() { if ( radio.available() ) { radio.read( data, sizeof(data) ); Serial.print("Y: "); Serial.println(data[0]); odczyt(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]); } } void odczyt(int y_axis, int button1, int button2, int button3, int button4, int button5, int button6, int button7) { if(y_axis>600) { przod(); } else if(y_axis<400) { tyl(); } }
×
×
  • Utwórz nowe...