Zeitmessung mit Lichtschranke
Seite 1 von 1
Zeitmessung mit Lichtschranke
Aufgabenstellung:
Zeitmessung mithilfe eines Arduino Megas und einer Laser-Lichtschranke.
verwendete Bauteile:
1) Arduino Mega
2)LCD-Display
3)Widerstände
4)Laserdiode
5)Photowiderstand
6)Button
7)Buzzer
8)LED's
Funktion:
Der Arduino wird an ein Netzteil angeschlossen, danach kann man durch einen Button die Zeitmessung starten. Die LED wechselt von grün auf rot und die Zähl LED leuchtet. (Auf der Platine im Plan wurde eine RGB LED verwendet in echt werden drei einzelne verwendet, außerdem wird eine Laserdiode statt einer roten LED verwendet.) Die Zeitmessung kann entweder durch einen Knopfdruck oder durch eine Unterbrechung der Lichtschranke beendet werden. Danach wird die Zeit auf dem Display angezeigt und ein piepen ertönt.
Schaltung:
Code:
eventuelle Fehler:
Leider ist die Stoppuhr noch nicht zu 100% präzise, dies wird vermutlich durch die Ausgabe auf dem Display verursacht.
Zeitmessung mithilfe eines Arduino Megas und einer Laser-Lichtschranke.
verwendete Bauteile:
1) Arduino Mega
2)LCD-Display
3)Widerstände
4)Laserdiode
5)Photowiderstand
6)Button
7)Buzzer
8)LED's
Funktion:
Der Arduino wird an ein Netzteil angeschlossen, danach kann man durch einen Button die Zeitmessung starten. Die LED wechselt von grün auf rot und die Zähl LED leuchtet. (Auf der Platine im Plan wurde eine RGB LED verwendet in echt werden drei einzelne verwendet, außerdem wird eine Laserdiode statt einer roten LED verwendet.) Die Zeitmessung kann entweder durch einen Knopfdruck oder durch eine Unterbrechung der Lichtschranke beendet werden. Danach wird die Zeit auf dem Display angezeigt und ein piepen ertönt.
Schaltung:
Code:
- Code:
int LED_In = 5;
int LED_Akt = 6;
int Sensor = 0;
int Data = 0;
int LED_Sec = 7;
int SerialOut = 1;
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 22, 24, 26, 28);
int sec = 0;
int Button = 10;
int a = 0;
int sec_1;
float secfpr;
int Buzzer = 4;
void setup()
{
Serial.begin(250000);
pinMode(LED_In, OUTPUT);
pinMode(LED_Akt, OUTPUT);
pinMode(LED_Sec, OUTPUT);
pinMode(Sensor, INPUT);
pinMode(Button, INPUT);
digitalWrite(LED_Sec, LOW);
pinMode(Buzzer, OUTPUT);
lcd.begin(16, 2);
lcd.print("Zeitmessung");
lcd.setCursor(0, 1);
lcd.print("By bartl_bua");
}
void loop()
{
Data = analogRead(Sensor); // Werte von Photodiode einlesen
if (Data < 100) // wenn die Werte kleiner als 100 sind bleibt die Lichtschranke inaktiv
// diese if-Schleife dient nur zum Testen,
{ // ob das Signal beim Arduino ankommt.
digitalWrite(LED_Akt, LOW); // Nicht aktiv
digitalWrite(LED_In, HIGH);
}
else
{
digitalWrite(LED_In, LOW); // Aktiv
digitalWrite(LED_Akt, HIGH);
}
//if-Schleife für die Zeitmessung
if (digitalRead(Button) == LOW && a == 0)
{
lcd.setCursor(0, 1); //LCD leeren
lcd.print("");
delay(500);
a = 1; //while schleife aktivieren
sec = 0;
digitalWrite(LED_In, LOW);
digitalWrite(LED_Akt, HIGH);
lcd.begin(16, 2);
lcd.print("Messung !");
}
while (a == 1) {
Data = analogRead(Sensor); // Werte von Photodiode einlesen
digitalWrite(LED_Sec, HIGH); //LED für Zeitmessung leuchtet
delay(1); //Zählintervall in [ms]
sec++;
secfpr = sec * 0.001; //ms in s umrechnen
lcd.setCursor(0, 1);
lcd.print(secfpr, 3);
digitalWrite(LED_Sec, LOW);
//Zeitmessung ende
if ((digitalRead(Button) == LOW || Data>100) && a == 1)
{
digitalWrite(Buzzer, HIGH);
delay(500);
a = 0;
Serial.println("Messung Ende");
lcd.begin(16, 2);
lcd.print("Messung ENDE!");
lcd.setCursor(0, 1);
lcd.print(secfpr, 3);
lcd.print(" Sec");
digitalWrite(Buzzer, LOW);
digitalWrite(LED_In, HIGH);
digitalWrite(LED_Akt, LOW);
delay(2500);
lcd.begin(16, 2);
lcd.print("Zeitmessung");
lcd.setCursor(0, 1);
lcd.print("By bartl_bua");
}
}
}
eventuelle Fehler:
Leider ist die Stoppuhr noch nicht zu 100% präzise, dies wird vermutlich durch die Ausgabe auf dem Display verursacht.
(Christof) bartl_bua- Anzahl der Beiträge : 1
Anmeldedatum : 23.02.16
Alter : 24
Ort : St.Veit an der Triesting
Seite 1 von 1
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten
|
|