- Optisches Infrarot-geschlitztes LM-393-Geschwindigkeitssensormodul
- Messung der Geschwindigkeit und der zurückgelegten Strecke zur Berechnung des Tarifs
Heutzutage ersetzen digitale Zähler analoge Zähler in allen Sektoren, egal ob Stromzähler oder Taxifahrer. Der Hauptgrund dafür ist, dass analoge Messgeräte mechanische Teile haben, die bei längerem Gebrauch zum Verschleiß neigen und nicht so genau sind wie digitale Messgeräte.
Ein gutes Beispiel hierfür sind analoge Tachometer und Kilometerzähler, die in alten Motorrädern zur Messung von Geschwindigkeit und zurückgelegter Strecke verwendet werden. Sie haben spezielle Teile, die als Ritzel- und Zahnstangenanordnung bezeichnet werden und bei denen ein Kabel verwendet wird, um den Tachostift zu drehen, wenn das Rad gedreht wird. Dies nutzt sich bei längerem Gebrauch ab und muss auch ausgetauscht und gewartet werden.
Bei digitalen Messgeräten werden anstelle mechanischer Teile einige Sensoren wie optischer Unterbrecher oder Hallsensor zur Berechnung der Geschwindigkeit und Entfernung verwendet. Dies ist genauer als die analogen Messgeräte und erfordert über einen längeren Zeitraum keine Wartung. Wir haben zuvor viele digitale Tacho-Projekte mit verschiedenen Sensoren erstellt:
- DIY Tachometer mit Arduino und Verarbeitung Android App
- Digitaler Tachometer und Kilometerzähler mit PIC-Mikrocontroller
- Geschwindigkeits-, Entfernungs- und Winkelmessung für mobile Roboter mit dem LM393-Sensor (H206)
In diesem Tutorial werden wir heute einen Prototyp eines digitalen Taxi-Tarifmessers mit Arduino erstellen. Dieses Projekt berechnet die Geschwindigkeit und die Entfernung, die das Rad des Taxis zurücklegt, und zeigt sie kontinuierlich auf einem 16x2-LCD-Display an. Und basierend auf der zurückgelegten Entfernung wird ein Tarifbetrag generiert, wenn wir den Druckknopf drücken.
Das folgende Bild zeigt die vollständige Einrichtung des Digital Taxi Meter Project
Dieser Prototyp verfügt über ein RC-Car-Chassis mit einem Geschwindigkeitssensormodul und einem am Motor angebrachten Encoderrad. Sobald die Geschwindigkeit gemessen wurde, können wir die zurückgelegte Strecke messen und den Wert des Fahrpreises durch Drücken der Taste ermitteln. Wir können die Geschwindigkeit des Rades mit einem Potentiometer einstellen. Um mehr über die Verwendung des LM-393-Geschwindigkeitssensormoduls mit Arduino zu erfahren, folgen Sie dem Link. Sehen wir uns eine kurze Einführung des Geschwindigkeitssensormoduls an.
Optisches Infrarot-geschlitztes LM-393-Geschwindigkeitssensormodul
Dies ist ein Schlitzmodul, mit dem die Drehzahl von Encoderrädern gemessen werden kann. Dieses Geschwindigkeitssensormodul basiert auf einem optischen Unterbrecher vom Schlitztyp, der auch als optischer Quellensensor bezeichnet wird. Dieses Modul benötigt eine Spannung von 3,3 V bis 5 V und erzeugt einen digitalen Ausgang. So kann es mit jedem Mikrocontroller verbunden werden.
Der Infrarotlichtsensor besteht aus einer Lichtquelle (IR-LED) und einem Fototransistorsensor. Beide sind mit einem kleinen Spalt dazwischen platziert. Wenn ein Objekt zwischen der Lücke zwischen IR-LED und Fototransistor platziert wird, wird der Lichtstrahl unterbrochen, wodurch der Fototransistor den Stromfluss stoppt.
Daher wird bei diesem Sensor eine Schlitzscheibe (Encoder Wheel) verwendet, die an einem Motor angebracht werden kann. Wenn sich das Rad mit dem Motor dreht, unterbricht es den Lichtstrahl zwischen IR-LED und Fototransistor, der den Ausgang ein- und ausschaltet (Impulse erzeugen).
Somit wird eine HIGH-Ausgabe erzeugt, wenn zwischen Quelle und Sensor eine Unterbrechung vorliegt (wenn ein Objekt dazwischen platziert ist), und eine LOW-Ausgabe, wenn kein Objekt platziert ist. Im Modul haben wir eine LED, um den verursachten optischen Interrupt anzuzeigen.
Dieses Modul wird mit einem LM393-Komparator-IC geliefert, mit dem genaue HIGH- und LOW-Signale am OUTPUT erzeugt werden. Daher wird dieses Modul manchmal als LM393-Geschwindigkeitssensor bezeichnet.
Messung der Geschwindigkeit und der zurückgelegten Strecke zur Berechnung des Tarifs
Um die Drehzahl zu messen, müssen wir die Anzahl der im Geberrad vorhandenen Schlitze kennen. Ich habe ein Encoderrad mit 20 Steckplätzen. Wenn sie eine vollständige Umdrehung drehen, haben wir 20 Impulse am Ausgang. Um die Geschwindigkeit zu berechnen, benötigen wir also die Anzahl der pro Sekunde erzeugten Impulse.
Zum Beispiel
Wenn in einer Sekunde 40 Impulse vorhanden sind, dann
Geschwindigkeit = Nein. Anzahl der Impulse / Anzahl der Schlitze = 40/20 = 2 U / min (Umdrehung pro Sekunde)
Zur Berechnung der Drehzahl in U / min (Umdrehungen pro Minute) mit 60 multiplizieren.
Geschwindigkeit in U / min = 2 x 60 = 120 U / min (Umdrehungen pro Minute)
Entfernung messen
Das Messen der vom Rad zurückgelegten Strecke ist so einfach. Vor der Berechnung der Entfernung sollte der Umfang des Rades bekannt sein.
Umfang des Rades = π * d
Wobei d der Durchmesser des Rades ist.
Der Wert von π beträgt 3,14.
Ich habe ein Rad (RC-Autorad) mit einem Durchmesser von 6,60 cm, der Umfang beträgt also (20,7 cm).
Um die zurückgelegte Strecke zu berechnen, multiplizieren Sie einfach die Anzahl der erfassten Impulse mit dem Umfang.
Zurückgelegte Strecke = Umfang des Rades x (Anzahl der Impulse / Anzahl der Schlitze)
Wenn also ein Rad mit einem Umfang von 20,7 cm 20 Impulse benötigt, was einer Umdrehung des Encoderrads entspricht, wird die vom Rad zurückgelegte Strecke durch berechnet
Zurückgelegte Strecke = 20,7 x (20/20) = 20,7 cm
Um den Abstand in Metern zu berechnen, teilen Sie den Abstand in cm durch 100.
Hinweis: Dies ist ein kleines RC-Autorad. In Echtzeit haben Autos größere Räder. Daher gehe ich in diesem Tutorial von einem Radumfang von 230 cm aus.
Berechnung des Tarifs basierend auf der zurückgelegten Strecke
Um den Gesamtpreis zu erhalten, multiplizieren Sie die zurückgelegte Strecke mit dem Tarif (Betrag / Meter).
Timer1.initialize (1000000); Timer1.attachInterrupt (timerIsr);
Als nächstes fügen Sie zwei externe Interrupts hinzu. Der erste Interrupt macht den Arduino-Pin 2 zum Interrupt-Pin und ruft ISR (count) auf, wenn an Pin 2 RISING (LOW TO HIGH) erkannt wird. Dieser Pin 2 ist mit dem D0-Ausgang des Geschwindigkeitssensormoduls verbunden.
Und zweitens macht man den Arduino-Pin 3 als Interrupt-Pin und ruft ISR (generatefare) auf, wenn HIGH am Pin3 erkannt wird. Dieser Stift ist mit einem Pulldown-Widerstand mit dem Druckknopf verbunden.
attachInterrupt (digitalPinToInterrupt (2), count, RISING); attachInterrupt (digitalPinToInterrupt (3), generatefare , HIGH);
5. Als nächstes sehen wir uns den ISR an, den wir hier verwendet haben:
ISR1-count () ISR wird aufgerufen, wenn an Pin 2 (verbunden mit dem Geschwindigkeitssensor) ein RISING (LOW TO HIGH) auftritt.
void count () // ISR für Zählungen vom Geschwindigkeitssensor { counter ++; // erhöhe den Zählerwert um eine Umdrehung ++; // Erhöhe den Rotationswert um eine Verzögerung (10); }}
ISR2-timerIsr () ISR wird jede Sekunde aufgerufen und führt die im ISR vorhandenen Zeilen aus.
void timerIsr () { attachInterrupt (digitalPinToInterrupt (2)); Timer1.detachInterrupt (); lcd.clear (); Schwebegeschwindigkeit = (Zähler / 20,0) * 60,0; Schwimmerdrehungen = 230 * (Drehung / 20); Rotationinm = Rotationen / 100; lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (Rotationinm); lcd.setCursor (0,1); lcd.print ("Geschwindigkeit (U / min):"); lcd.print (Geschwindigkeit); Zähler = 0; int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, Motordrehzahl); Timer1.attachInterrupt (timerIsr); attachInterrupt (digitalPinToInterrupt (2), count, RISING); }}
Diese Funktion enthält die Zeilen, die zuerst zuerst den Timer1 und den Interrupt-Pin2 trennen, da wir im ISR LCD-Druckanweisungen haben.
Für die Berechnung der GESCHWINDIGKEIT in U / min verwenden wir den folgenden Code, wobei 20.0 die Anzahl der im Encoderrad voreingestellten Steckplätze ist.
Schwebegeschwindigkeit = (Zähler / 20,0) * 60,0;
Und für die Berechnung der Entfernung wird der folgende Code verwendet:
Schwimmerdrehungen = 230 * (Drehung / 20);
Hier wird der Radumfang mit 230 cm angenommen (wie dies für Echtzeitautos normal ist)
Als nächstes konvertieren Sie die Entfernung in m, indem Sie die Entfernung durch 100 teilen
Rotationinm = Rotationen / 100;
Danach zeigen wir die Geschwindigkeit und den Abstand auf dem LCD-Display an
lcd.setCursor (0,0); lcd.print ("Dist (m):"); lcd.print (Rotationinm); lcd.setCursor (0,1); lcd.print ("Geschwindigkeit (U / min):"); lcd.print (Geschwindigkeit);
WICHTIG: Wir müssen den Zähler auf 0 zurücksetzen, da wir die Anzahl der Pluspunkte pro Sekunde ermitteln müssen, damit wir diese Zeile verwenden
Zähler = 0;
Lesen Sie als nächstes den analogen Pin A0 und wandeln Sie ihn in einen digitalen Wert (0 bis 1023) um. Ordnen Sie diese Werte für den PWM-Ausgang (Einstellen der Motordrehzahl) weiter 0-255 zu und schreiben Sie diese PWM-Werte schließlich mit der an den ULN2003 angeschlossenen analogWrite- Funktion Motor IC.
int analogip = analogRead (A0); int motorspeed = map (analogip, 0,1023,0,255); analogWrite (5, Motordrehzahl);
ISR3: generatefare () ISR wird verwendet, um den Tarifbetrag basierend auf der zurückgelegten Strecke zu generieren. Dieser ISR wird aufgerufen, wenn der Interrupt-Pin 3 auf HIGH erkannt wird (wenn der Druckknopf gedrückt wird). Diese Funktion löst den Interrupt an Pin 2 und den Timer-Interrupt und löscht dann das LCD.
void generatefare () { attachInterrupt (digitalPinToInterrupt (2)); Pin bei 2 Timer1.detachInterrupt (); lcd.clear (); lcd.setCursor (0,0); lcd.print ("FARE Rs:"); Float-Rupien = Rotationinm * 5; lcd.print (Rupien); lcd.setCursor (0,1); lcd.print ("Rs 5 pro Meter"); }}
Danach wird die zurückgelegte Strecke mit 5 multipliziert (ich habe 5 für die Rate INR 5 / Meter verwendet). Sie können nach Ihren Wünschen ändern.
Float-Rupien = Rotationinm * 5;
Nach der Berechnung des Betragswertes wird dieser auf dem mit Arduino verbundenen LCD-Display angezeigt.
lcd.setCursor (0,0); lcd.print ("FARE Rs:"); lcd.print (Rupien); lcd.setCursor (0,1); lcd.print ("Rs 5 pro Meter");
Der vollständige Code und das Demonstrationsvideo sind unten angegeben.
Sie können diesen Prototyp weiter verbessern, indem Sie die Genauigkeit und Robustheit erhöhen und weitere Funktionen wie Android-App, digitales Bezahlen usw. hinzufügen und als Produkt entwickeln.