週刊 パタパタをArduinoで動かしてみた

電子工作の素人でエアラインファンの人が、ジャンク市で手に入れたかつて空港で使われていた行先表示板「パタパタ」を動かす妄想にとらわれてArduinoやステッピングモーターにお小遣いをつぎ込んでいく趣味の記録です。原則土曜日更新。

このところエイプリルフールのGoogleのパタパタネタとか、大人の科学のパタパタ電波時計とかでお茶を濁してきましたが、とりあえず空港のパタパタも一段落させたいと思い「空港のパタパタがスイッチを押すと動く」というものを作りました。

前回は、Arduinoにケースをつけて、パタパタと一体化させましたが、それにプラスして、スイッチを複数つけてパタパタを自在に(?)操作できるようにしています。

スイッチを作るにあたっては、こことかここを参考にしました。

こんな外観をしています。
58


Arduinoから引っ張ってきている3Vの電気を並列につなげて、それぞれGNDに逃がす途中でArduinoのDIGITAL INに値を返すようにしています(という書き方でいいのかな?)
スイッチは4つで、それぞれ下記のような動きをするように設定しています。

46

・タクトスイッチ(左):押し続けている間、フリップが動く。
・タクトスイッチ(右):フリップが一周して、一つ先のフリップで止まる
・トグルスイッチ(左):スイッチOnの時の間、フリップが動く。(タクト左と同じプログラム)
・トグルスイッチ(右):トグルスイッチ(左)と同じ

プログラムはこんな感じです。相当適当なので、何の参考にもならないと思いますが…

#include
#include // ピン定義。
#define PIN_SPI_MOSI 11
#define PIN_SPI_MISO 12
#define PIN_SPI_SCK 13
#define PIN_SPI_SS 10

void setup()
{ delay(2000); // ピン設定。
pinMode(2,INPUT) ;
pinMode(3,INPUT) ;
pinMode(4,INPUT) ;
pinMode(5,INPUT) ;
pinMode(PIN_SPI_MOSI, OUTPUT);
pinMode(PIN_SPI_MISO, INPUT);
pinMode(PIN_SPI_SCK, OUTPUT);
pinMode(PIN_SPI_SS, OUTPUT);
digitalWrite(PIN_SPI_SS, HIGH);
//SPI通信開始
SPI.begin();
// シリアル通信。
Serial.begin(9600);

SPI.setDataMode(SPI_MODE3);//SCKの立ち上がりでテータを送受信&アイドル時はpinをHIGHに設定 SPI.setBitOrder(MSBFIRST);//MSBから送信

//前のコマンドの引数を消去
L6470_send(0x00);//nop
L6470_send(0x00);
L6470_send(0x00);
L6470_send(0x00);
//デバイスリセットコマンド
L6470_send(0xc0);//ResetRevice
L6470_setup();//L6470を設定
}

void loop(){
//以下に動きを書くとその通りに動く
int i = 0; //一度押すと、61枚送るスイッチ
if (digitalRead(2) == HIGH) { //2番ピンとつながってるスイッチがonになったら下記を実行
while(i < 61){//ここの数字ぶんパタパタする。
L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転L6470_send(0x00);//SPD値(20bit)ここから下の3行でスピードの20bitを表現しているらしい
L6470_send(0x20);//ここの数字を下げると遅くなる
L6470_send(0x00); delay(133);//この数字の時間だけ動作する i++;
}
L6470_send(0xB8);//HradStop_急停止
}

//押している間、パタパタする
if (digitalRead(3) == HIGH) {//3番ピンとつながってるスイッチがonになったら下記を実行
while(i < 1){
L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転
L6470_send(0x00);//SPD値(20bit)ここから下の3行でスピードの20bitを表現しているらしい
L6470_send(0x20);//ここの数字を下げると遅くなる
L6470_send(0x00); delay(133);//この数字の時間だけ動作する i++; }
L6470_send(0xB8);//HradStop_急停止 }

//押している間、パタパタする
if (digitalRead(4) == HIGH) {//4番ピンとつながってるスイッチがonになったら下記を実行
while(i < 1){ L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転 
L6470_send(0x00);//SPD値(20bit)ここから下の3行でスピードの20bitを表現しているらしい
L6470_send(0x20);//ここの数字を下げると遅くなる
L6470_send(0x00); delay(133);//この数字の時間だけ動作する i++; }
L6470_send(0xB8);//HradStop_急停止}

//押している間、パタパタする
if (digitalRead(5) == HIGH) {//5番ピンとつながってるスイッチがonになったら下記を実行
while(i < 1){ L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転 
L6470_send(0x00);//SPD値(20bit)ここから下の3行でスピードの20bitを表現しているらしい
L6470_send(0x20);//ここの数字を下げると遅くなる
L6470_send(0x00); delay(133);//この数字の時間だけ動作する i++; }
L6470_send(0xB8);//HradStop_急停止
 }
//ここまで

}

void L6470_send(unsigned char add_or_val)
{ digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(add_or_val); // アドレスもしくはデータ送信。
digitalWrite(PIN_SPI_SS, HIGH); } void L6470_setup(){ //最大回転スピード
L6470_send(0x07);//レジスタアドレス L6470_send(0x00);//値(10bit),デフォルト0x41
L6470_send(0x30); //モータ停止中の電圧設定 L6470_send(0x09);//レジスタアドレス
L6470_send(0x20);//値(8bit),デフォルト0x29
//モータ定速回転時の電圧設定
L6470_send(0x0a);//レジスタアドレス
L6470_send(0x40);//値(8bit),デフォルト0x29
//加速中の電圧設定
L6470_send(0x0b);//レジスタアドレス
L6470_send(0x40);//値(8bit),デフォルト0x29
//減速中の電圧設定
L6470_send(0x0c);//レジスタアドレス
L6470_send(0x40);//値(8bit),デフォルト0x29
//フ ル ス テ ッ プ,ハ ー フ ス テ ッ プ,1/4, 1/8,…,1/128 ステップの設定
L6470_send(0x16);//レジスタアドレス
L6470_send(0x00);//値(8bit)
}


回路図的な物はこんな感じ。回路図を描くツール、Fritzingを初めて使ってみました。
130504_bread


これで、とりあえずですがパタパタを動かして楽しむことはできるようになりました。





課題は

・スイッチを押し続けるとフリップを送り続けてしまうが、「押しつづけていても1枚だけめくって止まる」という仕組みを作りたい

・正確に1周するようにしたい(現在は時間で歯車を動かしているため、どうしてもずれが生じる)

・12Vの電源アダプタが2個必要なのがかっこわるい

・大人の科学の電子時計みたいに、時を刻むパタパタにしてもいいかも

・見た目にブレッドボードだったり、配線がぐちゃぐちゃでかっこわるいので、もう少しきれいにしたい

などなど。山積みです。
最後のやつ以外は、独力では解決できないかもしれませんが、またいろいろと調べつつ、地味にやって行こうと思います。

 次回は外観を少しきれいにしてみます。

   

このGWは「大人の科学マガジン」付録のパタパタ電波時計を作っていました。

 24
表紙。ミッドセンチュリー風です。

0010
 こちらが付録のパタパタ電波時計。裏面にフラップのシートが入ってます。

23 
大きさの目安も掲載されています。これいいですね。
最初に見た印象は、ちょっと大きいかな、でした。

42
組み立て手順書に従って作っていきます。
作業時間は正味90分くらいでした。左右の区別をするところが2、3あるので、そこだけ注意すればそんなに大変なところはないかと思います。

33
モーター。私が使ったようなステッピングモーターではなく、
普通のミニ四駆とかを動かすようなモーターです。
ギアの組み合わせによって回転比率を変える方式を採用しているようです。
市販のパタパタ時計もこういう仕組みなのかな?

41
基盤の写真を取り忘れたので、組み上がったものを撮影(見づらいですが…)
チップらしいものが見当たりませんが、真ん中に黒くカバーされた部分があり、そこにマイコンや電波の受信チップがあるようです。電波時計って最近はこなれてきているんですね。
Leaf Clockという名前が基盤に書かれていますが、詳細はわかりませんでした。
時刻合わせ等を行うボタンはタクトスイッチが使われていて、外側の白いボタンとつながっています。

47
取り付けるモーターには左右の別があります。配線が青い方が右。

47
パタパタのフリップを差し込むギアも左右があります。すごく見づらいですが歯車にL,Rと書いてあるので、注意して組み立てましょう。

39
フリップは手でシートからはがせます。分と時のシートがあるので間違えないように。
ちなみにこのシート、無地のものが5枚500円で追加購入できるそうです。
結構取り外しが面倒なので、どれだけやるかな…という気はしますが。
受付は定額小為替のみの対応、というアナログっぷりが「そこまでして欲しい人にしかお勧めしません!」という意図が感じられて良いです。

34
こうやって1枚1枚取り付けていきます。左右水平に取り付けないといけません。
最初にずれていると、最後の最後で間違いに気づいてもだえることになりますので注意。
単純作業ですがフリップがちょっと外れやすいので、あせらずゆっくりと。

29
完成です。電池を入れると、電波を受信して自動的に時刻が合います。
窓際に置くのが吉。

39 
余談ですが電池ボックスはカバーがなくむき出しです。


動いている動画はこちら。
「パタッ」という音は結構大きめです。しかし空港のパタパタは風圧を感じるほどパタパタしますし、 この商品はパタパタのパタパタたるところを感じるための物ですから、多少うるさくてもそこがいいんですきっと。

ということで、パタパタ電波時計、時間もとても見やすくていいです。ご自宅に一台、いかがでしょうか!


大人の科学マガジン本誌では、前述の白紙フリップを使用して、鉄拳さんが「パタパタ漫画」を描いた様子が掲載されています。なかなか根気がいりそうですがオリジナルのパタパタも面白そうですね。
飛行機ネタでは何が考えられるかな…

  
 

以前ブログでもちょっとだけ書いた、雑誌「大人の科学」にパタパタ時計の付録がつく件、
発売日がいつの間にか4/18に決まっていました。

 

早速amazonで予約注文しました。
今日(4/20)届くはずなのですが…どんな仕組みになっているのかな?

「春発売」 とだけ書かれていてしばらく発売日が決まらなかったところを見ると、
結構開発が大変だったのでしょうか?

空港パタパタのほうは、思ったところで止めるのがうまく行かない日々が続いていてちょっと挫折しているので、何か参考になれば良いと思っているのですが…

 面白い記事も載っているといいなー

 

↑このページのトップヘ