Archivi tag: liceo

DotBot Story

Ludovico Orlando Russo

E’ da un po’ che volevo raccontare i passi che hanno portato alla nascita del progetto DotBot (ed in particolare DotBot-ROS), e finalmente Michele Maffucci mi ha dato l’opportunità di scrivere sul suo blog (o meglio io me la sono presa e lui ha gentilmente acconsentito!!).

Premetto che dal 2012 (inizio della mia tesi presso il Robot Research Group del Politecnico di Torino) mi occupo di Robotica di Servizio. Da allora ho iniziato ad utilizzare ed apprezza ROS e mi sono chiesto come mai non si insegnasse nella nostra Università (per poi scoprire che all’estero e in altre università d’Italia è molto comune fare ROS all’interno di un corso di Robotica).

Mi sono avvicinato al mondo della didattica con la robotica in modo frammentato e casuale durante il mio percorso di dottorato. In qualche occasione mi sono ritrovato a fare didattica con robot di vario tipo. L’esperienza più interessante e traumatica (per me) fu quando mi chiesero di tenere un mini workshop (era Maggio 2015 se non ricordo male) all’interno del primo Google Camp Summer School organizzato da Lero, the Irish Research Center (un centro di ricerca Irlandese) in collaborazione con Google. Mi stupii tantissimo nel vedere l’interesse mostrato da 20 ragazzine dell’età compresa tra i 12 ed i 13 anni nonostante non solo non parlassi poi così tanto bene la loro lingua ma anche perché avevo con me, per la presentazione, due robot umanoidi che a dire il vero non funzionavano neanche tanto bene!!

dotbot-story-01

Il mio primo incontro formale con la didattica ed il sistema scolastico italiano è avvenuto poco dopo quell’esperienza quando, da dottorando presso il JOL CRAB di TIM (laboratorio di ricerca sulla robotica connessa), mi venne chiesto di “addestrare” 🙂 due insegnanti di scuole superiori (tra cui Michele) per un progetto che voleva portare l’insegnamento della robotica di servizio (e di ROS) all’interno delle scuole superiori.

Il progetto non è mai giunto a compimento, tranne che per alcune piccole sperimentazioni con alcuni allievi e, per ragioni che non ho mai saputo in pochi mesi si è interrotto. Nonostante tutto, questa esperienza mi ha dato l’opportunità di conoscere Michele sia come insegnante che come persona (i nostri interessi comuni ci hanno permesso di conoscerci in poco tempo anche all’esterno del progetto in questione). Inoltre, durante gli incontri tra me e Michele, mi sono reso conto che ROS può essere didatticamente uno strumento potentissimo per costruire un’efficace didattica della robotica.
Così facendo ho desunto alcuni dei punti fondamentali, cardini del progetto:

  1. La robotica è uno strumento didattico sorprendente, e ROS, unendo robotica e Internet of Things, è in grado di affascinare ed appassionare ancora di più gli studenti.
  2. Come accade per Arduino anche ROS risulta molto semplice da imparare ed utilizzare ed in poco tempo, in maniera semplice è possibile ottenere risultati interessanti.
  3. A differenza di Arduino, ROS non è solo uno strumento didattico, e (nella mia visione) verrà massivamente utilizzato in campo industriale, ed avere una simile competenza, inserendola all’interno del proprio curriculum può diventare strategico per il proprio futuro lavorativo, specialmente per lavori legati alla robotica.

Durante la mia iniziale esperienza didattica fatta come insegnante con alcuni ragazzi di scuole torinesi, ho scoperto che ROS risulta, da parte degli allievi, facile da utilizzare, a patto però di nascondere allo studente l’utilizzo della shell Linux (necessaria per compilare ed eseguire programmi in ROS).
Ciò ha fatto nascere in me l’idea di sviluppare un’interfaccia di programmazione per ROS.

Nei mesi successivi entrai in contatto con una docente del Liceo Federico II di Melfi (PZ) che mi propose di far partire un progetto con l’idea di fare robotica con alcuni studenti selezionati. Approfittai dell’occasione che mi si presentò e sviluppai in pochissimo tempo un IDE web per la programmazione remota di ROS (complice anche il fatto che in quel periodo volevo farmi un po’ di competenze nello sviluppo di applicazioni web). L’idea era che i ragazzi dovessero solo scrivere codice su una webapp da browser, premere play ed avere il programma in funzione istantaneamente. Il tutto fu organizzato con i pochi strumenti che avevo a disposizione e nonostante portai dei robot tenuti insieme con dello scotch e una webapp ancora in fase preliminare di sviluppo che si bloccava ogni 10 min, i ragazzi mi stupirono e riuscirono a sviluppare nel poco tempo a disposizione un sistema in grado di pilotare i robot da remoto tramite webapp (trovate qui un video sul lavoro svolto https://youtu.be/bf5oezpPOIs, molto bello tranne che per il mio aspetto che evidenzia in maniera chiara la fatica di 4 ore di spiegazione initerrotte con una classe costituita da ragazzi motivati e capaci).

dotbot-story-02

L’esperienza di Melfi mi diede forte motivazione verso la didattica per cui ripresi i contatti con Michele. Da allora, un po’ per assecondare la passione di entrambi di progettare un piccolo robottino a basso costo, abbiamo deciso (quasi per gioco) di far nascere il progetto DotBot come evoluzione del progetto EduRobot di Michele. Michele è stato in grado di sviluppare tutta la meccanica e di creare 3 diversi robottini per vari scopi (chi lo segue sa di cosa parlo!). Gli impegni di lavoro e studio non mi hanno consentito di seguire gli aspetti della struttura meccanica di DotBot, inoltre non avendo la scusa di un tendine rotto 🙂 , mi sono dedicato al miglioramento dell’interfaccia di programmazione e ho condotto ulteriori test con studenti del Politecnico.

dotbot-story-03

Cosa accadrà ora? Non ho ancora chiaro quali saranno gli sviluppi futuri, ma so per certo che tutto ciò è il frutto di una passione che ho da sempre che mi ha permesso di verificare che la robotica è uno strumento didattico potentissimo purtroppo ancora scarsamente utilizzato nella scuola italiana. I robot sono oggetti intelligenti e connessi, il mio desiderio e che vengano sviluppate sperimentazioni che non si limitano al classico segui linea o evita gli ostacoli, ma che aggiungano funzionalità e interattività maggiore. Al tempo stesso sto cercando di capire se da questo percorso possa nascere un lavoro, da qui la “partnership” tra DotBot e HotBlack Robotics (mia startup che si occupa di Cloud Robotics)!

Due papà ansiosi dal barbiere ed una striscia led per la mente

Questo il post delle piccole ansie di un pap 🙂

striscia-led01

Il consueto appuntamento mensile dal barbiere Luigi per il taglio di capelli. Incontro Albino, entrambi abbiamo i figli della stessa et che frequentano il medesimo Liceo. Inevitabile i discorsi di scuola e problemi adolescenziali, primo tra tutti la difficolt nel trovare una passione o ampliare le proprie relazioni al di fuori della scuola.
Un’adolescente in casa insegna molte cose. Osservavo in queste serate, guardando mio figlio che studia, la modalit con cui al liceo vengono propinate le materie scientifiche: fisica, chimica, biologia… tutte categoricamente su carta, esercizi sui moti uniformemente accelerati, studio di molecole e composti organici solosu carta mannaggia… il laboratorio e luogo sconosciuto, per non parlare dellinformatica lasciamo perdere.
Non voglio incominciare il solito discorso disfattista e lamentoso su taglio delle ore dei laboratori e mancanza di denaro e se pur impegnato a scuola nel trovare soluzioni, incominciano a stancarmi i ragionamenti sui massimi sistemi e sulla funzione docente, sono pi concentrato sulle soluzioni e dare possibilit, nel limite delle mie forze, ai ragazzi che mostrano interesse.
Il carico di studio elevatissimo (che noto al liceo) e la quasi assenza di materie svolte in laboratorio fanno perdere nei ragazzi la percezione del senso degli argomenti che stanno studiando provocando disagio, a ci si aggiunge il periodo di scombussolamento ormonale che provoca stati danimo estremamente controversi sicuro che mi procurer lira dei colleghi del liceo ma poco importa.
Come genitore ci si interroga continuamente e si cercano strategie che possano favorire laccensione di quella fiammella di passione nei propri figli, attivando, si spera, il volano che porta al desiderio di scoperta insomma ansie da genitori.
Tutto ci per dire, che siano esperimenti di elettronica, osservazioni astronomiche con un telescopio, luso di un microscopio, importante insegnare a dare forma fisica ai propri progetti, potranno nascere da un copia ed incolla visto su internet, ma cos che si impara , se non ci si ferma al copia ed incolla ovviamente, comprendere, rielaborare.
Nella mente di mio figlio, ora piena di poemi Omerici, Epica Latina e tra poco anche dei Promessi Sposi, sto cercando di inserire anche la materia progetta e costruisci.
Con stampante 3D e tanta elettronica che gira per casa da qualche tempo abbiamo incominciato con Arduino, robotica ed automazione in genere e come per i miei studenti anche per questo, particolare studente 🙂 Arduino svolge egregiamente la funzione di facilitatore e mi sta rendendo la vita da padre un po pi serena.

Corsi su Arduino ovunque online a scuola e nei FabLab ora giunta lora di farli anche alla famiglia 🙂 la figlia pi piccola costruisce piccolo alberi di Natale con LED, il grande programmazione ed elettronica.

Con il licealesiamo giunti in queste serate alla realizzazione di un semplice controllo di una striscia RGB che abbiamo utilizzato per adornare la zona in cui collocato lalbero di Natale, poich lo sketch di interesse per alcuni miei allievi di 5, pubblico e lascio a chi vorr la possibilit di migliorarlo.

La spiegazione nei commenti dello sketch.

Nello sketch che lultima versione sviluppata dal giovane studente, trovate commentate alcune parti di codice che potrete attivare e che svolgono funzioni diverse.

1. Cambio colore graduale (in accensione ed in spegnimento) casuale nella scelta del colore:

  • solo bianco
  • solo rosso
  • solo verde
  • solo blu
  • variazione continua di tutti i colori

2. Variazione di una sola delle modalit del punto 1

Compiti per Natale:

3. inserimento di un sensore ad ultrasuoni che percepisce il passaggio di persone davanti allAlbero di Natale emettendo una luce intensa bianca
4. Controllo remoto con telecomando
5. Controllo remoto con cellulare (per questo per credo che ci penser il pap)

materiale sufficiente per fare qualcosa di creativo durante le prossime vacanze di Natale 🙂

Lista componenti:

  • Arduino UNO R3
  • N. 3 transistor BD 709 (quelli che avevo a disposizione)
  • N.3 resistori da 220 Ohm

Striscia LED alimentata a 12V.
Si utilizzato un alimentatore esterno a 12V per l’alimentazione della scheda e della striscia LED.
L’alimentazione a 12V della striscia LED presa direttamente dalla Vin della scheda.

strip-led-rgb

/* Pilotaggio striscia LED
 Mattia Maffucci
 ...con lo zampino di suo pap Michele
 20.12.14
 */

// pin a cui  collegata la striscia LED
#define pinRosso 5
#define pinVerde 6
#define pinBlu 3

// velocit tra un'intensit luminosa e la successiva.
// Per rallentare il fade aumentare il valore
int velocitaFadeBianco = 60;

// velocit tra un'intensit luminosa e la successiva.
// Per rallentare il fade aumentare il valore
int velocitaFadeRosso = 60;

// velocit tra un'intensit luminosa e la successiva.
// Per rallentare il fade aumentare il valore
int velocitaFadeVerde = 60;

// velocit tra un'intensit luminosa e la successiva.
// Per rallentare il fade aumentare il valore
int velocitaFadeBlu = 60;

// velocit tra un'intensit luminosa e la successiva.
// Per rallentare il fade aumentare il valore
int velocitaFadeContinuo = 60;

// attesa prima della partenza della successiva accensione
int attesaFinaleBianco = 2000;
int attesaFinaleRosso = 2000;
int attesaFinaleVerde = 2000;
int attesaFinaleBlu = 2000;
int attesaFinaleContinuo = 2000;

// intensit massima di bianco. Per 
// rallentare il fade aumentare il valore
int limiteBianco = 30;

// intensit massima di rosso. Per 
// rallentare il fade aumentare il valore
int limiteRosso = 30;

// intensit massima di verde. Per 
// rallentare il fade aumentare il valore
int limiteVerde = 30;

// intensit massima di blu. Per 
// rallentare il fade aumentare il valore
int limiteBlu = 30;

// intensit massima dei colori. Per 
// rallentare il fade aumentare il valore
// massimo 255
int limiteContinuo = 100;

// per rallentare il fade aumentare il valore
int limiteFadeRandom = 120;

// numero massimo di colori scelto in
// maniera casuale
int randomColor = 5;

void setup() {
  pinMode(pinRosso, OUTPUT);
  pinMode(pinVerde, OUTPUT);
  pinMode(pinBlu, OUTPUT);
}

void loop() {

  // --- accensione solo bianco alla massima luminosit ---

  /*
  analogWrite(pinRosso, 255);
   analogWrite(pinRossoDue, 255);
   analogWrite(pinVerde, 255);
   analogWrite(pinVerdeDue, 255);
   analogWrite(pinBlu, 255);
   analogWrite(pinBluDue, 255);
   */

  // ------------------------------------------------------   

  /*
// --- variazione luminosit bianco ---
   
   variazioneBianco();
   
   // ------------------------------------------------------
   */

  // --- casuale nella scelta del colore ---

  casuale();

  // ------------------------------------------------------ 

  /*
// --- variazione continua colori incluso il bianco ---
   
   variazioneContinua();
   
   // ------------------------------------------------------
   */

}

// funzioni esterne per la variazione continua del colore

// -- casuale

void casuale() {
  int sceltaSequenza=random(randomColor);
  switch (sceltaSequenza) {
  case 0:
    variazioneBianco(limiteBianco, velocitaFadeBianco, attesaFinaleBianco);
    break;
  case 1: 
    variazioneRosso(limiteRosso, velocitaFadeRosso, attesaFinaleRosso);
    break;
  case 2:
    variazioneVerde(limiteVerde, velocitaFadeVerde, attesaFinaleVerde);
    break;
  case 3:
    variazioneBlu(limiteBlu, velocitaFadeBlu, attesaFinaleBlu);
    break;
  case 4:
    variazioneContinua(limiteContinuo, velocitaFadeContinuo, attesaFinaleContinuo);
    break;
  default:
    {
      // nulla
    }
  }
}

// --- variazione contina del colore

void variazioneContinua(int limiteContinuo, int velocitaFadeContinuo, int attesaFinaleContinuo) {
  int rosso, verde, blu;
  // fade da blu a viola
  for (rosso = 0; rosso < limiteContinuo; rosso++) {      analogWrite(pinRosso, rosso);     delay(velocitaFadeContinuo);   }    // fade da viola a rosso   for (blu = limiteContinuo; blu > 0; blu--) { 
    analogWrite(pinBlu, blu);
    delay(velocitaFadeContinuo);
  } 
  // fade da rosso a giallo
  for (verde = 0; verde < limiteContinuo; verde++) {      analogWrite(pinVerde, verde);     delay(velocitaFadeContinuo);   }    // fade da giallo a verde   for (rosso = limiteContinuo; rosso > 0; rosso--) { 
    analogWrite(pinRosso, rosso);
    delay(velocitaFadeContinuo);
  } 
  // fade da verde a bianco
  for (blu = 0; blu < limiteContinuo; blu++) {      analogWrite(pinBlu, blu);     delay(velocitaFadeContinuo);   }    // fade da bianco a blu   for (verde = limiteContinuo; verde > 0; verde--) { 
    analogWrite(pinVerde, verde);
    delay(velocitaFadeContinuo);
  }
}

// --- variazione intensit luminosa del bianco ---

void variazioneBianco(int limiteBianco, int velocitaFadeBianco, int attesaFinaleBianco) {

  for (int fade = 0; fade < limiteBianco; fade++) {     analogWrite(pinRosso, fade);     analogWrite(pinVerde, fade);     analogWrite(pinBlu, fade);     delay(velocitaFadeBianco);   }   for (int fade = limiteRosso; fade >= 0; fade--) {
    analogWrite(pinRosso, fade);
    analogWrite(pinVerde, fade);
    analogWrite(pinBlu, fade); 
    delay(velocitaFadeBianco);
    delay(attesaFinaleBianco);
  }
}

// --- variazione luminosit del rosso

void variazioneRosso(int limiteRosso, int velocitaFadeRosso, int attesaFinaleRosso) {

  analogWrite(pinVerde, 0);
  analogWrite(pinBlu, 0);

  for (int fade = 0; fade < limiteRosso; fade++) {     analogWrite(pinRosso, fade);     delay(velocitaFadeRosso);   }   for (int fade = limiteRosso; fade >= 0; fade--) {
    analogWrite(pinRosso, fade);
    delay(velocitaFadeRosso);
    delay(attesaFinaleRosso);
  }
}

// --- variazione luminosit del verde

void variazioneVerde(int limiteVerde, int velocitaFadeVerde, int attesaFinaleVerde) {

  analogWrite(pinRosso, 0);
  analogWrite(pinBlu, 0);

  for (int fade = 0; fade < limiteVerde; fade++) {     analogWrite(pinVerde, fade);     delay(velocitaFadeVerde);   }   for (int fade = limiteVerde; fade >= 0; fade--) {
    analogWrite(pinVerde, fade);
    delay(velocitaFadeVerde);
    delay(attesaFinaleVerde);
  }
}

// --- variazione luminosit del blu

void variazioneBlu(int limiteBlu, int velocitaBlu, int attesaFinaleBlu) {

  analogWrite(pinRosso, 0);
  analogWrite(pinVerde, 0);

  for (int fade = 0; fade < limiteBlu; fade++) {     analogWrite(pinBlu, fade);     delay(velocitaFadeBlu);   }   for (int fade = limiteBlu; fade >= 0; fade--) {
    analogWrite(pinBlu, fade);
    delay(velocitaFadeBlu);
    delay(attesaFinaleBlu);
  }
}

Programmazione C++ e dintorni

Recentemente mi giunta una richiesta estremamente bizzarra, un carissimo collega con cui lavoro ha il figlio in terza (credo)liceo con opzione scienze applicate che in questo periodo sta avendo qualche problema con l’informatica nel particolare con il C++. Pare, ma non ho informazioni precise, la classe fino a qualche settimana fa non aveva mai, anche nei precedenti anni, affrontato lo studio di un linguaggio di programmazione. A parte la situazione a mio avviso un po’ strana della scelta del C++ da usare in un liceo per insegnare la programmazione ad oggetti (ma ripeto non conosco i precedenti) avrei optato per altre soluzioni, mi stato chiesto di fornire testi ed indicazioni.

Tra le varie indicazioni e consigli, probabilmente uno dei libri pi importanti da segnalare agli studenti non pu che essere la seconda edizione del libro:

Thinking in C++

Cpp2Cover

costitituito da due volumi che potete scaricare gratuitamente oppure acquistare in versione cartacea.

Cosa avrei fatto io prima?

Velocemente… mi viene da pensare ad un approccio graduale partendo da Scratch per poi passare aPython per giungere poi a Processing e poi Java facendo una scelta oculata nel selezionare uno dei numerosissimi ambienti di sviluppo per Java appositamente pensati per l’insegnamento.

Spero possa servire.