BASIC4MCU | 질문게시판 | 아두이노에서 스테핑모터1개와 스텝모터1개를 이용한 프로젝트중인데요..
페이지 정보
작성자 우깅 작성일2021-06-18 00:39 조회4,911회 댓글1건본문
아두이노에서 스테핑모터1개와 서보모터1개, ir적외선물체감지센서와 MQ-2센서를 이용한 프로젝트중인데요.
ir센서나 mq-2센서에서 감지를 하면 스테핑모터가 먼저 일정각도만큼 회전했다가 다시 원래상태로 돌아온후 서보모터가 일정각도로 다시회전한후 다시 원래상태로 돌아와야하는 알고리즘인데 서보모터가 회전하는 중에 자꾸 스테핑모터가 회전을 합니다. 어느부분을 바꿔야할까요?
#include <MQ2.h>
#include <Wire.h>
#include <Stepper.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h>
#include<Servo.h>
Servo servo;
hd44780_I2Cexp lcd;
int angle=0;
int Analog_Input = A0;
int co,smoke;
MQ2 mq2(Analog_Input);
int temp_co=0;
int temp_smoke=0;
//1.일산화탄소 농도측정 또는 적외선센서 (움직임)
//2. 특정농도 기준에 따라 확률 시행
// 스테핑모터 1개 60도 회전 5초뒤 다른 스텝모터 60도 회전
//step 1: 8,9,10,11
const int stepsPerRevolution = 400; //90도
// 모터 드라이브에 연결된 핀 IN4, IN2, IN3, IN1
Stepper myStepper(stepsPerRevolution,11,9,10,8);
int sensor = 0;
void setup(){
servo.attach(6,570,2400);
lcd.begin(16,2);
Serial.begin(9600);
mq2.begin();
co = mq2.readCO();
//smoke = values[2];
smoke = mq2.readSmoke();
temp_co=co;
temp_smoke=smoke;
pinMode(7, INPUT);
myStepper.setSpeed(15);
randomSeed(analogRead(0)); //randomSeed의 매개변수로 0번 채널(A0번 핀)에서 읽은 아날로그 값을 전달
}
float* values;
int temp;
int start=0;
void loop(){
int state=analogRead(7);
Serial.print("7=");
Serial.println(state);
values= mq2.read(true); //set it false if you don't want to print the values in the Serial
// 일산화탄소 1000 이상 연기 100이상 차이 감지되면
co = mq2.readCO();
smoke = mq2.readSmoke();
sensor = digitalRead(7);
if(abs(co-temp_co)>=0 or abs(smoke-temp_smoke)>=0 )
{
lcd.setCursor(0,0);
lcd.print("DETECTED");
}
if(abs(co-temp_co)>=0 or abs(smoke-temp_smoke)>=0 )
{
//감지됨 1/1000 확률 계산
temp = 1;
Serial.println("detected");
if(temp==1){
start=1;// 1/1000의 확률
}
}
temp_co=co;
temp_smoke=smoke;
if(start){
//1스텝모터 이동
myStepper.step(stepsPerRevolution);
delay(5000);
//5초뒤원상복귀
myStepper.step(-stepsPerRevolution);
delay(5000);
//2스텝모터 이동
for(angle=0; angle<45;angle++){
servo.write(angle);
delay(30);
}
for(angle=45; angle>0;angle--){
servo.write(angle);
delay(30);
start=0;
}
}
delay(1000);
}
댓글 1
조회수 4,911master님의 댓글
master 작성일
전원의 전류 공급 능력보다 소모전류가 더 커서 시스템이 비정상 동작을 하는 것으로 예상됩니다.
모터 전원을 별도로 준비해서 구동해보세요