1 ===================================
2 Argomenti per Lezioni Arduino Base
3 ===================================
11 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.
16 .. contents:: Indice degli argomenti
19 Generato il |date| con: http://docutils.sourceforge.net/rst.html
25 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.
27 Obbiettivo del corso e' partire dalla piattaforma Arduino come primo approccio all'elettronica digitale, lavorare su quelle basi di elettronica, informatica e programmazione che permetteranno poi di sviluppare anche sulle altre soluzioni come RasPi. Le varie tematiche verranno affrontate dagli studenti con prototipi funzionanti, 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).
32 Negli anni recenti molto e' cambiato nel panorama dell'elettronica, la contaminazione con gli ambienti aperti del settore informatico e la disponibilita' di sistemi miniaturizzati a basso costo ha reso disponibili nuove piattaforme come Arduino o RaspBerryPi, soluzioni economiche e flessibili.
34 Grazie a queste ed altre tecnologie e alla cultura dei Makers 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 esclusiva dell'automazione industriale.
36 Il Free Software, Open Source e Open Hardware, Crowdfounding hanno rivoluzionato l'elettronica con una serie di dispositivi che hanno portato la creativita' elettronica nella disponibilita' dei makers, 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 il software libero, per costruirsi oggetti sempre piu' connessi tra loro e ricchi di funzionalita'.
41 Tutta questa flessibilita' e disponibilita' puo' pero' disorientare chi si approccia a queste tecnologie, sia chi e' ai primi passi che coloro che magari hanno precedenti esperienze con solo alcune delle discipline che si amalgamano con Arduino. Scopo del corso e' quindi stabilire delle fondamenta di informatica e elettronica per poi poter crescere sia con Arduino che indirizzarsi verso le alre soluzioni.
44 Durante lo svolgimento del corso i partecipanti impareranno a programmare in Arduino C in ambiente Gnu/Linux utilizzando una breadboard e diversi input/output.
50 - Cos'e' un microcontroller (tutto compreso, memoria calcolo inputr-outpt)/ attuatore
51 - Cenni alle classi di elaboratori
52 - Cos'e' l'informatica e la programmazione
53 - Elettronica e elettronica digitale
55 Perche' l'informatica ha bisogno di un attuatore: interazione con il reale.
56 Elettronica digitale: vantaggi di usare un software (esempio di un bottone, logica booleana): cablatura istantanea, aggiunta di features.
62 Precauzioni per non danneggiare la scheda durante l'uso:
65 * Applicare materiale isolante (fondo in polistirolo) sotto alla scheda.
66 * Applicare isolante al connettore USB per staccare il cavo senza statica.
67 * Solo la porta 13 ha una resistenza integrata, per tutte le altre usare una resistenza da ~300.
68 * Non usare Arduino come un trasformatore!
76 - Struttura (setup, loop, input output)
77 - Fondamenti di programmazione: i 4 elementi base (fare descrizione completa dopo aver fatto cicli - INPUT).
79 - Dichiarazione di variabili: LED
80 - Funzioni per cambio di stato: digitalWrite / delay - output
86 # Fare accendere il LED per 1/10 di secondo
87 # Far spegnere il LED per 1/10 di s.
89 Descrivere una istruzione
92 * Far accendere il LED per 1/10 di secondo e un secondo
94 Questa e' una sequenza di istruzioni, accenno alle funzioni, es delay() .
99 Verifica e compilazione
100 ------------------------
102 Codice sorgente e codice oggetto, compilazione del codice.
103 Controllo formale, preprocessor (#define constantName value).
105 Eseguire procedure manualmente con makefile, visualizzazione codice oggetto.
112 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!).
113 Pin fluttante, pull up e down con cavo. Metafora palo con fulmini e messa a terra.
114 Esempio con un input, primo esempio con un bottone che fa accendere un LED.
117 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*).
120 ----------------------
122 Eventualmente usare un generatore random (esercizio per testa / croce) per introdurre i cicli condizionali.
128 Definire il concetto di state e stateless, sketch con iterruttore. Logica combinativa e logica sequenziale. Es. firewall IP, NAT machine.
129 Utilizzare PULLUP per poi usare resistenza interna.
135 Utilizzare la resistenza interna da 20Hohms di Arduino.
142 Questa parte andra' affrontata dopo i motori (servo inclusi).
145 De-bouncing, multitasking con millis(), identificare il cambio di stato.
148 Sensori: dilatare i tempi di lettura, utilizzare valori medi di piu' letture (smoothing), calibrazione dei sensori utilizzando seriale e riferimenti.
155 Trasformazioni di input: da sensore luminoso a piezo: Pitch follower
162 Introdurre i data types
165 Cicli iterativi: for - while
171 Inviare dati via seriale per debugging.
176 LED, motori, servomotori, piezo, seriale.
181 Esempio con un ''byte'' di ''brightness++" per aumentare la luminosita' di un LED.
182 Introdurre eventualmente i cicli ''for'' .
187 Utilizzare un LED RGB. Eventualmente introdurre esadecimali. Sketch con cicli iterativi e uno con input via seriale.
192 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.
197 Creare una funzione con un ciclo for per aumentare / diminuire la luminosita' in base a un parametro passato alla funzione.
204 Emettere suoni e melodie tramite un trasduttore piezoelettrico.
205 - Onde sonore: frequenze e pitch.
206 - Sketch di esempi in Digital
209 (Sketches in multiple tabs, array).
210 Pitch follower: trasformazione input di un sensore photo -> onde sonore tramite piezo.
216 Calibrare l'input di un potenziometro / sensore: identificare valori minimi, massimi, offset e stabilire una formula: ''Range = (1024 - offset) * 1024 / (1024 - offset) '' .
218 Utilizzare ''map()'' per fare la stessa cosa. Caso specifico: inversione tra ''1024 <-> 256'' : usare un fattore 4.
221 Usare un sensore di luminosita'
222 -------------------------------
224 Utilizzare come sorgente di input la resistenza rilevata da un sensore di luminosita', mappare l'input del sensore su un LED PWM / seriale.
232 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.
238 Differenze rispetto a un motore DC, scopi di utilizzo.
239 Caratteristiche: coppia, velocita', peso, alimentazione.
240 Funzionamento: analogici e digitali, riduttori plastici e metallici, bearings.
242 Sketch Base e Knob. Utilizzare librerie esterne.
244 - http://handyboard.com/hb/faq/hardware-faqs/dc-vs-servo/
248 -----------------------
250 Funzionamento, caratteristiche di utilizzo (consumo - coppia), campi di utilizzo (automazione power tools), differenze rispetto a servo (controllo posizione) e motori normali.
256 Differenze e caratteristiche rispetto ai motori a spazzole.
260 Caratteristiche generali
261 -------------------------
263 Potenza, KV, voltaggio utilizzabile, ampere massimi, potenza / peso, efficienza.
268 =====================
270 Si dovranno introdurre:
273 - Serie e parallelo, in particolare per batterie e resistenze
274 - Caratteristiche e uso dei LED: come calcolare resistenze necessarie
275 - Uso di transistor per motori DC
281 Guida di base alle piccole saldature: cavi intrecciato, cavi dritti, PCB. Dissaldare.
287 Resistenze: resistivita' in base a sezione e lunghezza: effetti su seriale e parallelo.
288 (Fisica) Semiconduttori: resistenze -> diodi -> transistor : cenni sul funzionamento in base ai possibili range di spostamento degli elettroni.
294 TODO: la sezione su Rpi e' al momento in sviluppo!
296 - Differenze tra Rpi e Arduino
297 - interazione tra i due
298 - Quando usare Arduino o Rpi
304 Argomenti specifici per utilizzare integrare Arduino in ambiente Linux.
307 - Leggere informazioni da seriale (redirezione INPUT, verso un file, screen), mandare informazioni (echo, cat)
308 - Eventuale: editor alternativi, compilazione e upload manuale (creare un make file).
309 - Seriale: lettura, loggin, scrittura.
316 Installare sketch per Arduino.
318 - http://webtechie.be/2014/05/08/scratch-and-arduino-on-linux/
322 Materiali consigliati
323 ========================
325 Materiali e strumenti utili per gli studenti:
329 - Helping hand (senza lente di ingrandimento)
330 - Trasformatore regolabile 3-12v
336 Testi consigliati, non richiesti.
342 - Arduino for Dummies : Come primo testo per principianti
343 - Programming Arduino Next Steps: Going Further with Sketches : secondo testo
344 - Arduino Projects for dummies : altro testo per progetti
345 - Beginning C for Arduino: Learn C Programming for the Arduino
346 - Practical Electronics for Inventors
351 - Electronics for Dummies : primo testo semplice introduttivo
352 - Electronics All-in-One For Dummies : secondo testo / piu' approfondito
353 - Practical Electronics for Inventors : testo piu' avanzato
358 - Beginning C for Arduino: Learn C Programming for the Arduino
359 - The C Programming Language, 2nd Edition
360 - How to Think Like a Computer Scientist: Learning with Python
361 - Beginning Python: From Novice to Professional
366 - http://arduino.cc/en/Reference/HomePage
367 - http://www.ladyada.net/learn/arduino/index.html
368 - https://learn.adafruit.com/series/learn-arduino
369 - https://wiki.archlinux.org/index.php/arduino
370 - http://arduinoprincipiante.blogspot.it/2013/04/presentazione.html
371 - http://tronixstuff.com/tutorials/
372 - http://arduino-info.wikispaces.com/
380 - Input tramite manipolazione oggetti fisici.
381 - Stazioni per rilevamento dati: metereologiche, movimento.
382 - Attuatori per controllo numerico applicato a vari strumenti (stampanti 3D, frese , laser).
383 - Device per lettura di sensori da utilizzare con smartphones - computer
384 - Adattatore per sensori verso IoT
385 - Attuatore per device IoT: arduino - WiFi - rele' = accensione / spegnimento
386 - RFID per device domestici: smartphone in contesti diversi = diversi profili
387 - Interfaccia input per tutti gli scenari in cui non si puo' usare un touch screen / tastiera
388 - Domotica: irrigazione, controllo temperatura ambienti e acqua.
389 - Robotica: integrazione di apparecchiature di sorveglianza, robot domestici (aspirapolvere) e da giardino (macchine agricole unmanned in miniatura).
390 - Controllo droni, gyro, GPS, viewpoint. Ardupilot http://diydrones.com/notes/ArduPilot
391 - Prototipi per macchine di dimensioni performance superiori.
397 - Chorus – United Visual Artists: http://www.elmsly.com/Chorus-United-Visual-Artists
398 - Ardupilot http://diydrones.com/notes/ArduPilot