Pojazd sterowany NRF24L01 i Arduino
W tym projekcie wykonam samochód zdalnie sterowany za pomocą Arduino nano, L298N, NRF24L01 oraz joysticka. Samochód sterowany jest za pomocą joysticka, a moduł NRF24L01 wysyła wartości do odbiornika znajdującego się w samochodzie. Prędkość silników jest kontrolowana proporcjonalnie. Silniki są sterowane przez moduł L298N i zasilane sześcioma bateriami AA (R6). Do obsługi modułu NRF24L01 wymagana jest biblioteka NRF24-master.


Sketche i biblioteka
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
/* * Arduino Car NRF24L01 * * ForbiddenBit.com */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define enA 6 #define in1 7 #define in2 5 #define enB 3 #define in3 4 #define in4 2 RF24 radio(8,9); // CE, CSN const byte address[6] = "00001"; char receivedData[32] = ""; int xAxis, yAxis; int motorSpeedA = 0; int motorSpeedB = 0; int joystick[2]; void setup() { pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MAX); radio.startListening(); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } void loop() { if (radio.available()) { // If the NRF240L01 module received data radio.read( joystick, sizeof(joystick) ); radio.read(&receivedData, sizeof(receivedData)); yAxis = joystick[0]; xAxis = joystick[1]; Serial.println(yAxis); Serial.println(xAxis); } if (yAxis < 470) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); motorSpeedA = map(yAxis, 470, 0, 0, 255); motorSpeedB = map(yAxis, 470, 0, 0, 255); } else if (yAxis > 550) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); motorSpeedA = map(yAxis, 550, 1023, 0, 255); motorSpeedB = map(yAxis, 550, 1023, 0, 255); } else { motorSpeedA = 0; motorSpeedB = 0; } if (xAxis < 470) { int xMapped = map(xAxis, 470, 0, 0, 255); motorSpeedA = motorSpeedA - xMapped; motorSpeedB = motorSpeedB + xMapped; // Confine the range from 0 to 255 if (motorSpeedA < 0) { motorSpeedA = 0; } if (motorSpeedB > 255) { motorSpeedB = 255; } } if (xAxis > 550) { int xMapped = map(xAxis, 550, 1023, 0, 255); motorSpeedA = motorSpeedA + xMapped; motorSpeedB = motorSpeedB - xMapped; if (motorSpeedA > 255) { motorSpeedA = 255; } if (motorSpeedB < 0) { motorSpeedB = 0; } } if (motorSpeedA < 70) { motorSpeedA = 0; } if (motorSpeedB < 70) { motorSpeedB = 0; } analogWrite(enA, motorSpeedA); // Send PWM signal to motor A analogWrite(enB, motorSpeedB); // Send PWM signal to motor B } |
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 |
/* * Arduino Car NRF24L01 * * ForbiddenBit.com */ #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(8,9); // CE, CSN const byte address[6] = "00001"; char xyData[32] = ""; int joystick[2]; void setup() { Serial.begin(9600); radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MAX); radio.stopListening(); } void loop() { joystick[0] = analogRead(A4); joystick[1] = analogRead(A3); radio.write( joystick, sizeof(joystick) ); } |