- Modulo sensore di velocità LM-393 ottico a fessura a infrarossi
- Misurazione della velocità e della distanza percorsa per calcolare la tariffa
Oggi i contatori digitali stanno sostituendo i contatori analogici in ogni settore, che si tratti del contatore elettrico o del tassametro. Il motivo principale è che i misuratori analogici hanno parti meccaniche che tendono a usurarsi se utilizzati per lungo tempo e non sono così precisi come i misuratori digitali.
Un buon esempio di ciò è il tachimetro e il contachilometri analogico che viene utilizzato nelle vecchie motociclette per misurare la velocità e la distanza percorsa. Hanno parti speciali chiamate pignone e disposizione a cremagliera in cui un cavo viene utilizzato per ruotare il perno del tachimetro quando la ruota viene ruotata. Questo si consumerà se utilizzato per un lungo periodo e necessita anche di sostituzione e manutenzione.
Nel misuratore digitale, invece di utilizzare parti meccaniche, alcuni sensori come l'interruttore ottico o il sensore di hall vengono utilizzati per calcolare la velocità e la distanza. Questo è più preciso dei misuratori analogici e non richiede alcuna manutenzione per lunghi periodi di tempo. Abbiamo già realizzato molti progetti di tachimetri digitali utilizzando diversi sensori:
- Tachimetro fai-da-te utilizzando Arduino e l'elaborazione dell'app Android
- Contachilometri digitale e circuito contachilometri utilizzando microcontrollore PIC
- Misurazione di velocità, distanza e angolo per robot mobili utilizzando il sensore LM393 (H206)
Oggi, in questo tutorial, realizzeremo un prototipo di un tassametro digitale utilizzando Arduino. Questo progetto calcola la velocità e la distanza percorsa dalla ruota del taxi e le visualizza continuamente sul display LCD 16x2. E in base alla distanza percorsa genera l'importo della tariffa quando premiamo il pulsante.
L'immagine sotto mostra la configurazione completa del progetto Digital Taxi Meter
Questo prototipo ha un telaio per auto RC con un modulo sensore di velocità e una ruota encoder collegata al motore. Una volta misurata la velocità, possiamo misurare la distanza percorsa e trovare il valore dell'importo della tariffa premendo il pulsante. Possiamo impostare la velocità della ruota usando il potenziometro. Per saperne di più sull'utilizzo del modulo sensore di velocità LM-393 con Arduino, segui il link. Vediamo una breve introduzione del modulo sensore di velocità.
Modulo sensore di velocità LM-393 ottico a fessura a infrarossi
Questo è un modulo di tipo slot che può essere utilizzato per misurare la velocità di rotazione delle ruote encoder. Questo modulo del sensore di velocità funziona in base a un interruttore ottico di tipo slot noto anche come sensore della sorgente ottica. Questo modulo richiede una tensione compresa tra 3,3 V e 5 V e produce un'uscita digitale. Quindi può essere interfacciato con qualsiasi microcontrollore.
Il sensore di luce a infrarossi è costituito da una sorgente luminosa (LED IR) e un sensore a fototransistor. Entrambi sono posizionati con un piccolo spazio tra di loro. Quando un oggetto viene posizionato tra lo spazio tra il LED IR e il fototransistor, interromperà il raggio di luce facendo sì che il fototransistor smetta di passare corrente.
Quindi con questo sensore viene utilizzato un disco scanalato (Encoder Wheel) che può essere collegato a un motore e quando la ruota ruota con il motore interrompe il fascio di luce tra LED IR e fototransistor che rende l'uscita On e Off (Creazione di impulsi).
Pertanto produce un'uscita ALTA quando c'è un'interruzione tra la sorgente e il sensore (quando un oggetto è posto in mezzo) e produce un'uscita BASSA quando non c'è alcun oggetto posizionato. Nel modulo abbiamo un LED per indicare l'interruzione ottica provocata.
Questo modulo viene fornito con l' IC comparatore LM393 che viene utilizzato per produrre segnali ALTO e BASSO accurati all'USCITA. Pertanto questo modulo viene talvolta chiamato sensore di velocità LM393.
Misurazione della velocità e della distanza percorsa per calcolare la tariffa
Per misurare la velocità di rotazione è necessario conoscere il numero di slot presenti nella ruota dell'encoder. Ho un encoder con 20 slot. Quando ruotano di una rotazione completa, abbiamo 20 impulsi in uscita. Quindi per calcolare la velocità abbiamo bisogno del numero di impulsi prodotti al secondo.
Per esempio
Se ci sono 40 impulsi in un secondo, allora
Velocità = Noo. Di impulsi / N. di slot = 40/20 = 2 RPS (giri al secondo)
Per calcolare la velocità in RPM (giri al minuto) moltiplicare per 60.
Velocità in RPM = 2 X 60 = 120 RPM (giri al minuto)
Misurazione della distanza
Misurare la distanza percorsa dalla ruota è così semplice. Prima di calcolare la distanza, è necessario conoscere la circonferenza della ruota.
Circonferenza della ruota = π * d
Dove d è il diametro della ruota.
Il valore di π è 3,14.
Ho una ruota (ruota per auto RC) di diametro 6,60 cm quindi la circonferenza è (20,7 cm).
Quindi per calcolare la distanza percorsa basta moltiplicare il numero di impulsi rilevati con la circonferenza.
Distanza percorsa = Circonferenza della ruota x (N. di impulsi / N. di slot)
Quindi, quando una ruota di circonferenza 20,7 cm richiede 20 impulsi che è una rotazione della ruota dell'encoder, la distanza percorsa dalla ruota viene calcolata da
Distanza percorsa = 20,7 x (20/20) = 20,7 cm
Per calcolare la distanza in metri dividere il valore della distanza in cm per 100.
Nota: questa è una piccola ruota per auto RC, in tempo reale le auto hanno ruote più grandi di questa. Quindi presumo che la circonferenza della ruota sia di 230 cm in questo tutorial.
Calcolo della tariffa in base alla distanza percorsa
Per ottenere l'importo totale della tariffa, moltiplicare la distanza percorsa per la tariffa (importo / metro).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Quindi allegare due interrupt esterni. Il primo interrupt rende il pin 2 di Arduino come pin di interrupt e chiama ISR (count) quando viene rilevato RISING (LOW TO HIGH) sul pin 2. Questo pin 2 è collegato all'uscita D0 del modulo del sensore di velocità.
E il secondo rende il pin 3 di Arduino come pin di interrupt e chiama ISR (generatefare) quando viene rilevato HIGH sul pin3. Questo pin è collegato al pulsante con una resistenza di pull down.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Quindi vediamo l'ISR che abbiamo usato qui:
ISR1- count () ISR viene chiamato quando si verifica un RISING (LOW TO HIGH) sul pin 2 (collegato al sensore di velocità).
void count () // ISR per i conteggi dal sensore di velocità { counter ++; // aumenta il valore del contatore di una rotazione ++; // Aumenta il valore di rotazione di un ritardo (10); }
ISR2- timerIsr () ISR viene chiamato ogni secondo ed esegue quelle righe presenti all'interno dell'ISR.
void timerIsr () { detachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); velocità flottante = (contatore / 20,0) * 60,0; rotazioni del galleggiante = 230 * (rotazione / 20); rotationinm = rotazioni / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Velocità (RPM):"); lcd.print (velocità); contatore = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, velocità del motore); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }
Questa funzione contiene le righe che in realtà prima staccano il pin2 di Timer1 e Interrupt perché abbiamo istruzioni di stampa LCD all'interno dell'ISR.
Per calcolare la VELOCITÀ in RPM usiamo il codice seguente dove 20.0 è il numero di slot preimpostato nella rotella dell'encoder.
velocità flottante = (contatore / 20,0) * 60,0;
E per calcolare la distanza sotto il codice viene utilizzato:
rotazioni del galleggiante = 230 * (rotazione / 20);
Qui la circonferenza della ruota è di 230 cm (come è normale per le auto in tempo reale)
Quindi converti la distanza in m dividendo la distanza per 100
rotationinm = rotazioni / 100;
Dopodiché visualizziamo SPEED e DISTANCE sul display LCD
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (rotationinm); lcd.setCursor (0,1); lcd.print ("Velocità (RPM):"); lcd.print (velocità);
IMPORTANTE: dobbiamo reimpostare il contatore a 0 perché dobbiamo ottenere il numero di plus rilevati al secondo, quindi usiamo questa linea
contatore = 0;
Quindi leggere il pin analogico A0 e convertirlo in valore digitale (da 0 a 1023) e mappare ulteriormente quei valori su 0-255 per l'uscita PWM (impostazione della velocità del motore) e infine scrivere quei valori PWM utilizzando la funzione analogWrite collegata all'ULN2003 Motore IC.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, velocità del motore);
ISR3: generatefare () ISR viene utilizzato per generare l'importo della tariffa in base alla distanza percorsa. Questo ISR viene chiamato quando il pin 3 di interruzione viene rilevato ALTO (quando viene premuto il pulsante). Questa funzione stacca l'interruzione sul pin 2 e l'interruzione del timer, quindi cancella il display LCD.
void generatefare () { detachInterrupt (digitalPinToInterrupt (2)); pin su 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); rupie in virgola mobile = rotazioneinm * 5; lcd.print (rupie); lcd.setCursor (0,1); lcd.print ("Rs 5 per metro"); }
Dopo quella distanza percorsa si moltiplica per 5 (io ho usato 5 per la tariffa INR 5 / metro). Puoi cambiare secondo il tuo desiderio.
rupie float = rotazioneinm * 5;
Dopo aver calcolato il valore dell'importo visualizzalo sul display LCD collegato ad Arduino.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (rupie); lcd.setCursor (0,1); lcd.print ("Rs 5 per metro");
Di seguito sono riportati il codice completo e il video dimostrativo.
Puoi migliorare ulteriormente questo prototipo aumentando la precisione, la robustezza e aggiungendo più funzionalità come app Android, pagamento digitale ecc. E svilupparlo come prodotto.