Robotica educativa/Dal computer ad Arduino

Wikibooks, manuali e libri di testo liberi.
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.

Led lampeggiante con arduino

Codice[modifica]

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).