Mano robotica

Share

Ecco un esempio di codice Arduino per controllare una semplice mano robotica con 5 dita, utilizzando un Arduino e alcuni servomotori. Questo codice permette di controllare manualmente la posizione delle dita della mano.

Nota: Assicurati di avere installato la libreria “Servo” nell’IDE di Arduino prima di caricare questo codice.

#include <Servo.h>

// Definizione dei pin dei servomotori
const int thumbPin = 9;
const int indexPin = 10;
const int middlePin = 11;
const int ringPin = 12;
const int pinkyPin = 13;

// Creazione degli oggetti Servo per controllare i servomotori
Servo thumbServo;
Servo indexServo;
Servo middleServo;
Servo ringServo;
Servo pinkyServo;

// Variabili per memorizzare l'angolo di ciascuna dita
int thumbAngle = 90;
int indexAngle = 90;
int middleAngle = 90;
int ringAngle = 90;
int pinkyAngle = 90;

void setup() {
  // Attiva la comunicazione seriale per il debug (opzionale)
  Serial.begin(9600);

  // Collega gli oggetti Servo ai pin corrispondenti
  thumbServo.attach(thumbPin);
  indexServo.attach(indexPin);
  middleServo.attach(middlePin);
  ringServo.attach(ringPin);
  pinkyServo.attach(pinkyPin);

  // Posiziona tutte le dita nella posizione di riposo
  thumbServo.write(thumbAngle);
  indexServo.write(indexAngle);
  middleServo.write(middleAngle);
  ringServo.write(ringAngle);
  pinkyServo.write(pinkyAngle);
}

void loop() {
  // Leggi l'input seriale per controllare le dita
  if (Serial.available() > 0) {
    char command = Serial.read();
    switch (command) {
      case 'T': // Pollice
        thumbAngle = readServoAngle();
        thumbServo.write(thumbAngle);
        break;
      case 'I': // Indice
        indexAngle = readServoAngle();
        indexServo.write(indexAngle);
        break;
      case 'M': // Medio
        middleAngle = readServoAngle();
        middleServo.write(middleAngle);
        break;
      case 'R': // Anulare
        ringAngle = readServoAngle();
        ringServo.write(ringAngle);
        break;
      case 'P': // Mignolo
        pinkyAngle = readServoAngle();
        pinkyServo.write(pinkyAngle);
        break;
    }
  }
}

// Funzione per leggere l'angolo desiderato dalla seriale
int readServoAngle() {
  int angle = Serial.parseInt();
  // Assicurati che l'angolo sia compreso tra 0 e 180 gradi
  angle = constrain(angle, 0, 180);
  return angle;
}

Questo codice consente di controllare la posizione delle dita della mano robotica inviando comandi attraverso la comunicazione seriale. Puoi inviare comandi tramite il Monitor Seriale dell’IDE di Arduino. Ad esempio, inviando “T90” puoi posizionare il pollice a 90 gradi. Inviando “I120” puoi posizionare l’indice a 120 gradi. E così via.

Assicurati di collegare correttamente i servomotori ai pin specificati nel codice e di alimentarli in modo adeguato, tenendo presente che alcuni servomotori possono richiedere un’alimentazione esterna.