1. 프로젝트 사용한 보드 종류
아두이노 UNO 보드
2. 사용한 개발 프로그램명
아두이노 스케치
3. 사용한 센서 모델명
hc-06 블루투스, hc-sr04 초음파, dm-s0090md 서보모터
4. 연결한 회로 설명 (또는 이미지)
5. 소스코드 (주석 필수)
@@초음파 센서 부분
//slave
#include
SoftwareSerial mySerial(2, 3); //블루투스의 Tx, Rx핀을 2번 3번핀으로 설정
int echoPin = 12;
int trigPin = 13;
void setup()
{
Serial.begin(9600);
while (!Serial) ; // 연결되지 않았다면 반복
{
}
pinMode(trigPin, OUTPUT); // 초음파 송신
pinMode(echoPin, INPUT); // 초음파 수신
Serial.println("Slave BT");
mySerial.begin(9600);
}
void loop()
{
sonicWave();
}
void sonicWave()
{
digitalWrite(trigPin, LOW);
digitalWrite(echoPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duration = pulseIn(echoPin, HIGH); // echoPin가 HIGH를 유지한 시간 저장
float distance = ((float)(340 * duration) / 10000) / 2; //거리 계산
Serial.println(distance); // 시리얼창 확인용
//mySerial.write(Serial.read());
mySerial.println(distance); // 블루투스로 데이터 전달
delay(500);
}
@@서보모터 부분
//master
#include
#include
SoftwareSerial mySerial(2, 3); //블루투스의 Tx, Rx핀을 2번 3번핀으로 설정
Servo myservo;
char buffer[50]; // 통신 할때 buffer배열에 전송받은 데이터 입력
char bufferIndex = 0;
int serValue = 0;
void setup()
{
Serial.begin(9600);
myservo.attach(9);
while (!Serial) ; // 연결되지 않았다면 반복
{
}
Serial.println("Master BT");
mySerial.begin(9600);
}
void loop()
{
btComm();
}
void btComm()
{
while (mySerial.available())
{
buffer[bufferIndex] = mySerial.read(); // 시리얼 통신으로 버퍼 배열 데이터 수신
bufferIndex++; // 데이터 수신 후 버퍼 인덱스 1 증가
}
int pos = atoi(buffer); // atoi()함수로 char값을 int값으로 변환
if (pos != 0)
{
Serial.println(pos); // int값으로 변환된 데이터 출력
}
//버퍼 초기화
for (int a = 0; a < 51; a++)
{
buffer[a] = NULL;
bufferIndex = 0;
}
char in_data;
in_data = Serial.read();
if (in_data <= 50)
{
for (serValue = 0; serValue <= 90; serValue += 1)
{
myservo.write(serValue);
}
}
else
{
for (serValue = 90; serValue >= 0; serValue -= 1)
{
myservo.write(serValue);
}
}
delay(100);
}
6. 문제점 및 에러 내용
초음파 센서의 값이 50 이하일때 서보모터가 움직이가
초음파 센서의 값이 50 초과일때 서보모터가 0으로 돌아가도록 하게 만들려고 합니다.
블루투스로 데이터 수신까지는 받았는데 서보모터가 버퍼링 걸린것처럼 제자리에서 미세하게 와이퍼질합니다
부드럽게는 바라지 않고 50이하일때 90도로 유지되도록 하려면 어떤식으로 바꿔야 할 지 조언 부탁드립니다.
|