2010年01月11日

arduinoとサーボモータで作る踏み切り

工作が面倒くさい人はこの仕掛け絵本がおすすめです。安い割に良く出来ていますよ。



年末年始は旅行などで忙しく、ゆっくりパソコンを触る時間がありませんでした。

今年最初の記事は、昨年作った息子のためのaruduino玩具についてです。前回の記事でも触れたとおり、サンプルスケッチを組み合わせただけの代物ですが、自分のための備忘録としてここに残しておきます。

arduinoとサーボモータで作る踏み切り arduinoとサーボモータで作る踏み切り

arduinoとサーボモータで作る踏み切り


//トグルスイッチでサーボを0度および90度状態を制御
//LED1とLED2を交互に点灯【踏切おもちゃ用のスケッチ】
// http://yutakalife.net/article/138096442.html
#include <Servo.h>

Servo servo;
int count = 1;
int LED1_PIN = 7; // DIGITALの7番にLED1
int LED2_PIN = 8; // DIGITALの8番にLED2
int running = 0;

void setup(){
//サーボの信号線を3番ピンに接続
//(PWMピン以外のピンにも接続可)
servo.attach(3);
//12番ピンをデジタル入力に設定
pinMode(12,INPUT);
Serial.begin(9600);
}

void loop(){
//デジタル入力がHIGH(5V)でcountに1を足す
if(digitalRead(12)==HIGH){
Start:
count++;
delay(500);
//count/2のあまりが0なら
if((count % 2) == 0){
//サーボ出力0℃
int val=0;
servo.write(val);
Serial.print("HIGH ");
Serial.print("\t");
Serial.print(count);
Serial.print("\t");
Serial.println(int(val));
running = 0;
}else{
//count/2のあまりが1なら
//LED1とLED2を交互に点滅
for (int i = 0; i < 2; i++){
digitalWrite (LED1_PIN, HIGH); // LED1を点灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
delay (500); // 0.5秒待機する(500ms)
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, HIGH); // LED2を点灯する
delay (500); // 0.5秒待機する(500ms)
}
//サーボ出力90℃
int val=90;
for (int i = 0; i <= val; i++){
servo.write(i);
delay(10);
if (i <= 50){
digitalWrite (LED1_PIN, HIGH); // LED1を点灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
Serial.println(i);
}
if (i >= 50){
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, HIGH); // LED2を点灯する
Serial.println(i);
}
}
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
Serial.print("LOW ");
Serial.print("\t");
Serial.print(count);
Serial.print("\t");
Serial.println(int(val));
running = 1;
}
}
if (running){
for (int i = 0; i <= 100; i++){
delay(10);
if(digitalRead(12)==HIGH){
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
goto Start;
}
if (i <= 50){
digitalWrite (LED1_PIN, HIGH); // LED1を点灯する
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
}
if (i >= 50){
digitalWrite (LED1_PIN, LOW); // LED1を消灯する
digitalWrite (LED2_PIN, HIGH); // LED2を点灯する
}
}
digitalWrite (LED2_PIN, LOW); // LED2を消灯する
}
}

posted by love4nature at 01:00| Comment(0) | TrackBack(0) | 趣味の部屋 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。