BASIC4MCU | 질문게시판 | 아두이노 질문입니다.!
페이지 정보
작성자 비공개 작성일2018-06-28 17:35 조회4,296회 댓글0건본문
코드 구성은
리드스위치를 통해서 값이 입력되면 온도센서와 압력센서가 구동이 되어 무선통신으로 값을 보내고, 그렇지 않으면 동작을 안하는 내용을 짰습니다.
문제점은, 온도센서가 값이 움직이기는 하는데, 값 자체가 굉장히 낮은 숫자로 움직여요..
예를 들면 23도 이면 4 로 나오는 등 약 19도의 차가 있어서 그냥 19만큼 더했었는데,
온도가 27~8도 이상으로 올라가니까 더이상 값이 변화를 안보입니다..
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2,3);
int lm35Pin=A0;
const int FSR_PIN=A1; // 압력센서
//
const float VCC=4.98;
const float R_DIV=3230.0;
//
int temperature,reading;
int fsrADC,yn=0,yn_1=0; // 온도센서 필터코드
unsigned long prev_time=0,current_time;
float fsrV,fsrR,force,fsrG;
//
int inPin=7; // 리드스위치
int ledPin=13;
int val=1;
//
byte data=0;
//
void setup(){
Serial.begin(9600);
BTSerial.begin(9600);
pinMode(inPin, INPUT);
pinMode(ledPin, OUTPUT);
}
//
void loop(){
val=digitalRead(inPin);
TEMP(); // LM35(온도센서)
FSR(); // MFSR-R18(압력센서)
if(BTSerial.available()){ data=BTSerial.read(); }
if(val==0) {
digitalWrite(ledPin, 1);
//
if(data=='q'){
BTSerial.print("s"); BTSerial.print(temperature+19);
BTSerial.print("a"); BTSerial.println(int(force/10));
}
if(data=='w'){
BTSerial.print("s"); BTSerial.print(0);
BTSerial.print("a"); BTSerial.println(0);
}
delay(250);
} else if(val==1) {
digitalWrite(ledPin, 0);
}
}
//
void TEMP(){
current_time=millis();
//
if((current_time-prev_time)>1000){ prev_time=current_time;
analogReference(INTERNAL); delay(1);
reading=analogRead(lm35Pin); reading=analogRead(lm35Pin);
temperature=reading/9.31;
yn=0.99*yn_1+0.01*temperature;
yn_1=yn;
}
}
//
void FSR(){
analogReference(DEFAULT); delay(1);
fsrADC=analogRead(FSR_PIN); fsrADC=analogRead(FSR_PIN);
fsrV=fsrADC*VCC/1023.0;
fsrR=R_DIV*(VCC/fsrV-1.0);
fsrG=1.0/fsrR;
//
if(fsrR<=600){ force=(fsrG-0.00075)/0.00000032639; }
else{ force=fsrG/0.000000642857; }
}
댓글 0
조회수 4,296등록된 댓글이 없습니다.