티스토리 뷰
반응형
다른 강의자료는 www.codingnow.co.kr/ 여기를 참고해주세요.!!
아두이노와 스테핑 모터, 서보모터, 조이스틱을 활용하여 초간단 로봇팔을 만들어 봅니다.
자세한 사항은 첨부된 동영상을 참고해주세요.
[회로구성]
[전체 소스코드]
[주요소스코드]
-.main.cpp
초기화 및 반복 실행을 처리합니다.
조이스틱의 값을 read해서 스테핑모터와 서보모터에 키값을 전달하게 됩니다.
#include "global.h"
typedef struct{
unsigned char keyResult;
unsigned long timeCurr;
unsigned long timeDealy;
}valType;
valType val;
void setupMain()
{
unsigned char i;
/*시리얼 초기화*/
Serial.begin(9600);
/*변수초기화*/
memset(&val, 0x00, sizeof(val));
/*포트 초기화*/
key_Init();
stepperInit();
servoInit();
/*주기 설정 처음은 1sec*/
val.timeCurr = millis();
val.timeDealy = 50;
}
void loopMain()
{
/*50ms 주기로 slideProcess를 실행한다. */
if ((millis() - val.timeCurr) > val.timeDealy)
{
val.timeCurr = millis();
val.timeDealy = 50;
val.keyResult = getKey();
if(val.keyResult & (dir_left|dir_right))
{
stepperRun(val.keyResult);
}
if (val.keyResult & (dir_up | dir_down))
{
servoRun(val.keyResult);
}
}
}
-key.cpp
조이스틱의 값을 read해서 key값으로 변경해줍니다.
#include "key.h"
#define KEY_MAX 2
unsigned char keyMap[KEY_MAX] = {A0, A1};
void key_Init(void)
{
unsigned i;
for(i=0; i<KEY_MAX; i++)
{
pinMode(keyMap[i], INPUT); //Analog
}
}
unsigned char getKey(void)
{
unsigned i, adc, count = 0;
unsigned char keyResult = 0;
for (i = 0; i < KEY_MAX; i++)
{
adc = analogRead(keyMap[i]);
if (adc > 700)
{
keyResult |= (0x01 << count); //left, up
}
else if (adc < 300)
{
keyResult |= (0x01 << (count+1));; //right, down
}else{
;
}
count+=2;
}
return keyResult;
}
-moterStepper.cpp
스테핑 모터를 초기화 하고 제어합니다.
#include <Stepper.h>
#include "moterStepper.h"
const int steps = 45; //2048;
Stepper myStepper(steps, 11, 9, 10, 8);
void stepperInit(void)
{
myStepper.setSpeed(200); //RPM
}
void stepperRun(unsigned char key)
{
if (key & dir_left){
myStepper.step(45);
}
if (key & dir_right)
{
myStepper.step(-45);
}
}
-moterServo.cpp
서보모터를 초기화 하고 제어합니다.
#include "moterServo.h"
#include <Servo.h>
int servoPin = 7;
int angle = 90;
Servo servo;
void servoInit(void)
{
servo.attach(servoPin);
delay(100);
servo.write(0);
delay(100);
servo.write(angle);
}
void servoRun(unsigned char key)
{
if (key & dir_up)
{
if (angle < 180)
{
angle += 10;
}else{
angle = 180;
}
servo.write(angle);
}
if (key & dir_down)
{
if (angle > 0)
{
angle -= 10;
}
else
{
angle = 0;
}
servo.write(angle);
}
}
반응형
'아두이노' 카테고리의 다른 글
(프로그래밍 언어 실무편) #아두이노 블루투스 무선조종 자동차 만들기 (HC-06) (0) | 2021.07.22 |
---|---|
(프로그래밍 언어 실무편) #아두이노 장애물 자동 회피 자동차 만들기 (0) | 2021.07.16 |
(프로그래밍 언어 실무편) #아두이노와 파이썬을 활용하여 LED Matrix 제어하기 두번째 (슬라이드 기능 추가하기) (0) | 2021.06.03 |
(프로그래밍 언어 실무편) #아두이노와 파이썬을 활용하여 LED Matrix 제어하기 (0) | 2021.05.27 |
(프로그래밍 언어 실무편) #아두이노와 파이썬을 활용하여 조이스틱 마우스 만들기 (0) | 2021.05.20 |