Arduino L'elettronica Open Source!
Microcontrollori Un microcontrollore o microcontroller, detto anche computer single chip è un sistema a microprocessore completo, integrato in un solo chip, progettato per ottenere la massima autosufficienza funzionale ed ottimizzare il rapporto prezzoprestazioni per una specifica applicazione, a differenza, ad esempio, dei microprocessori impiegati nei personal computer, adatti per un uso più generale. wikipedia
Microcontrollori Utilizzati su: Televisori Videocamere Cellulari Lettori CD/DVD Ecc inf.
Arduino Arduino è una piattaforma hardware per il physical computing, creata in Italia, nel 2005, basata su una semplicissima scheda di I/O e su un ambiente di sviluppo che usa una libreria Wiring per semplificare la scrittura di programmi in C e C++ da far girare sulla scheda. Il team di Arduino è composto da Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, e David Mellis. Il progetto ha preso avvio in Italia ad Ivrea, nel 2005, con lo scopo di rendere disponibile, a progetti di Interaction design realizzati da studenti, un device per il controllo che fosse più economico rispetto ad altri sistemi di prototipazione disponibili all'epoca.
Arduino Nano Specifications: Microcontroller Atmel ATmega168 or ATmega328 Operating Voltage (logic level) 5V Input Voltage (recommended)7-12 V Input Voltage (limits) 6-20 V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 8 Flash Memory 16 KB (ATmega168) or 32 KB (ATmega328) of which 2 KB used by bootloader SRAM 1 KB (ATmega168) or 2 KB (ATmega328) EEPROM 512 bytes (ATmega168) or 1 KB (ATmega328) Clock Speed 16 MHz Dimensions 0.73" x 1.70"
LilyPad Arduino Microcontroller ATmega168V or ATmega328V Operating Voltage 2.7-5.5 V Input Voltage 2.7-5.5 V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 ma Flash Memory 16 KB (of which 2 KB used by bootloader) SRAM 1 KB EEPROM 512 bytes Clock Speed 8 MHz
Arduino Mega Microcontroller ATmega1280 Operating Voltage 5V Input Voltage (recommended)7-12v Input Voltage (limits) 6-20V Digital I/O Pins 54 (of which 14 provide PWM output) Analog Input Pins 16 DC Current per I/O Pin 40 ma DC Current for 3.3V Pin 50 ma Flash Memory 128 KB of which 4 KB used by bootloader SRAM 8 KB EEPROM 4 KB Clock Speed 16 MHz
Arduino Duemilanove Microcontroller Atmega168, ATmega328 Operating Voltage 5V Input Voltage (recommended)7-12v Input Voltage (limits) 6-20V Digital I/O Pins 14 (of which 6 provide PWM output) Analog Input Pins 6 DC Current per I/O Pin 40 ma DC Current for 3.3V Pin 50 ma Flash Memory 16 KB (ATmega168) or 32 KB (ATmega328) of which 2 KB used by bootloader SRAM 1 KB (ATmega168) or 2 KB (ATmega328) EEPROM 512 bytes (ATmega168) or 1 KB (ATmega328) Clock Speed 16 MHz
L'IDE
LIBRERIE Arduino mette a disposizione una serie di librerie che facilitano notevolmente l'implementazione su tale piattaforma. Esistono ormai svariate librerie che si occupano della gestione dei vari componenti hardware, ad esempio servomotori, display lcd, comunicazione seriale, ethernet ecc ecc. L'implementazione tramite tali librerie permette lo sviluppo e la prototipazione di sistemi embedded senza dover comprendere a fondo come i componenti lavorino.
PASSIAMO ALL'AZIONE
LUCIFERO Lucifero è un semplice robot, ha lo scopo di seguire le fonti luminose presenti nell'ambiente. Il cervello di Lucifero è Arduino al quale sono state collegate alcune componenti elettroniche. INGREDIENTI: 1 Arduino 1 Motore elettrico CC 1 Servomotore 2 Fotoresistenze 2 Resistenze 4 Ruote 1 Sistema di motoriduzione 1 Pila 9V 1 Breadboard Qualche cavo Un po di pazienza
E COME VORREBBE VEDERLO BENDER...
LUCIFERO #include <Servo.h> #define MOTORE 3 #define SERVO 9 #define FDX 4 #define FSX 5 #define DX 50 #define SX 120 #define CEN 90 Servo myservo; int valfotosx; //variabile relativa alla fotoresistenza di sinistra int valfotodx; //variabile relativa alla fotoresistenza di Destra int i; //contatore int medsx,meddx; //variabili su cui si calcola la media dei valori delle fotoresistenze
setup e loop Se sviluppiamo il software con l'ide di Arduino ci troveremo a dover implementare due funzioni principali: setup e loop. La prima viene invocara per inizializzare il sistema, la seconda viene eseguita continuamente dal sistema finchè è in funzione. Una volta compilato il codice l'ide inserirà di default una funzione main standard. void setup(){ void loop(){ int main(void) { init(); setup(); for (;;) loop(); return 0;
LUCIFERO Se sviluppiamo il software con l'ide di Arduino ci troveremo a dover implementare due funzioni principali: setup e loop. La prima viene invocara per inizializzare il sistema, la seconda viene eseguita continuamente dal sistema finchè è in funzione. void setup() { myservo.attach(servo); //dichiara che sul pin SERVO è connesso un servomotore TROPPO DIFFICILE!!!
LUCIFERO void loop() { medsx=0; meddx=0; for(i = 0;i <= 4; i++){ //calcola una media su 4 valori dei valori delle due fotoresistenze valfotosx = analogread(fsx); valfotodx = analogread(fdx); medsx=meddx+valfotosx; meddx=meddx+valfotodx; meddx=meddx/4; medsx=medsx/4;...
LUCIFERO valfotosx=medsx-meddx; //riutiluzzo valfotosx ora non serve :P if(valfotosx<-50){ //se la differenza fra la media dei valori di destra e //quelli di sinistra? < -50 => meddx > medsx myservo.write(dx);//si gira a sinistra analogwrite(motore,890);//regola velocità motore else if(valfotosx>50){//se la differenza è > 50 => medsx > meddx analogwrite(motore,890); myservo.write(sx);//si gira a sinistra else{//se la differenza è nell'intervallo [-50,50] analogwrite(motore,1000); myservo.write(cen);//si va dritti delay(150);
ALTRE LIBRERIE Ovviamente è anche possibile effettuare la scrittura digitale... void setup(){ pinmode(12,output); void loop(){ digitalwrite(12,high);
ALTRE LIBRERIE Sono disponibili molte altre librerie che facilitano lo sviluppo di applicazioni con Arduino. Un esempio è la librerie per la comunicazione seriale char c; void setup(){ Serial.begin(9600); void loop(){ Serial.println( Sono in loop ); c= Serial.read();
ALTRE LIBRERIE LiquidCrystal() begin() clear() noblink() display() home() nodisplay() scrolldisplayleft() setcursor() scrolldisplayright() write() autoscroll() print() noautoscroll() cursor() lefttoright() nocursor() righttoleft() blink() createchar()
ALTRE LIBRERIE Ethernet begin() Server class * Server() * begin() * available() * write() * print() * println() Client class * Client() * connected() * connect() * write() * print() * println() * available() * read() * flush() * stop()
CONCLUSIONI Come visto sviluppare applicazioni con Arduino è semplice e veloce ed economico. Da un semplice dispositivo per la didattica Arduino è divenuto un ottimo strumento utilizzato anche in applicazioni industriali. Esempi: Wiimote Macchina Espresso Controlled Laser Harp Fully Functional Automatic Head Tracking con Arduino Rocker Scale Measures how Hard You Rock