1   Argomenti per Lezioni Arduino Base

Author:Andrea Manni
Copyright:GFDL
Version:0.1

Appunti e materiali per le lezioni del corso base su Arduino e Raspberry Pi. Questo documento e’ da considerarsi come una traccia degli argomenti considerati e non il manuale definitivo delle lezioni.

Generato il 2017-03-22 con: http://docutils.sourceforge.net/rst.html

1.1   Il corso

Il corso di base di Arduino e’ rivolto a chi si approccia per la prima volta al mondo dei makers, proponendosi di fornire le basi di elettronica, informatica e programmazione sia per orientarsi che per una prima interazione nell’innovativo mondo dell’elettronica digitale.

Tema del corso e’ affacciarsi alla piattaforma Arduino preparando quelle basi di elettronica, informatica e programmazione che permetteranno poi di muoversi in autonomia anche su altri microcontroller e piattaforme, sapendo distinguere gli elemnti di base e avendo un approccio alla programmazione e al design su sitemi embedded. Le varie tematiche verranno affrontate dagli studenti tramite sperimentazione con circuiti elettrici nei quali vari tipi di sensori saranno connessi al microcontroller Arduino che elaborera’ questi dati per poi interagire con il mondo reale comandando vari tipi di attuatori (ad es. motori, luci LED, altoparlanti).

1.1.1   Contesto

Negli anni recenti molto e’ cambiato nel panorama dell’elettronica, la contaminazione dell software libero con l’hardware, la disponibilita’ di sistemi miniaturizzati a basso costo e ecosistemi di sviluppo semplificati hanno reso disponibili ambienti come Arduino e RaspBerryPi a tutti i tipi di utenza: dai bambini a quegli adulti che magari ferrati su una parte delle conoscenze non avevano mai avuto un ponte che permettesse loro di avventurarsi in altri contesti per scoprire nuovi meccanismi e approcci per nuovi problemi.

Grazie alla diffusione di queste tecnologie oggi sono alla portata dell’hobbista soluzioni che, per via degli alti costi e dell’esclusivita’ delle varie implementazioni, fino a pochi anni fa erano esclusivi dell’automazione industriale, aprendo lo scenario di un rinnovato artigianato digitale che si declina nella cultura dei makers.

Free Software, Open Source, Open Hardware, Crowdfounding hanno rivoluzionato l’elettronica hobbystica con una serie di dispositivi intelligenti che hanno portato la creativita’ elettronica nella quotidianita’, partendo dai micro cotroller piu’ semplici ed economici come Arduino fino a veri e propri micro computer come Raspberry Pi basati su Gnu/Linux. Soluzioni flessibili ed economiche che a loro volta permettono la costruzione di nuovi strumenti come le stampanti 3D, offrendo ad un vasto pubblico la possibilita’ di dedicarsi a robotica, domotica, veicoli autonomi. Una nuova generazione di harware aperto da rendere smart con software libero e condividere in rete, per costruirsi oggetti sempre piu’ connessi tra loro e ricchi di funzionalita’.

1.1.2   Finalita’

Tutta questa flessibilita’ e disponibilita’ puo’ pero’ disorientare chi si approccia a questo universo, sia chi e’ ai primi passi che coloro che magari hanno precedenti esperienze con solo alcune delle discipline che si amalgamano nell’ecosistema Arduino. Scopo del corso e’ quindi stabilire quelle fondamenta sulle quali poter poi costruire un percorso che permetta di comprendere veramente l’enorme quantita’ di materiali disponibili e compiere i primi passi per progettare, implementare, condividere e costruire i propri progetti autonomamente.

Durante lo svolgimento del corso i partecipanti impareranno a programmare in Arduino C in ambiente Gnu/Linux utilizzando una breadboard e diversi input / output.

1.2   Introduzione

  • Cos’e’ un microcontroller (tutto compreso, memoria calcolo inputr-outpt)/ attuatore
  • Cenni alle classi di elaboratori
  • Cos’e’ l’informatica e la programmazione
  • Elettronica e elettronica digitale

Perche’ l’informatica ha bisogno di un attuatore: interazione con il reale. Elettronica digitale: vantaggi di usare un software (esempio di un bottone, logica booleana): cablatura istantanea, aggiunta di features.

1.2.1   Avvertenze

Precauzioni per non danneggiare la scheda durante l’uso:

  • Applicare materiale isolante (fondo in polistirolo) sotto alla scheda.
  • Applicare isolante al connettore USB per staccare il cavo senza statica.
  • Solo la porta 13 ha una resistenza integrata, per tutte le altre usare una resistenza da ~300.
  • Non usare Arduino come un trasformatore!

1.2.3   Verifica e compilazione

Codice sorgente e codice oggetto, compilazione del codice. Controllo formale, preprocessor (#define constantName value).

Eseguire procedure manualmente con makefile, visualizzazione codice oggetto.

1.3   Input

Pin in modalita’ input: leggere ground e +5 (con buffer di protezione: se il pin e’ OUTPUT LOW e viene attacato a +5 va in corto!). Pin fluttante, pull up e down con cavo. Metafora palo con fulmini e messa a terra. Esempio con un input, primo esempio con un bottone che fa accendere un LED.

Invertire il circuito del bottone / parametro della luminosita’ per spiegare i vantaggi dell’elettronica digitale rispetto a elettronica “cablata” (cenni a PWM, varie letture degli eventi di click).

1.3.1   Cicli Condizionali

Eventualmente usare un generatore random (esercizio per testa / croce) per introdurre i cicli condizionali.

1.3.2   State

Definire il concetto di state e stateless, sketch con iterruttore. Logica combinativa e logica sequenziale. Es. firewall IP, NAT machine. Utilizzare PULLUP per poi usare resistenza interna.

1.3.3   INPUT_PULLUP

Utilizzare la resistenza interna da 20Hohms di Arduino.

1.3.4   Ottimizzazioni

Nota

Questa parte andra’ affrontata dopo i motori (servo inclusi).

De-bouncing, multitasking con millis(), identificare il cambio di stato.

Sensori: dilatare i tempi di lettura, utilizzare valori medi di piu’ letture (smoothing), calibrazione dei sensori utilizzando seriale e riferimenti.

1.3.4.1   Eventuali

Trasformazioni di input: da sensore luminoso a piezo: Pitch follower

1.4   Analisi ulteriore

Introdurre i data types

Cicli iterativi: for - while

1.5   Seriali

Inviare dati via seriale per debugging.

1.6   Output

LED, motori, servomotori, piezo, seriale.

1.6.1   PWM

Esempio con un ‘’byte’’ di ‘’brightness++” per aumentare la luminosita’ di un LED. Introdurre eventualmente i cicli ‘’for’’ .

1.6.1.1   RGB LED

Utilizzare un LED RGB. Eventualmente introdurre esadecimali. Sketch con cicli iterativi e uno con input via seriale.

1.6.1.2   ShiftRegister

Eventuale: utiulizzare uno shift register per aumentare le porte di uscita con LED. La realizzazione del circuito e’ relativamente laboriosa, eventualmente portarne uno gia’ fatto. Usare piu’ listati (4 disponbili) sullo stesso circuito, ottimo per i binari.

1.6.2   Funzioni

Creare una funzione con un ciclo for per aumentare / diminuire la luminosita’ in base a un parametro passato alla funzione.

1.6.3   Piezo

Emettere suoni e melodie tramite un trasduttore piezoelettrico. - Onde sonore: frequenze e pitch. - Sketch di esempi in Digital

(Sketches in multiple tabs, array). Pitch follower: trasformazione input di un sensore photo -> onde sonore tramite piezo.

1.6.4   Calibrare l’input

Calibrare l’input di un potenziometro / sensore: identificare valori minimi, massimi, offset e stabilire una formula: ‘’Range = (1024 - offset) * 1024 / (1024 - offset) ‘’ .

Utilizzare ‘’map()’’ per fare la stessa cosa. Caso specifico: inversione tra ‘‘1024 <-> 256’’ : usare un fattore 4.

1.6.5   Usare un sensore di luminosita’

Utilizzare come sorgente di input la resistenza rilevata da un sensore di luminosita’, mappare l’input del sensore su un LED PWM / seriale.

1.7   Motori

Utilizzo di un motore 5v ~14mAh direttamente su Arduino tramite un transistor e diodo. Variare la velocita’ tramite PWM e un ciclo for, utilizzare un potenziometro come input analogico per variare la velocita’, trovare il valore minimo di carico per attivare il motore tramite debugging seriale.

1.7.1   Servo motori

Differenze rispetto a un motore DC, scopi di utilizzo. Caratteristiche: coppia, velocita’, peso, alimentazione. Funzionamento: analogici e digitali, riduttori plastici e metallici, bearings.

Sketch Base e Knob. Utilizzare librerie esterne.

1.7.2   Motori passo-passo

Funzionamento, caratteristiche di utilizzo (consumo - coppia), campi di utilizzo (automazione power tools), differenze rispetto a servo (controllo posizione) e motori normali.

1.7.3   Motori brushless

Differenze e caratteristiche rispetto ai motori a spazzole. Uso di una ESC, BEC.

1.7.4   Caratteristiche generali

Potenza, KV, voltaggio utilizzabile, ampere massimi, potenza / peso, efficienza.

1.8   Elettronica di base

Si dovranno introdurre:

  • Legge di Ohm
  • Serie e parallelo, in particolare per batterie e resistenze
  • Caratteristiche e uso dei LED: come calcolare resistenze necessarie
  • Uso di transistor per motori DC

1.8.1   Eventuale: saldature

Guida di base alle piccole saldature: cavi intrecciato, cavi dritti, PCB. Dissaldare.

1.8.2   Approfondimenti

Resistenze: resistivita’ in base a sezione e lunghezza: effetti su seriale e parallelo. (Fisica) Semiconduttori: resistenze -> diodi -> transistor : cenni sul funzionamento in base ai possibili range di spostamento degli elettroni.

1.9   RaspberryPi

TODO: la sezione su Rpi e’ al momento in sviluppo!

  • Differenze tra Rpi e Arduino
  • interazione tra i due
  • Quando usare Arduino o Rpi

1.10   Linux

Argomenti specifici per utilizzare integrare Arduino in ambiente Linux.

  • Installazione
  • Leggere informazioni da seriale (redirezione INPUT, verso un file, screen), mandare informazioni (echo, cat)
  • Eventuale: editor alternativi, compilazione e upload manuale (creare un make file).
  • Seriale: lettura, loggin, scrittura.

1.11   Materiali consigliati

Materiali e strumenti utili per gli studenti: - Multimetro - Cacciavite piatto - Nastro isolante - Helping hand (senza lente di ingrandimento) - Trasformatore regolabile 3-12v

1.12   Bibliografia

Testi consigliati, non richiesti.

1.12.1   Arduino

  • Arduino for Dummies : Come primo testo per principianti
  • Programming Arduino Next Steps: Going Further with Sketches : secondo testo
  • Arduino Projects for dummies : altro testo per progetti
  • Beginning C for Arduino: Learn C Programming for the Arduino
  • Practical Electronics for Inventors

1.12.2   Elettronica

  • Electronics for Dummies : primo testo semplice introduttivo
  • Electronics All-in-One For Dummies : secondo testo / piu’ approfondito
  • Practical Electronics for Inventors : testo piu’ avanzato

1.12.3   Programmazione

  • Beginning C for Arduino: Learn C Programming for the Arduino
  • The C Programming Language, 2nd Edition
  • How to Think Like a Computer Scientist: Learning with Python
  • Beginning Python: From Novice to Professional

1.12.5   Utilizzi

  • Input tramite manipolazione oggetti fisici.
  • Stazioni per rilevamento dati: metereologiche, movimento.
  • Attuatori per controllo numerico applicato a vari strumenti (stampanti 3D, frese , laser).
  • Device per lettura di sensori da utilizzare con smartphones - computer
  • Adattatore per sensori verso IoT
  • Attuatore per device IoT: arduino - WiFi - rele’ = accensione / spegnimento
  • RFID per device domestici: smartphone in contesti diversi = diversi profili
  • Interfaccia input per tutti gli scenari in cui non si puo’ usare un touch screen / tastiera
  • Domotica: irrigazione, controllo temperatura ambienti e acqua.
  • Robotica: integrazione di apparecchiature di sorveglianza, robot domestici (aspirapolvere) e da giardino (macchine agricole unmanned in miniatura).
  • Controllo droni, gyro, GPS, viewpoint. Ardupilot http://diydrones.com/notes/ArduPilot
  • Prototipi per macchine di dimensioni performance superiori.