Zeitmessung mit Lichtschranke

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten

Zeitmessung mit Lichtschranke

Beitrag von (Christof) bartl_bua am Do März 03, 2016 12:05 pm

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:

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.
avatar
(Christof) bartl_bua

Anzahl der Beiträge : 1
Anmeldedatum : 23.02.16
Alter : 18
Ort : St.Veit an der Triesting

Nach oben Nach unten

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben


 
Befugnisse in diesem Forum
Sie können in diesem Forum nicht antworten