Robotica educativa/Dal computer ad Arduino

Indice del libro


La comunicazione seriale

modifica

In questo capito verrà illustrato come sfruttare la comunicazione seriale per inviare comandi ad Arduino dal proprio computer. L'idea di partenza è – come sempre – la più semplice e accessibile: accendere e spegnere un led.

Schema circuitale

modifica

Di seguito lo schema di montaggio. La resistenza può essere posta sia prima, sia dopo il collegamento ad Arduino.

Da notare che il circuito è identico a quello utilizzato per l'invio di un SOS, ma il codice è profondamente differente, come tutto quello che si verificherà. È bene ricordare anche che – avendo utilizzato il led collegato al pin 13 – il circuito è opzionale, poiché si illuminerà anche il led integrato nella scheda.

 

Le novità introdotte in questo codice sono il tipo char, per definire un singolo carattere; e il costrutto switch, che, esegue una porzione di codice in base al dato in input.

In questo caso (essendo due i casi di interesse) si sarebbe potuto utilizzare anche i costrutti if/else, ma un codice così strutturato si presta a numerose espansioni, potendo pilotare ricevere differenti comandi e gestirli tutti con un singolo costrutto.

Il comando break; viene inserito per uscire dal ciclo, una volta soddisfatto un criterio, visto che tutti gli altri sarebbero non soddisfatti. Così facendo il codice è più performante e veloce.

#define led 13                  // pin in cui è connesso il LED
#define bitrate 9600            // velocità di comunicazione con la porta seriale

const char keyOn  = 'a';        // usa il tasto 'a' per l'accensione
const char keyOff = 's';        // usa il tasto 's' per lo spegnimento
char tastiera;                  // variabile che memorizza il flusso proveniente dal PC

// Inizializza la porta seriale e l'uscita del LED
void setup() {
  Serial.begin(bitrate);
  pinMode(led, OUTPUT);
}

void loop() {
  tastiera = Serial.read();     // legge i dati provenienti dalla porta seriale
  switch(tastiera){
    case keyOn:                 // nel caso riceva 'a'
      digitalWrite(led, HIGH);  // accende il LED
      break;
    case keyOff:                // nel caso riceva 's'
      digitalWrite(led, LOW);   // spegne il LED
      break;
    default:                    // in ogni altro caso
      Serial.flush();           // attende il termine del flusso di dati seriali
      break;
  }
}

Espansioni suggerite

modifica
  • Sostituire il led con un altro attuatore (come un motorino per avviare e fermare una ventola);
  • inserire ulteriori comandi che attivino altri attuatori;
  • infine, con un relè, si possono controllare dispositivi di potenza per gestire la domotica di casa (da svolgere solo se si è ben consapevoli di quel che si sta facendo).