BASIC4MCU | 질문게시판 | 스텝모터 제어 및 온도센서 값 동시 추출 질문드립니다.
페이지 정보
작성자 metanoia 작성일2023-12-06 17:25 조회1,079회 댓글1건본문
안녕하십니까, 아두이노 관련해서 많은 도움을 받고 있어 항상 감사드립니다..!
현재 스텝모터 4대 및 스위치, 카트리지 히터,온도센서를 사용해서 제어를 해보고 있습니다.
스텝모터로 이송 제어 및 히터 가열 시 해당 온도 데이터를 받는 과정에서 문제점이 발생하였습니다.
스텝모터 구동과 온도센서 통신간의 교차때문에 발생한 문제점인 것 같아 코드 수정을 반복했지만 해결책을 찾지 못해서 글을 쓰게 되었습니다.
loop()문 내 온도센서 값을 추출하는 코드를 빨간색으로 표시하였습니다.
int DIR1 = 2, STEP1 = 3; int DIR2 = 4, STEP2 = 5; int DIR3 = 8, STEP3 = 9; int DIR4 = 10, STEP4 = 11;
int count = 0; int previous_button = 0;
int ThermistorPin = A0; float sensorValue,filteredValue,R1=10000,logR2,R2,T,Tc;
float c1=1.009249522e-03,c2=2.378405444e-04,c3=2.019202697e-07; float sensitivity=0.1;
int heater = 13;
int i;
void temp_read(){
sensorValue=analogRead(ThermistorPin);
R2=R1*(1023.0/(float)sensorValue-1.0);
logR2=log(R2);
T=(1.0/(c1+c2*logR2+c3*logR2*logR2*logR2));
Tc=T-273.15;
filteredValue=filteredValue *(1-sensitivity )+Tc*sensitivity;
}
void setup() {
temp_read();
pinMode(DIR1, OUTPUT); pinMode(STEP1, OUTPUT); pinMode(DIR2, OUTPUT); pinMode(STEP2, OUTPUT);
pinMode(DIR3, OUTPUT); pinMode(STEP3, OUTPUT); pinMode(DIR4, OUTPUT); pinMode(STEP4, OUTPUT);
pinMode(6, INPUT); pinMode(heater,OUTPUT);
Serial.begin(9600);
}
void loop() {
temp_read();
int button = 1 - digitalRead(6);
if (button != previous_button) {
if (button == 1) { count = count + 1; }
}
previous_button = button;
if (count == 0) { digitalWrite(DIR1, HIGH); digitalWrite(STEP1, HIGH); delayMicroseconds(2000); digitalWrite(STEP1, LOW);delayMicroseconds(2000); }
if (count == 1) { digitalWrite(STEP1, LOW); }
if (count == 2) { digitalWrite(DIR3, LOW); digitalWrite(STEP3, HIGH); delayMicroseconds(500); digitalWrite(STEP3, LOW); delayMicroseconds(500); }
if (count == 3) { digitalWrite(STEP3, LOW); }
if (count == 4) { temp_read(); delay(100); Serial.print("TEMP="); Serial.print(filteredValue); Serial.println(" C"); digitalWrite(DIR4, HIGH);
for(i = 0; i<8980; i++) { digitalWrite(STEP4, HIGH); delayMicroseconds(500); digitalWrite(STEP4, LOW); delayMicroseconds(500); }
delay(1000);
digitalWrite(DIR2, LOW); for(i = 0; i<2340; i++) { digitalWrite(STEP2, HIGH); delayMicroseconds(4000); digitalWrite(STEP2, LOW); delayMicroseconds(4000);}
delay(1000);
digitalWrite(DIR1, LOW); for(i = 0; i<1990; i++) { digitalWrite(STEP1, HIGH); delayMicroseconds(4000); digitalWrite(STEP1, LOW); delayMicroseconds(4000);}
delay(1000);
digitalWrite(heater,HIGH); delay(70000); digitalWrite(fan,HIGH); digitalWrite(heater,LOW); delay(100000); //카트리지 히터 가동
digitalWrite(DIR1, HIGH); digitalWrite(DIR2, LOW); for(i = 0; i<100000; i++) { digitalWrite(STEP1, HIGH) digitalWrite(STEP2, HIGH);
delayMicroseconds(500); digitalWrite(STEP1, LOW); digitalWrite(STEP2, LOW); delayMicroseconds(500); }
}
}
댓글 1
조회수 1,079master님의 댓글
master 작성일
서보모터와 히터 등의 전원과 아두이노 전원을 별개의 전원으로 구동하세요
전원을 분리 해야지 모터 구동에 상관없이 온도가 흔들리지 않게 됩니다.
전원을 추가해서 분리해도 GND는 연결 해줘야 합니다.
시리얼모니터에 온도값을 출력해서 오차가 많은지 확인하세요