Workshop Arduino by Fiore Basile

49
Arduino 101 Fiore Basile [email protected]

description

Fiore Basile presents the Commit University workshop in Arduino. 25/09/2014 CommitUniversity

Transcript of Workshop Arduino by Fiore Basile

Page 2: Workshop Arduino by Fiore Basile

Cos’è Arduino?

• Una (serie) di schede elettroniche

• Ambiente di sviluppo

• Una community

Page 3: Workshop Arduino by Fiore Basile
Page 4: Workshop Arduino by Fiore Basile

La Scheda

Page 5: Workshop Arduino by Fiore Basile

Microcontroller - Famiglia AVR

Page 6: Workshop Arduino by Fiore Basile

Varianti

Page 7: Workshop Arduino by Fiore Basile
Page 8: Workshop Arduino by Fiore Basile

Cloni

Page 9: Workshop Arduino by Fiore Basile

Ambiente di sviluppo

Page 10: Workshop Arduino by Fiore Basile

Community

http://playground.arduino.cc

Page 11: Workshop Arduino by Fiore Basile

Cosa si può fare?

Page 12: Workshop Arduino by Fiore Basile

Output

Page 13: Workshop Arduino by Fiore Basile

Input

Page 14: Workshop Arduino by Fiore Basile

Kit di sensori

Page 15: Workshop Arduino by Fiore Basile

Comunicare

Seriale Bluetooth 4.0 I2C

USB Bluetooth 2.0 SPI

Ethernet GPS TWI

Wifi RF CAN

Zigbee Midi

Page 16: Workshop Arduino by Fiore Basile

123D Circuits

http://123d.circuits.io/

Page 17: Workshop Arduino by Fiore Basile

Programmare Arduino

IDE

AVR GCC AvrDude

Firmware

Bootloader+

+

Page 18: Workshop Arduino by Fiore Basile

Sketch: C++ semplificato/* Questo e' un commento */ // anche questo e’ un commento

int led = 13;

void setup()!{!  pinMode(ledPin, OUTPUT);!}

void loop()!{!  pinMode(ledPin, OUTPUT);! digitalWrite(ledPin, HIGH);!}

COMMENTO

VARIABILE

INIZIALIZZAZIONE

CICLO INFINITO

Page 19: Workshop Arduino by Fiore Basile

Blink

!int led = 13;!!void setup() { ! pinMode(led, OUTPUT); !}!!void loop() {! digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)! delay(1000); // wait for a second! digitalWrite(led, LOW); // turn the LED off by making the voltage LOW! delay(1000); // wait for a second!}!

Accendere e spegnere un LED a intervalli di un secondo

Page 20: Workshop Arduino by Fiore Basile

Monitor Seriale

Debug e comunicazione col PC

Page 21: Workshop Arduino by Fiore Basile

Porta seriale!int led = 13;!!void setup() { !! Serial.begin(9600);! ! pinMode(led, OUTPUT); !}!!void loop() {!! Serial.println(“Accendo LED”);!! digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)! delay(1000); // wait for a second!! Serial.println(“Spengo LED”);!! digitalWrite(led, LOW); // turn the LED off by making the voltage LOW! delay(1000); // wait for a second!}!

Page 22: Workshop Arduino by Fiore Basile

Usare i sensori

Grazie ai sensori possiamo acquisire dati dall’ambiente circostante

Page 23: Workshop Arduino by Fiore Basile

Sensori

• Analogici: Il segnale è un voltaggio misurato con un valore da 0 a 1024

• Digitali: Il segnale è sempre un voltaggio (0-5v) ma Arduino ci fornisce un valore 0 o 1

Page 24: Workshop Arduino by Fiore Basile

Digitale vs Analogico

Page 25: Workshop Arduino by Fiore Basile

Sensori Analogici

Sensori a resistenza variabile

Potenziometro Termitstor Photo-resistor Flex

Page 26: Workshop Arduino by Fiore Basile

LED + Potenziometro

int sensorPin = A0; // potenziometro int ledPin = 13; // LED int sensorValue = 0; // VALORE !void setup() { pinMode(ledPin, OUTPUT); } !void loop() { sensorValue = analogRead(sensorPin); digitalWrite(ledPin, HIGH); delay(sensorValue); digitalWrite(ledPin, LOW); delay(sensorValue); }

Page 27: Workshop Arduino by Fiore Basile

Sensori Analogici

Sensori integrati

Temperatura Accelerazione Distanza

Page 28: Workshop Arduino by Fiore Basile

Sensori Digitali

Pulsanti Temperatura Accelerometri Giroscopio

La maggior parte dei sensori “evoluti”

Si leggono tramite vari protocolli Two Wire - i2c - SPI - Seriale

Page 29: Workshop Arduino by Fiore Basile

Led + Bottoneint led = 13; int button = 2; int buttonState = 0; !void setup() { pinMode(led, OUTPUT); pinMode(button, INPUT); } void loop() { buttonState = digitalRead(button); if (buttonState == HIGH) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } }

Page 30: Workshop Arduino by Fiore Basile

Output con Arduino

Led Motore DC Motore Stepper

SpeakerMotore servoDisplay LCD

Page 31: Workshop Arduino by Fiore Basile

Output con Arduino

Page 32: Workshop Arduino by Fiore Basile

PWM

Variando l’intervallo acceso-spento

Page 33: Workshop Arduino by Fiore Basile

PWM

• Possiamo controllare la luminosità di un LED

• Possiamo controllare un Motore Passo-Passo

• Possiamo controllare un Servo Motore

• Possiamo pilotare uno speaker

Page 34: Workshop Arduino by Fiore Basile

Uscite PWM

Page 35: Workshop Arduino by Fiore Basile

LED Dimmer

int sensorPin = A0; // potenziometro int ledPin = 13; // LED int sensorValue = 0; // VALORE !void setup() { pinMode(ledPin, OUTPUT); } !void loop() { sensorValue = analogRead(sensorPin); // input 0-1024 output 0-255 analogWrite(ledPin, sensorValue/4); }

Page 36: Workshop Arduino by Fiore Basile

Motore Servo

Page 37: Workshop Arduino by Fiore Basile

Motore Servo

Page 38: Workshop Arduino by Fiore Basile

Display LCD

Page 39: Workshop Arduino by Fiore Basile

Display LCD

Page 40: Workshop Arduino by Fiore Basile

Dispositivi Avanzati

TFTMOTORWIFI

ETHERNET GSM

GPS, Midi, Relé etc

Page 41: Workshop Arduino by Fiore Basile

Protocolli di comunicazione

• One Wire • I2C SDA/SCK • SPI MISO/MOSI/CLK/SS • Seriale TX-RX

Page 42: Workshop Arduino by Fiore Basile

DHT11 - Sensore Umidità - One Wire

http://playground.arduino.cc/main/DHT11Lib

#include <dht11.h>!! dht11 DHT11;! #define DHT11PIN 2! int chk = DHT11.read(DHT11PIN);!! Serial.print("Read sensor: ");! switch (chk)! {! case DHTLIB_OK: !! ! Serial.println("OK"); !! ! break;! case DHTLIB_ERROR_CHECKSUM: !! ! Serial.println("Checksum error"); !! ! break;! case DHTLIB_ERROR_TIMEOUT: !! ! Serial.println("Time out error"); !! ! break;! default: !! ! Serial.println("Unknown error"); !! ! break;! }!

Page 43: Workshop Arduino by Fiore Basile

Protocollo Two Wire Interface (TWI)

Page 44: Workshop Arduino by Fiore Basile

I2C Master

#include <Wire.h>!!#define LED_PIN 13!byte x = 0;!!void setup()!{! Wire.begin(); // Start I2C Bus as Master! pinMode(LED_PIN, OUTPUT);! digitalWrite(LED_PIN, LOW);!!}!void loop()!{! ! Wire.beginTransmission(9); // transmit to device #9! Wire.send(x); // sends x ! Wire.endTransmission(); // stop transmitting! x++;! if (x > 5) x=0;! delay(450);!}

Page 45: Workshop Arduino by Fiore Basile

I2C Slave

#include <Wire.h>!!#define LED_PIN 13!!int x;!!void setup() {! Wire.begin(9); // Start I2C Bus as a Slave (Device Number 9)! Wire.onReceive(receiveEvent); // register event! x = 0;!}!!void loop() {! digitalWrite(LED_PIN, HIGH);! delay(x);! digitalWrite(LED_PIN, LOW);! delay(x);!}!!void receiveEvent(int howMany) {! x = Wire.receive(); // receive byte as an integer!}

Page 46: Workshop Arduino by Fiore Basile

SPI

1.8" SPI TFT display, 160x128 18-bit color

https://github.com/adafruit/Adafruit-ST7735-Library

Page 47: Workshop Arduino by Fiore Basile

SPI#include <Adafruit_GFX.h> // Core graphics library!#include <Adafruit_ST7735.h> // Hardware-specific library!#include <SPI.h>!!#define TFT_CS 10!#define TFT_RST 9 !#define TFT_DC 8!!Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);!!!void setup(){! tft.initR(); !}!!void loop(){!! tft.fillScreen(ST7735_BLACK);!! tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);!! tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);!!}

Page 48: Workshop Arduino by Fiore Basile

Altri esempi

http://arduino.cc/en/Tutorial/HomePage

http://github.com/adafruit

Page 49: Workshop Arduino by Fiore Basile

Grazie!

Fiore Basile [email protected]

http://fibasile.github.io http://fablabcascina.org http://fabbricalo.it