MCU 및 PLD
아두이노 - 내장 라이브러리 사용 스테핑 모터 구동 소스.
힝크
2010. 8. 2. 19:24
왜인지 몰라도 탈조가 있다
마찬가지로 GND로 풀다운된 4개의 스위치에 의해 동작한다.
회로도는 아두이노 홈피에 나온 회로도를 이용
풀브릿지 칩은손쉽게 구할 수 있는 모터 구동용 칩 L298N 을 사용하자.
결선은 소스를 참조.
#include <Stepper.h>
#define _DEBUG_PRINT_
#define EN_PIN (3)
#define LED_PIN (13)
#define MOTOR_INPUT1_PIN (5)
#define MOTOR_INPUT2_PIN (4)
#define MOTOR_INPUT3_PIN (6)
#define MOTOR_INPUT4_PIN (7)
#define KEY1_PIN (10)
#define KEY2_PIN (11)
#define KEY3_PIN (12)
#define KEY4_PIN (9)
const int analogInPin = 0; // Analog input pin that the potentiometer is attached to
int sensorValue = 0; // value read from the pot
Stepper step1 = Stepper(200,MOTOR_INPUT1_PIN,MOTOR_INPUT2_PIN,MOTOR_INPUT3_PIN,MOTOR_INPUT4_PIN);
short output = 0;
void setup() {
// initialize serial communications at 9600 bps:
pinMode(EN_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(KEY1_PIN,INPUT);
pinMode(KEY2_PIN,INPUT);
pinMode(KEY3_PIN,INPUT);
pinMode(KEY4_PIN,INPUT);
#ifdef _DEBUG_PRINT_
Serial.begin(9600);
Serial.println("Start step motor contorller ver 0.1 (made by Kim Hyuk)");
#endif // _DEBUG_PRINT_
}
int outputValue;
unsigned long t;
int speed_table1[] = {
10,20,30,40,50,60,70,80,90,100, //20
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,100,100,
100,90,80,70,60,50,40,30,20,10}; // 200
void loop() {
uint8_t i;
// read the analog in value:
t = millis();
if(t % 500 > 200) digitalWrite(LED_PIN,LOW);
else if(t % 500 < 200) digitalWrite(LED_PIN,HIGH);
if(digitalRead(KEY1_PIN)) { // defaut == 0;
#ifdef _DEBUG_PRINT_
Serial.println("Key 1");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
step1.setSpeed(100);
step1.step(100);
} else if(digitalRead(KEY2_PIN)) {
#ifdef _DEBUG_PRINT_
Serial.println("Key 2");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
for(i =0; i< 100;i++) {
step1.setSpeed(speed_table1[i]);
step1.step(2);
}
} else if(digitalRead(KEY3_PIN)) {
#ifdef _DEBUG_PRINT_
Serial.println("Key 3");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
for(i =0; i< 100;i++) {
step1.setSpeed(speed_table1[i]);
step1.step(-2);
}
} else if(digitalRead(KEY4_PIN)) {
#ifdef _DEBUG_PRINT_
Serial.println("Key 4");
#endif // _DEBUG_PRINT_
digitalWrite(EN_PIN, HIGH);
step1.setSpeed(100);
step1.step(-100);
} else {
digitalWrite(EN_PIN, LOW);
}
}