● 모듈 구성 안내
1-4-1. 시리얼 통신으로 가변 저항값 받아오기
1-4-2. 시리얼 통신으로 서보모터 제어하기
1-4-3. 시리얼 통신으로 로봇팔 만들기
● 1-4-1. 시리얼 통신으로 가변저항값 받아오기
▶ [실습 1-4-1] 시리얼 통신으로 가변저항값 받아오기
- 아래 회로를 구성한다.
- 아래 코드를 복사 붙여 넣기 하여 아두이노를 동작시킨다.
int sensorPin = A3;
int ledPin = 3;
int sensorValue = 0;
void setup(){
pinMode(ledPin, OUTPUT);
}
void loop(){
sensorValue = analogRead(sensorPin);
int ledValue = map(sensorValue, 0, 1023, 0, 255);
analogWrite(ledPin, ledValue);
delay(100);
}
- 아두이노 동작을 확인하며 코드를 이해한다.
- 아래 코드를 보며 기존 코드에 /* 코드 추가 */ 부분을 타이핑 하여 추가한다.
int sensorPin = A3;
int ledPin = 3;
int sensorValue = 0;
void setup(){
pinMode(ledPin, OUTPUT);
/* 아래 1줄 코드 추가 */
Serial.begin(9600); // 시리얼 통신을 9600보드레이트 속도로 시작합니다.
}
void loop(){
sensorValue = analogRead(sensorPin);
/* 아래 2줄 코드 추가 */
Serial.print("가변저항 값 : ");
Serial.println(sensorValue);
int ledValue = map(sensorValue, 0, 1023, 0, 255);
/* 아래 2줄 코드 추가 */
Serial.print("변환된 가변저항 값 : ");
Serial.println(ledValue);
analogWrite(ledPin, ledValue);
/* delay값 변경 */
delay(300);
}
- 아두이노 컴파일러에 코드를 업로드 시키고 아래 그림의 시리얼 모니터링을 클릭하여 시리얼 모니터 동작을 관찰한다.
*** 시리얼 모니터에 가변저항값이 잘 나온다면
*** [실습 1-4-1] 시리얼 통신으로 가변저항값 받아오기 완수!!
● 1-4-2. 시리얼 통신으로 서보모터 제어하기
- 아래 서보모터 회로를 다시 구성하자.
- 아래 코드를 그대로 복붙해서 아두이노에 업로드 시킨다.
#include <Servo.h>
Servo servomotor;
int a = 0;
void setup() {
servomotor.attach(7);
Serial.begin(9600); // Serial 통신을 설정합니다.
while(!Serial);
Serial.println("Servor Mortor");
}
void loop() {
if(Serial.available()){ //Serial 모니터창에 어떤 값이 들어오면 실행을 합니다.
a = Serial.parseInt(); //Serial 모니터창에서 받은 값을 a라는 변수로 넘겨줍니다.
Serial.print("angle : ");
Serial.println(a);
servomotor.write(a);
delay(15);
}
}
코드 출처 : http://www.3demp.com/community/boardDetails.php?cbID=125
☞ 시리얼 모니터에 0~179 범위의 값을 입력해보자 서보모터는 어떻게 동작하는가?
☞ 시리얼 모니터에 180 이상의 값을 입력해보자 서보모터는 잘동작하는가? 잘동작하지 않는다면 원인은 무엇인가?
★ 1-4-2. 시리얼 통신으로 서보모터 제어하기 도전과제
기존 코드를 수정하여 시리얼모니터에서 0미만의 값을 입력했을때는 서보모터는 위치 0에 고정하고
시리얼모니터에 180 이상의 값을 주었을때 서보모터의 위치가 179에 고정되게 코드를 수정하고 동작시키시오.
● 1-4-3. 로봇팔 만들기
- 아래 영상을 통해 우선 우리의 목표를 확인하자.
- 아래와 같이 회로를 구성한다.
- 아래 코드를 복붙하고 업로드 한다.
#include <Servo.h> //헤더파일 포함
Servo servo1; //servo1 변수 선언
Servo servo2; //servo2 변수 선언
int motor1 = 3; //motor1을 입출력 3번 핀에 연결
int motor2 = 5; //motor2을 입출력 5번 핀에 연결
int angle1 = 90; //초기 각도값 설정
int angle2 = 90; //초기 각도값 설정
void setup() {
servo1.attach(motor1); //servo1에 입출력 3번 핀을 지정
servo2.attach(motor2); //servo2에 입출력 5번 핀을 지정
Serial.begin(9600); //시리얼 모니터 사용
Serial.println("Enter the w,a,s,d ");
}
void loop() {
if(Serial.available()) //시리얼 통신이 가능할 경우
{
char input = Serial.read(); //시리얼 모니터 입력 값을 읽어옴
if(input =='w') //입력값이 W일 경우
{
Serial.print("+30");
for(int i = 0; i <30; i++) // 30번 반복
{
angle1 = angle1 + 1; // angle1의 값에 1씩 30번을 더함
if(angle1 >=180) // angle1이 180보다 커지거나 같아질 경우
angle1 = 180; // angle1을 180으로 고정
servo1.write(angle1); // servo1을 angle1 값에 맞추어 동작
delay(10);
}
Serial.print("\t\t");
Serial.println(angle1);
}
else if(input =='a') //입력값이 a일 경우
{
Serial.print("+30");
for(int j = 0; j <30; j++)
{
angle2 = angle2 + 1;
if(angle2 >=180)
angle2 = 180;
servo2.write(angle2);
delay(10);
}
Serial.print("\t\t");
Serial.println(angle2);
}
else if(input == 's') //입력값이 s일 경우
{
Serial.print("\t-30\t");
for(int i = 0; i <30; i++) // 30번 반복
{
angle1 = angle1 -1; // angle1의 값에 1씩 30번을 빼기
if(angle1 <= 0) // angle1이 0보다 작아지거나 같을 경우
angle1 = 0; // angle1을 0으로 고정
servo1.write(angle1); // servo1을 angle 값에 맞추어 동작
delay(10);
}
Serial.println(angle1);
}
else if(input == 'd') //입력값이 d일 경우
{
Serial.print("\t-30\t");
for(int j = 0; j <30; j++)
{
angle2 = angle2 -1;
if(angle2 <= 0)
angle2 = 0;
servo2.write(angle2);
delay(10);
}
Serial.println(angle2);
}
}
}
- 시리얼모니터를 켜고, w, s, a, d를 통해 2개의 서보모터를 제어한다.
- 원킹쌤이 주시는 재료를 가지고 로봇 팔 하드웨어를 제작한다.
★ 1-4-2. 시리얼 통신으로 서보모터 제어하기 도전과제
키보드 q를 눌렀을때 로봇팔이 위치가 초기값으로 초기화 될수 있게 코드를 수정 및 추가하고 동작을 완수 하시오.
고생하셨습니다.
FINISH
글쓴이 : Wonking / 교사 성원경
'메이커 프로젝트 > 아두이노 +' 카테고리의 다른 글
아두이노 DC 모터 제어하기 (0) | 2021.09.03 |
---|---|
[모듈 1-6] 아두이노 부저로 소리내기(feat. 전자 피아노 만들기) (2) | 2020.09.22 |
[ 모듈 1-5 ] 아두이노 초음파 센서 제어하기(feat. processing 아두이노 시각화) (2) | 2020.09.22 |
[모듈 1-3] 아두이노 서보모터 제어하기 (feat. For 구문) (19) | 2020.09.06 |
[모듈 1-2] 아두이노 스위치 제어(feat. if-else 구문) (10) | 2020.09.06 |