Soluzione parcheggio auto con arduino

Piero è un appassionato arduino e makers che ha realizzato una Soluzione Parcheggio Auto con arduino.

soluzione parcheggio auto

Piero ha voluto condividere con noi il suo progetto e mi ha inviato un dettagliato documento di presentazione sia personale sia del progetto che riporto fedelmente, buona lettura.

Mi presento

Ciao, prima di esporvi il mio progetto, mi presento: sono Piero Alaimo, uno studente di ingegneria elettronica dell’università di Palermo, alle prime armi con Arduino.

Dopo i primi semplici circuiti implementati per familiarizzare con la scheda, spinto dalla curiosità e dalla voglia di sperimentare, mi sono cimentato in questo mio primo (e credo non ultimo) progetto che spero possa essere per tutti voi uno spunto per ulteriori miglioramenti e sviluppi. Spero vi piaccia!!!

Prima però volevo ringraziare Mauro per avermi concesso la possibilità di pubblicarlo sul suo blog (che consiglio a tutti di visitare in quanto ben fatto e da cui personalmente ho tratto ispirazione).

Finalità del progetto

Il seguente lavoro ha lo scopo di descrivere le funzionalità, le caratteristiche e le scelte adottate che mi hanno condotto alla realizzazione di questo prototipo di parcheggio automatizzato (vedi fig. 1). La finalità del progetto è quella di automatizzare le operazioni di ingresso e uscita da un parcheggio auto evitando l’ausilio di personale e dunque riducendo drasticamente i costi di gestione e permettendo dunque di massimizzare i profitti.

Il sistema progettato, è infatti in grado di discriminare se vi è una automobile che vuole entrare od uscire e in base al valore di un contatore e di led di segnalazione è in grado di segnalare la disponibilità o meno di posti auto all’interno. L’accesso al parcheggio è inoltre regolamentata da una sbarra anch’essa pilotata attraverso il nostro sistema di controllo e che svolge azioni diverse in base allo stato di ricevitori ad IR e dello stato dello stesso contatore. Nel sistema progettato abbiamo inoltre previsto la segnalazione numerica dei posti auto disponibili (oltre a quella visiva tramite led) sullo schermo di un PC attraverso porta di comunicazione seriale. Un ulteriore sviluppo sarebbe dunque implementare anche un visualizzatore a led (con poche e semplici modifiche a livello hardware/software).

Specifiche di progetto

Il progetto da realizzare attraverso scheda Arduino (modello da scegliere) riguarda un parcheggio automatizzato per auto. Si prevedono le seguenti specifiche:

  • L’ingresso e l’uscita dal parcheggio (esclusivamente per auto) è unico e permette il passaggio di una sola vettura alla volta in ingresso oppure in uscita. Non si considera il passaggio pedonale in quanto per essi è previsto un apposito accesso ;
  • Si prevedono un numero ben preciso N di posti auto disponibili (nel caso specifico 9);
  • Due led posti in corrispondenza dell’ingresso (di color verde e rosso rispettivamente) segneleranno la disponibilità o meno di posti auto (led verde acceso = disponibilità posti auto; led rosso acceso = posti auto esauriti);
  • Si prevedono due coppie di Tx-Rx ad IR utilizzati per aggiornare il conteggio (disposti rispettivamente lato ingresso e lato uscita) in modo tale da poter decrementare (incrementare) il contatore dei posti auto disponibili quando una vettura entra (esce) dal locale parcheggio;
  • L’ingresso e l’uscita dal posteggio sarà regolamentata da una sbarra automatizzata pilotata da un servomotore posta tra i due sensori (vedi figura 3). Il suo funzionamento sarà il seguente:
    1. Se l’auto esce dal posteggio, la sbarra si alzerà lasciandola passare. Immediatamente dopo la sbarra si abbasserà e il contatore posti auto disponibili verrà incrementato;
    2. Se invece vi sarà un autoveicolo in ingresso la sbarra si alzerà e il contatore posti auto disponibili verrà decrementato (soltanto se vi saranno posti auto disponibili);

Si prevede durante il funzionamento della sbarra l’accensione di un led (giallo) di segnalazione – sbarra in movimento.

Modalità di funzionamento e descrizione del sistema

I due sensori ottici di rilevamento del passaggio sono dei ricevitori ad infrarosso integrati (che da ora in poi verranno definiti sensore_A e sensore_B) posti rispettivamente in ingresso e in uscita del parcheggio auto; il loro compito è rilevare l’interruzione del fascio di luce emesso da due led ad infrarosso posti in prossimità rispettivamente del sensore_A e del sensore_B.

E’ ovvia la scelta di utilizzare dei trasmettitori ad IR. Così facendo, i ricevitori saranno immuni alla luce ambientale.

In Figura 2 è riportata la disposizione corretta dei led emettitori IR e dei relativi sensori, insieme ad una schematizzazione di insieme. Si ricordi che l’automobile in entrata e in uscita deve percorrere uno stretto corridoio dove risultano posizionati i due sensori determinando in tal modo l’interruzione del fascio luminoso emesso dai duel led IR. Tra le due coppie di Tx-Rx è inoltre posta una sbarra (azionata tramite servomotore) che regola il transito auto.

Sono inoltre presenti, in ingresso tre led di segnalazione di colore verde, rosso e giallo (che segnalano quando accesi rispettivamente: posti auto disponibili, posti auto esauriti, barra in movimento).

soluzione parcheggio auto diagramma

In tab. 3 è riassunta la lista dei componenti principali che ho adoperato, mentre in fig. 3 la loro connessione.

soluzione parcheggio auto tabella

lo schema elettrico del progetto:

soluzione parcheggio auto schema

Software per progettazione PCB – KiCad

Per progettare il nostro circuito stampato (PCB), abbiamo adoperato KiCad, una suite open source di Electronic Design Automation (EDA) per il disegno di schemi elettrici e circuiti stampati.

E’ un ambiente di sviluppo integrato (IDE) che raggruppa un editor di schematici (EeSchema), un programma per componenti e moduli (Cvpcb), un editor di circuiti stampati (Pcbnew) e infine un visualizzatore di file Gerber (GerbView – l’unico modulo che non ho adoperato nel mio progetto).

soluzione parcheggio auto pcb schema

PCB schema

A fianco riportiamo il layout della scheda comprendente le due coppie di Tx-Rx ad infrarosso, i 3 led di segnalazione, con in più i connettori per collegare la scheda con Arduino, con il servomotore e per collegare il pacco batterie (4 pile da 1,5V) per l’alimentazione eslusiva del servo. Dunque avrò due linee di alimentazione separate: una per il servo e l’altra per il resto del circuito (attraverso porta seriale connessa al PC)

soluzione parcheggio auto pcb shield

PCb lato componenti

Questo a sinistra è il layout 3D (lato componenti)

soluzione parcheggio auto pcb shield saldature

PCB lato piste

Questo a destra è invece il layout 3D (lato saldature)

Dimensioni della scheda: 9×7 cm.

Listato Commentato

/*
 * Programma
 * Posteggio auto
 */

#define LEDverde 13   // Led Verde connesso al pin 13
                      // Led segnalaz. posti disponibili
#define LEDgiallo 8   // Led Giallo connesso al pin 8 
                      // Led segnalaz. barra in movim.
#define LEDrosso 5    // Led Rosso connesso al pin 5
                      // Led segnalaz. posti auto esauriti
#define RXTSOP 2      // Ricevitore TSOP connesso alla porta 2
#define TXIR 11       // Trasmettitore IR connesso al pin 11
#define RXTSOPB 4     // Ricevitore TSOPB connesso alla porta 4
#define TXIRB 3       // Trasmettitore IR B connesso al pin 3
#include <Servo.h>    // Includi libreria Servo
Servo myservo;        // Creo l’oggetto myservo per controllare 
                      // la rotaz. del servo
#define ServoM    12  //Servomotore connesso al pin 12
#define BarLow    177 //Barra abbassata
#define BarUp     95  //Barra alzata

int val = 0;               // Definisco una variabile 
                           // di tipo intero (integer) val 
int val2 = 0;              // Definisco una variabile 
                           // di tipo intero (integer) val2
int vecchio_val = 0;       // Definisco una variabile 
                           // di tipo intero (integer) vecchio_val
int vecchio_val2 = 0;      // Definisco una variabile 
                           // di tipo intero (integer) vecchio_val2
int vecchio_val3 = 0;      // Definisco una variabile 
                           // di tipo intero (integer) vecchio_val3
int vecchio_val4 = 1;      // Definisco una variabile 
                           // di tipo intero (integer) vecchio_val4
int posti_auto_disp;       // Variabile posti auto disponibili
int posti_auto_disp_old=-1 // Definisco una variabile 
                           // di tipo intero (integer)
int state = 0;             // Definisco la variabile state
#include <EEPROM.h>        // Includo libreria EEPROM per conservare 
                           // in memoria non volatile

void turn_off_IR ()        // Inizializzazione registri Timer2
{
  TCCR2A = 0; 
  TCCR2B = 0; 
  OCR2A = 0
    OCR2B = 0;  
  digitalWrite(TXIR, LOW);   // Tx off
  digitalWrite(TXIRB, LOW);  // Tx B off
}

void turn_on_IR ()   // Set up Timer 2 (connesso alle porte 3 e 11)
{
  TCCR2A = _BV(WGM21) | _BV(COM2A0) | _BV(COM2B0); // Timer impost. 
                                                   // a 01010010
  TCCR2B = _BV(CS20);                  // No prescaler
  OCR2A = 210;                         // Il pin 11 è settato per emettere 
                                       // un segnale a 38 khz
  OCR2B = 210;                         // Il pin 3 è settato per emettere 
                                       // un segnale a 38 khz
}

void setup(){
  Serial.begin(9600);                  // Apre la porta seriale e imposta 
                                       // la velocità di trasm. a 9600 bps
  posti_auto_disp  = EEPROM.read (10); // Memorizzo su memoria 
                                       // non volatile posti_auto_disp
  pinMode(LEDverde, OUTPUT);           // Imposta il Pin come uscita
  pinMode(LEDgiallo, OUTPUT);          // Imposta il Pin come uscita
  pinMode(LEDrosso, OUTPUT);           // Imposta il Pin come uscita
  pinMode(TXIR, OUTPUT);               // Imposta il Pin come uscita
  pinMode(RXTSOP, INPUT);              // Imposta il Pin come ingresso
  pinMode(TXIRB, OUTPUT);              // Imposta il Pin come uscita
  pinMode(RXTSOPB, INPUT);             // Imposta il Pin come ingresso
  digitalWrite(verde, HIGH);           // Accende il led verde

  digitalWrite(LEDrosso, LOW);         // Spegne il led rosso
  turn_on_IR(); // search for IR       // I due Tx ad IR emettono segnale 
                                       // a frequenza 38 kHz
  myservo.write(BarLow);               // Barra abbassata
}

void loop(){
  delay(50);                           // Ritardo di 50 ms
  myservo.attach(ServoM);              // Lega l’oggetto myservo al Pin 12 
                                       // a cui abbiamo collegato il servo
  val = digitalRead(RXTSOPB);          // Memorizzo in val lo stato 
                                       // del ricevitore TSOPB 
  val2 = digitalRead(RXTSOP);          // Memorizzo in val2 lo stato 
                                       // del ricevitore TSOP
  if (posti_auto_disp_old!=posti_auto_disp)
    Serial.println(posti_auto_disp);   // Visualizzo il numero di posti 
                                       // disponibili via seriale
  posti_auto_disp_old=posti_auto_disp;


  ******** sezione ingresso auto *************

    if ((val == HIGH) && (vecchio_val == LOW)){ // Transizione 0 → 1 TSOPB
    if ((val2 == LOW)){                         // Fascio TSOP 
                                                // non interrotto
      state=0; 
      if ((posti_auto_disp > 0)){               // Ci sono posti diponibili
        digitalWrite(LEDgiallo, HIGH);    
        myservo.write(BarUp);
      }
    }
  }   
  delay(200);        // Attesa di 200 millisecondi  
  vecchio_val = val; // Memorizzo in vecchio_val lo stato di TSOPB  

  if ((val2 == LOW) && (vecchio_val2 == HIGH)){ // Transizione 1 → 0 TSOP
    if ((val == LOW)){            // Fascio TSOPB non interrotto
      if ((posti_auto_disp > 0)){ // Ci sono posti diponibili
        if ((state == 0)){
          posti_auto_disp --;
          EEPROM.write (10, posti_auto_disp);  // Scrivo su memoria EEPROM 
                                               // posti_auto_disp
          Serial.println (“AutoIn”);    // Visualizzo su PC  “AutoIn” 
                                        // via seriale
          digitalWrite(LEDverde, HIGH); // Accende led verde
          digitalWrite(LEDrosso, LOW);  // Spegne led rosso
          myservo.write(BarLow);        // Abbassa la sbarra
          digitalWrite(LEDgiallo, LOW); // Spegne led giallo
        }	

      }
      if ((posti_auto_disp == 0)){     //Non ci  sono più posti diponibili
        digitalWrite(LEDverde, LOW);   //Spegne il led verde 
        digitalWrite(LEDrosso, HIGH);  //Accende il led rosso
        myservo.write(BarLow);         //Abbassa la sbarra
        digitalWrite(LEDgiallo, LOW);  //Spegne il led giallo
      }
    }
  }   
  delay(200);          // Attesa di 200 millisecondi  
  vecchio_val2 = val2; // Memorizzo lo stato di TSOP

  ******** sezione uscita auto **************
    if ((val2 == HIGH) && (vecchio_val3 == LOW)){ //Transizione 0 → 1 TSOP
    if ((val == LOW)){                 // Fascio TSOPB non interrotto
      state=1;
      if ((posti_auto_disp != 9)){     // Ci sono macchine 
                                       // nel il parcheggio
        myservo.write(BarUp);          // Alzo la sbarra
        digitalWrite(LEDgiallo, HIGH); // Accendo il led giallo
      }
    }
  }
  delay(200);          // Attesa di 200 millisecondi  
  vecchio_val3 = val2; // Memorizzo lo stato di TSOP  

  if ((val == LOW) && (vecchio_val4 == HIGH)){ // Transizione 1 → 0 TSOPB
    if ((val2 == LOW)){                        // Fascio TSOP non interrotto
      if ((posti_auto_disp < 9)){              // Ci sono posti auto 
                                               // disponibili
        if ((state == 1)){
          posti_auto_disp ++;                  // Incrementa posti auto 
                                               // disponibili
          EEPROM.write (10, posti_auto_disp);  // Scrivo in memoria 
                                               // posti_auto_disp
          Serial.println (“AutoOut”);          // Visualizzo su PC “AutoOut” 
                                               // via seriale
          digitalWrite(LEDverde, HIGH);        // Accende il led verde 
          digitalWrite(LEDrosso, LOW);         // Spegne il led rosso 
          myservo.write(BarLow);               // Abbassa la sbarra
          digitalWrite(LEDgiallo, LOW);        // Spegne led giallo 
        }
      }
      if ((posti_auto_disp == 9)){             // Raggiunta Capacità Max 
                                               // Non incremento contatore

        digitalWrite(LEDrosso, LOW);           // Spengo led rosso  
        digitalWrite(LEDverde, HIGH);          // Accendo led verde  
        myservo.write(BarLow);                 // Abbasso sbarra
        digitalWrite(LEDgiallo, LOW);          // Spengo led giallo 
      }
    }
  }
  delay(200);                                  // Attesa di 
                                               // 200 millisecondi  
  vecchio_val4 = val;                          // Memorizzo lo stato TSOPB  
}

Il video realizzato da Piero

Buon parcheggio !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/soluzione-parcheggio-auto-con-arduino.html

66 commenti

Vai al modulo dei commenti

    • Carlo il 12 Dicembre 2014 alle 12:42
    • Rispondi

    Complimenti per il progetto! Ti suggerisco di integrare la possibilità di capire quale posto è libero e quale è occupato. So per certo che alcune aziende ci lavorano 🙂

    1. Grazie Carlo,
      sono sicuro che Piero apprezzerà il suggerimento 🙂

  1. Ciao a Tutti , mi complimento per il progetto , che mi ha dato alcuni spunti per la realizzazione di un progetto che vorrei realizzare per automatizzare una troncatrice radiale , al fine di portare avanti automaticamente il legno da tagliare , contando i blocchetti tagliati.

    Ancora tanti complimenti , anche a Mauro , per mè è un grande punto di riferimento dal quale ho appreso , con chiarezza , molte informazioni su arduino.

    continua cosi Grande Mauro

    Ciao
    Marco

    1. Grazie Marco,
      se vorrai condividere il tuo progetto sul blog sarò felice di offrirtene la possibilità.
      Ogni volta che qualcuno condivide un progetto cresciamo tutti 🙂

    • daniele il 27 Gennaio 2015 alle 20:11
    • Rispondi

    salve con questo programma il mio circuito del parcheggio funziona tutto correttamente… l’unica cosa che non funziona e che all’ingresso dell auto la sbarra si alza e poi non si abbassa piu una volta entrata la macchina come mai? (all’uscita dell auto funziona tutto correttamente)

    1. Ciao Daniele,
      ti consiglio di controllare bene il codice e verificare i segnali che ti arrivano dai sensori, sembra un errore nella lettura del sensore oltre la sbarra o un ingaggio errato sulla tempistica.

    • GIORGIO il 4 Marzo 2015 alle 11:51
    • Rispondi

    Caro Mauro; ho riscontrato dei problemi durante il controllo del codice su arduino e di conseguenza non mi fa trasferire il codice nell’arduino mi sapresti dire il perchè?

    1. Ciao Giorgio,
      che tipo di problemi/errori riscontri?
      Se leggi bene i messaggi che l’IDE ti da sono sicuro che capirai cosa manca o dov’è l’errore.

        • giorgio il 7 Marzo 2015 alle 12:14
        • Rispondi

        quando ffaccio la verifica del codice mi da questi errori :
        sketch_mar07a:119: error: stray ‘\’ in program
        sketch_mar07a:119: error: stray ‘\’ in program
        sketch_mar07a:162: error: stray ‘\’ in program
        sketch_mar07a:162: error: stray ‘\’ in program
        sketch_mar07a:38: error: expected ‘,’ or ‘;’ before ‘int’
        sketch_mar07a.ino: In function ‘void turn_off_IR()’:
        sketch_mar07a:47: error: ‘0’ cannot be used as a function
        sketch_mar07a.ino: In function ‘void setup()’:
        sketch_mar07a:75: error: ‘verde’ was not declared in this scope
        sketch_mar07a.ino: In function ‘void loop()’:
        sketch_mar07a:97: error: ‘sezione’ was not declared in this scope
        sketch_mar07a:97: error: expected `;’ before ‘ingresso’
        sketch_mar07a:183: error: expected `}’ at end of input

        1. Ciao Giorgio,
          sono le prime righe dell’errore o le hai copiate in mezzo all’errore perché non sono chiare e di solito l’IDE è alquanto preciso sugli errori.

    • Giorgio il 10 Marzo 2015 alle 22:46
    • Rispondi

    Nn ho capito bene cosa intendi,comunque quelli sono tutti gli errori che mi spuntano durante la verifica del codice.

    1. Ciao Giorgio,
      di solito l’IDe è più esplicito e da molte più info a chi scrive codice, tuttavia gli errori che mostra, anche se pochi, dicono:

      “sketch_mar07a:38: error: expected ‘,’ or ‘;’ before ‘int’” se guardi alla linea 36 manca un ; alla fine della riga, basta leggerlo

      “sketch_mar07a:47: error: ‘0’ cannot be used as a function” c’è qualche carattere sporco su questa linea, prova a cancellarla e riscriverla senza copia e incolla

      “sketch_mar07a:75: error: ‘verde’ was not declared in this scope” è un errore di battitura la variabile si chiama LEDverde e non verde

      “sketch_mar07a:97: error: ‘sezione’ was not declared in this scope” alla linea 97 mancano le // all’inizio della riga di commento

      “sketch_mar07a:97: error: expected `;’ before ‘ingresso’” stesso errore del precedente, si risolve risolvendo il precedente

      “sketch_mar07a:119: error: stray ‘\’ in program” riscrivi il carattere ” lo ha preso come carattere speciale
      “sketch_mar07a:162: error: stray ‘\’ in program” vedi sopra

      “sketch_mar07a:183: error: expected `}’ at end of input” c’è una parentesi in più o in meno nelle righe precedenti, prova a cercarla e rimuoverla o aggiungerla.

      In generale ti consigli odi leggere bene gli errori, se vuoi realizzare i progetti con arduino, e vedrai che ti dicono molto, gli errori peggiori sono quelli non segnalati ma logici 🙂

    • giorgio il 14 Marzo 2015 alle 12:05
    • Rispondi

    GRAZIE=)

    • Giorgio il 17 Marzo 2015 alle 17:33
    • Rispondi

    Caro Mauro mi potresti dire Che cosa è il “conn-2 p1” ?ed è attaccato al servo se non sbaglio, giusto?

    1. Ciao Giorgio,
      lascio che Piero, autore del progetto, ti risponda in quanto ha disegnato lui lo schema elettrico.

    • Giorgio il 17 Marzo 2015 alle 21:38
    • Rispondi

    Come faccio a contattare Piero?:)

    1. Ciao Giorgio,
      Piero legge i commenti al suo articolo e se può risponderti lo farà di certo.

    • Giorgio il 18 Marzo 2015 alle 12:27
    • Rispondi

    ho capito cosa è il conn 2 e ho montato il circuito ma i sensori nn danno nessun segno di vita e il servo nn si muove ,Piero se leggi questo messaggio perfavore rispondi al più presto perché tra qualche mese lo dovrò portare alla maturità . grazie in anticipo 🙂

    1. Ciao Giorgio,
      in attesa che Pietro risponda hai 2 o più mesi per capire da solo come deve funzionare tutto e correggere quello che impedisce il funzionamento.
      Direi che per un ragazzo con voglia di imparare come te una settimana è più che sufficiente per farlo funzionare.

      • Davide il 8 Giugno 2017 alle 09:15
      • Rispondi

      Mi potresti dire cosa sarebbe il con 2?

      1. Ciao Davide,
        a quale riga dello sketch ti riferisci ?

          • Davide il 8 Giugno 2017 alle 13:49
          • Rispondi

          Mi riferisci allo schema elettrico. C’è conn 3 che sarebbe il servomotere e conn 2 che non ho capito cosa sarebbe.

          1. Ciao Davide,
            lascio il tuo commento on-line perché l’autore del progetto possa darti risposta.

    • Andrea il 30 Maggio 2015 alle 12:00
    • Rispondi

    Salve è da poco che sto “masticando” un po’ di Arduino quindi premetto che non potrei essere tanto chiaro nella spiegazione del mio problema ! Volevo innanzitutto complimentarmi con l’autore del progetto perché mi ha aiutato molto a capire il funzionamento del parcheggio che sto progettando io per la maturità ! In sostanza è molto simile a quello realizzato sopra però esegue queste operazioni:
    – Vi è un pulsante in ingresso al parcheggio che se premuto mi alza il servomotore di 90 gradi
    – dopo che il servo si è alzato vi è un ritardo di 2 secondi che permette all’auto di superare la sbarra
    – dopo il servo è posta una barriera IR (diodo HIR – foto diodo) che simula la fotocellula, il fotodiodo è collegato all’analog 0 di Arduino e quindi quando viene interrotto il fascio la lettura del fotodiodo è 380 mentre se il fascio non è interrotto il pin legge 430 !
    – infine dovrei leggere sul monitor seriale il numero dei posti disponibili come avviene nel video che avete postato
    Il mio problema è che non riesco a visualizzare già dall’inizio il numero dei posti liberi (che dovrebbe essere 10 mentre parte ogni volta da valori diversi come ad esempio 230, 2020 ecc..) quindi volevo sapere qual’e il codice che mi permette ad inizio loop di visualizzare il numero 10 sul monitor seriale e l’altra porzione di cidice che alla lettura del valore sul pinA0 inferiore di 430 mi visualizza sul monitor seriale “Auto in” e poi decrementa il contatore !
    Grazie per la disponibilità!

    1. Ciao Andrea,
      lascio la risposta all’autore del progetto che di certo saprà aiutarti meglio di me.
      Sottolineo solo che il codice è completamente commentato e questo dovrebbe esserti sufficiente a comprendere quello che fa e come modificarlo per adattarlo alle tue esigenze.

    • Antonio il 13 Giugno 2015 alle 17:22
    • Rispondi

    Salve! Per gli esami di maturità ho intenzione di portare questo bel progetto.. ero arrivato ad una conclusione simile con l’aiuto del professore (purtroppo a scuola non ci insegnano arduino, e lo conosco da una settimana). La mia domanda è: posso far funzionare l’impianto con una sola coppia di TX/RX posti dentro il parcheggio, dietro la sbarra? Sarebbe bello azionare la sbarra con il semplice pulsante per l’ingresso e contare l’ingresso di un auto e poi rilevarne l’uscita con l’infrarosso che fa contare un auto in meno… Io non sono in grado di poter apportare queste modifiche, non conosco bene il codice… Potresti aiutarmi, gentilmente? Grazie del tuo lavoro comunque, a presto!

    1. Ciao Antonio,
      lo sketch ed il progetto non è mio, tuttavia lascio all’autore la possibilità di leggere il tuo commento ed aiutarti.
      Il mio consiglio, se vuoi terminare il tuo progetto, è di studiare quanti più tutorial possibili ed il mio corso on-line per capire come realizzare la tua versione del progetto.

        • Antonio il 16 Giugno 2015 alle 19:38
        • Rispondi

        Caro Mauro, dell’autore del progetto non si vede nemmeno l’ombra da dicembre 2014.. Potresti aiutarmi tu? grazie!

        1. Ciao Antonio,
          comprendo purtroppo non saprei come aiutarti, prova a descrivere l’errore preciso che riscontri e vedo se mi viene in mente qualche suggerimento.
          Intanto ti suggerisco di leggere il codice e comprenderlo alla perfezione prima di utilizzarlo.

            • Antonio il 20 Giugno 2015 alle 17:42

            Arduino:1.6.4 (Windows 8.1), Scheda:”Arduino Uno”

            sketch_jun20a:119: error: stray ‘\’ in program
            sketch_jun20a:119: error: stray ‘\’ in program
            sketch_jun20a:162: error: stray ‘\’ in program
            sketch_jun20a:162: error: stray ‘\’ in program
            sketch_jun20a:38: error: expected ‘,’ or ‘;’ before ‘int’
            In file included from sketch_jun20a.ino:39:0:
            C:\Users\Antonio\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\EEPROM/EEPROM.h:43:30: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
            operator const uint8_t() const { return **this; }
            ^
            C:\Users\Antonio\Desktop\arduino-1.6.4\hardware\arduino\avr\libraries\EEPROM/EEPROM.h:92:26: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
            operator const int() const { return index; }
            ^
            In file included from c:\users\antonio\desktop\arduino-1.6.4\hardware\tools\avr\avr\include\avr\io.h:99:0,
            from c:\users\antonio\desktop\arduino-1.6.4\hardware\tools\avr\avr\include\avr\pgmspace.h:88,
            from C:\Users\Antonio\Desktop\arduino-1.6.4\hardware\arduino\avr\cores\arduino/Arduino.h:28,
            from sketch_jun20a.ino:17:
            sketch_jun20a.ino: In function ‘void turn_off_IR()’:
            sketch_jun20a:47: error: expression cannot be used as a function
            sketch_jun20a.ino: In function ‘void setup()’:
            sketch_jun20a:75: error: ‘verde’ was not declared in this scope
            sketch_jun20a.ino: In function ‘void loop()’:
            sketch_jun20a:97: error: ‘sezione’ was not declared in this scope
            sketch_jun20a:97: error: expected ‘;’ before ‘ingresso’
            sketch_jun20a:183: error: expected ‘}’ at end of input
            stray ‘\’ in program
            Non riesco nemmeno a insallare il programma orginiale privo di modifiche..

          1. Ciao Antonio,
            così a leggere il tuo errore mi concentrerei sulla line 38
            sketch_jun20a:38: error: expected ‘,’ or ‘;’ before ‘int’

            probabilmente nelle linee precedenti hai cancellato erroneamente qualche carattere che ha reso inutilizzabile lo sketch

    • Antonio il 23 Giugno 2015 alle 13:17
    • Rispondi

    Ciao mauro, purtroppo ho solo fatto copia ed incolla. Non riesco a farlo funzionare

    1. Ciao Antonio,
      verifica linea per linea se tutto è corretto o se evidenzi qualche anomalia che possiamo correggere.

        • Antonio il 25 Giugno 2015 alle 11:34
        • Rispondi

        “Per compilarlo se avete fatto copia&incolla dal sito dovete per prima cosa sostituire le virgolette a riga 119 e 162. Poi a riga 36 manca un punto-e-virgola alla fine (dopo -1), idem a riga 46. A riga 75 cambiate “verde” in “LEDverde”. Infine commentate (o cancellate) le righe 97 e 139 (“sezione bla bla”). Così mi compila… buon divertimento!”
        Luca Dentella – dall’ottima pagina Fb ‎”Microcontrollori, Arduino, Atmel, Pic, MSP, ARM,Raspberry”.

        1. Ciao Antonio,
          grazie per le delucidazioni che sono sicuro in tanti apprezzeranno.
          Non mi è chiara la citazione dell’amico Luca Dentella nell’ultima linea 🙂

  2. mi servirebbe un programma di un parcheggio automatizzato realizzato con arduino, in grado di contare le macchine presenti con una capienza di 10 auto segnalando i posti liberi da semafori o semaforo verde all ingresso e quando e’ pieno con led rossi o un led rosso all’ ingresso.
    Poi che debba conteggiare il tempo che rimane posteggiata ogni auto ,un ora equivale a un euro e all’ uscita per far alzare la sbarra bisogna digitare il numero del posteggio e deve comparire sul display il prezzo da pagare.
    Grazie in anticipo, aiutooooooo.

    1. Ciao Paolo,
      bel progetto.
      Non ho capito se lo stai già realizzando tu o se chiedi aiuto su commissione.

    • Giorgio il 4 Luglio 2016 alle 20:28
    • Rispondi

    Ciao scusa ma non riesco a capire la funzione auto in e auto out….
    A me segna solo le macchine in entrata e non quelle in uscita come si può risolvere?
    Grazie

    1. Ciao Giorgio,
      lascio on-line il commento per lasciare che l’autore ti possa risponder.
      Come suggerimento posso darti quello di utilizzare il monitor seriale, unito alle giuste linee di codice Serial.println(), per verificare i valori dei sensori e delle variabili di controllo.

    • Simone il 20 Gennaio 2017 alle 09:25
    • Rispondi

    Ciao Mauro, complimenti per il progetto davvero fatto molto bene. Vorrei prendere spunto da te, se mi puoi dare qualche spunto te ne sarei davvero molto grato.

    1. Ciao Simone,
      qualche info:
      1. ti consiglio di non lasciare nei commenti la tua email, io la ricevo cmq dal campo apposito e non è visibile ad altri;
      2. come hai letto nell’articolo c’è cscritto tutto quello che ti occorre, se hai dubbi su qualcosa che non comprendi chiedi e l’autore potrà darti supporto;
      3. come hai letto nell’articolo il progetto non è mio ma di Piero

        • Simone il 20 Gennaio 2017 alle 19:37
        • Rispondi

        Volevo sapere in pratica i collegamenti che avresti fatto.. e la piastrina come facevi ad attaccarla. Grazie

    • simone il 24 Gennaio 2017 alle 15:43
    • Rispondi

    Ciao mauro, il progetto e molto bello. Vorrei saper, per i parcheggi che materiale bisogan utilizzare?

    1. Ciao Simone, lascio il commento on-line per l’autore del progetto.

    • Matteo il 24 Gennaio 2017 alle 17:10
    • Rispondi

    Ciao Mauro vorrei sapere che programma ha installato Piero nell’arduino. Grazie

    1. Ciao Matteo,
      potrei non aver capito la domanda .. intendi lo sketch ?? è quello nell’articolo come hai letto.

    • Maicol il 25 Gennaio 2017 alle 15:03
    • Rispondi

    Ciao Mauro volevo sapere se il tsal 6200 era un diodo emettitore infrarosso. Grazie

    1. Ciao Maicol,
      non lo conosco, hai cercato il datasheet ? ti servirà conoscere anche la frequenza a cui emette l?IR per acquistare un opportuno ricevitore.

    • Simone il 5 Marzo 2017 alle 10:53
    • Rispondi

    Ciao, vorrei sapere per il rivestimento esterno, come funziona?

    1. Ciao Simone,
      lascio il commento on-line perché l’autore possa risponderti.

    • Francesco il 12 Giugno 2017 alle 17:39
    • Rispondi

    Se al posto della coppia di tx-rx ir metto il sensore HC-SR04 come modifico il programma?

    1. Ciao Francesco,
      dovrai riscrivere la logica che usa un tipo di sensore differente.

    • Studente 99 il 21 Gennaio 2018 alle 14:59
    • Rispondi

    Ma per le sbarre come l’hai collegato al servomotore? E poi il servo motore ha solo due stati (basso o alto)di default o l’hai programmato?

    1. Ciao Studente99,
      lascio il tuo commento on-line perché l’autore possa risponderti.
      Ti invito a leggere bene l’articolo e comprendere il lavoro eseguito in attesa della risposta.
      Studiando la descrizione del progetto e lo sketch troverai alcune risposte già scritte.

    • filippo il 7 Maggio 2018 alle 15:39
    • Rispondi

    cosa e vecchio_val nel programma?

    1. Ciao Filippo,
      non ho scritto io lo sketch ma a occhio direi che serve a memorizzare un valore di cui devi tener traccia in una valutazione successiva di confronto.

    • RS9 il 28 Giugno 2018 alle 15:59
    • Rispondi

    Ciao,
    tutto il sistema che prezzo ha indicativamente ? Software + hardware
    grazie mille
    RS9

    1. Ciao Roberto,
      non penso sia in vendita. Lascio il tuo commento on-line perché possa intervenire l’autore del progetto.

    • Giuseppe il 31 Maggio 2019 alle 20:00
    • Rispondi

    ciao , ho realizzato il progetto in una struttura leggermente più grande , all’avvio si accende il led verde ma quando vado per interrompere il fascio luminoso della prima coppia tx rx ir non succede nulla la sbarra non si alza , inoltre nel monitor compare 188 . Il circuito rimane passivo non riesco a capire quale sia il problema .
    grazie dell’attenzione , attendo risposta

    1. Ciao Giuseppe,
      lascio il tuo commento online perché l’autore possa aiutarti.
      Intanto ti invito a testare con il monitor seriale i singoli componenti per escludere problemi di collegamento o malfunzionamento degli stessi.

    • Stefano il 15 Febbraio 2020 alle 19:38
    • Rispondi

    Salve vorrei sapere se sarebbe possibile avere un schema di montaggio più chiaro. Grazie in atipico

    1. Ciao Stefano,
      a me sembra molto chiaro ed esaustivo, quale schema non ti è chiaro?

        • Stefano il 18 Febbraio 2020 alle 14:26
        • Rispondi

        dopo una attenta analisi sono riuscito a comprendere lo schema.

        1. Ottimo Stefano,
          sono contento.

    • Bassirou il 19 Gennaio 2022 alle 16:55
    • Rispondi

    salve, senti vorrei sapere se posso avere lo schema del parcheggio per farlo su tinkercad perché non capisco quella che ce sul sito grazie

    1. Ciao Bassirou,
      purtroppo non essendo un mio progetto non possiedo lo schema visuale del progetto, lascio il commento perché l’autore ti possa aiutare.
      Se posso darti un suggerimento ti consiglio di comprendere il concetto che ha usato per la realizzazione e riprodurlo su tinkercad con componenti esistenti, probabilmente non ci sono esattamente tutti quelli usati in questo progetto.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.