Als we de afmeting van een voorwerp weten kunnen we de snelheid ervan met één sensor meten. We laten het voorwerp tussen een lichtgevoelige sensor en een lamp gaan. Zolang als het voorwerp tussen de sensor en de lichtbron is is de lichtstraal onderbroken dat wordt geregistreerd door de sensor. De afmeting van het voorwerp is de afstand (s) die afgelegd wordt. De tijd is de tijd dat de lichtstraal onderbroken werd en die wordt gemeten (in microseconden) met behulp van een Arduino en wordt weergegeven op de seriële monitor.
Met de formule v = s / t kan je de snelheid uitrekenen. Normaal gesproken wordt de snelheid in meters per seconden uitgedrukt, dus maak van milimeters meters en van microseconden seconden (1 000 000 microseconden = 1 seconde (dus delen door 1 miljoen)).
Dit is een onderdeel van de opdracht 'De battle van de vallende voorwerpen' : https://sites.google.com/view/hwcteni/derde-jaar/de-battle-van-de-vallende-voorwerpen
Hiernaast een schematische tekening van de testopstelling. Zolang het voorwerp de lichtstraal onderbreekt wordt de tijd gemeten.
Als lichtbron gebruiken we een kleine 5 mW laser die we rechtstreeks op de 5v en de gnd van de Arduino aansluiten.
Als lichtsensor gebruiken we een fototransistor. Dit is een transistor die stroom geleid afhankelijk van de hoeveelheid licht die erop valt. We gebruiken hier de 3DU5C, maar anderen zullen ook wel werken.
De kant met het uitstekende metalen lipje is de emitter die wordt verbonden met gnd (via een 10kohm weerstand). De andere kant is de collector en die wordt verbonden met arduino 5v.
Hieronder het aansluitschema en helemaal beneden het programma.
De emitter van de fototransistor (de kant met het metalen lipje en het iets langere pootje) gaat via een 10Kohm weerstand naar gnd. De collector komt op Arduino 5v. De laser is rechtstreeks verbonden met Arduino 5v en gnd. De draden naar de fototransistor en de laser moeten natuurlijk wel verlengd worden.
// Snelheidmeting_1_sensor
// Basic programma om de tijd die een voorwerp voor een sensor (fototransistor) is te meten.
// De emitter van de transistor is verbonden met de Arduino pin en via een 10 Kohm weerstand met gnd.
// De collector van de transistor is verbonden met 5v.
// De laser is rechstreeks verbonden met 5v en gnd.
// De tijd wordt op de seriele monitor weergegeven in microseconden (1000 microsec. = 1 milliseconde).
int sensorPin = 8; // Fototransistor op pin 8
int ledPin = 13; // Led op pin 13 (onboard led)
int trigger = 1; // Variabele voor de if statements.
int sensorState; // Variabele voor de waarde van de sensorPin (0 of 1).
unsigned long t1 = 0; // Het moment dat het voorwerp voor de sensor komt.
unsigned long t2 = 0; // Het moment dat het voorwerp niet meer voor de sensor is.
unsigned long delta_t = 0; // = t2 - t1: de tijd die het voorwerp voor de sensor was.
void setup() {
Serial.begin(9600);
pinMode(sensorPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
sensorState = digitalRead(sensorPin); // Lees de sensorPin. SensorPin is 0 als er iets voor is.
if ( (sensorState == 0) && (trigger == 1) ) {
t1 = micros();
/*De variabele "trigger" wordt 0 gemaakt zodat het if statement hieronder waar is, als het voorwerp niet meer voor de sensor is.*/
trigger = 0;
digitalWrite(ledPin, HIGH); // Als er iets voor de sensor is: led aan.
}
if ( (sensorState == 1) &&(trigger == 0) ) {
t2 = micros();
/*De variabele "trigger" wordt 1 gemaakt zodat het if statement hierboven waar is, als het voorwerp voor de sensor is.*/
trigger = 1;
digitalWrite(ledPin, LOW); // Led uit als er niets voor de sensor ligt (controle led).
delta_t = t2 - t1; // De tijd die het voorwerp voor de sensor was.
Serial.println(delta_t);
}
}