arduino servo motor durma sorunu

Kodla Büyü

bilisimcomu

Seçkin Üye
Seçkin Üye
Mesajlar
355
arkadaşlar mesafe ölçümü yapıp mesela 10 cm den yakın olmaya başlarsa motor çalışmaya başlayacak,mesafe 0 olunca duracak bir kod bakıyorum da çıkamadım işin içinden, tecrübeli arkadaşlardan yardım rica ediyorum :)

kullandığım kod bu:
#define echoPin 12
#define trigPin 13
long sure;
long uzaklik;
int pos = 0;

#include<Servo.h>
Servo motor;

void setup() {
// put your setup code here, to run once:
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
motor.attach(6);
Serial.begin(9600);

}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik= sure /29.1/2;
if(uzaklik > 200)
uzaklik = 200;
Serial.print("Uzaklik ");
Serial.print(uzaklik);
Serial.println(" CM olarak olculmustur.");
delay(500);

if (uzaklik <= 10)
{
for(pos = 0; pos < 180; pos += 1)
{ // 1 derecelik adımlarla
motor.write(pos);
delay(5);
}
}
}
 
Şöyle dener misin hocam.

void loop() {

digitalWrite(trigPin,HIGH);
delayMicroseconds(20);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik= sure /29.1/2;
if(uzaklik > 200)
uzaklik = 200;
Serial.print("Uzaklik ");
Serial.print(uzaklik);
Serial.println(" CM olarak olculmustur.");
delay(500);

if (uzaklik <= 10)
{
for(pos = 0; pos < 180; pos += 1)
{ // 1 derecelik adımlarla
motor.write(pos);
delay(5);
}
}
}
 
hocam durmuyor yine maalesef:(

Şöyle dener misin hocam.

void loop() {

digitalWrite(trigPin,HIGH);
delayMicroseconds(20);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik= sure /29.1/2;
if(uzaklik > 200)
uzaklik = 200;
Serial.print("Uzaklik ");
Serial.print(uzaklik);
Serial.println(" CM olarak olculmustur.");
delay(500);

if (uzaklik <= 10)
{
for(pos = 0; pos < 180; pos += 1)
{ // 1 derecelik adımlarla
motor.write(pos);
delay(5);
}
}
}
 
şunu kullan durur.

#define echoPin 12
#define trigPin 13
unsigned int sure,uzaklik,pos;

#include<Servo.h>
Servo motor;

void setup() {

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
motor.attach(6);
Serial.begin(9600);

}

void loop() {

digitalWrite(trigPin,HIGH);
delayMicroseconds(20);
digitalWrite(trigPin, LOW);
sure = pulseIn(echoPin, HIGH);
uzaklik= sure /29.1/2;
if(uzaklik > 200)
uzaklik = 200;
Serial.print("Uzaklik ");
Serial.print(uzaklik);
Serial.println(" CM olarak olculmustur.");
delay(500);

if (uzaklik <= 10 and uzaklik>=0 )
{
for(pos = 0; pos < 180; pos += 1)
{ // 1 derecelik adımlarla
motor.write(pos);
delay(5);
}
}
else {
motor.write(pos);
}
}
 
Elini koy mesafe sensörünün son değeri kaç oluyorsa kodu ona göre düzenle uzaklik örneğin son değer 2 ise kodun if alanını uzaklik>=2 yap. Ayrıca servo motorun belli konuma gitmesini istiyorsan else alanında motor.write(pos); pos alanını elle girebilirsin orneğin motor ortalansın istiyorsan 90 değerini gir.
motor.write(90);
Şeklinde değiştir.
 
hocam şu şekilde mi.
mesafe 10 cm den büyükse çalışmmayacak
10 cm olduğunda çalışmaya başlayacak.
0 cm olduğunda tekrar duracak.
 
servoya göre düzenledim

#include <Servo.h>

double servo;
double __var__117_122_97_107_108_305_107;
Servo servo_9;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}

void setup(){
servo = 0;
servo_9.attach(9); // init pin
servo_9.write(servo); // write to servo
}

void loop(){
__var__117_122_97_107_108_305_107 = getDistance(13,12);
if(((__var__117_122_97_107_108_305_107) < (10)) && ((__var__117_122_97_107_108_305_107) > (0))){
servo_9.write(servo); // write to servo
servo += 1;
if(((servo)==(180))){
servo = 0;
}
}
_loop();
}

void _delay(float seconds){
long endTime = millis() + seconds * 1000;
while(millis() < endTime)_loop();
}

void _loop(){
}
 
Son düzenleme:
eğer mesafe 10 cm ile 2 cm arasındaysa servo 0 dan 180 e çalışacak 180 olursa 0 a dönecek.
buradaki sorun hcsr04 2 cm den kısa mesafedeki engelleri algılayamıyor.
 
eğer mesafe 10 cm ile 2 cm arasındaysa servo 0 dan 180 e çalışacak 180 olursa 0 a dönecek.
buradaki sorun hcsr04 2 cm den kısa mesafedeki engelleri algılayamıyor.
Hocamın dediği gibi hc-sr04 sensör 2-3 cm den daha yakın mesafeleri ölçemeyip yüksek değerler dönderir.. Bu da durma kodunun hiç aktif olmayacağı anlamına gelir.
 
şimdi amacım şu bir kapak var o kapak kapanmaya başladığında bir motor çalışacak,kapağı açtığımda da motor ters yönde çalışacak
devre yanımda değil yarın sabah deneyeceğim gönderdiklerinizi ama bu 2cm olayı kafamı karıştırdı nasıl olacak ki???
 
Kafanızı karıştıracak bir şey yok sonu 3 cm belirle tamam.:)
 
Geri
Üst