W ostatnim artykule dotyczącym kursu Arduino stwierdziliśmy że dzięki modułowi joysticka możemy bardzo prosto i szybko zbudować aparaturę RC.
Głównie z tego powodu, że mamy możliwość bezpośredniego połączenia go z płytką Arduino oraz układem radiowym nRF24l01, o którym była mowa kilka artykułów wcześniej.
Koszt takiej aparatury będzie o wiele mniejszy niż zwykłej wersji, którą możemy dostać w sklepie.
Moduł joysticka Arduino jest w postaci Shielda
Dzięki czemu nie będziemy musieli się martwić o plątające się kable, ponieważ ich nie będzie.
Co będzie nam potrzebne?
– Arduino (w moim wypadku będzie to UNO ponieważ jest to najwygodniejsze rozwiązanie) x2
Gdy już mamy wszystkie komponenty możemy przejść do budowy.
Pierwszą czynnością jaką musimy wykonać jest połączenie pierwszego Arduino z naszym Joytick shield v1.A
następnie musimy połączyć nasz shield joysticka z modułem nRF24l01.
Drugie Arduino łączymy z modułem nRF24l01, według schematu.
W kwestii elektronicznej to by było na tyle.
Teraz przejdźmy do kodu, który jak pewnie możecie się domyślać nie jest zbyt skomplikowany. Wystarczy na swoisty sposób połączyć skrypty, których już używaliśmy w poprzednich artykułach.
W moim przypadku wygląda to mniej więcej tak:
KOD NADAJNIKA:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#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"); } } |
Jeżeli jakaś część kodu jest dla Ciebie nie zrozumiała polecam wrócić do artykułu o module joysticka i nRF24l01.
Ja zastosowałem tylko komunikację oraz przesyłanie wszystkich zmiennych do Monitora szeregowego. Ty możesz to zmieniać według własnego uznania.
To by było na tyle w tym artykule. Dajcie znać w komentarzach jeżeli coś będzie niezrozumiałe lub zbyt skomplikowane.
Jeżeli masz możliwość skorzystania z drukarki 3D możesz wydrukować sobie wygodną obudowę http://www.thingiverse.com/thing:263125 .
W przyszłości mam zamiar dodać jeszcze moduł żyroskopu dzięki którymi mielibyśmy możliwość innej możliwości sterowania. Na przykład joystickiem i przyciskami sterowalibyśmy Dronem a za pomocą ruchów aparatury Gimbalem 🙂
Jeżeli chcieli byście o tym przeczytać dajcie znać w komentarzach.
Poradnik powstaje dzięki współpracy ze sklepem internetowym XBot.pl – roboty to lubią