ひらおかさんのプログラムサンプル3

 
//For Hiraoka
//ShockSensor & Solenoid & Motor
//2009.7.21

//PinAssign
int SOLENOID=11;
int SWITCH=12;
int SHOCK=14;
//StepMotorPin
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
//Tsumami
int Pot=5;

//Value
#define MAX 100
int rythm_cnt=0;
int rythm[MAX];
int dly;
int MotorCnt;

//Setup
void setup(){
pinMode(SOLENOID,OUTPUT);
pinMode(SHOCK,INPUT);
pinMode(SWITCH,INPUT);
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);

for(int i=0; i<MAX; i++){
rythm[i]=0;
}
}

//Loop
void loop(){
rythm_cnt++;
if(rythm_cnt>=MAX) rythm_cnt=0;
if(digitalRead(SHOCK)==1){
rythm[rythm_cnt]=1;
}

dly=50;
for(int i=0; i<dly; i++){
delay(1);
if(digitalRead(SWITCH)==1) {
for(int j=0; j<MAX; j++){
rythm[j]=0;
rythm_cnt=0;
}
}
if(rythm[rythm_cnt]==0){
MotorCnt++;
MoveMotor(MotorCnt);
}
}

if(rythm[rythm_cnt]==1){
digitalWrite(SOLENOID,HIGH);
}
else{
digitalWrite(SOLENOID,LOW);
MotorCnt++;
MoveMotor(MotorCnt);

}
}


//MoveMotor
void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

//StopMotor
void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}


サーボモーターが4つ、スイッチが4つ、リセットスイッチが1つ。

 
//For Monma
//Servo*4 and Switch*4 and ResetSwitch*1
//2009.7.17

//Pin
//DIGITAL PIN (8,9,10,11)
int Servo_pin[4]={8,9,10,11};

//ANALOG IN PIN (0, 1, 2, 3)
int Switch_pin[4]={14,15,16,17};
//ANALOG IN PIN (5)
int ResetSwitch_pin = 19;

//ServoSpeed
int Speed_val[4]={50,50,50,50};



//Value
signed int Servo_val[4]={
0,0,0,0};
int MaxCnt=2000;

//Init
void setup(){
for(int i=0; i<4; i++){
pinMode(Servo_pin[i],OUTPUT);
pinMode(Switch_pin[i],INPUT);
Servo_val[i]=90;
}
pinMode(ResetSwitch_pin,INPUT);
}

//Loop
void loop(){
for(int i=0; i<1; i++){
if(digitalRead(Switch_pin[i])){
Servo_val[i]+=Speed_val[i];
if(Servo_val[i]>MaxCnt)Servo_val[i]=MaxCnt;
}
else{
if(digitalRead(ResetSwitch_pin)==1) Servo_val[i]=90;
}
}
Control_Servo4();
}


void Control_Servo4(){
//Control Servo 4
for(int i=0; i<4; i++){
digitalWrite(Servo_pin[i],HIGH);
}
for(int i=0; i<4; i++){
delayMicroseconds(Servo_val[i]+500/4);
}
for(int i=0; i<4; i++){
digitalWrite(Servo_pin[i],LOW);
}
for(int i=0; i<4; i++){
delayMicroseconds((10000-(Servo_val[i]+500))/4);
}
delayMicroseconds(10000);
}

タミヤのパーツ


ユニバーサルギアボックス


工作ロボ&クラフト


山形駅前のシバタモデルにありました。「楽しい工作シリーズ」

アルミの板の素材



アルミの板は、NCマシン(いつもブーンという機械)で削れます。
アクリルのように、板をカットして、折り曲げることでいろんな形にできます。

削りやすくできているアルミが、「A5052」です。「快削アルミ」ともいいます。
ホームセンターで売っているアルミの板だと、粘りっこいアルミになっていて、削りにくいです。ロボット系を考えている人は、アルミはA5052にしないと加工がやりにくいです。
オリジナルマインドで買えます

ベアリングなどの動かす系の部品



オリジナルマインド

回転するものを作りたいときに、きちんとベアリングを入れてあるかどうかが、キーポイントになります。外から見えなくて地味だけど、しっかり作りたい人はいれておいて間違いないです。

ベアリングで、板に軸を固定する方法が紹介されていて、固定方法を考えるのに参考になります

Arduino関係の購入先


スイッチサイエンス

Arduinoをはじめ、使いやすくできているいろんな部品の大元は、Sparkfunという海外のお店です。もともと学生が始めた電子回路の情報サイトがお店になりました。詳細はこちら

LEDいろいろ




LEDは、秋月電子で買うのが安いです。大量に欲しいときも、だいたい大丈夫です。
最近、テープ状のLEDを扱ってくれてるので、LEDで手軽に広めに明るくしたいところなどは便利です。

最近は、千石電商がLED向けに、放熱基板を売ってくれてます。手軽にLED照明を作りたい人は千石電商の基板がいいと思います。通販では扱ってないのかな??

その他で、ものすごく明るいLEDが欲しかったりすると、「パワーLED」って呼ばれるものがあります。


これは、ストロベリーリナックスがいいです。
乾電池でパワーLEDをつけられる部品が出ました!


ほかに、パワーLED関係は、オーディオQも多種類あつかっていていいです。オーディオなのにLEDなのはナゾです。。

サーボモーター




サーボモーターは、だいたい1個1500円くらいします。小さいものは800円くらいから。
角度を制御できるモーターなので、ロボットの関節等に使われてたりします。
いろいろあるけど、最近は秋月電子が扱い始めて、他に比べて種類が多くてお安く買えます。
秋月電商が安いです。
ストロベリーリナックスも安いです。

ロータリーエンコーダ



ボリュームのツマミで、何回転でもできる部分には、ロータリーエンコーダがつかわれてます。
買うときの参考に、通販のページの画像で2つだけポイントを。

1回転の分解度が高いものほど、若干値段も高いです。

千石電商から買えます

センサーとLEDとモーターが組み合わさったサンプル

 
//For hiraoka
//Sensor and LED
//and STEPMOTOR
//20090707

//Pin
int ledpin1 = 8;
int ledpin2 = 9;
int ledpin3 = 10;
int ledpin4 = 13;

int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int Pot=5;
int Switch=6;

//Value
int led1 = 0;
int led2 = 0;
int led3 = 0;
int led4 = 0;

int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;
int sensor4 = 0;

int dly;
int Count=0;

void setup(){
pinMode(ledpin1,OUTPUT);
pinMode(ledpin2,OUTPUT);
pinMode(ledpin3,OUTPUT);
pinMode(ledpin4,OUTPUT);

pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(Switch,INPUT);

dly = analogRead(Pot)/4;
}

void loop(){
sensor1 = analogRead(0)/4;
sensor2 = analogRead(1)/4;
sensor3 = analogRead(2)/4;
sensor4 = analogRead(5)/4;

led1 = sensor1;
led2 = sensor2;
led3 = sensor3;

//preview
led4 = sensor4;
soft_pwm();

if(digitalRead(Switch)==1){
Count=Count+1;
MoveMotor(Count);

}
else{
StopMotor();
}

}

void soft_pwm(){
for(int Duty=255; Duty>1; Duty--){
if(Duty<=led1){
digitalWrite(ledpin1, HIGH);
}
else{
digitalWrite(ledpin1, LOW);
}
if(Duty<=led2){
digitalWrite(ledpin2, HIGH);
}
else{
digitalWrite(ledpin2, LOW);
}
if(Duty<=led3){
digitalWrite(ledpin3, HIGH);
}
else{
digitalWrite(ledpin3, LOW);
}
if(Duty<=led4){
digitalWrite(ledpin4, HIGH);
}
else{
digitalWrite(ledpin4, LOW);
}
}
digitalWrite(ledpin1,LOW);
digitalWrite(ledpin2,LOW);
digitalWrite(ledpin3,LOW);
digitalWrite(ledpin4,LOW);

}



void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}


ベアリングホルダ

http://www.originalmind.co.jp/cargo5/bearingholder/

Arduinoと木とレーザーカット

アクリルだけだと素材の幅が少ないので、木の加工例を。

http://jp.makezine.com/blog/2009/06/wooden_mini_jansen_walker_robot_par.html

http://jp.makezine.com/blog/2009/07/laser_cutting_for_3d_objects.html

センサーとLEDで確認するプログラムサンプル

 
//For hiraoka
//Sensor and LED
//20090707

//Pin
int ledpin1 = 8;
int ledpin2 = 9;
int ledpin3 = 12;
int ledpin4 = 11;
int ledpin5 = 13;

//Value
int led1 = 0;
int led2 = 0;
int led3 = 0;
int led4 = 0;
int led5 = 0;
int sensor1 = 0;
int sensor2 = 0;
int sensor3 = 0;
int sensor4 = 0;
int sensor5 = 0;

void setup(){
pinMode(ledpin1,OUTPUT);
pinMode(ledpin2,OUTPUT);
pinMode(ledpin3,OUTPUT);
pinMode(ledpin4,OUTPUT);
pinMode(ledpin5,OUTPUT);
}

void loop(){
sensor1 = analogRead(0);
sensor2 = analogRead(1);
sensor3 = analogRead(2);
sensor4 = analogRead(3);
sensor5 = analogRead(5);

led1 = sensor1;
led2 = sensor2;
led3 = sensor3;
led4 = sensor4;
led5 = sensor5;

soft_pwm();
}

void soft_pwm(){
for(int Duty=1023; Duty>1; Duty--){
if(Duty<=led1){
digitalWrite(ledpin1, HIGH);
}
else{
digitalWrite(ledpin1, LOW);
}
if(Duty<=led2){
digitalWrite(ledpin2, HIGH);
}
else{
digitalWrite(ledpin2, LOW);
}
if(Duty<=led3){
digitalWrite(ledpin3, HIGH);
}
else{
digitalWrite(ledpin3, LOW);
}
if(Duty<=led4){
digitalWrite(ledpin4, HIGH);
}
else{
digitalWrite(ledpin4, LOW);
}
if(Duty<=led5){
digitalWrite(ledpin5, HIGH);
}
else{
digitalWrite(ledpin5, LOW);
}
}
digitalWrite(ledpin1,LOW);
digitalWrite(ledpin2,LOW);
digitalWrite(ledpin3,LOW);
digitalWrite(ledpin4,LOW);
digitalWrite(ledpin5,LOW);

}


でわくんのプログラムサンプル

 
/*----
ボタン押してない
・モーター回らない
・LEDも光らない

ボタン押す
・モーター回る
・6つのLEDの位置を時計としてみると、
a:12時6時が光り
b:10時4時が光り
c:8時と2時が光り
d:最後に6つ全部が光る
a~d繰り返し

もう一度スイッチを押すとモーターもLEDも止まる。
LEDの色は青でお願いします
----*/

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

int LED1=8;
int LED2=9;
int LED3=10;
int LED4=11;
int LED5=12;
int LED6=13;


//PotentionMeter
int Pot=5;
//Switch
int Switch=6;
int dly;
signed int Count=0;
signed int Dimmention=1;
int switch_status;


void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);
//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
switch_status=0;
}


void loop(){
if(digitalRead(Switch)==1){
if(switch_status==0){
switch_status=1;
}else{
switch_status=0;
}
}
if(switch_status==1){
Count=Count+1;
if(Count>96){
Count=0;
}else if(Count<0){
Count=96;
}
LightLED(Count);
MoveMotor(Count);
}else{
StopLED();
StopMotor();
}
}

void LightLED(int stp){
int s;
s=(stp/10)%6;

switch(s){
case 0:
digitalWrite(LED1,LOW);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 1:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,LOW);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 2:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,LOW);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 3:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,LOW);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
break;
case 4:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,LOW);
digitalWrite(LED6,HIGH);
break;
case 5:
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,LOW);
break;
}
}

void StopLED(){
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
digitalWrite(LED4,HIGH);
digitalWrite(LED5,HIGH);
digitalWrite(LED6,HIGH);
}

void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}


void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}


プログラムサンプル

 
//pin select
int MOTOR =11;
int LED=10;

//サウンドのレベル用変数
int sound_level;

//サウンド感度調整ツマミ用変数
int analog0;

//モーターの回る時間調整ツマミ用変数
int analog1;

//LEDの明るさ用変数
int led_blight;


//forループ用変数
int j;

//セットアップ
void setup(){
//モーターピンをアウトプット(電気が出るように)
pinMode(MOTOR,OUTPUT);
//LEDピンもアウトプット(電気が出るように)
pinMode(LED,OUTPUT);
}



//メインループ
void loop(){

//サウンドレベルを読む(analog5ピン)
sound_level=analogRead(5);
//サウンド感度調整ツマミを読む(analog3ピン)
analog0=analogRead(3);


//もしも、サウンドレベルが感度調整ツマミより大きくなったら、
if(sound_level>analog0){

//モーターに電気を流す(回転)
digitalWrite(MOTOR,HIGH);

//LEDの明るさ変数を最大にする
led_blight=1023;

//モーターの回転時間調整ツマミを読む(alanog4ピン)
analog1=analogRead(4);

//モーターの回転調整の数値の回数だけ、delay(1)を繰り返す
for(j=0; j < analog1; j++){
delay(1);
}

//モーターの電気をとめる(回転停止)
digitalWrite(MOTOR,LOW);

//もう一度、モーター回転時間調整ツマミを読む
//その時間を今度は4で割る
analog1=analogRead(4)/4;

//回転時間調整ツマミを4で割った回数だけ、delay(1)を繰り返す
for(j=0; j < analog1; j++){
delay(1);
}

}
//そうじゃないとき(サウンドレベルが感度調整ツマミより大きくないとき)
else{
//LEDの明るさ変数に、0.99を掛け算して、徐々に減らす
//(じんわりと消えていくような場合のテクです)
led_blight*=0.99;
//モーターの電気をストップ(回転停止)
digitalWrite(MOTOR,LOW);
}

//LEDの明るさを実際にピンに反映させる
analogWrite(LED,1023-led_blight);
}


実用的なステッピングモーターのプログラム その4

10回押したら、一定ステップ回転する。
----
//StepMotor sample
//2009.6.2

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//PotentionMeter
int Pot=5;
//Switch
int Switch=6;
int dly;
signed int Count=0;
signed int Dimmention=1;
int Switch_status=0;
int Switch_count=0;


void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);
//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
}

void loop(){
if(digitalRead(Switch)==1){
//Debounce
delay(25);
if(Switch_status==0){
Dimmention=1;
Switch_status=1;
Switch_count=Switch_count+1;
digitalWrite(ledPin, HIGH);
}
}else{
if(Switch_status==1){
Dimmention=-1;
Switch_status=0;
digitalWrite(ledPin, LOW);
}
}

if(Switch_count>=10){
Switch_count=0;
for(Count=0; Count<96; Count=Count+1){
MoveMotor(Count);
}
}

}


void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}

マリオの音が鳴るプログラム(おまけ)

ちょっと気分転換で。

ハンダ付けの上からスピーカーをつけるのが難しいので、Arduinoから基板を外してください。
スピーカーのピンを、10番ピンと、GNDピンに差し込んで準備完了。

----
int SpeakerPin = 10;
unsigned int i;

unsigned int j;

void setup(){
pinMode(SpeakerPin, OUTPUT);
}

void mario_1up(){
for (i=0; i<97; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(379);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(379);
}
for (i=0; i<235; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(319);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(319);
}
for (i=0; i<396; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(189);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(189);
}
for (i=0; i<315; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(238);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(238);
}
for (i=0; i<353; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(212);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(212);
}
for (i=0; i<471; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(159);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(159);
}

}

void get_coin(){
for (i=0; i<250; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(253);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(253);
}
for (i=0; i<500; i++){
digitalWrite(SpeakerPin,HIGH);
delayMicroseconds(189);
digitalWrite(SpeakerPin,LOW);
delayMicroseconds(189);
}
delay(50);

}


void loop(){

for(j=0; j<10; j++){
get_coin();
delay(50);
}

mario_1up();
delay(500);

}

実用的なステッピングモーターのプログラム その3

スイッチを押して、回転方向を切り替えます。

こちらで解説

----
//StepMotor sample
//2009.6.2

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//PotentionMeter
int Pot=5;
//Switch
int Switch=6;
int dly;
signed int Count=0;
signed int Dimmention=1;
int Switch_status=0;


void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);
//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
}

void loop(){
if(digitalRead(Switch)==1){
if(Switch_status==0){
Dimmention=1;
Switch_status=1;
}
}else{
if(Switch_status==1){
Dimmention=-1;
Switch_status=0;
}
}

Count=Count+Dimmention;

if(Count>96){
Count=0;
}else if(Count<0){
Count=96;
}

MoveMotor(Count);

}


void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}

実用的なステッピングモーターのプログラム その2

スイッチを押している間、逆回転します。

こちらで解説

---

//StepMotor sample
//2009.6.2

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//PotentionMeter
int Pot=5;
//Switch
int Switch=6;
int dly;
signed int Count=0;
signed int Dimmention=1;


void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);
//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
}

void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}

void loop(){
if(digitalRead(Switch)==1){
Dimmention=1;
}else{
Dimmention=-1;
}

Count=Count+Dimmention;

if(Count>96){
Count=0;
}else if(Count<0){
Count=96;
}

MoveMotor(Count);

}

実用的なステッピングモーターのプログラム その1

モーターの回転を、指定したステップ数で行うプログラムです。
こちらに解説

----
//StepMotor sample
//

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//PotentionMeter
int Pot=5;
//Switch
int Switch=6;

int dly;
int Count=0;

void setup(){
pinMode(ST_X1, OUTPUT);
pinMode(ST_X2, OUTPUT);
pinMode(ST_Y1, OUTPUT);
pinMode(ST_Y2, OUTPUT);
pinMode(ledPin, OUTPUT);

//POT is Default AnalogInput
pinMode(Switch,INPUT);
dly = analogRead(Pot)/4;
}

void MoveMotor(int stp){
int s;
s=stp%8;

switch(s){
case 0:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 1:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 2:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 3:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 4:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 5:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 6:
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;

case 7:
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);
dly = analogRead(Pot)/4;
delay(dly);
break;
}
}

void StopMotor(){
digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);
}


void loop(){

if(digitalRead(Switch)==1){
Count=Count+1;
MoveMotor(Count);

}
else{
StopMotor();
}
}

ステッピングモーターの回転について

いままで、ステッピングモーターを回すのに、モーターの中の4つの電磁石をArduinoの4つのピンをつかって切り替えてきました。
厳密にいうと違いますが(2相の磁石を切り替えてるので個数が4つじゃない)、こんな感じでイメージしておいていいと思います。

さて、今までは、4つの電磁石のうち1つだけを磁石にして、回転させてきましたが、これだといろいろ問題が出てきてしまうので、実用的に使われてはいません。

どんな問題かというと、、

バケツリレーを思い浮かべてください。
隣の人に、水のたっぷり入ったバケツを渡すとき、自分と隣の人の2人が一瞬だけバケツを持ち合うことで、水をこぼすことなく、スムーズにリレーできます。

これが、自分と隣の人が完全に分かれて、バケツを持つのは1人だけにしてしまうと、どうなるでしょうか。
おそらく、バケツリレーは成り立つと思いますが、バケツを落としたり、重さが全部自分にかかるので、やたら疲れてしまいます。

ステッピングモーターの中でもこんなことが起きてます。

なので、通常は、2つの電磁石をオンにする瞬間も必要になります。

参考サイト


▼今までのプログラム(抜粋)
-----
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);

delay(25);
----

▼改良したプログラム(抜粋)
----
digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, HIGH);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, LOW);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, HIGH);
digitalWrite(ST_Y2, HIGH);

delay(25);

digitalWrite(ST_X1, LOW);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);

delay(25);

digitalWrite(ST_X1, HIGH);
digitalWrite(ST_X2, LOW);
digitalWrite(ST_Y1, LOW);
digitalWrite(ST_Y2, HIGH);

delay(25);
----

ステッピングモーターのプログラム(3)

スイッチを押している間、回転するバージョン

-----

//StepMotor sample

//PinAssign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//PotentionMeter
int Pot=5;
//Switch
int Switch=6;

int dly;

void setup(){
  pinMode(ST_X1, OUTPUT);
  pinMode(ST_X2, OUTPUT);
  pinMode(ST_Y1, OUTPUT);
  pinMode(ST_Y2, OUTPUT);
  pinMode(ledPin, OUTPUT);

  //POT is Default AnalogInput
  pinMode(Switch,INPUT);
  dly = analogRead(Pot)/4;
}

void loop(){

  if(digitalRead(Switch)==1){


    digitalWrite(ledPin,HIGH);

    digitalWrite(ST_X1, HIGH);
    digitalWrite(ST_X2, LOW);
    digitalWrite(ST_Y1, LOW);
    digitalWrite(ST_Y2, LOW);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ST_X1, HIGH);
    digitalWrite(ST_X2, HIGH);
    digitalWrite(ST_Y1, LOW);
    digitalWrite(ST_Y2, LOW);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ST_X1, LOW);
    digitalWrite(ST_X2, HIGH);
    digitalWrite(ST_Y1, LOW);
    digitalWrite(ST_Y2, LOW);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ledPin,LOW);

    digitalWrite(ST_X1, LOW);
    digitalWrite(ST_X2, HIGH);
    digitalWrite(ST_Y1, HIGH);
    digitalWrite(ST_Y2, LOW);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ST_X1, LOW);
    digitalWrite(ST_X2, LOW);
    digitalWrite(ST_Y1, HIGH);
    digitalWrite(ST_Y2, LOW);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ST_X1, LOW);
    digitalWrite(ST_X2, LOW);
    digitalWrite(ST_Y1, HIGH);
    digitalWrite(ST_Y2, HIGH);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ST_X1, LOW);
    digitalWrite(ST_X2, LOW);
    digitalWrite(ST_Y1, LOW);
    digitalWrite(ST_Y2, HIGH);


    dly = analogRead(Pot)/4;
    delay(dly);

    digitalWrite(ST_X1, HIGH);
    digitalWrite(ST_X2, LOW);
    digitalWrite(ST_Y1, LOW);
    digitalWrite(ST_Y2, HIGH);


    dly = analogRead(Pot)/4;
    delay(dly);

  }
  else{
    digitalWrite(ST_X1, LOW);
    digitalWrite(ST_X2, LOW);
    digitalWrite(ST_Y1, LOW);
    digitalWrite(ST_Y2, LOW);
  }
}


ステッピングモーターのプログラム(2)

モーターのスピードを簡単に変更できるバージョン
「dly」という変数で一括してスピードコントロールできます。
-----

//StepMotor sample

//Pin Assgin
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;

//DelayTime
int dly=2;


void setup(){
  pinMode(ST_X1, OUTPUT);
  pinMode(ST_X2, OUTPUT);
  pinMode(ST_Y1, OUTPUT);
  pinMode(ST_Y2, OUTPUT);
  pinMode(ledPin, OUTPUT);
  
}

void loop(){
  digitalWrite(ledPin,HIGH);
  
  digitalWrite(ST_X1, HIGH);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, LOW);
  
  delay(dly);

  digitalWrite(ST_X1, HIGH);
  digitalWrite(ST_X2, HIGH);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, LOW);
  
  delay(dly);

  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, HIGH);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, LOW);
  
  delay(dly);

  digitalWrite(ledPin,LOW);
  
  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, HIGH);
  digitalWrite(ST_Y1, HIGH);
  digitalWrite(ST_Y2, LOW);
  
  delay(dly);

  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, HIGH);
  digitalWrite(ST_Y2, LOW);
  
  delay(dly);

  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, HIGH);
  digitalWrite(ST_Y2, HIGH);
  
  delay(dly);
  
  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, HIGH);
  
  delay(dly);

  digitalWrite(ST_X1, HIGH);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, HIGH);
  
  delay(dly);
  
}


ステッピングモーターのプログラム(1)

まず、モーターをつないで動作確認をするので、以下のプログラムを書いてください。
今回使うモーターは「ステッピングモーター」というモーターで、4つのコイルが90度ずつの一に入っていて、1つ1つを時間差で電磁石にすることで、軸についた永久磁石が反発を起こしてクルっと回ります。リニアモーターカーみたいな原理。「水に沈む前に次の足を出す」ような感じ。


---
//StepMotor sample

//Pin Assign
int ST_X1=2;
int ST_X2=4;
int ST_Y1=3;
int ST_Y2=5;
int ledPin=13;


void setup(){
  pinMode(ST_X1, OUTPUT);
  pinMode(ST_X2, OUTPUT);
  pinMode(ST_Y1, OUTPUT);
  pinMode(ST_Y2, OUTPUT);
  pinMode(ledPin, OUTPUT);
  
}

void loop(){
  digitalWrite(ledPin,HIGH);
  
  digitalWrite(ST_X1, HIGH);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, LOW);
  
  delay(25);

  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, HIGH);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, LOW);
  
  delay(25);

  digitalWrite(ledPin,LOW);
  
  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, HIGH);
  digitalWrite(ST_Y2, LOW);
  
  delay(25);

  digitalWrite(ST_X1, LOW);
  digitalWrite(ST_X2, LOW);
  digitalWrite(ST_Y1, LOW);
  digitalWrite(ST_Y2, HIGH);
  
  delay(25);

  
  
}