Контролери > Ардуино (Arduino)
Серво и IRсензор
desislav_77:
Има ли някой идея,как мога да направя така че когато сервото се движи постоянно( от 0гр.- до 180гр. и обратно) да се изпълни команда когато сервото е в определена позиция.Идеята ми е да използвам сервото като радар,на него да има закачен сензор и когато сензора засече обект и сервото е в определена позиция да изпълни команда :huh:
zen:
Имаш една променлива, която е текущият ъгъл на сервото (angle). На нея задаваш стойности от 0 до 180 с каквато стъпка искаш. На всяка стъпка проверяваш за сигнал от IR сензора. При сигнал или изпълбняваш друга функция или копираш стойността на angle в друра промелива.
Ако имаш някакъв код до момента, го пусни и ще ти помогна.
desislav_77:
Eто код:
#include <Servo.h>
Servo myservo;
int pos = 0;
int IRsensor = A0;
int SensorVal = 0;
int led1 = 13;
int led2 = 12;
int angle_servo;
int angle_servo_IRsensor;
void setup()
{
myservo.attach(9);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
angle_servo = 45;
}
void loop()
{
SensorVal=analogRead(IRsensor);
RadarServo();
if(SensorVal<200 &&angle_servo_IRsensor==angle_servo)
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
}
}
//================================================
void RadarServo()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(15);
}
}
//===============================================
zen:
Нещо такова си го представям:
--- Код: ---
#include <Servo.h>
Servo myservo;
int IRsensor = A0;
int SensorVal = 0;
int led1 = 13;
int led2 = 12;
int servo_direction = 0; // 0 - дясно, 1 - ляво
int servo_position = 0; // първиначална позиция
void setup()
{
myservo.attach(9);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
angle_servo = 45;
InitServo(); //инициализиране на позицията на сервото
}
void loop()
{
SensorVal=analogRead(IRsensor);
MoveServo(); // движение на сервото
if(SensorVal<200 &&angle_servo_IRsensor==angle_servo)
{
digitalWrite(led1,HIGH);
digitalWrite(led2,HIGH);
}
}
//================================================
void MoveServo()
{
if(servo_direction == 0) // при дясно движение
{
servo_position++; // увеличи градуса с 1
if(servo_position == 181) // ако сервото е стигнало крайна дясна точка (181 градуса)
{
servo_position = 180;
servo_direction = 1; // обърни посоката на движение на ляво
}
}
else if(servo_direction == 1) // при ляво движение
{
servo_position--; // намали градуса с 1
if(servo_position == -1) // ако сервото е стигнало крайна лява точка (-1 градуса )
{
servo_position = 0;
servo_direction = 0; // обърни посоката на движение на дясно
}
}
myservo.write(servo_position); // задай градуса на сервото
delay(15);
}
//===============================================
void InitServo()
{
myservo.write(servo_position); //инициализиране на сервото
}
--- Край на кода ---
Така на всеки цикъл мести сервото с една позиция и в Loop имаш на каква позиция сега е сервото. Написъл съм и коментари. Ако имаш въпроси питай.
desislav_77:
Нещо не ми стана ясно,къде трябва да се зададе показанията от сензора.Можеш ли да напишеш някой по кратко кодче
Навигация
[0] Списък на темите
Премини на пълна версия