BASIC4MCU | 질문게시판 | 서보모터 속도 제어
페이지 정보
작성자 승천 작성일2022-12-12 23:24 조회399회 댓글1건본문
양쪽에 초음파센서를 설치하고 둘 중에 하나라도 인식이 된다면 한 서보모터를 작동시켜 자동문 역할을 하는 것인데서보모터가 너무 빨라서 이 서보모터의 속도를 제어 하려고제가열릴때 , for (angle = 0; angle < 180; angle++){ myservo.write(angle); delay(80); }닫힐때 , for (angle = 180; angle > 0; angle--){ myservo.write(angle); delay(80); }와 같은 구문을myservo.write(180);myservo.write(0);대신에 넣어 봤는데천천히 돌다가 다시 돌아오고 그러더라구요ㅜ다른 방법으로도 여러번 코딩을 시도해봤는데 변함이 없었습니다,,아래는 제가 사용하던 코드 입니다 (빠르게 회전하는 서보모터 코드)여기서 k가 뭘 의미하는지도 이해가 잘 되질 않아서..어느 부분을 수정해줘야 서보모터 속도를 제어할수있을까요..?#include <Servo.h>Servo myservo;//int Trig=8,Echo=9;int Trig1=11,Echo1=12;//int k=0;//void setup() {Serial.begin(9600);pinMode(Trig,OUTPUT); pinMode(Echo,INPUT);pinMode(Trig1,OUTPUT); pinMode(Echo1,INPUT);myservo.attach(6); myservo.write( 0);}//void loop() {digitalWrite(Trig,1); delayMicroseconds(10); digitalWrite(Trig,0);unsigned long duration=pulseIn(Echo,HIGH);float distance=((340.*(float)duration)/10000.)/2.;Serial.print(distance); Serial.println("cm");delay(100);//digitalWrite(Trig1,1); delayMicroseconds(10); digitalWrite(Trig1,0);unsigned long duration1=pulseIn(Echo1,HIGH);float distance1=((340.*(float)duration1)/10000.)/2.;Serial.print(distance1); Serial.println("cm");delay(100);//if ((distance<30) || (distance1<30)) { myservo.write(180); k=5; }else{if(k==0){ myservo.write(0); }else k--;}}
댓글 1
조회수 399master님의 댓글
master 작성일
#include <Servo.h>
Servo myservo;
//
int Trig=8,Echo=9;
int Trig1=11,Echo1=12;
//
int k=0,angle=0;
//
void setup() {
Serial.begin(9600);
pinMode(Trig,OUTPUT); pinMode(Echo,INPUT);
pinMode(Trig1,OUTPUT); pinMode(Echo1,INPUT);
myservo.attach(6); myservo.write( 0);
}
//
void loop() {
digitalWrite(Trig,1); delayMicroseconds(10); digitalWrite(Trig,0);
unsigned long duration=pulseIn(Echo,HIGH);
float distance=((340.*(float)duration)/10000.)/2.;
Serial.print(distance); Serial.println("cm");
delay(100);
//
digitalWrite(Trig1,1); delayMicroseconds(10); digitalWrite(Trig1,0);
unsigned long duration1=pulseIn(Echo1,HIGH);
float distance1=((340.*(float)duration1)/10000.)/2.;
Serial.print(distance1); Serial.println("cm");
delay(100);
//
if ((distance<30) || (distance1<30)) {
while(angle<180){ angle++; myservo.write(angle); delay(80); }
}
else{
while(angle>0){ angle--; myservo.write(angle); delay(80); }
}
}