Hello again, I have a nice little project to open and close a waste paper bin lid with a servo and ultrasonic sensor
all works fine and as you can see in the vid I will upload later I have 3D printed the mechanism only of the bin to test it
I wanted the lid to open at full speed but slowly close, in fact get slower as it closes
my code for this however is a bit ugly and closing is a bit jumpy
is there a way to achieve the servo angle and delay both increasing incrementally until at the closed position with a For Loop?
#include <Servo.h>
#define trigpin 5//set trigpin
#define echopin 6//set echopin
Servo myservo;// declare servo name type servo
int duration, distance;//declare variable for unltrasonic sensor
void setup() {
Serial.begin(9600);
pinMode(trigpin, OUTPUT);
pinMode(echopin, INPUT);
myservo.attach(2);// attach your servo
myservo.writeMicroseconds(150);
// put your setup code here, to run once:
}
void loop() {
myservo.write(180);// set servo to starting position
//ultrasonic code
digitalWrite(trigpin,HIGH);
_delay_ms(500);
digitalWrite(trigpin, LOW);
duration=pulseIn(echopin,HIGH);
distance=(duration/2)/29.1;
if(distance <=10)// if ultrasonic sensor detects an obstacle less than 10cm in 90 degree angle.
{
myservo.write(48); //servo rotates at full speed to open lid
delay(10000); //waits 10 seconds
myservo.write(50);//closes a step at a time
delay(100);//starts to close fast
myservo.write(55);
delay(105);
myservo.write(60);
delay(110);
myservo.write(65);
delay(115);
myservo.write(70);
delay(120);
myservo.write(75);
delay(125);
myservo.write(80);
delay(130);
myservo.write(85);
delay(135);
myservo.write(90);
delay(140);
myservo.write(95);
delay(145);
myservo.write(100);
delay(150);
myservo.write(105);
delay(155);
myservo.write(110);
delay(160);
myservo.write(115);
delay(165);
myservo.write(120);
delay(170);
myservo.write(125);
delay(175);
myservo.write(130);
delay(180);
myservo.write(135);
delay(185);
myservo.write(140);
delay(190);
myservo.write(145);
delay(195);
myservo.write(150);
delay(200);
myservo.write(155);
delay(205);
myservo.write(160);
delay(210);
myservo.write(165);
delay(220);
myservo.write(170);
delay(225);
myservo.write(175);
delay(230);//slows as its almost closed
myservo.write(180);//closed
}
else
{
}
Serial.print("cm"); //print distance unit cm
Serial.println(distance);//distance
}
regards
Dan