BASIC4MCU | 질문게시판 | 답변 : 아두이노 서보모터 제어
페이지 정보
작성자 master 작성일2022-05-31 12:35 조회519회 댓글2건본문
#include <Servo.h>
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx=Adafruit_MLX90614();
Servo mg995;
//
const int servoPin=11;
//
float temp=0;
int index=0,t=0;
//
void setup(){
mg995.attach(servoPin);
mlx.begin();
Serial.begin(9600); Serial.println("SENSER");
}
//
void loop(){
temp+=mlx.readObjectTempC();
if(++index>=5){ index=0;
temp/=5;
Serial.println(temp);
if(temp>50){
t++;
if(t>50){} // 5초 이상이면
mg995.write(0);
}
else{
t=0;
mg995.write(90);
}
temp=0;
}
//
delay(100);
}
50도 이상인채로 얼마나 시간이 지났는지를 알기 위해서 t변수를 추가했습니다.
루프문 제일 아래에 100ms 딜레이를 사용하고 있으니
t가 10 이면 1초가 되겠습니다.
(다른 코드들의 실행 시간이 조금 더 걸리므로 실제로는 1초가 약간 넘긴 합니다.)
5초를 체크 하려면
if문으로 50을 체크하면 되겠죠
회전속도는 angle 변수를 하나 추가해서 제어하면 되고
while(angle>0){ angle--; mg995.write(angle); delay(15); }
while(angle<90){ angle++; mg995.write(angle); delay(15); }딜레이를 15보터 더 크게주면 더 느리게 회전합니다.#include <Servo.h>#include <Adafruit_MLX90614.h>Adafruit_MLX90614 mlx=Adafruit_MLX90614();Servo mg995;//const int servoPin=11;//float temp=0;int index=0,t=0,angle=0;//void setup(){mg995.attach(servoPin);mlx.begin();Serial.begin(9600); Serial.println("SENSER");}//void loop(){temp+=mlx.readObjectTempC();if(++index>=5){ index=0;temp/=5;Serial.println(temp);if(temp>50){t++;if(t>50){} // 5초 이상이면while(angle>0){ angle--; mg995.write(angle); delay(15); }}else{t=0;while(angle<90){ angle++; mg995.write(angle); delay(15); }}temp=0;}//delay(100);}
댓글 2
조회수 519진수네1조님의 댓글
진수네1조 작성일아래 코드를 업로드하면 온도를 감지하지 않았음에도 처음 몇초간 모터가 작동합니다. 어디에서 문제가 나타나는걸까요?
master님의 댓글
master
void setup(){
mg995.attach(servoPin);
mg995.write(angle); // 0도 // 추가해서 돌려보세요