BASIC4MCU | 질문게시판 | 아두이노 압력센서 연동 질문
페이지 정보
작성자 dbice 작성일2022-07-23 20:46 조회26,816회 댓글4건본문
안녕하세요 지금 아두이노를 사용한 프로젝트 중에 FSR 센서 수신에서 막혀 질문글을 올리게 되었습니다.
현재 하고 있는 아두이노 프로젝트에 사용하는 센서는
1. 자이로센서(MPU6050)2. 압력센서
3. GPS 모듈(NEO-7M)
4. 블루투스 모듈(HM-10)입니다.
하고자 하는 것은 GPS 모듈에서의 Lat, Long 값 / FSR 센서의 측정값 / 자이로센서의 측정값을 읽어와서 이를 블루투스로 송신하는 것 입니다.
현재 우여곡절 끝에 GPS와 Gyro 센서까지는 성공했는데, 압력센서를 연결하니 입력값을 못 받아 옵니다.
센서의 문제인가 해서 압력센서만 연결해보았으나 작동이 잘 되어 코드에 문제가 있는 것 같은데 어디서 막혔는지 의문입니다.
[HW 구성]
A0 : 압력센서에 연결
A4/A5 : gyro Sensor SCL SDA 연결
D4 : HM10 RX에 연결
D11, D12 : NEO-7M TX,RX에 각각 연결
아두이노와의 연결은 위와 같습니다.
자이로센서와 GPS는 블루투스로 이상없이 수신이 가능하나 압력센서값만 읽어오지 못하고 계속 2라는 값만 나오고 있습니다. 아래에 코드를 첨부합니다. 고견 부탁드립니다.
#include <SoftwareSerial.h>#include <TinyGPS.h>#include <MPU6050_tockn.h>#include <Wire.h>//GPS센서연결(TX:11. RX:12)SoftwareSerial gpsSerial(11,12);TinyGPS gps;long lat, lon;//압력센서int fsrPin = A0;int fsrReading;//자이로센서MPU6050 mpu6050(Wire);//Bluetooth 연결(TX:4,RX:5)SoftwareSerial BTSerial(5,4); // TX 연결 안 해도 됨, RX 4번에 연결하기//변수저장용 배열선언float val_arr[5];void setup(){Serial.begin(9600);Serial.println("Connected"); //Serial connection checkgpsSerial.begin(9600); //GPS NetworkBTSerial.begin(9600); //BluetoothWire.begin(); //GyroSensormpu6050.begin(); //GyroSensor//mpu6050.calcGyroOffsets(true); //5000개 평균으로 초기값이라 너무 오래 걸려서 생략}void loop(){//발판 변수 선언부fsrReading = analogRead(fsrPin);//int Sensorval = map(SensorReading, 0, 1024, 0, 255); //우선 미사용////////////////////////////////////////////////////////////////센서 수신 코드//////////////////////////////////////////////////BTSerial.listen();gpsSerial.listen();//GPS Lat, Long 데이터 전송 확인 완료while(gpsSerial.available()){if(gps.encode(gpsSerial.read())){gps.get_position(&lat,&lon);}/////////////////////////////////////////////////////////Serial Monitor 출력부///////////////////////////////////////GPS 결과(위도, 경도 출력)Serial.print("Position:");Serial.print("lat:");Serial.print(lat);Serial.print(" ");Serial.print("lon:");Serial.println(lon);//발판 센서 결과값 출력Serial.println(fsrReading);//Gyro 센서 결과값 출력Serial.println("=======================================================");Serial.print("accX : ");Serial.print(mpu6050.getAccX());Serial.print("\taccY : ");Serial.print(mpu6050.getAccY());Serial.print("\taccZ : ");Serial.println(mpu6050.getAccZ());Serial.print("gyroX : ");Serial.print(mpu6050.getGyroX());Serial.print("\tgyroY : ");Serial.print(mpu6050.getGyroY());Serial.print("\tgyroZ : ");Serial.println(mpu6050.getGyroZ());Serial.print("accAngleX : ");Serial.print(mpu6050.getAccAngleX());Serial.print("\taccAngleY : ");Serial.println(mpu6050.getAccAngleY());Serial.print("gyroAngleX : ");Serial.print(mpu6050.getGyroAngleX());Serial.print("\tgyroAngleY : ");Serial.print(mpu6050.getGyroAngleY());Serial.print("\tgyroAngleZ : ");Serial.println(mpu6050.getGyroAngleZ());Serial.print("angleX : ");Serial.print(mpu6050.getAngleX());Serial.print("\tangleY : ");Serial.print(mpu6050.getAngleY());Serial.print("\tangleZ : ");Serial.println(mpu6050.getAngleZ());Serial.println("=======================================================\n");// 앱 전송용 변수 선언 부float acc_cal = sqrt(mpu6050.getAccX()*mpu6050.getAccX()+mpu6050.getAccY()*mpu6050.getAccY()+mpu6050.getAccZ()*mpu6050.getAccZ());float stop_cal = sqrt(mpu6050.getAccX()*mpu6050.getAccX()+mpu6050.getAccY()*mpu6050.getAccY()+mpu6050.getAccZ()*mpu6050.getAccZ());int acc_cal_result = 0;int acc_stop_result = 0;int gyro_cal = 0;float weight = fsrReading/10;if(mpu6050.getGyroAngleX()>70 or mpu6050.getGyroAngleZ()>70){gyro_cal = 1;}if(acc_cal > 3.5){acc_cal_result = 1;}if(stop_cal<-3.5){acc_stop_result = 1;}val_arr[0]=float(acc_cal_result);val_arr[1]=float(acc_stop_result);val_arr[2]=float(gyro_cal);val_arr[3]=float(weight);val_arr[4]=float(lat);val_arr[5]=float(lon);//Serial.println(acc_cal);//Serial.println(acc_cal_result);for(int i = 0; i<6;i++){Serial.println(val_arr[i]);}///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Bluetooth Monitor 출력부/////////////////////////////////////////////*BTSerial.print("Position:");BTSerial.print("lat:");BTSerial.print(lat);BTSerial.print(" ");BTSerial.print("lon:");BTSerial.println(lon);//발판 센서 결과값 출력BTSerial.println(fsrReading);BTSerial.println("=======================================================");BTSerial.print("accX : ");BTSerial.print(mpu6050.getAccX());BTSerial.print("\taccY : ");BTSerial.print(mpu6050.getAccY());BTSerial.print("\taccZ : ");BTSerial.println(mpu6050.getAccZ());BTSerial.print("gyroX : ");BTSerial.print(mpu6050.getGyroX());BTSerial.print("\tgyroY : ");BTSerial.print(mpu6050.getGyroY());BTSerial.print("\tgyroZ : ");BTSerial.println(mpu6050.getGyroZ());BTSerial.print("accAngleX : ");BTSerial.print(mpu6050.getAccAngleX());BTSerial.print("\taccAngleY : ");BTSerial.println(mpu6050.getAccAngleY());BTSerial.print("gyroAngleX : ");BTSerial.print(mpu6050.getGyroAngleX());BTSerial.print("\tgyroAngleY : ");BTSerial.print(mpu6050.getGyroAngleY());BTSerial.print("\tgyroAngleZ : ");BTSerial.println(mpu6050.getGyroAngleZ());BTSerial.print("angleX : ");BTSerial.print(mpu6050.getAngleX());BTSerial.print("\tangleY : ");BTSerial.print(mpu6050.getAngleY());BTSerial.print("\tangleZ : ");BTSerial.println(mpu6050.getAngleZ());BTSerial.println("=======================================================\n");*///앱에서 띄우는 화면용for(int i = 0; i<6;i++){BTSerial.print(val_arr[i]);BTSerial.print(",");}delay(500);}}
댓글 4
조회수 26,816master님의 댓글
master 작성일
int fsrPin = A0;
fsrReading = analogRead(fsrPin);
//발판 센서 결과값 출력
Serial.print("FSR:"); Serial.println(fsrReading); // <-- 시리얼 모니터에도 20이라는 값이 나오던가요?
20이 나온다면 FSR을 눌러서 값이 변하는지 체크하세요
master님의 댓글
master 작성일
float weight = fsrReading/10;
val_arr[3]=float(weight);
for(int i = 0; i<6;i++){ BTSerial.print(val_arr[i]); BTSerial.print(","); }
4번째(val_arr[3]) 값이 2라는 거죠?
FSR을 누르는데도 값이 변하지 않는다면 회로를 체크 해보세요
dbice님의 댓글
dbice 작성일
답변 감사합니다.
val_arr[3] 값은 0이 나오고 fsrReading 값이 2가 나오는 상황입니다.
압력센서의 문제는 없었으나, FSR에 이제 자이로랑 블루투스 그리고 GPS 모듈을 모두 연결하니까 값이 2로 고정되서 나옵니다.
master님의 댓글
master
fsrReading = analogRead(fsrPin);
fsrReading = analogRead(fsrPin);
복사해서 2라인으로 만드세요 (2번째 읽는 값을 사용하는 겁니다.)