Arduino e i tipi di dati

Programmando con Sketching è inevitabile utilizzare delle variabili o costanti: senza questi elementi infatti nessun programma avrebbe senso.

 

LA MEMORIA

sensore CCD

Per poter lavorare Arduino (così come anche gli altri dispositivi simili) ha bisogno di utilizzare la memoria RAM. Possiamo immaginare la memoria come un foglio elettronico: ogni cella contiene delle informazioni e e ogni cella ha un indirizzo.

VARIABILI E COSTANTI

Una prima suddivisione del tipo di informazioni è tra variabili e costanti. Il nome parla chiaro: le prime possono cambiare e le seconde rimangono fisse. Prima domanda: a che servono le costanti se poi non cambiano? Risposta: perchè hanno un “nome” dal quale comprenderne il significato.

int mlivellopwm = 20;     // valore iniziale della potenza (VARIABILE)

const int kpinventola = 1;   // contatto di output e/ventola (COSTANTE)

Perchè differenziare tra costanti e variabili? Per sicurezza: se per sbaglio durante l’esecuzione, dovessi cambiare il valore di una variabile, potrei causare dei problemi, magari attivare erroneamente un motore, con tutti i danni che ne deriverebbero. Se invece è costante, quel valore è immodificabile.

DIVERSI TIPI

Sia le variabili e sia le costanti occupano della memoria, ma a seconda del tipo ne potranno occupare di più o di meno.

Facendo un paragone con un foglio elettronico  , a volte capita di allargare una colonna perchè non è in grado di contenere l’informazione.

Ancora, sempre nel foglio elettronico, capita di definire una o più celle come area “data ora”. Questa è una similitudine con i tipi di dato: diversi tipi per poter contenere e trattare adeguatamente il dato contenuto.

ELENCO DEI TIPI

TIPO DIMENSIONE (byte) FAMIGLIA/INTERVALLO
String  2K alfanumerico
array  limitato dalla memoria  alfanumerico/numerico
bool  1 byte  logico
boolean  deprecato, uguale a bool  logico
byte 1 byte  numerico, da 0 a 255
char 1 byte  numerico, da -127 a 128
double8 8 byte  numerico
float  4 byte  numerico,  da -3.4028235E38 a 3.4028235E38
int  2 byte  numerico, da -32768 a 32767
long  4 byte  numerico, no virgola, da -2147483648 a 2147483647
short  2 byte   numerico con segno
unsigned char  1 byte  alfanumerico, da 0 a 255
unsigned int  2 byte  numerico, da  0 a 65535
unsigned long  4 byte  numerico, da 0 a 4294967295
void  0  N.D.
word  2 byte  numerico, da  0 a 65535

FALSI AMICI

Anche Sketching ha i suoi false friends (cfr. wikipedia ).

kit comando luci (voolamp)

Mi riferisco a char, il cui nome lascerebbe intendere “carattere”, ovvero simbolo dell’alfabeto.
In realtà è un byte che contiene 2^8=256 valori. Peccato però char che abbia la gestione del segno, quindi i bit restanti diventano 7, e con 7 bit possiamo “mappare” solo i primi 128 simboli del codice ASCII. Infatti 2^7=128.

 

char mvalore = 66;     // identifica "B"

char mvalore2 = -66    // valido, ma *non* e' un simbolo ASCII

COSA SCEGLIERE

Tutto dipende da cosa dovrà contenere la variabile: numeri o caratteri?

Se abbiamo del testo possiamo usare:

  • serie di caratteri, ovvero char[]
  • String

Per quanto i numeri, la scelta è abbastanza ampia, ma il più delle volte il tutto si risolve in 2 o 3 tipi:

  • int
  • float
  • double

Con questi tipi è possibile gestire la quasi totalità delle variabili (o costanti).

E GLI ALTRI?

I diversi tipi, soddisfano due esigenze:

  • occupazione di memoria
  • velocità di elaborazione/calcolo

TEST DI VELOCITÀ

Qui di seguito uno script Sketching per provare la velocità di elaborazione delle differenti variabili: int, double e float.

I risultati appariranno sulla finestra di monitor seriale. Una possibile modifica potrebbe essere la “costante” MCICLI: l’importante è non superare il valore di 32000, pena una lunga attesa.

/*
FLW - www.fablabway.com

mauro rossolato

lab49 - test velocita' calcolo variabili

uses:

when who what
----------------------------
19.05.2016 mr creates

*/

//#define MCICLI 4096
#define MCICLI 16384


int moneshot = 1;
float mfloat = 3.0;
int mint = 3;
double mdouble = 3;
unsigned long mtmstart, mtmend;


void setup()
{
  Serial.begin(9600);
  Serial.println("FLW,2018 - test velocita' calcolo variabili, v.1.0");
}


void loop() {
  int mndx;
  if (moneshot == 1) {
    //-------------------------------------
    mtmstart = micros();
    for (mndx = 0; mndx < MCICLI; mndx++) {
      mdouble =  mdouble / 2;
    }
    mtmend = micros();
    Serial.print("durata ciclo double: ");
    Serial.print(mtmend - mtmstart );
    Serial.print(" microsecondi. Valore mdouble: ");
    Serial.println(mdouble);
    //-------------------------------------
    mtmstart = micros();
    for (mndx = 0; mndx < MCICLI; mndx++) {
      mint = mint / 2;
    }
    mtmend = micros();
    Serial.print("durata ciclo int: ");
    Serial.print(mtmend - mtmstart );
    Serial.print(" microsecondi. Valore mint: ");
    Serial.println(mint);
    //-------------------------------------
    mtmstart = micros();
    for (mndx = 0; mndx < MCICLI; mndx++) {
      mfloat = mfloat / 2.0;
    }
    mtmend = micros();
    Serial.print("durata ciclo float: ");
    Serial.print(mtmend - mtmstart );
    Serial.print(" microsecondi. Valore mfloat: ");
    Serial.println(mfloat);
    //-------------------------------------
    moneshot = 0;
  }
}

con questo risultato:

FLW,2018 - test velocita' calcolo variabili, v.1.0
... microsecondi

CONCLUSIONE

In Arduino, così come in altri linguaggi esistono diversi tipi di dati. Queste differenze servono per migliorare le prestazioni oppure l’occupazione di memoria. I tipi int, float e double sono quelli “universali”.

É possibile definire dei nuovi tipi custom? Si, ma lo vedremo prossimamente.

Software per Raspberry e Arduino

Per poter lavorare con Raspberry o Arduino, è indispensabile utilizzare alcuni software. Non tutte queste applicazioni sono disponibili per tutti sistemi operativi (Windows, MacOs o Linux).

Vediamo i più diffusi.

Putty

É un emulatore di terminale Unix per ambiente Windows: in pratica ci permette di usare un pc collegato ad un Linux (e non solo) come se fosse un terminale.

Installazione

Non richiede un setup di installazione, quindi basterà lanciare direttamente l’eseguibile “putty.exe”.

Configurazione

A parte le molte opzioni disponibili (colori, font, ecc.), gli  unici parametri essenziali sono:

  • il nome dell’host o il suo indirizzo IP
  • userid
  • password

 

Download

Il sito di riferimento è www.putty.org.

CygWin

Questa applicazione simula un ambiente Unix all’interno di un pc Windows.

L’utilità di questo strumento dipende se siamo o meno abituati al “prompt”: infatti CygWin è “testuale” e non grafico.  Qualche esempio: a volte modificare dei file di testo è una operazione complicata o ripetitiva, mentre con gli adeguati strumenti Unix il tutto si risolve in un istante. (Guarda qui).

Download

L’applicazione può essere scaricata da

http://www.cygwin.org/

Configurazione

Cygwin non richiede particolari configurazioni se non quelle solite dell’ambiente shell-Unix: prompt, path, ecc.

 

Winscp

Questo è un software, gratuito, per trasferire file o directory da e verso un host Unix. È grafico ed intuitivo.

Configurazione

Viene richiesto il nome della macchina o l’indirizzo IP:

e ovviamente l’account.

Download

è scaricabile all’URL

https://winscp.net/eng/download.php

 

App Terminale

Se dobbiamo collegarci tramite Bluetooth, ad una scheda Arduino, ci servirà

un emulatore di terminale per lo smartphone. Uno che consiglio è BT Simple Terminal.

 

Download

In questo caso dalla Play-Store, basterà cercare “BT Simple teminal” e chiedere l’installazione.

Una volta installata la app, bisognerà attivare il Bluetooth ed eseguire il solito giro del pairing. Al termine vedremo sul telefono i messaggi provenienti da Arduino/Bluetooth e allo stesso modo ne potremo inviare degli altri.

 

Etcher

Questa utile applicazione serve per creare delle immagini di disco avviabili (vedi precedente articolo). In pratica useremo Etcher ogni qualvolta dobbiamo installare una immagine ISO su una SD-card. È per l’appunto il caso di Raspbian.

 

Sensori gas per Arduino

Poter controllare i livelli di gas nocivi o pericolosi non prerogativa di sistemi costosi o industriali: anche un semplice circuito con arduino può bastare.

Il principio

Il principio di funzionamento di questi “annusatori” è relativamente semplice: una resistenza composta di lega speciale, se riscaldata, varierà la sua resistenza in funzione della presenza di uno (o più) determinati gas.

In commercio

Esistono diversi sensori e relativi circuiti già pronti per essere collagati a sistemi quali Arduino. Molte di queste schede sono dotate di trimmer per la regolazione o taratura.

Ovviamente ogni sensore è selettivo, ovvero è sensibile solo a uno o pochi altri gas. Per riconoscerne il modello basterà cercare la sigla “MQ-xxx” dove xxx è un numero da 1 a 3 cifre.

Ecco qualche esempio:

MQ-2  idrogeno, metano, monossido di carbonio

MQ-3 metano, benzene

MQ-4 metano

MQ-5 gas città, metano

MQ-6 propano, butano

MQ-7 monossido di carbonio

MQ-135 ammoniaca , benzene

 

Rivelatori, non misuratori

Per essere precisi questi dispositivi rientrano nella categoria dei rivelatori e non misurano la esatta quantità: per questo scopo bisogna ricorrere a sensori diversi. In ogni modo è comunque possibie collegare i misuratori ad Arduino.

 

Non sono giocattoli

Anche se possiamo realizzare in economia un dispositivo di allarme per un determinato gas, questo non significa che il dispositivo sia un giocattolo e che non funzioni: il sensore è lo stesso degli apparati (costosi) che si acquistano in negozio.

Esempio

Vediamo come costruire un semplice rivelatore per il pericoloso monossido di carbonio.

Il materiale occorente è davvero poco:

  • Arduino UNO
  • sensore MQ-7
  • resistenza 1K
  • led

Lo sketch di Arduino è semplice, ma potremo estenderlo per attivare per esempio un allarme.

 

Il sensore invia il segnale analogico “AC” sul pin analogico 1.

La costante MSOGLIA ci permetterà di impostare il valore oltre il quale il led si accenderà.

/*
som_lab14_00.ino
21.03.2016
usare MQ-7
 */

#define MSOGLIA  370
int mled = 5; 
int wcurrport = 1;

void setup() {
 pinMode(mled, OUTPUT);
 Serial.begin(9600);
 pinMode(wcurrport, INPUT);
}
 
// the loop routine runs over and over again forever:
void loop() {
  int wcurrval = analogRead(wcurrport);
  if (wcurrval > MSOGLIA) digitalWrite(mled,HIGH);
  else digitalWrite(mled,LOW);
  Serial.print("valore: ");
  Serial.println(wcurrval); 
  delay(500);
}

 

Salva

Salva

Salva

Salva

…un grazie a tutti!

Nell’ultima edizione di cooperazione dove si parla di stampa 3D, siamo in

copertina con il FAB-LAB di Grono.

Questo è il link.

Si tratta di un grande riconoscimento per la nostra piccola struttura, ma in particolare desidero ringraziare tutti coloro che, in diversi modi, hanno contribuito e continuano a contribuire al diffondersi della cultura (ed utilizzo) di queste nuove tecnologie!

Ricordo che la struttura è aperta a tutti, gratuitamente.

Un buon 2017 a tutti, ed ancora: GRAZIE!

e buona progettazione a tutti…

 

 

Consumo elettrico della stampante 3D

Quando è possibile, specie se la stampa 3D richiede molto tempo, si cerca di stampare di notte. Oppure, altro caso durante il week-end per poi tornare lunedì in ufficio e vedere il lavoro terminato.

Questo significa che la stampante, dopo aver lavorato, rimarrà accesa per diverse ore. Ma quanto costa?

L’unico modo di scoprirlo è fare delle prove e misure.

 

PROVA STAMPANTE 3D

Per la prova dei consumi elettrici ho utilizzato una stampante Overlord PRO. Si tratta di una macchina di concezione recente: dotata di livellamento automatico (Z-gap) e piatto riscaldato veloce.

 

 

 

 

COME VIENE PROVATA?

È stato sezionato il collegamento sulla spina 220 (T12) ed inserito un amperometro analogico. Le misure effettuate sono quattro:

  • spenta
  • stand-by
  • riscaldamento piatto
  • riscaldamento crogiolo

QUANTO CONSUMA UNA STAMPANTE 3D?

Ecco i risultati:

  1. spenta: 60mA
  2. stand-by: 90mA
  3. riscaldamento piatto: 750mA
  4. riscaldamento crogiolo: 740mA

Adesso possiamo distinguere tre fasi e i relativi consumi:

  1. spenta (come sopra) 60mA
  2. stand-by: (come sopra) 90mA
  3. in stampa (ABS): 750+740 mA = 1.49A

Chiaramente questi sono consumi istantanei, ciò significa che se la stampa dura 10 ore il suo consumo in kW sarà

((1.49x220)/1000) x 10 = 3.278kW/h

QUANTO MI COSTA QUANDO STAMPA?

Se ci si collega al portale https://www.strompreis.elcom.admin.ch è possibile vedere le tariffe elettriche per tipologia di impianto (p.es. H3).

Indicativamente il costo medio-alto per kW/h è di 20cts. Di conseguenza la nostra stampa ha inciso sulla bolletta elettrica per

0.20 x 3.278 = 0.6556CHF

poco più di mezzo franco, e stampando ABS (o simili).

 

E QUANTO MI COSTA IN STAND-BY

Quasi tutte le stampanti 3D hanno l’interruttore di accensione che interrompe solo il circuito di bassa tensione, e cioè a valle dell’alimentatore. Di conseguenza l’alimentatore avrà comunque un consumo minimo, ma comunque presente. Infatti l’alimentatore della stampante, così come quelli di tanti altri apparecchi, è del tipo switching (solitamente in flyback) il cui consumo elettrico del ramo primario è variabile in funzione della potenza assorbita. Nel nostro esempio la potenza assorbita a stampante spenta è 1/25 del consumo a piano regime e quindi avere la stampante collegata, ma spenta per 10 ore ci costerà

0.6556CHF / 25 = 0.026224CHF

 

ALTRE SOLUZIONI

Lasciare l’alimentatore collegato non è certo una buona pratica, oltre che rappresentare un, seppur, piccolo consumo.

Esistono delle soluzioni, una di queste è un nuovo dispositivo: mioswitch. Si tratta di una scheda che al ridursi dei consumo si autosgancia dalla rete elettrica, in pratica “stacca la spina”. Questo dispositivo, come già altri, opera nell’ambito del M2M o machine-to-machine, un comparto dell’IoT.

Come dicevo ci sono anche altre soluzioni, per esempio Octoprint, ma di questo ne parleremo un altra volta.

E poi per chi mastica di c’è sempre la possibilità di autocostruirlo: in fin dei conti è facile! Qualcuno se la sente?!

 

E buon risparmio elettrico a tutti!

 

 

 

 

Salva

Al via i corsi: STAMPA 3D e ARDUINO

Anche in questa edizione d’autunno 2016, nell’ambito CPA del Ticino,  iniziano i corsi su nuove tecnologie, e oltre al consolidato “stampa 3D” si è aggiunto “progettazione con Arduino”.

STAMPA 3D

P1120508Questo settore è ormai in piena “effervescenza”: le novità si susseguono a pieno ritmo e oramai le stampanti 3D, si trovano quasi ad ogni angolo, e bisognerà far qualcosa per conviverci!

 

ARDUINO

Nei corsi CPA, Arduino è il nuovo arrivo. Anche questo corso è previsto per chi inizia da zero e non ha conoscenze di elettronica o programmazione. Unica dotazione: un pc portatile da usare in classe per i lab o esercizi.

ESERCIZI ARDUINO

Si tratta di semplici programmi per familiarizzare con Arduino. In Internet, come ovvio, c’è una enorme disponibilità di programmi, ma quelli proposti sono quelli che andremo a studiare.

 

ALTRE PROPOSTE

Personalmente ritengo che i questi corsi debbano soddisfare sia la curiosità e sia l’eventuale sbocco professionale. In quest’ultimo caso lo sforzo e tempo richiesti saranno maggiori, ma non troppo! Il caso del negozio di modellismo di Lodrino è emblematico.

Quindi, ben vengano richieste specifiche per affrontare i temi che piu’ vi interessano (stampa 3D, Arduino, ecc). Le vostre proposte verranno chieste alla prima lezione del corso stesso, ma se qualcuno avesse già qualcosa in mente lo puo’ scrivere a stampa3d@aol.com

 

IL COMPUTER

Sia per la stampa 3D e sia per Arduino, l’uso del pc è fondamentale. Un portatile, anche economico, va benissimo.

Se poi qualcuno volesse sperimentare l’extreme programming, potrebbe ricorrere con un amico o collega di corso ad usare lo stesso computer: si tratta del dual (o pair) programming. Una idea geniale! Per chi volesse approfondire consiglio qualche lettura di L. Williams (cfr. http://collaboration.csc.ncsu.edu/laurie/pair.html ).

 

SLIDE

Finalmente sono riuscito a mettere online le diapositive del corso. Sono in formato pdf, quindi leggibili da tutti i sistemi. Ringrazio sin d’ora per le segnalazioni di errori o miglioramenti.

DOVE E QUANDO

Stampa 3D – introduzione: a Lugano dal 12.09.2016

Arduino: a Bellinzona dal 20.09.2016

 

Quindi, carta, penna e calamaio e… si parte!

Salva