ULN2003
from http://hp.hana-neko.com/archives/693
// このサンプルコードは28BYJ-48の時計回り・逆回りを行うデモです。
// ULN2003 インターフェースボードを使用。つまりただのトランジスタアレイで駆動するだけ
// 28BYJ-48モーターは4相、8ビートモーター。
// 減速ギア非68倍。 1バイポーラ巻線。ステップ角は5.625/64。
// 動作周波数100PPS。電流92mA。
////////////////////////////////////////////////
//Base Code
// 4tronix Arduino http://www.4tronix.co.uk/arduino/Stepper-Motors.php
int motorPin1 = 9; // Blue - 28BYJ48 pin 1
int motorPin2 = 10; // Pink - 28BYJ48 pin 2
int motorPin3 = 11; // Yellow - 28BYJ48 pin 3
int motorPin4 = 12; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
unsigned int motorSpeed = 800; //速度。数値が小さいほど速くなる。800以下は脱調して動かない
int count = 0; // count of steps made
int countsperrev = 22512; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
double slowRate = 1;
//////////////////////////////////////////////////////////////////////////////
void setup() {
//declare the motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}
//////////////////////////////////////////////////////////////////////////////
void loop(){
if(count < countsperrev )
clockwise();
else if (count == countsperrev * 2)
count = 0;
else
anticlockwise();
count++;
}
//////////////////////////////////////////////////////////////////////////////
void anticlockwise() //反時計回り
{
for(int i = 0; i < 8; i++)
{
setOutput(i);
delay();
}
}
void clockwise() //時計回り
{
for(int i = 7; i >= 0; i--)
{
setOutput(i);
delay();
}
}
void delay()
{
for(int i = 0; i < slowRate; i++)
{
delayMicroseconds(motorSpeed);
}
}
void setOutput(int out)
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));
digitalWrite(motorPin2, bitRead(lookup[out], 1));
digitalWrite(motorPin3, bitRead(lookup[out], 2));
digitalWrite(motorPin4, bitRead(lookup[out], 3));
}
// このサンプルコードは28BYJ-48の時計回り・逆回りを行うデモです。
// ULN2003 インターフェースボードを使用。つまりただのトランジスタアレイで駆動するだけ
// 28BYJ-48モーターは4相、8ビートモーター。
// 減速ギア非68倍。 1バイポーラ巻線。ステップ角は5.625/64。
// 動作周波数100PPS。電流92mA。
////////////////////////////////////////////////
//Base Code
// 4tronix Arduino http://www.4tronix.co.uk/arduino/Stepper-Motors.php
int motorPin1 = 9; // Blue - 28BYJ48 pin 1
int motorPin2 = 10; // Pink - 28BYJ48 pin 2
int motorPin3 = 11; // Yellow - 28BYJ48 pin 3
int motorPin4 = 12; // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
unsigned int motorSpeed = 800; //速度。数値が小さいほど速くなる。800以下は脱調して動かない
int count = 0; // count of steps made
int countsperrev = 22512; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};
double slowRate = 1;
//////////////////////////////////////////////////////////////////////////////
void setup() {
//declare the motor pins as outputs
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}
//////////////////////////////////////////////////////////////////////////////
void loop(){
if(count < countsperrev )
clockwise();
else if (count == countsperrev * 2)
count = 0;
else
anticlockwise();
count++;
}
//////////////////////////////////////////////////////////////////////////////
void anticlockwise() //反時計回り
{
for(int i = 0; i < 8; i++)
{
setOutput(i);
delay();
}
}
void clockwise() //時計回り
{
for(int i = 7; i >= 0; i--)
{
setOutput(i);
delay();
}
}
void delay()
{
for(int i = 0; i < slowRate; i++)
{
delayMicroseconds(motorSpeed);
}
}
void setOutput(int out)
{
digitalWrite(motorPin1, bitRead(lookup[out], 0));
digitalWrite(motorPin2, bitRead(lookup[out], 1));
digitalWrite(motorPin3, bitRead(lookup[out], 2));
digitalWrite(motorPin4, bitRead(lookup[out], 3));
}
留言
張貼留言