Hand-Bewegungsrichtung und Geschwindigkeit zu erkennen.
Kann verwendet werden, um ein Gerät zu steuern... Ich lasse Ihnen die magische Fantasie
Sie benötigen:
-1 * Arduino (Uno)
-3 oder 5 oder... IR-Schalter (Ich habe E18D80NK) (6€)
-Drähte.
-3 * 1 k Widerstände
-3 * LEDs.
Der Code:
---------------------------------------
#define sIRA 10
#define betrifft 8
#define sIRC 9
#define LED1 3
#define LED2 4
#define LED3 5
Char Bestellungen [3] = {'0', '0', '0'};
Int IndexOrder = 0;
Geschwindigkeit der Erkennung Ms
Int Captspeed = 1;
lange tA;
lange tB;
lange tC;
void setup() {}
Serial.Begin (9600);
für (Int ich = 8; ich < = 10; i ++)
PinMode (ich, Eingabe);
für (Int ich = 3; ich < = 5; i ++)
PinMode (ich, OUTPUT);
}
void loop() {}
Reset-Befehl nach 800 Msecond
Wenn (Millis () % 1000 > 800)
ResetCommand();
Wir haben 3 Signale, Befehl berechnen
Wenn (tA > 0 & & tB > 0 & & tC > 0)
{
Int-Befehl = CalculateCommand();
Wenn (Befehl < = 0)
DoCommand(command);
}
Check für Sensoren
If(indexOrder > 2)
IndexOrder = 0;
Int vA = digitalRead(sIRA);
Wenn (tA == 0 & & vA == 0) tA = millis();
Int vB = digitalRead(sIRB);
Wenn (tB == 0 & & vB == 0) tB = millis();
Int vC = digitalRead(sIRC);
Wenn (tC == 0 & & vC == 0) tC = millis();
Befehl beenden
Wenn (vA == 0 & & vB == 0 & & vC == 0)
{
DoCommand(0);
}
Delay(Captspeed);
}
Int CalculateCommand(void)
{
Serial.Print ("tA =");
Serial.println(TA);
Serial.Print ("tB =");
Serial.println(TB);
Serial.Print ("tC =");
Serial.println(TC);
Delay(1);
Wenn ((tA < = tB) & & tA < = tC)
-3 ;// zurück FORWRD
Wenn ((tB < = tC) & & tB < = tA)
-2 ;// Links zurück
Wenn ((tC < = tB) & & tC < = tA)
Return -1; //RIGHT
Etc.
1 zurück;
}
void DoCommand(int command)
{
Schalter (Befehl)
{
Fall 0: Verzögerung (500), Serial.println ("Stopped"); Break;
Fall -1: Serial.println ("biegen Sie rechts"); digitalWrite(LED1,HIGH); Verzögerung (1000); Break;
Fall-2: Serial.println ("biegen Sie links"); digitalWrite(LED2,HIGH); Verzögerung (1000); Break;
Fall -3: Serial.println ("GO FORWARD"); digitalWrite(LED3,HIGH); Verzögerung (1000); Break;
Fall-4: Serial.println ("GO BACK"); Verzögerung (1000); Break;
Standard: Serial.println ("NO Befehl erkannt"); Break;
}
ResetCommand();
}
void ResetCommand()
{
für (Int ich = 3; ich < = 5; i ++)
{
DigitalWrite (i, LOW); //ALL LEDs
}
tA = 0; //Reset Time A
tB = 0; //Reset Zeit B
tC = 0; //Reset Zeit C
}