Parcheggio automatico con Arduino: differenze tra le versioni

Da Wikiversità, l'apprendimento libero.
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 11: Riga 11:
{{Risorsa|tipo=laboratorio|materia1=Sistemi automatici per le superiori 2|avanzamento=25%}}
{{Risorsa|tipo=laboratorio|materia1=Sistemi automatici per le superiori 2|avanzamento=25%}}
<!-- Non scrivere sopra questa linea -->
<!-- Non scrivere sopra questa linea -->

Questa risorsa descrive come realizzare un '''Parcheggio Intelligente''', sensorizzato che gestisce automaticamente l'organizzazione dei posti
Questa risorsa descrive come realizzare un '''Parcheggio Intelligente''', sensorizzato che gestisce automaticamente l'organizzazione dei posti
== Presentazione del progetto ==
== Presentazione del progetto ==
Il progetto volge alla realizzazione di un prototipo di parcheggio intelligente. Esso presenta all'esterno un display LCD sul quale viene presentato il numero di posti auto liberi e un visualizzatore luminoso composto da 8 LED RGB, che mostra i posti disponibili e quelli occupati. Al suo interno invece i posteggi sono forniti di sensori a infrarossi che rilevano la presenza dell'auto e la comunicano con il visualizzatore esterno. Per l'ingresso e l'uscita dal parcheggio, vengono utilizzati dei sensori RFID reader, che permettono l'apertura della sbarra (tramite un servomotore), solo con l'apposita chiave elettronica.
Il progetto volge alla realizzazione di un prototipo di parcheggio intelligente. Esso presenta all'esterno un display LCD sul quale viene presentato il numero di posti auto liberi e un visualizzatore luminoso composto da 8 LED RGB, che mostra i posti disponibili e quelli occupati. Al suo interno invece i posteggi sono forniti di sensori a infrarossi che rilevano la presenza dell'auto e la comunicano con il visualizzatore esterno. Per l'ingresso e l'uscita dal parcheggio, vengono utilizzati dei sensori RFID reader, che permettono l'apertura della sbarra (tramite un servomotore), solo con l'apposita chiave elettronica.

[[File:Led-rgb.svg|miniatura|immagine di un LED RGB con relativi pin.]]
== Componenti richiesti ==
{| class="wikitable"
{| class="wikitable"
|+Componenti utilizzati
|+Componenti utilizzati
Riga 51: Riga 53:


=== Ingresso e uscita ===
=== Ingresso e uscita ===
[[File:RFID-RC522.jpg|miniatura|221x221px|RFID reader]]
[[File:RFID-RC522.jpg|miniatura|221x221px|Lettore RFID]]
L'accesso e l'uscita dal parcheggio è possibile tramite una '''chiave magnetica''' e un '''lettore [[w:Identificazione a radiofrequenza|RFID]]'''.
L'ingresso del parcheggio è comandato da un sensore RFID reader e da un tag. Il '''reader o lettore RFID''' è un ricetrasmettitore che ha il compito di richiedere e ricevere informazioni in risposta da ciascun tag. Il '''tag''' invece è un trasponder passivo a radiofrequenze costituito da un circuito integrato (chip), da una memoria e da un’antenna.Esso funziona come una chiave elettronica, la quale identifica univocamente un oggetto.. L’'''antenna''' permette la comunicazione tra il tag e il reader, del quale nella maggior parte dei casi è parte integrante.


La chiave (detta anche tag) contiene un codice univoco associato al veicolo che è autorizzato a entrare e uscire. Il tag è un [[w:Trasponder|trasponder]] passivo a radiofrequenza. Funziona come vera e propria chiave elettronica.
Nel nostro caso quindi, avvicinando il tag al lettore RFID, se esso riconosce il tag ID corretto, manda un impulso ad un servomotore che alza la sbarra e permette il passaggio dell'autoveicolo, abbassandosi automaticamente dopo pochi secondi. In uscita il funzionamento è analogo.


La lettura delle chiavi viene eseguita dal lettore RFID: un ricetrasmettitore che legge i dati contenuti nella chiave magnetica e li confronta con l'elenco dei codici autorizzati. L’antenna permette la comunicazione tra il tag e lettore.
[[File:13.56MHz RFID tags.jpg|miniatura|150x150px|RFID tags]]

In questo caso, avvicinando la chiave magnetica al lettore RFID, se questa contiene un codice autorizzato, si manda un comando al servomotore che alza la sbarra e permette il passaggio dell'autoveicolo, abbassandosi automaticamente dopo il passaggio del veicolo. Questo vale sia per l'ingresso, sia per l'uscita.

[[File:13.56MHz RFID tags.jpg|miniatura|150x150px|Tag RFID]]
[[File:RFID_circuit.svg|centro|senza_cornice|550x550px|Schema elettrico del circuito di apertura con RFID]]
[[File:RFID_circuit.svg|centro|senza_cornice|550x550px|Schema elettrico del circuito di apertura con RFID]]

==== Codice ====
=== Codice ===
<syntaxhighlight lang="arduino" line="1">
Di seguito il codice che pilota un servomotore quando si accosta una chiave elettronica al lettore RFID.<syntaxhighlight lang="arduino" line="1">
#include <Servo.h>
#include <Servo.h>
#include <SPI.h>
#include <SPI.h>
Riga 67: Riga 74:
#define RST_PIN 9
#define RST_PIN 9


#define chiave "14 36 E6 E9"


MFRC522 mfrc522(SS_PIN, RST_PIN);
MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo sbarra;
Servo sbarra;
int posizioneSbarra = 180;
int posizioneSbarra = 180;
int pinSbarra = 7;
int velSbarra = 20; // Velocità con cui si movimenta la sbarra



void setup() {
void setup() {
Serial.begin(9600);
Serial.begin(9600);
Serial.println("Accosta la chiave RFID");
Serial.println("Accosta la chiave RFID");
sbarra.attach(7);
sbarra.attach(pinSbarra);
sbarra.write(posizioneSbarra);
sbarra.write(posizioneSbarra);
SPI.begin();
SPI.begin();
Riga 84: Riga 95:


void loop() {
void loop() {
// Non e' presente nessuna carta
if (!mfrc522.PICC_IsNewCardPresent()){
if (!mfrc522.PICC_IsNewCardPresent()){
return;
return;
}
}
// Non sta leggendo nessuna carta
if (!mfrc522.PICC_ReadCardSerial()){
if (!mfrc522.PICC_ReadCardSerial()){
return;
return;
}
}
// Lettura chiave elettronica
String uid = leggiRFID();
String uid = leggiRFID();
Serial.println(uid);
Serial.println(uid);
// Se la chiave è corretta alza la sbarra
if(uid.substring(1) == "14 36 E6 E9") {
if(uid.substring(1) == chiave) {
Serial.println("V");
Serial.println("V");
mov();
mov();
}
}
// Esegue un test ogni 100 ms
delay(100);
delay(100);
}
}


// Subroutine di lettura carta
String leggiRFID() {
String leggiRFID() {
String content = "";
String content = "";
byte letter;
byte letter;
// Scrive nella porta seriale il codice della chiave
Serial.print("UID: ");
Serial.print("UID: ");
for (byte i = 0; i < mfrc522.uid.size; i++){
for (byte i = 0; i < mfrc522.uid.size; i++){
Riga 111: Riga 130:
}
}


// Movimentazione sbarra
void mov() {
void mov() {
// Alza la sbarra
delay(3000);
delay(3000);
for (posizioneSbarra = 180; posizioneSbarra >= 90; posizioneSbarra -= 1) { // da 180 a 90 gradi
for (posizioneSbarra = 180; posizioneSbarra >= 90; posizioneSbarra--) {
sbarra.write(posizioneSbarra); // Modifica la posizione del servo
sbarra.write(posizioneSbarra);
delay(velSbarra);
delay(20); // Ritardo introdotto prima di cambiare posizione
}
}
// Abbassa la sbarra
delay(5000);
delay(5000);
for (posizioneSbarra = 90; posizioneSbarra <= 180; posizioneSbarra += 1) { // da 90 a 180 gradi
for (posizioneSbarra = 90; posizioneSbarra <= 180; posizioneSbarra++) {
sbarra.write(posizioneSbarra); // Modifica la posizione del servo
sbarra.write(posizioneSbarra);
delay(velSbarra);
delay(20); // Ritardo introdotto prima di cambiare posizione
}
}
}
}
Riga 126: Riga 148:


=== Visualizzatore luminoso di posti liberi ===
=== Visualizzatore luminoso di posti liberi ===
[[File:Led-rgb.svg|miniatura|LED RGB con relativa pedinatura]]
Il progetto precedente prevedeva l'utilizzo di 16 LED (uno rosso ed uno verde per ogni postazione auto), il che comportava la presenza di due cavi per LED, per un totale di 32 cavi. Utilizzando invece 8 LED RGB, nel nostro caso, il numero di cavi si riduce a 17, considerando due cavi per LED (R e G) e un cavo in comune per il ground.
Il progetto prevede l'utilizzo di 8 LED RGB, per comunicare quali – degli otto parcheggi – sono liberi o occupati. Il numero di cavi necessario è pari ai controlli (<math>8 \times 2 = 16</math>, relativi ai terminali rossi e verdi) oltre a uno comune per la massa.

Per il visualizzatore è stata realizzata una apposita [[Utente:Hackerino3/Parcheggio(progettazione 3D)|maschera (stampata con stampante 3D)]] nella quale sono inseriti gli 8 LED RGB, che in base al colore rosso o verde indicano se il posto auto è occupato oppure no.


Per il visualizzatore è stata realizzata una [[Utente:Hackerino3/Parcheggio(progettazione 3D)|maschera (stampata con stampante 3D)]] nella quale sono inseriti gli 8 LED RGB, che in base al colore rosso o verde, indicano se quel posto auto è occupato o no.
=== Espansioni suggerite ===
=== Espansioni suggerite ===
Aggiunta di:
Aggiunta di:


[[Categoria:Arduino]]
[[Categoria:Arduino]]
__INDICE__

Versione delle 10:14, 22 feb 2022

Questa risorsa è stata scritta dagli studenti dell'Istituto ITIS "Enrico Mattei" di Urbino, della classe 4A/EN, Omiccioli Matteo, Marzi Filippo, Sasha Fasolo Massoli, Daniel Gostoli, Nicolas Mangani e Andrea Piergiovanni nell'a.s. 2021/2022, all'interno del corso di Sistemi automatici per le superiori 2.

Per favore, prima di apportare modifiche, attendi sino alla fine dell'anno scolastico (termina il 30 giugno 2022) oppure contatta il docente di riferimento Giacomo Alessandroni nel caso venissero rilevati contenuti non in linea con le linee guida della comunità.

Se leggi questo avviso ad anno scolastico concluso puoi rimuoverlo.

laboratorio
laboratorio
Parcheggio automatico con Arduino
Tipo di risorsa Tipo: laboratorio
Materia di appartenenza Materia: Sistemi automatici per le superiori 2
Avanzamento Avanzamento: laboratorio completa al 25%

Questa risorsa descrive come realizzare un Parcheggio Intelligente, sensorizzato che gestisce automaticamente l'organizzazione dei posti

Presentazione del progetto

Il progetto volge alla realizzazione di un prototipo di parcheggio intelligente. Esso presenta all'esterno un display LCD sul quale viene presentato il numero di posti auto liberi e un visualizzatore luminoso composto da 8 LED RGB, che mostra i posti disponibili e quelli occupati. Al suo interno invece i posteggi sono forniti di sensori a infrarossi che rilevano la presenza dell'auto e la comunicano con il visualizzatore esterno. Per l'ingresso e l'uscita dal parcheggio, vengono utilizzati dei sensori RFID reader, che permettono l'apertura della sbarra (tramite un servomotore), solo con l'apposita chiave elettronica.

Componenti richiesti

Componenti utilizzati
Descrizione Tipo Quantità
Arduino Mega 1
Sensori a infrarossi TCRT5000 8
LED RGB 8
Display LCD 16X2 1
Servomotore Tower Pro SG90 2
Lettore RFID RC522 2
RFID tag ISO14443-A 1

Ingresso e uscita

Lettore RFID

L'accesso e l'uscita dal parcheggio è possibile tramite una chiave magnetica e un lettore RFID.

La chiave (detta anche tag) contiene un codice univoco associato al veicolo che è autorizzato a entrare e uscire. Il tag è un trasponder passivo a radiofrequenza. Funziona come vera e propria chiave elettronica.

La lettura delle chiavi viene eseguita dal lettore RFID: un ricetrasmettitore che legge i dati contenuti nella chiave magnetica e li confronta con l'elenco dei codici autorizzati. L’antenna permette la comunicazione tra il tag e lettore.

In questo caso, avvicinando la chiave magnetica al lettore RFID, se questa contiene un codice autorizzato, si manda un comando al servomotore che alza la sbarra e permette il passaggio dell'autoveicolo, abbassandosi automaticamente dopo il passaggio del veicolo. Questo vale sia per l'ingresso, sia per l'uscita.

Tag RFID
Schema elettrico del circuito di apertura con RFID
Schema elettrico del circuito di apertura con RFID

Codice

Di seguito il codice che pilota un servomotore quando si accosta una chiave elettronica al lettore RFID.

#include <Servo.h>
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9

#define chiave "14 36 E6 E9"

MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo sbarra;
int posizioneSbarra = 180;
int pinSbarra = 7;
int velSbarra = 20; // Velocità con cui si movimenta la sbarra


void setup() {
  Serial.begin(9600);
  Serial.println("Accosta la chiave RFID");
  sbarra.attach(pinSbarra);
  sbarra.write(posizioneSbarra);
  SPI.begin();
  mfrc522.PCD_Init();
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
  // Non e' presente nessuna carta
  if (!mfrc522.PICC_IsNewCardPresent()){
    return;
  }
  // Non sta leggendo nessuna carta
  if (!mfrc522.PICC_ReadCardSerial()){
    return;
  }
  
  // Lettura chiave elettronica
  String uid = leggiRFID();
  Serial.println(uid);
  // Se la chiave è corretta alza la sbarra
  if(uid.substring(1) == chiave) {
    Serial.println("V");
    mov();
  }
  // Esegue un test ogni 100 ms
  delay(100);
}

// Subroutine di lettura carta
String leggiRFID() {
  String content = "";
  byte letter;
  // Scrive nella porta seriale il codice della chiave
  Serial.print("UID: ");
  for (byte i = 0; i < mfrc522.uid.size; i++){
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  content.toUpperCase();
  return content;
}

// Movimentazione sbarra
void mov() {
  // Alza la sbarra
  delay(3000);
  for (posizioneSbarra = 180; posizioneSbarra >= 90; posizioneSbarra--) {
    sbarra.write(posizioneSbarra);
    delay(velSbarra);
  }
  // Abbassa la sbarra
  delay(5000);
  for (posizioneSbarra = 90; posizioneSbarra <= 180; posizioneSbarra++) {
    sbarra.write(posizioneSbarra);
    delay(velSbarra);
  }  
}

Visualizzatore luminoso di posti liberi

LED RGB con relativa pedinatura

Il progetto prevede l'utilizzo di 8 LED RGB, per comunicare quali – degli otto parcheggi – sono liberi o occupati. Il numero di cavi necessario è pari ai controlli (, relativi ai terminali rossi e verdi) oltre a uno comune per la massa.

Per il visualizzatore è stata realizzata una apposita maschera (stampata con stampante 3D) nella quale sono inseriti gli 8 LED RGB, che – in base al colore rosso o verde – indicano se il posto auto è occupato oppure no.

Espansioni suggerite

Aggiunta di: