Ecco un esempio di codice Arduino per controllare un robot car utilizzando un joystick analogico e due motori collegati ai pin del driver del motore L298N. Assicurati di collegare correttamente i pin del driver del motore e del joystick all’Arduino prima di caricare il codice.
// Includi la libreria per la gestione dei motori
#include <AFMotor.h>
// Definisci i pin del joystick analogico
#define JOYSTICK_X_PIN A0
#define JOYSTICK_Y_PIN A1
// Definisci i pin del driver del motore
#define MOTOR_A_EN 9
#define MOTOR_A_IN1 8
#define MOTOR_A_IN2 7
#define MOTOR_B_EN 10
#define MOTOR_B_IN1 12
#define MOTOR_B_IN2 11
// Crea un oggetto per gestire i motori
AF_DCMotor motorA(1);
AF_DCMotor motorB(2);
void setup() {
// Inizializza la comunicazione seriale a 9600 bps
Serial.begin(9600);
// Inizializza i pin del driver del motore come OUTPUT
pinMode(MOTOR_A_EN, OUTPUT);
pinMode(MOTOR_A_IN1, OUTPUT);
pinMode(MOTOR_A_IN2, OUTPUT);
pinMode(MOTOR_B_EN, OUTPUT);
pinMode(MOTOR_B_IN1, OUTPUT);
pinMode(MOTOR_B_IN2, OUTPUT);
// Imposta la velocità iniziale dei motori a 0
motorA.setSpeed(0);
motorB.setSpeed(0);
}
void loop() {
// Leggi i valori del joystick analogico
int joystickXValue = analogRead(JOYSTICK_X_PIN);
int joystickYValue = analogRead(JOYSTICK_Y_PIN);
// Mappa i valori del joystick dai range 0-1023 a -255 a 255 per la velocità dei motori
int motorSpeedA = map(joystickYValue, 0, 1023, -255, 255);
int motorSpeedB = map(joystickYValue, 0, 1023, -255, 255);
// Aggiungi il valore dell'asse X per controllare la direzione
motorSpeedA += map(joystickXValue, 0, 1023, -100, 100);
motorSpeedB -= map(joystickXValue, 0, 1023, -100, 100);
// Limita i valori di velocità tra -255 e 255
motorSpeedA = constrain(motorSpeedA, -255, 255);
motorSpeedB = constrain(motorSpeedB, -255, 255);
// Controlla i motori con i valori calcolati
if (motorSpeedA >= 0) {
digitalWrite(MOTOR_A_IN1, HIGH);
digitalWrite(MOTOR_A_IN2, LOW);
} else {
digitalWrite(MOTOR_A_IN1, LOW);
digitalWrite(MOTOR_A_IN2, HIGH);
}
if (motorSpeedB >= 0) {
digitalWrite(MOTOR_B_IN1, HIGH);
digitalWrite(MOTOR_B_IN2, LOW);
} else {
digitalWrite(MOTOR_B_IN1, LOW);
digitalWrite(MOTOR_B_IN2, HIGH);
}
// Imposta la velocità dei motori
motorA.setSpeed(abs(motorSpeedA));
motorB.setSpeed(abs(motorSpeedB));
// Mostra la velocità dei motori sulla porta seriale (per debug)
Serial.print("Motor A Speed: ");
Serial.print(motorSpeedA);
Serial.print("\t Motor B Speed: ");
Serial.println(motorSpeedB);
}
In questo esempio, il joystick analogico controlla la velocità e la direzione dei motori. Sposta il joystick avanti e indietro per regolare la velocità, mentre spostandolo a sinistra e a destra controlli la direzione. Assicurati di avere installato la libreria AFMotor per Arduino, che gestisce il driver del motore L298N.
Ricorda di collegare correttamente l’alimentazione del motore L298N e gli altri collegamenti. Questo codice è solo un esempio di base e potrebbe essere necessario adattarlo in base al tuo hardware specifico e alle esigenze del tuo robot car.