53
IZ3HAE ARIVR Arduino Introduzione IZ3HAE Davide Melchiori ARI SEZIONE VERONA IQ3VO ARDUINO Nuove opportunità' per la sperimentazione radioamatoriale Serata introduttiva per iniziare ad utilizzarlo

ARDUINO · ARDUINO Nuove opportunità' per la sperimentazione radioamatoriale ... Esiste un formato "ufficiale" su EAGLE, ... studiare la guida di riferimento

  • Upload
    leque

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

IZ3HAE ARIVR Arduino Introduzione

IZ3HAE Davide Melchiori

ARI SEZIONE VERONA IQ3VO

ARDUINONuove opportunità' per la sperimentazione radioamatoriale

Serata introduttiva per iniziare ad utilizzarlo

IZ3HAE ARIVR Arduino Introduzione

Cosa è arduino?

E' un progetto open source hardware e software, tutta la documentazione è in rete

● Nasce per controllare dispositivi fisici● Basso livello, al contrario di Raspberry● Connettori standardizzati● Librerie per dispositivi fisici● Sistema shield

IZ3HAE ARIVR Arduino Introduzione

Cosa non è arduino?

Arduino non è un PC! Non ha e non è adatto a:● File system● Comunicazione ad alto livello● Monitor od HMI● Gestire tastiere evolute● Non adatto ad applicazioni ad alto livello

IZ3HAE ARIVR Arduino Introduzione

Licenze?

GNU Lesser General Public License (abbreviata in GNU LGPL o solo LGPL) è una licenza di software libero creata dalla Free Software Foundation, studiata come compromesso tra la GNU General Public License e altre licenze non copyleft come la Licenza BSD, la Licenza X11 e la Licenza Apache. Fu scritta nel 1991 (aggiornata nel 1999 e nel 2007) da Richard Stallman, con l'ausilio legale di Eben Moglen.

IZ3HAE ARIVR Arduino Introduzione

Licenze?

In pratica, posso utilizzare le librerie per creare e vendere un mio prodotto, anche senza rilasciare il codice sorgente.

● Attenzione, non tutte le librerie sono rilasciate con la stessa licenza, verificate se desiderate produrre sistemi che poi venderete per fare soldi!

IZ3HAE ARIVR Arduino Introduzione

HARDWARE

La connessione USB permette lo sviluppo e, volendo l'alimentazione

Senza PC si alimenta qui

BOOTLOADER

USB to Serial

IZ3HAE ARIVR Arduino Introduzione

SISTEMA

Il sistema è costituito da:● IDE, permette di costruire un'applicazione● TOOLCHAIN (invisibile), compila l'applicazione

in codice macchina● BOOTLOADER (sul micro) permette di caricare

l'applicazione nella FLASH del micro● SERIAL MONITOR permette il DEBUG

dell'applicazione

IZ3HAE ARIVR Arduino Introduzione

SISTEMA

PICCOLO ACCENNO AL "C"● Linguaggio è "C/C++"● "C++" è object oriented (OOP)● Permette di creare le classi e le istanze

IZ3HAE ARIVR Arduino Introduzione

DIVERSI TIPI DI HARDWAREEsistono una serie di dispositivi con vari processori, tutti ATMEL, in quanto la TOOLCHAIN (la vediamo successivamente) è gratuita.

● Tutti a base RISC (Reduced Instruction Set Computer)

● Con interfaccia di comunicazione ed hardware standard tra le varie schede

● Tutti sono compatibili con le SHIELD, le schede di espansione

IZ3HAE ARIVR Arduino Introduzione

Hardware attuali

Basati su AVR Atmega32u4/328 e simili

Base:● Uno, Leonardo, nano, mini, promini, lilypad, fio

Espansi:● Mega, Mega ADK (Android Development Kit)

Con dispositivi a bordo:● Esplora, Ethernet, Robot

IZ3HAE ARIVR Arduino Introduzione

Hardware attuali

Con Linux:● Arduino YUN e TRE (non ancora disponibile)

Con processore ARM● Arduino DUE

Con Linux:● Arduino YUN e TRE (non ancora disponibile)

Con processore ARM:● Arduino DUE

ESISTONO ANCHE I CLONI E SCHEDE COMPATIBILI, CON VARI PROCESSORI E LO STESSO IDE

(PIC)

IZ3HAE ARIVR Arduino Introduzione

Arduino è il LEGO degli elettronici?

Vediamo le SHIELD

IZ3HAE ARIVR Arduino Introduzione

Arduino SHIELD

Tutte le schede COMPATIBILI Arduino hanno la stessa interfaccia hardware e disposizione dei PIN HEADER.

● Su di questi si innestano delle schede di espansione denominate SHIELD, che si collegano ai pin di I/O del processore

● Aggiungono le più svariate funzioni● Si può sviluppare un proprio shield

IZ3HAE ARIVR Arduino Introduzione

Alcuni shield

GSM shield Ethernet shield

Motor shield Proto shield

Esistono di tanti produttori

IZ3HAE ARIVR Arduino Introduzione

Shield radioamatoriali

APRS radio shield

IZ3HAE ARIVR Arduino Introduzione

Shield radioamatoriali

GPS Shield LCD display

ARRL Libri Accordatore antenna

IZ3HAE ARIVR Arduino Introduzione

Arduino è il LEGO degli elettronici?

Direi di sì, i vari shield si "montano" uno sopra l'altro come i cubetti del LEGO.

Per arrivare quindi ad avere un hardware sperimentale, basta trovare o sviluppare l'appropriato shield, installarlo, reperire librerie ed esempi ed adattarlo alle nostre esigenze

IZ3HAE ARIVR Arduino Introduzione

Arduino è il LEGO degli elettronici?

IZ3HAE ARIVR Arduino Introduzione

Progetti radioamatoriali

Le tipiche applicazioni possono essere:● Telecomandi via APRS e/o GSM● Progetti che utilizzino GPS● Controllo rotori, con interfacciamento ( ad

esempio Ham Radio De Luxe)● Telecomandi DTMF● Accordatori automatici locali e/o remoti● Controllo apparecchi via WEB e/o GSM

IZ3HAE ARIVR Arduino Introduzione

Progetti radioamatoriali

● Beacon CW per ripetitori● Relais di sequenza● Keyer CW● Decoder CW● COR (carrier operated relay) e sequencer ponti

radio

● METEO

IZ3HAE ARIVR Arduino Introduzione

Progetti radioamatoriali

IZ3HAE ARIVR Arduino Introduzione

E' possibile sviluppare uno shield?CERTAMENTE! Esiste un formato "ufficiale" su EAGLE, un piccolo esempio, decoder DTMF.

IZ3HAE ARIVR Arduino Introduzione

E' possibile sviluppare un hardware dedicato?

IZ3HAE ARIVR Arduino Introduzione

Passi per un HW dedicatoRealizzare l'hardware rispettando lo schema delle schede Arduino, successivamente:

● Programmare un microcontrollore con il BOOTLOADER, con una scheda Arduino o tramite ICSP (In Circuit System Programmer)

● Prevedere sulla scheda la possibilità di collegarsi in seriale, vedi gli schemi originali

● A questo punto si connette il dispositivo al PC e si programma normalmente con l'IDE

IZ3HAE ARIVR Arduino Introduzione

Ambiente di sviluppo (IDE)

Prima notizia importante, è gratis! Ci serve solamente un cavo USB, questo unito al bassissimo costo della scheda (circa 20€), ci consente di iniziare con poco sforzo, IDE è:

● Un ambiente di sviluppo integrato, basato su PROCESSING, sviluppato dal MIT (Massachusetts Institute of Technology)

IZ3HAE ARIVR Arduino Introduzione

Ambiente di sviluppo (IDE)Lo scopo del progetto era di fornire un linguaggio "C" semplificato per ricercatori e sperimentatori, che non fosse necessariamente aderente alle specifiche ufficiali, ma che fosse semplice da usare

● Viene quindi introdotto un livello di astrazione dell'hardware, che rende "trasparente" al programmatore tutte le operazioni a livello di registri hardware del micro necessari per ottenere la funzione richiesta

IZ3HAE ARIVR Arduino Introduzione

Ambiente di sviluppo (IDE)● Il principiante viene aiutato con esempi, librerie,

documentazione disponibile in rete● Non è necessario conoscere la toolchain per

programmare, tutto viene eseguito in automatico

Cos'è la toolchain?● Per generare un codice si parte, al giorno

d'oggi, da un linguaggio ad alto livello.

IZ3HAE ARIVR Arduino Introduzione

Ambiente di sviluppo (IDE)

● Il "C" viene compilato in codice "assembler" per lo specifico processore, per cui il sorgente "C" è "portabile" tra vari hardware. File .ASM

● A sua volta questo .ASM viene tradotto in "numeri" che sono i codici istruzione per lo specifico micro, ma non vengono assegnati gli indirizzi fisici, file rilocabile .OBJ

● Vengono compilate anche le librerie necessarie

IZ3HAE ARIVR Arduino Introduzione

Ambiente di sviluppo (IDE)

● A questo punto il programma LINKER, mette assieme, tramite una tabella che specifica i vari indirizzi fisici della memoria, tutti i file OBJ e genera un file .HEX .BIN .S19 o altre estensioni, che sono caricabili in memoria del micro e che sono comparabili al .EXE o .COM del PC

● Tutte le operazioni sono eseguite dal "makefile"

Si capisce che avere la toolchain gratis è un bel vantaggio.

IZ3HAE ARIVR Arduino Introduzione

Ambiente di sviluppo (IDE)

IZ3HAE ARIVR Arduino Introduzione

Astrazione Hardware

Il principale vantaggio di un sistema Arduino è il livello di astrazione hardware.

Cosa significa?● Non devo studiarmi il data-sheet del

componente per poterlo utilizzare (448 pagine!)● Il tutto è portabile tra i vari processori● E' più intuitivo l'utilizzo dell'hardware

IZ3HAE ARIVR Arduino Introduzione

Astrazione Hardware

In cosa consiste?● Esiste un livello intermedio di librerie, linkate in

maniera trasparente, che consente di rendere "invisibile" l'hardware al programmatore. Per accendere, per esempio, il led sul pin 13, si utilizza un'istruzione semplice ed intuitiva.

● Quindi non ho bisogno di conoscere ed accedere ai registri hardware del micro, nè per le operazioni semplici nè tantomeno per quelle complesse.

IZ3HAE ARIVR Arduino Introduzione

Astrazione Hardware

Facciamo un piccolo esempio, sempre relativo all'impostazione ad 1 di un bit, per accendere il led:

● Devo individuare la porta di I/O a cui è connesso il pin in oggetto

● Tramite la documentazione devo capire quali sono i registri di controllo, tipicamente il Direction Register, ed il suo indirizzo

IZ3HAE ARIVR Arduino Introduzione

Astrazione Hardware

● Devo leggere il contenuto attuale del registro e settare come uscita il solo bit che mi interessa, applicando una maschera (OR)

● Devo individuare almeno il data register, e, con le stesse regole, leggerlo, inserire il bit 1 mediante una OR o il bit zero mediante una AND e riscriverne il contenuto, stando attento al che non ci sia nessuna possibilità di venir interrotto tra la lettura e la scrittura (interrupt). Questo per non alterare gli altri bit, utilizzati in altri punti del programma.

IZ3HAE ARIVR Arduino Introduzione

Astrazione Hardware

VEDETE CHE UN'OPERAZIONE BANALE DIVENTA COMPLESSA?

IZ3HAE ARIVR Arduino Introduzione

Strutture principali di un progetto

IZ3HAE ARIVR Arduino Introduzione

Strutture principali di un progettoStatement, sono le istruzioni per il compilatore, cominciano con #.

● Nel blocco iniziale abbiamo la prima istruzione, #INCLUDE, che "attiva" una libreria, la quale aggiunge "istruzioni", dette funzioni, al programma. Le librerie sono *.h

● L'inizializzazione dell'oggetto LiquidCrystal assegna i pin di Arduino all'interfaccia del display. Il livello di astrazione hardware consente di assegnare un numero progressivo che è corrispondente al circuito stampato

IZ3HAE ARIVR Arduino Introduzione

Strutture principali di un progetto

● Nello spazio successivo si possono assegnare le variabili di progetto e le costanti, ovviamente le variabili sono allocate nella RAM del processore, le costanti vengono compilate assieme al codice, vediamo successivamente come definirle

● La prima funzione di programma è SETUP, viene eseguito una sola volta al reset

● La seconda è LOOP ed è il never-ending loop, girerà sempre

IZ3HAE ARIVR Arduino Introduzione

Strutture principali di un progetto

Convenzioni sulle funzioni.

● In "C" le subroutines si chiamano funzioni, comparabili ai quadripoli

● Ogni funzione si deve chiudere, non esiste GOTO

● Ogni funzione può avere o non avere il passaggio parametri

● Una funzione SENZA passaggio di nessun parametro, nè in ingresso, nè in uscita, ha questa forma:

void NomeFunzione()

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"● Attenzione, i nomi sono "case sensitive"

● Void, vuole dire "vuoto"

● La parte di codice deve essere contenuta all'interno delle parentesi graffe

void ProvaCorso () {

Codice;Codice;}

Ogni riga di istruzione si chiude con il "semicolon" o punto e virgola, ad eccezione della funzione e delle istruzioni di controllo (if, for, loop....)

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"● Quando il programma arriva all'ultima parentesi

graffa esegue quello che in Basic era il RETURN, quindi ritorna alla funzione chiamante

● Il programma è così "strutturato" le varie chiamate di funzione sono innestate una dentro l'altra.

● Per convenzione di leggibilità, i vari livelli di NEST all'interno di una funzione vengono evidenziati mediante il "TAB", si chiama INDENT

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"void GestioneLcdEditor (){ if (EditorRobot==LOW) { DisplayServoPosition(); } else { lcd.setCursor(0,1); lcd.print("Parametri"); if (TastoGiu==HIGH){ TastoGiu=LOW; if (ParameterPointer <= 1){ ParameterPointer++; ParameterStatus=0; } } if (TastoSu==HIGH){ TastoSu=LOW; if (ParameterPointer > 0){ ParameterPointer--; ParameterStatus=0; } }

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"Tipi di variabile. In "C" deve essere definito il "tipo" della variabile, in base al numero di bit che essa impiega, le definizioni in arduino, sono leggermente diverse dal "C", vedi ad esempio HIGH e LOW, gestisce anche C ANSI.

● boolean , variabili che assumono 0 od 1● byte, in "C" è la char, 1 byte 8 bit● Int, 16 bit con segno● Uint 16 bit senza segno

E così via, studiare la guida di riferimento

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"

Definizione delle variabili:● Int NomeVariabile=0;

Definisce la variabile NomeVariabile, come 16 bit con segno, occupa 2 bytes di RAM e la inizializza a 0.

● #define CostanteProgramma 3

Definisce la costante CostanteProgramma, dove viene trovato il nome viene sostituito in compilazione con il valore 3.

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"

Passaggio parametri:● Le subroutines vengono chiamate funzioni in

quanto possono "leggere" un dato in ingresso, "trasformarlo e "rendere" un dato modificato in uscita, simile alle funzioni di trasferimento o quadripoli

● Se al posto di "void" si mette in tipo di variabile, la funzione può rendere il valore, ad esempio:

int LeggiQualcosa()

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"● Quando inseriremo la parola chiave RETURN, il valore sarà

posto sullo stack e letto dalla funzione chiamante, esempio:

int ReadIrValue(){

int IrValue;

if (irrecv.decode(&results)) {

Serial.println(results.value,HEX);

IrValue=results.value;

irrecv.resume(); // Receive the next value

return results.value;

}

else

return 0;

}

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"

Doppio passaggio parametri:● Oltre al "void", l'altro campo interessante sono

le doppie parentesi tonde, dove vengono passati i parametri dal chiamante al chiamato

● Vediamo assieme un esempio per utilizzare gli ingressi analogici come digitali.

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"

boolean TestDigitalIn (int ingresso){

int Read;Read=analogRead (ingresso);if(Read > SogliaInDigiHigh)

return HIGH;else

return LOW;

}

IZ3HAE ARIVR Arduino Introduzione

Elementi di codice "C"Quindi si vede il passaggio da chiamato a chiamante (risposta) al posto del VOID, come boolean, ed il passaggio parametri da chiamante a chiamato (interrogativo), all'interno della parentesi.

Facciamo un piccolo esempio di chiamata della funzione:

#define LineFollowerCenterAnalog 3 //analog in 3

if (TestDigitalIn(LineFollowerCenterAnalog)==HIGH)

IZ3HAE ARIVR Arduino Introduzione

LINKS● http://www.sainsmart.com/

● http://www.digilentinc.com/Products/Detail.cfm?NavPath=2,892,893&Prod=CHIPKIT-UNO32

● http://www.adafruit.com/

● http://www.linear.com/solutions/1851

● http://chipkit.net/

● http://www.argentdata.com/

● http://blog.radioartisan.com/

● http://hamshop.cz/open-cw-keyer-c27/open-cw-keyer-i196/

● http://blog.radioartisan.com/2013/01/25/review-hamshop-cz-open-keyer/

● http://www.dvice.com/archives/2012/06/ardusat-a-real.php

IZ3HAE ARIVR Arduino Introduzione

Basta così!

?QUESTION TIME, DOMANDE?

IZ3HAE ARIVR Arduino Introduzione

ProseguimentoSe ci sono persone interessate si potrebbe procedere come segue:

● Impostazione di un sistema funzionante

● Real time, gestione

● Slot task, gestire il tempo macchina

● Interrupt

● Analisi di un progetto completo, hardware e software di un accordatore automatico

● EAGLE?

● Debug di un progetto (Serial Monitor)

IZ3HAE ARIVR Arduino Introduzione

ARI VEDERCI!

'73 de IZ3HAE Davide Melchiori