Robot Car

Share

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.