Sistemi embedded
A.A. 2026/2027
Obiettivi formativi
Fornire al discente le conoscenze per progettare e realizzare un sistema embedded prototipale. Dopo una panoramica delle piattaforme esistenti in commercio verranno fornite alcune basi di elettricità/elettronica per padroneggiare l'interfacciamento col mondo fisico, successivamente verranno affrontati i principali approcci di sviluppo software su piattaforme embedded.
Risultati apprendimento attesi
Saper scegliere la piattaforma embedded adatta ad uno scopo/progetto. Saper progettare e implementare il software da caricare su MCU. Conoscere i limiti e le possibilità di interfacciamento col mondo esterno. Saper scegliere sensori e attuatori corretti per un determinato scopo. Saper leggere uno schema elettrico. Saper scegliere tra protocolli di comunicazione adeguati (sensori e attuatori, rete). Saper gestire una piattaforma embedded con/senza sistema operativo
Periodo: Secondo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento può essere seguito come corso singolo.
Programma e organizzazione didattica
Edizione unica
Responsabile
Periodo
Secondo semestre
Programma
## Parte teorica
1. Introduzione ai sistemi embedded
- Definizione, applicazioni e sfide (es. risorse limitate, consumo energetico, ambienti ostili).
- Panoramica delle piattaforme commerciali (ESP32, Arduino, Raspberry Pi).
2. Richiami di elettricità/elettronica
- Tensioni, correnti, leggi di Ohm e Kirchhoff.
- Componenti passivi (resistenze, condensatori, etc.) e loro applicazioni.
- Uso degli strumenti di misura (multimetro, oscilloscopio) e considerazioni sulla sicurezza personale.
3. Stili di programmazione per sistemi embedded
- Programmazione senza MMU: cooperative multitasking, gestione degli interrupt.
- Race conditions, watchdog timer, macchine a stati finiti (FSA).
- Eventi e tasks: gestione di flussi di controllo.
4. Temporizzazione e gestione delle risorse
- Tecniche di temporizzazione (es. timer hardware, delay software).
- Gestione della memoria (EEPROM, flash memory) e ottimizzazione delle risorse.
5. Protocolli di comunicazione
- Low-level: RS232, I2C, SPI, 1-Wire, CAN.
- High-level: MQTT, OSC.
- Bit banging.
- Pulse Width Modulation (PWM).
- Conversione analogico-digitale (AD) e digitale-analogica (DA).
- multiplexing.
6. Interfacciamento con il mondo esterno
- Sensori (es. temperatura, umidità, movimento) e attuatori (es. motori DC, passo-passo, relè).
- Reti: Ethernet, cellulare, WiFi, Bluetooth.
7. Piattaforme principali
- Confronto tra ESP32, Arduino e Raspberry Pi: architettura, vantaggi, svantaggi e casi d'uso.
8. Controlli automatici, feedback
## Laboratorio
1. Ciclo di sviluppo del software embedded: scrittura del codice, cross-compilazione, upload, esecuzione
2. Programmazione di base con Arduino Wiring
- Struttura di un programma: `setup()` e `loop()`
- Variabili, espressioni, tipi di dato e operatori (`+`, `-`, `*`, ecc.)
3. Input/Output e interfacciamento
- Lettura di dati da sensori (es. pulsanti, potenziometri, sensori digitali/analogici)
- Controllo di attuatori (es. LED, motori, relè) tramite porte I/O.
4. Controllo di flusso e funzioni
- Strutture di controllo (if, for, while).
- Definizione e uso di funzioni per modularità del codice.
5. Librerie e gestione delle periferiche
- Inclusione e uso di librerie per sensori/attuatori (es. librerie per I2C, SPI).
- Confronto tra piattaforme (es. Arduino vs. ESP32).
6. Saldatura e prototipazione
1. Introduzione ai sistemi embedded
- Definizione, applicazioni e sfide (es. risorse limitate, consumo energetico, ambienti ostili).
- Panoramica delle piattaforme commerciali (ESP32, Arduino, Raspberry Pi).
2. Richiami di elettricità/elettronica
- Tensioni, correnti, leggi di Ohm e Kirchhoff.
- Componenti passivi (resistenze, condensatori, etc.) e loro applicazioni.
- Uso degli strumenti di misura (multimetro, oscilloscopio) e considerazioni sulla sicurezza personale.
3. Stili di programmazione per sistemi embedded
- Programmazione senza MMU: cooperative multitasking, gestione degli interrupt.
- Race conditions, watchdog timer, macchine a stati finiti (FSA).
- Eventi e tasks: gestione di flussi di controllo.
4. Temporizzazione e gestione delle risorse
- Tecniche di temporizzazione (es. timer hardware, delay software).
- Gestione della memoria (EEPROM, flash memory) e ottimizzazione delle risorse.
5. Protocolli di comunicazione
- Low-level: RS232, I2C, SPI, 1-Wire, CAN.
- High-level: MQTT, OSC.
- Bit banging.
- Pulse Width Modulation (PWM).
- Conversione analogico-digitale (AD) e digitale-analogica (DA).
- multiplexing.
6. Interfacciamento con il mondo esterno
- Sensori (es. temperatura, umidità, movimento) e attuatori (es. motori DC, passo-passo, relè).
- Reti: Ethernet, cellulare, WiFi, Bluetooth.
7. Piattaforme principali
- Confronto tra ESP32, Arduino e Raspberry Pi: architettura, vantaggi, svantaggi e casi d'uso.
8. Controlli automatici, feedback
## Laboratorio
1. Ciclo di sviluppo del software embedded: scrittura del codice, cross-compilazione, upload, esecuzione
2. Programmazione di base con Arduino Wiring
- Struttura di un programma: `setup()` e `loop()`
- Variabili, espressioni, tipi di dato e operatori (`+`, `-`, `*`, ecc.)
3. Input/Output e interfacciamento
- Lettura di dati da sensori (es. pulsanti, potenziometri, sensori digitali/analogici)
- Controllo di attuatori (es. LED, motori, relè) tramite porte I/O.
4. Controllo di flusso e funzioni
- Strutture di controllo (if, for, while).
- Definizione e uso di funzioni per modularità del codice.
5. Librerie e gestione delle periferiche
- Inclusione e uso di librerie per sensori/attuatori (es. librerie per I2C, SPI).
- Confronto tra piattaforme (es. Arduino vs. ESP32).
6. Saldatura e prototipazione
Prerequisiti
Conoscenze di base di:
- Programmazione (es. linguaggi C/C++, strutture dati, algoritmi);
- Fisica (leggi di Ohm e Kirchhoff, concetti di tensione, corrente e potenza);
- Elettronica (componenti passivi, uso di strumenti di misura).
- Programmazione (es. linguaggi C/C++, strutture dati, algoritmi);
- Fisica (leggi di Ohm e Kirchhoff, concetti di tensione, corrente e potenza);
- Elettronica (componenti passivi, uso di strumenti di misura).
Metodi didattici
Lezioni frontali in aula per la parte teorica (es. introduzione ai sistemi embedded, protocolli di comunicazione, temporizzazione).
Dimostrazioni pratiche in laboratorio per illustrare concetti chiave (es. uso di tester, saldatura, configurazione di MCU).
Esercitazioni hands-on in laboratorio per applicare le conoscenze teoriche (es. sviluppo firmware, interfacciamento con sensori).
Discussioni di gruppo su casi studio reali (es. analisi di schemi elettrici, scelte progettuali per applicazioni embedded).
Supporto tramite chat Telegram per domande, approfondimenti e condivisione di risorse.
Dimostrazioni pratiche in laboratorio per illustrare concetti chiave (es. uso di tester, saldatura, configurazione di MCU).
Esercitazioni hands-on in laboratorio per applicare le conoscenze teoriche (es. sviluppo firmware, interfacciamento con sensori).
Discussioni di gruppo su casi studio reali (es. analisi di schemi elettrici, scelte progettuali per applicazioni embedded).
Supporto tramite chat Telegram per domande, approfondimenti e condivisione di risorse.
Materiale di riferimento
Sistemi Embedded: teoria e pratica
Alexjan Carraturo, Andrea Trentini
Seconda Edizione (2019)
(licenza Creative Commons)
Ledizioni
ISBN: 9788867059430
http://sistemiembedded.cc
Alexjan Carraturo, Andrea Trentini
Seconda Edizione (2019)
(licenza Creative Commons)
Ledizioni
ISBN: 9788867059430
http://sistemiembedded.cc
Modalità di verifica dell’apprendimento e criteri di valutazione
Presentazione e dimostrazione di un progetto hardware+software (durata: 20-30 minuti): ogni studente (o gruppo di max 2 studenti) svilupperà un progetto su un tema concordato con il docente. Il progetto dovrà includere:
- Una parte hardware (es. interfacciamento con sensori/attuatori);
- Una parte software (es. sviluppo firmware per MCU);
- Documentazione tecnica (es. schema elettrico, codice commentato, relazione).
Esame orale (durata: 30-45 minuti): domande sugli argomenti trattati nel corso, sia teorici (es. protocolli di comunicazione, gestione degli interrupt) che pratici (es. analisi di schemi elettrici, scelte progettuali).
Criteri di valutazione:
- Progetto (circa 30% del voto finale): valutazione della correttezza tecnica, originalità, capacità di risolvere problemi reali e chiarezza nella presentazione.
- Esame orale (circa 70% del voto finale): valutazione della comprensione teorica, capacità di analisi e chiarezza espositiva.
- Una parte hardware (es. interfacciamento con sensori/attuatori);
- Una parte software (es. sviluppo firmware per MCU);
- Documentazione tecnica (es. schema elettrico, codice commentato, relazione).
Esame orale (durata: 30-45 minuti): domande sugli argomenti trattati nel corso, sia teorici (es. protocolli di comunicazione, gestione degli interrupt) che pratici (es. analisi di schemi elettrici, scelte progettuali).
Criteri di valutazione:
- Progetto (circa 30% del voto finale): valutazione della correttezza tecnica, originalità, capacità di risolvere problemi reali e chiarezza nella presentazione.
- Esame orale (circa 70% del voto finale): valutazione della comprensione teorica, capacità di analisi e chiarezza espositiva.
Docente/i
Ricevimento:
su appuntamento, chiedere via mail (meglio quella @atrent)
stanza 4007, via Celoria 18, MI