MecWilly saluta tramite un sensore

Quando il valore prelevato dal sensore (ad esempio un sensore ad infrarossi) è maggiore di 80, MecWilly dice “Ehi tu!”.

do
read 1
save val
if val > 80
say Ehi tu!
repeat

Il valore 80 è indicativo perchè dipende dal sensore, fai delle prove con il tuo specifico sensore e trova il valore più indicato.

Esercizio sulla creazione di una conversazione

Gli studenti dovranno programmare MecWilly affinche sia in grado di affrontare la seguente conversazione. Questo esercizio può essere più o meno difficile in base alla maggiore o minore precisione nelle domande poste a MecWilly.

Versione più semplice (domande precise)

Ecco le domande/affermazioni precise che verranno poste a MecWilly:

  • Ciao
  • Vado via
  • Mi puoi chiamare luigi?
  • Chi ti ha creato?
  • Come ti chiami?
  • Sorridi
  • Un asino che vola

Le risposte che dovrà dare MecWilly sono le seguenti:

  • Risponde al saluto
  • Dovrà cercare di farlo rimanere lì con lui
  • Luigi!
  • Dovrà rispondere che è stato creato da Roberto
  • Dovrà rispondere che si chiama MecWilly
  • Dovrà sorridere
  • Dovrà assumere un’espressione stupita

Versione difficile (domande generiche)

Quando poniamo domande ad un essere umano, possiamo porle in vari modi. Quest’ultimo capisce comunque cosa vogliamo dire. Adesso MecWilly dovrà dimostrare di essere flessibile come un essere umano!

Domande generiche che verranno poste a MecWilly:

  • Gli verrà fatto un saluto
  • L’interlocutore dice che deve andare via
  • Gli viene chiesto di chiamare Luigi
  • Gli viene chiesto da chi è stato creato
  • Gli viene chiesto come si chiama
  • Gli viene richiesto di sorridere
  • Gli verrà detto che c’è un asino che vola

Le risposte di MecWilly sono le medesime di prima.

Esercizio su DO…WHILE

Rispondi alla domanda

set a = 3
do
say io
while a = 3
say sono bello

cosa dice MecWilly?

  • ________________

Esercizio su IF e WHILE

Rispondi alle domande

do
listen
save a
if a = pesce fritto
sayb pesce
elseif a = pollo fritto
sayb pollo
elseif a = fritto*
sayb né pesce né pollo fritto, ma qualcosa di fritto
while a = fritto*
say niente di fritto, quindi ti saluto

Cosa succede se dico:

  • pesce fritto? ________
  • pollo fritto? ________
  • tacchino fritto? _______
  • torta di mele? _______

Operazioni iniziali su modalità casuale (blu)

La modalità casuale, quella di colore blu, non ha una struttura che segue una sequenza ma è un intervallarsi di domande (dell’interlocutore) e risposte (di MecWilly). Questo intervallarsi è scandito dall’unico pulsante che l’operatore preme per poter parlare.

A volte però capita che vogliamo far fare qualcosa a MecWilly prima che questa modalità casuale abbia inizio. Per esempio far dire a MecWilly qualcosa, oppure accendere la fotocamera e attivare il tracking.

Ora vediamo come fare. Dobbiamo creare due file, il primo potrebbe essere qualcosa di questo tipo:

say Dimmi un colore
camera on
tracking on
open colori

Come vedete, l’ultima istruzione è open la quale apre il secondo file che si chiama ‘colori’ dove avremo la modalità casuale:

q blu
a blu come il mare
q rosso
a rosso come il fuoco
q verde
a verde come l'erba
q nero
a nero come la notte
q 
a non conosco questo colore

Vieni più vicino!

MecWilly non è mai contento, vuole che ti avvicini, ma se ti avvicini troppo poi non gli va bene, devi trovare la giusta distanza! 🙂

Aggiusta i due valori di soglia in base alle tue esigenze e alla tua fantasia, inoltre essi dipendono anche dalla risoluzione della tua fotocamera, quindi potranno aver bisogno comunque di una regolazione.

camera on
tracking on
do
if $widthface < 200
say vieni più vicino!
if $widthface > 250
say ora sei troppo vicino!
repeat

Proviamo a migliorare il codice. Innanzitutto forse hai notato che quando il programma inizia MecWilly parte subito dicendoti ‘vieni più vicino’, questo succede perchè all’inizio la costante $widthface è settata a -1, in quanto ancora non ha visto nessuna faccia (vedi i dettagli su questa costante). Poichè la prima condizione if si verifica con ‘$widthface < 200’, il -1 rientra in questa condizione.

Per evitare ciò possiamo inserire un nuovo if che scatta quando la costante $widthface è settata a -1. Cosa gli facciamo fare quando ancora nessuna faccia è stata avvistata da MecWilly? Niente di meglio di un randeyes che muove gli occhi (e a volte le sopracciglia) di MecWilly in direzioni casuali 🙂

camera on
tracking on
do
if $widthface = -1
randeyes
elseif $widthface < 200
say vieni più vicino!
elseif $widthface > 250
say ora sei troppo vicino!
repeat

Scattami un selfie quando sorrido

Proprio così, quando fai un sorriso MecWilly ti scatta un selfie 🙂 Potresti ad esempio modificare questo programma in modo che quando gli dici di scattarti un selfi MecWilly te lo scatta, oppure che ti scatti un selfie appena ti vede, le possibilità sono tante, basta avere fantasia.

camera on
tracking on
do
if $smile > 80
takephoto
sleep 1
repeat

Nell’esempio è presente anche l’istruzione tracking in modo che MecWilly segua con gli occhi. L’istruzione sleep evita che MecWilly scatti troppi selfie durante un sorriso.

Non ti addormentare!

La costante [$eyes] restituisce un valore tra 0 e 100 che esprime la probabilità che gli occhi siano chiusi. Questo perchè il riconoscimento può sbagliare e non abbiamo un dato certo, ma un dato probabile. Nell’esempio abbiamo impostato 60 (che corrisponde ad un 60% di probabilità che gli occhi siano chiusi) ma puoi cambiare questo valore se vedi che non è soddisfacente.

camera on
tracking on
do
if $eyes > 60
say hei, non ti addormentare!
repeat

Se sorridi MecWilly ti fa un complimento

In questo esempio utilizziamo la costante [$smile] per determinare se la persona di fronte a MecWilly sta sorridendo. Questa costante restituisce un valore tra 0 e 100 che esprime la probabilità di un sorriso. Questo perchè il riconoscimento può sbagliare e non abbiamo un dato certo, ma un dato probabile. Nell’esempio abbiamo impostato 80 (che corrisponde ad un 80%) ma puoi cambiare questo valore se vedi che non è soddisfacente.

camera on
tracking on
do
if $smile > 80
say hai un bel sorriso
repeat

MecWilly ti saluta quando ti vede

L’utilizzo della costante [$face] è molto semplice in quanto restituisce soltando due valori, 1 (c’è una faccia), 0 (non c’è una faccia). Dobbiamo ricordarci di accendere la telecamera con la funzione camera prima di utilizzare la computer vision.

camera on
do
if $face = 1
say ciao
repeat