Robot telecomandato ad infrarossi

Share

Ecco un esempio di codice Arduino per un robot telecomandato tramite infrarossi utilizzando un modulo ricevitore IR e un modulo motor shield (ponte H) per controllare i motori. Questo codice è solo un esempio di base e potrebbe richiedere modifiche o adattamenti in base al tuo hardware specifico.

Assicurati di avere installata la libreria IRremote per Arduino per gestire i segnali IR.

#include <IRremote.h>
#include <AFMotor.h>

// Pin del ricevitore IR
const int receiverPin = 11;

// Definizione dei pulsanti del telecomando IR
#define BUTTON_FORWARD 0xFFA25D
#define BUTTON_BACKWARD 0xFF629D
#define BUTTON_LEFT 0xFFE21D
#define BUTTON_RIGHT 0xFF22DD
#define BUTTON_STOP 0xFF02FD

// Inizializza il ricevitore IR
IRrecv irrecv(receiverPin);
decode_results results;

// Inizializza il modulo motor shield (ponte H)
AF_DCMotor motor1(1); // Motore 1 collegato al M1
AF_DCMotor motor2(2); // Motore 2 collegato al M2

void setup() {
  Serial.begin(9600);
  // Avvia il ricevitore IR
  irrecv.enableIRIn();
}

void loop() {
  if (irrecv.decode(&results)) {
    // Verifica il codice ricevuto dal telecomando IR
    unsigned long key_value = results.value;
    switch (key_value) {
      case BUTTON_FORWARD:
        moveForward();
        break;
      case BUTTON_BACKWARD:
        moveBackward();
        break;
      case BUTTON_LEFT:
        turnLeft();
        break;
      case BUTTON_RIGHT:
        turnRight();
        break;
      case BUTTON_STOP:
        stopMoving();
        break;
      default:
        // Gestire altri codici IR, se necessario
        break;
    }
    irrecv.resume(); // Ricevi il prossimo valore
  }
}

// Funzioni per il movimento del robot

void moveForward() {
  motor1.setSpeed(255);
  motor2.setSpeed(255);
  motor1.run(FORWARD);
  motor2.run(FORWARD);
}

void moveBackward() {
  motor1.setSpeed(255);
  motor2.setSpeed(255);
  motor1.run(BACKWARD);
  motor2.run(BACKWARD);
}

void turnLeft() {
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor1.run(BACKWARD);
  motor2.run(FORWARD);
}

void turnRight() {
  motor1.setSpeed(200);
  motor2.setSpeed(200);
  motor1.run(FORWARD);
  motor2.run(BACKWARD);
}

void stopMoving() {
  motor1.setSpeed(0);
  motor2.setSpeed(0);
  motor1.run(RELEASE);
  motor2.run(RELEASE);
}

Nota che questo codice presume l’uso di un telecomando IR standard con i pulsanti “Avanti”, “Indietro”, “Sinistra”, “Destra” e “Stop”. Se il tuo telecomando ha codici diversi per i pulsanti, dovrai aggiornare le costanti ‘BUTTON_FORWARD‘, ‘BUTTON_BACKWARD‘, ‘BUTTON_LEFT‘, ‘BUTTON_RIGHT‘ e ‘BUTTON_STOP‘ con i nuovi valori dei codici IR corrispondenti ai pulsanti del tuo telecomando.