Archivi tag: robot

ROB-O-COD – Linguaggi di programmazione alternativi per LEGO MINDSTORMS EV3

Durante le attività di prove e registrazione della trasmissione ROB-O-COD negli studi televisivi di Rai Gulp ho portato con me la mio essere insegnante 🙂
Come sicuramente saprete il software di Lego di programmazione è un ottimo strumento,  adatto per tutti gli studenti che incominciano a programmare, ma il confronto con gli allievi mi ha portato a consigliare la sperimentazione di altri linguaggi di programmazione da utilizzare con l’EV3. Ho ritenuto il caso di realizzare un post in cui segnalare alcune soluzioni, che vanno ad integrasi alle risorse già segnalate in un precedente articolo di qualche anno fa.

MakeCode
Microsoft MakeCode è una piattaforma di programmazione online in grado di programmare l’EV3 e altri dispositivi elettronici, come ad esempio BBC micro:bit. MakeCode utilizza i blocchi grafici simili a quelli utilizzati in Scratch oppure la programmazione JavaScript.

Scratch
Scratch è sicuramente tra i linguaggi di programmazione a livello didattico più conosciuti. Nell’ultima versione, Scratch 3, l’utilizzo dell’EV3 è pienamente integrato e supportato, trovate ulteriori informazione su questo sito. Per maggiori informazioni seguire anche il link: https://scratch.mit.edu/ev3. Poiché so che molti colleghi di scuola elementare utilizzano Lego WeDo e desiderano sperimentare attività di gara simili a quelle proposte in ROB-O-COD, vi rimando per maggiori informazioni alla pagina specifica di Scratch per l’uso di WeDo 2.0 https://scratch.mit.edu/wedo

Python for EV3 (segnalazione di Gianluca Cannalire)
Programmare in Python su EV3 non è stato mai così semplice! Dal sito ufficiale Lego sarà sufficiente prelevare ed installare l’immagine MicroPython per EV3 su qualsiasi scheda micro SD, al riavvio del vostro Brick EV3 potrete immediatamente incominciare a programmare. Sul sito Lego documentazione completa con esempi.

LeJOS
LeJOS (che si pronuncia come la parola spagnola “lejos” che tradotta in italiano è “lontano”) è una Java Virtual Machine che supporta Java. Con LeJOS potrete programmare EV3, NXT e RCX.

Bricx Command Center 3.3 (segnalazione di Maurizio Pelizzone)
Bricx Command Center (BricxCC) è un IDE di programmazione open source, che permette la scrittura del programma, la compilazione e il trasferimento sul robot. L’IDE è gratuito e funziona su sistemi operativi Windows. BricxCC consente la scrittura in diversi linguaggi di programmazione tra i più noti l’NXC molto simile al C.

OpenRoberta
Open Roberta è un linguaggio di programmazione gratuito, cloud-based (quindi non avrete necessità di installare nulla sul vostro computer), funziona trascinando in un’apposita area di programmazione dei blocchi funzionali (ricorda un po’ Scratch) e potrete programmare robot LEGO EV3 e NXT.

RobotC
RobotC è un linguaggio di programmazione basato su C con un debugger software completamente integrato che supporta una vasta gamma di piattaforme hardware, potete utilizzarlo per Lego EV3, NXT, RCX. Sul sito di riferimento trovate moltissima documentazione.

Swift Playground
Swift Playgrounds è un ambiente di sviluppo integrato solo per iPad progettato esclusivamente per imparare a programmare con il linguaggio di programmazione Swift. In Swift Playground, potrete programmare il vostro robot, raccogliere informazioni da sensori e azionare motori. Per gli insegnanti che volessero utilizzare questo linguaggio di programmazione ed avere delle sperimentazioni da far svolgere agli studenti vi consiglio il libro gratuito: LEGO MINDSTORMS EV3 Animal Rescue Teacher’s Guide

EV3Python
EV3Python per tutti gli utenti che hanno dimestichezza con la programmazione in Python questa è una validissima soluzione per controllare vostro robot Lego Mindstorms EV3. Avrete necessità di utilizzare Microsoft Visual Studio Code

EV3 Basic
EV3 Basic è un linguaggio di programmazione testuale gratuito che non richiede nessuna modifica del firmware Lego brick o dell’installazione di uno specifico sistema operativo da installare sul brick. Utilizza Microsoft Small Basic. EV3 Basic è compatibile con tutti i motori e sensori EV3 e NXT e dispositivi bluetooth e Wifi Lego compatibili. Small Basic è disponibile in 17 lingue e l’estensione EV3 è disponibile in inglese, tedesco, spagnolo e francese.

EV3dev
EV3dev non è un linguaggio di programmazione, ma un sistema operativo basato su Linux Debian in grado di eseguire programmi realizzati con moltissimi linguaggi di programmazione inclusi C ++, Node.js e Python. Sul sito di riferimento trovate moltissime guide.

CoderZ
CoderZ ambiente di simulazione 3D per robot EV3. La programmazione può essere fatta con Blockly o Java. CoderZ è un prodotto commerciale e viene offerta la possibilità di utilizzarlo in prova per 14 giorni.

LabVIEW
LabVIEW per LEGO MINDSTORMS (LVLM) e LabVIEW for Education (LV4E) sono  ambienti di programmazione visuali. Il software di programmazione grafica standard di di Lego è stato realizzato usando LabVIEW, quindi LVLM rappresenta forse il passo successivo, soprattutto se state operando con studenti dei primi anni delle superiori. Troverete un’ambiente di sviluppo estremamente potente e versatile.

Per maggiori informazioni:

Buon Coding a tutti 🙂

ROB-O-COD un evento da replicare a scuola – lo racconterò a Fossano (Cn) il 6 giugno prossimo

Come ebbi modo di scrivere qualche tempo fa su Facebook, pur essendo docente di scuola superiore ho avuto la fortuna di insegnare a studenti e insegnanti di ogni ordine di scuola. Ogni nuova attività di formazione mi offre la possibilità di sperimentare tecnologie e modalità di comunicazione che poi se efficaci assemblo per costruire gli strumenti per le future lezioni.

Credo che uno dei momenti più ricchi per la mia formazione sia stata quella derivante dalle attività di laboratorio con gli studenti di scuola elementare, la loro creatività, il loro stupirsi ed il loro punto di vista richiede una progettazione completamente diversa da quella con allievi di scuola superiore.

In questi mesi sto dedicando alcune ore pomeridiane alla formazione di studenti di 4 elementare, gli obiettivi sono quelli che amo di più: Coding e Robotica.

Gli strumenti che utilizziamo sono molti: carta, matite, BBC micro:bit, Lego WeDo e anche Lego Mindstorms EV3 e proprio su quest’ultima tecnologia, anche se non ne era stato programmato l’utilizzo, ho avuto forte richiesta da parte degli studenti da quando, per aumentare il loro interesse nelle attività proposte, ho dato notizia della trasmissione ROB-O-COD:

“MICHELE anche noi vogliamo partecipare!
Costruiamo i campi, con il cartone e facciamo noi i mondi e ci insegni!”

Ora come rispondere a questa necessità?
Ai bambini bisogna rispondere! 🙂

La trasmissione ha un traget per ragazzi di scuola media con l’uso di tecnologie non proprio adatte ai più piccoli delle scuole elementari…

pensare pensare e ripensare…

Di seguito vi condivido una primissima bozza di attività da perfezionare, per velocità di scrittura inserisco direttamente quanto scritto nei miei appunti su Evernote spero che queste idee possano servire anche ad altri:

Bozza di progetto:

  • vediamo la prima puntata di ROB-O-COD in classe, al termine ne faccio nascere un confronto tra gli allievi per immaginare attività di gara e modalità di costruzione campi e robot.
  • I campi gara avranno una forma geometrica particolare (nota per il lettore: non ne posso parlare in questo post per non svelare troppe cose ma potreste intuire la forma dei tavoli dalla grafica della trasmissione 😉 ).
  • Spiego come costruire su carta questa specifica forma geometrica.
  • Con le dimensioni reali usate per realizzare i campi gara in trasmissione, replichiamo la forma con dello nastro di carta posto sul pavimento dell’aula, all’interno del perimetro dovranno gareggiare i robot programmati dai bambini.
  • Le dinamiche di gioco saranno molto simili a quelle della trasmissione: presenza di un pubblico, di tecno-disturbatori che dovranno creare difficoltà alla movimentazione dei robot, ecc…
  • Tecnologia dei robot: primo girone realizzazione di robot basati su BBC micro:bit la cui struttura sarà di cartone, secondo girone robot realizzati con Lego WeDo. I primi classificati potranno utilizzare il Lego Mindstorms EV3 messo a disposizione del Prof. (Io) per realizzare una gara su un singolo campo di gioco.
  • Scrivere le storie. Le storie potranno essere realizzate prendendo spunto da quanto proposto di giorno in giorno nella trasmissione oppure inventate dagli studenti (valutare attività da far svolgere durante le attività al mattino).
  • Come realizzare la scenografia? Scatole di cartone, bottiglie e bicchieri di plastica, mattoncini Lego.

Cercherò nelle prossime settimane condividere una versione aggiornata dell’attività. L’intero percorso sarà presentato ad un gruppo di insegnanti durante l’evento di Coding e Robotica per scuole medie organizzato dall’IIS Vallauri di Fossano il prossimo 6 giugno.

e ricordare: #ROB_O_COD è tutto un programma!

🙂

ROB-O-COD… tanto tempo fa era un LegoDuino

Mi è stato chiesto qualche giorno fa quale piattaforma fosse stata scelta per la realizzazione dei Robot per le gara per la trasmissione ROB-O-COD.

La scelta è stata attentamente valutata, anche con sperimentazioni pratiche che mi hanno coinvolto in prima persona.

Nel “brodo primordiale delle idee” 🙂 circa 1 anno fa, erano state considerate diverse tecnologie: BBC micro:bit, robot basati su Arduino e dopo tanto sperimentare e progettare, si è giunti a Lego Mindstorms EV3, i motivi di questa scelta, condivisi tra tutte le persone che hanno partecipato alla realizzazione della trasmissione sono stati molti, i principali: rapidità di assemblaggio e modifica dei robot in un ambito di studio televisivo, personalizzazione delle strutture, interfaccia grafica di programmazione intuitiva… e molto altro.

Nelle prime fasi di progetto ho valutato e sperimentato soluzioni miste, interfacciando, motori Lego Mindstorms con Arduino.
In passato avevo realizzato LegoDuino (seguendo il link potrete vedere un video dimostrativo) l’obiettivo era quello di realizzare dei robot Sumo, su di essi avevo inserito sensori ad ultrasuoni ed infrarossi.

Per ROB-O-COD, ho variato la versione Sumo in una versione cingolato su cui ho svolto le primissime sperimentazioni:

Ma come realizzare una soluzione mista?

Poiché mi è stato chiesto espressamente da alcuni colleghi, di seguito propongo un breve tutorial per la realizzazione di una struttura mista (Lego+Arduino) in modo che possiate poi da soli replicare le modalità di gara così come le potrete vedere nella trasmissione ROB-O-COD.

Il motore Lego Mindstorms, sia nella versione NXT che EV3 funziona ad una tensione di 9V e possiede al suo interno un encoders rotativo con una risoluzione di 1 grado, il controllo avviene mediante i cavi gialli e blu, nel tutorial che mostro però non utilizzerò l’encoder, ma solamente i due cavi bianco e nero utilizzati per l’invio del segnale PWM questi pin vengono chiamati MA0 e MA1 (tabella pin indicata di seguito).

Per effettuare il collegamento tra motore ed Arduino potete utilizzare una piccola interfaccia che permette di collegare i cavi BrickLink (noto anche come RJ12) in dotazione ai kit Lego Mindstorms, con la breadboard, i connettori si chiamano:

Breadboard Connector Kit for NXT or EV3 (seguite il link)

Nel caso non riusciste a procuravi questo adattatore, tagliate il cavo BrickLink ed utilizzate solamente i cavi bianco e nero, saranno questi che verranno collegati direttamente ad Arduino.

Di seguito la mappatura del cavo, per la numerazione fate riferimento a quanto indicato nell’immagine in cui è rappresentato il motore:

PIN    Colore    Nome
 1     Bianco    MA0
 2     Nero      MA1
 3     Rosso     GND
 4     Verde     4.3V dal mattoncini Lego
 5     Giallo    Tach01 (Encoder rotativo)
 6     Blu       Tach02 (Encoder rotativo)

Per procedere nella sperimentazione dovete munirvi di:

  • Scheda Arduino UNO R3 o simili
  • Scheda motore L298N
  • Breadboard Connector Kit for NXT or EV3 (in alternativa tagliate i cavi)
  • Uno o due motori Lego NXT o EV3

Il principio di funzionamento, inclusi i collegamenti, la programmazione e il funzionamento della scheda motori L298N sono identici a quelli che trovate nella lezione:

EduRobot – ASL (Alternanza Scuola Lavoro) – Manuale di costruzione – 2/3

Seguendo la lezione sarete in grado di realizzare un robot costituito da elementi Lego, scheda Arduino e sensori, tutto facilmente reperibile on-line a costi contenuti.

Aggiungo a quanto già indicato nella lezione segnalata sopra, gli schemi di collegamenti con la presenza dei motori Lego alimentati mediante una batteria esterna a 9V.

E se poi siete “puristi Lego” 🙂 allora partendo dai tutorial che trovate nell’ambiente di programmazione della versione LEGO MINDSTORMS EV3 Home Edition potrete realizzare qualcosa di molto simile a quanto mostrato nell’immagine che segue…

e ricordare: #ROB_O_COD è tutto un programma!

🙂

Supporto a T per profilati in alluminio 20×20 per sensore ad ultrasuoni HC-SR04

Sto sviluppando da qualche tempo una struttura robotica realizzata con profililati in alluminio. Originariamente il tutto doveva essere realizzato con dei Makerbeam, ma poiché ho aumentato le dimensioni del robot, altezza di circa 1 m, sono passato a profilati in alluminio 20×20 mm con sedi a T come quelli che potete vedere nelle immagini che seguono.

La prima versione del sistema di orientamento del robot sarà costituita da 8 sensori ad ultrasuoni che disporrò sui 4 angoli, così come indicato nell’immagine che segue.

Per rendere più agevole la costruzione e future modifiche ho pensato di realizzare dei supporti angolari con fissaggio a vite M3 e su di essi una struttura a slitta su cui collocare il sensore ad ultrasuoni

Rendo pubblico su Thingiverse i file per la stampa 3D dei due elementi, in modo che anche altri possano utilizzarli.

Un saluto a tutti i Robot Maker 🙂

Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T

Addendum al progetto EduRobot.

Una settimana è bastata per scatenare la fantasia di giovani studenti alle prese con EduRobot per l’attività di Alternanza Scuola Lavoro. Le relazioni di lavoro mettono in evidenza soluzioni alternative originali, la richiesta è di continuare ad aggiungere funzionalità ad EduRobot, vedremo nelle prossime settimane come proseguire con i lavori, ma sicuramente in questa prima fase mi posso ritenere soddisfatto! 😊

Tra le richieste che mi sono state fatte vi è quella di inserire un display per aggiungere interattività con il robot. Tra le possibilità ho suggerito l’utilizzo di un LCD 16×2 Hitachi HD44780 1602 quelli in dotazione con molti kit Arduino. Per rendere più agevole la gestione e i collegamenti, visto l’elevato numero di connessioni presenti su EduRobot, ho consigliato l’utilizzo di un modulo PCF8574T per il controllo in I2C, poiché gli studenti sono giovani ed ancora non hanno affrontato questo argomento, con questo post voglio dare un piccolo aiuto.

Disponiamo dei moduli della sunfounder su cui è già saldato il modulo i2C:

l’utilizzo è identico ai più comuni expander esterni come quelli indicati nell’immagine che segue:

Il display è costituito da 4 pin di connessione, due dedicati all’alimentazione e due alla comunicazione i2C.

Le connessioni tra LCD1602 i2C ed Arduino sono i seguenti:

LCD1602 —> Arduino
GND -> GND
Vcc -> 5V
SDA -> A4
SCL -> A5

Per poter utilizzare questo display è necessario installare la libreria LiquidCrystal_I2C dal seguente link: https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Prelevate il file .zip ed installate la libreria direttamente dall’IDE di Arduino:

in alternativa potete scompattare e copiare il tutto nella cartella libraries di Arduino.

Piccolo avvertimento, sicuramente nelle vostre sperimentazioni prenderete spunto da sketch che troverete on-line, alcune volte questi esempi sono datati e si riferiscono ad una versione dell’ide di qualche anno fa in cui si poteva inizializzare l’LCD nel setup con: lcd.init(), ciò non è più possibile sostituitela con la classe lcd.begin() così come indicato negli esempi che seguono.

Includo a questo post una serie di sketch tutti tratti dal reference di Arduino e riadattati per un uso con il modulo PCF8574T in modo da accelerare le attività di sperimentazione dei miei allievi.

Il funzionamento di ogni esempio è dettagliato con commenti all’interno degli sketch.

/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 1: scrittura testo su due righe
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
}
//-----------------------------


void loop()
{
  lcd.setCursor(2,0);
  lcd.print("Ciao Ragazzi");
  lcd.setCursor(0,1);
  lcd.print("Io sono EduRobot");
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 2: noBlink - Blink
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
}
//-----------------------------

void loop() {
  // Turn off the blinking cursor:
  lcd.noBlink();
  delay(3000);
  // Turn on the blinking cursor:
  lcd.blink();
  delay(3000);
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 3: noDisplay - Display
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
  lcd.print("EduRobot");
}
//-----------------------------

void loop() {
  // disattiva il display
  lcd.noDisplay();
  delay(500);
  // attiva il display
  lcd.display();
  delay(500);
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 4: scrollDisplayLeft() - scrollDisplayRight()
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();      // inizializzazione dell'LCD
  lcd.backlight();  // attivazione della retroilluminazione
  lcd.print("EduRobot");
  delay(1000);
}
//-----------------------------

void loop() {
  // sposta di 8 posizioni (lunghezza della tringa: EduRobot) a sinistra
  for (int positionCounter = 0; positionCounter < 8; positionCounter++) {
    // per far percepire la variazione di posizione del testo mettiamo in pausa per un breve istante
    lcd.scrollDisplayLeft();
    // aspetta un momento:
    delay(150);
  }

  // sposta di 24 posizioni (lunghezza della tringa + lunghezza del siplay(n. colonne)) a destra
  for (int positionCounter = 0; positionCounter < 24; positionCounter++) {
    // sposta di una posizione a destra
    lcd.scrollDisplayRight();
    // per far percepire la variazione di posizione del testo mettiamo in pausa per un breve istante
    delay(150);
  }

  // sposta di 24 posizioni (lunghezza della tringa + lunghezza del siplay(n. colonne)) a sinistra
  // to move it back to center:
  for (int positionCounter = 0; positionCounter < 24; positionCounter++) {
    // sposta di una posizione a sinistra
    lcd.scrollDisplayLeft();
    // per far percepire la variazione di posizione del testo mettiamo in pausa per un breve istante
    delay(150);
  }

  // al termine di un ciclo di uno spostamento destra e sinistra
  // attesa di 1 secondo
  delay(1000);
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 5: Serial Input
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------
void setup()
{
  lcd.begin();        // inizializzazione dell'LCD
  lcd.backlight();    // attivazione della retroilluminazione
  Serial.begin(9600); // inizializzazione della porta seriale
}
//-----------------------------


void loop() {
  // quando un carattere viene inviato alla serial monitor...
  if (Serial.available()) {
    // attende un momento prima di inviare il testo sulla seril monitor
    delay(100);
    // cancella lo schermo
    lcd.clear();
    // legge tutti i caratteri disponibili sulla seriale
    while (Serial.available() > 0) {
      // visualizza i caratteri sul display
      lcd.write(Serial.read());
    }
  }
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 6: setCursor()
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------

const int numRows = 2;
const int numColonne = 16;

void setup()
{
  lcd.begin();        // inizializzazione dell'LCD
  lcd.backlight();    // attivazione della retroilluminazione
}
//-----------------------------


void loop() {
  // stampa in loop i caratteri ASCII da 'a' a 'z':
  for (int lettera = 'a'; lettera <= 'z'; lettera++) {
    // ciclo per le colonne
    for (int  riga = 0; riga < numRows; riga++) {
      // ciclo per le righe
      for (int colonna = 0; colonna < numColonne; colonna++) {
        // imposta la posizione del cursore
        lcd.setCursor(colonna, riga);
        // stama il carattere
        lcd.write(lettera);
        delay(200);
      }
    }
  }
}
/* Prof. Michele Maffucci
 * Utilizzo di un display LCD 16×2 Hitachi HD44780 1602
 * con modulo i2C PCF8574T
 * Esempio 7: leftToRight() - rightToLeft()
 */

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
LiquidCrystal_I2C lcd(0x27, 16, 2); // impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
//-----------------------------

int lettera = 'a';

void setup()
{
  lcd.begin();        // inizializzazione dell'LCD
  lcd.backlight();    // attivazione della retroilluminazione
  lcd.cursor();       // attiva il cursore
}
//-----------------------------


void loop() {
  // cambia direzione (da destra a sinistra)
  // quando l'ultima lettera stampata è la 'm':
  if (lettera == 'm') {
    // sposta il cursore a destra per stampare la lettera successiva
    lcd.rightToLeft();
  }
  // cambia direzione (da sinistra a destra)
  // // quando l'ultima lettera stampata è la 's':
  if (lettera == 's') {
    // sposta il cursore a sinistra per stampare la lettera successiva
    lcd.leftToRight();
  }
  // reset quando atriviamo alla 'z':
  if (lettera > 'z') {
    // spostare il cursore a (0,0):
    lcd.home();
    // ricomincia dalla posizione 0
    lettera = 'a';
  }
  // stampa il carattere
  lcd.write(lettera);
  // aspetta un secondo
  delay(1000);
  // incrementa la lettera
  lettera++;
}

Buona sperimentazione 🙂