I Videon söker mätare efter object som är väldigt nära.
Börja med att väcka sökaren, genom att svepa förbi nära med handen. Sökaren gör några svepande sökningar fram och tillbaka, hittar den något som är nära stannar den för att markera fyndet. Hittar den inget efter några svepningar somnar den igen.
Dubbelhäftande tejp håller servot på plats.
Klicka för att zooma in.
/*
Experiment med Uno R3 och HC-SR04
VCC till arduino 5v
GND till arduino GND
Echo till Arduino 8
Trig till Arduino pin 10
En Micro servo 9g SG90.
Rörelse 17-125 grader
Koppla GND till Svart på servo
Koppla 5V till Röd på servo
Koppla 9 till Vit på servo
*/
//#define Debug
#define TriggerPinne 10
#define EchoPinne 8
#define ServoPinne 9
#include <Servo.h>
Servo myservo;
long Distans;
boolean AvstandOK = false;
boolean ServoSover = true;
long ServoDaxAttSova = 0;
int ServoVinkel = 20;
int ServoHastighet = 4;
int ServoRikning = ServoHastighet;
boolean ServoVrid = false;
void setup() {
#ifdef Debug
Serial.begin(9600);
#endif
pinMode(TriggerPinne, OUTPUT);
digitalWrite(TriggerPinne, LOW);
pinMode(EchoPinne, INPUT);
myservo.attach(ServoPinne,610,2500);
myservo.writeMicroseconds(1500);
myservo.write(74);
}
void loop() {
long milli = millis();
KollaDistans();
if(ServoVrid){
ServoVinkel = ServoVinkel + ServoRikning;
if(ServoVinkel > 110){
ServoRikning = 0 - ServoRikning;
}
if(ServoVinkel < 30){
ServoRikning = abs(ServoRikning);
}
myservo.write(ServoVinkel);
}
if(ServoSover){
ServoVrid = false;
if(Distans < 20 && AvstandOK){
ServoSover = false;
ServoDaxAttSova = milli + 10000;
ServoRikning = ServoHastighet;
ServoVrid = true;
}
}else{
ServoVrid = true;
if(Distans < 20 && AvstandOK){
ServoVrid = false;
ServoDaxAttSova = milli + 10000;
}
}
if(ServoDaxAttSova < milli ){
ServoSover = true;
}
}
void KollaDistans(){
long varaktighet;
delay(100); //vänta på gamla ekon ska dö ut.
digitalWrite(TriggerPinne, HIGH);
delayMicroseconds(10);
digitalWrite(TriggerPinne, LOW);
varaktighet = pulseIn(EchoPinne, HIGH);
Distans = varaktighet/59;
AvstandOK = true;
if (Distans >= 200 || Distans <= 0){
AvstandOK = false;
}
#ifdef Debug
Serial.println(distance);
#endif
}