google-site-verification: google3bd66dd162ef54c7.html

アナログ時計を逆転させる方法の補足説明

 100円ショップのアナログ時計を逆回転させるテクニックは結構試される方が多いようです。具体的な方法については、私のこれまでの記事を追えば判るようにしていますが、すごく判り難くなっています。

 また、市場にはいろんなムーブメントが出回っていて、私の記事と同じに作ってもうまく動かない場合もあるようです。

 これでは良くないので、自分自身の頭の中の整理を兼ねて逆転時計を作る場合の注意点などをまとめてみます。

▼逆転時計のデモ

 以前の記事で使った動画です。できるだけこの時の回路とプログラムで解説したいと思います。なお、プログラムはArduino UNOで動かしています。

 時計は一相パルスモータで動いています。普通の一相モータだと回転方向が決まりませんが、時計の一相モーターでは、静的な磁気回路の中心をずらすことで回転子の停止位置にオフセットが付くようになっています。

 回転子の停止位置にオフセットが付いていればドライブは簡単になります。つまり、駆動するパルス波形を以下のようにすることで、正転/逆転が自在に可能になります。

 ということで、こんな波形でドライブすればOKですが、まだまだややこしい話があるので調整手順を含めて順に解説していきます。

▼駆動パルス波形
波形
 正転の場合は、T1のパルス幅で極性を交互に変えてコイルに通電します。T2を短くすれば高速で動きます。

 逆転の場合は、短時間(T3)パルスを加えた後で極性を逆転したパルスを長め(T4)に通電します。これって、ちょっと手前に引っ張って相手に抵抗させておいて、その力を使っていきなり反対側にひっくり返すような動きになっているのだと思います。

 とにかく時計を正逆自在に動かすには、この図にあるT1からT5まで5種類の時間を決めてやる必要があります。

▼実験用の回路図
逆転時計回路図

 Youtubeの動画の状態の回路図です。動画ではスイッチは無く、ジャンパーピンを手でGNDに挿したりしてますが。

 Arduino UNOの9,10ピンから時計のコイルに接続します。時計は1.5Vの電池で動いているのでArduinoから5Vを加えたら壊れちゃいそうです。また、コイルからのキックバック電圧も怖いので、直列抵抗を入れています。
 この抵抗R1の値は回路図に書いてあるように、あらかじめコイルの抵抗をテスターで測っておいて、コイルに1.5Vが印加されるように計算で求めます。まあ後で調整できるように可変抵抗にしておく手もありだと思います。

 以下、T1からT5までの決定方法を解説します。 調整はデモプログラムを走らせることで行い、値の変更はコンパイル/書き込みで行います。

◆T1の決定方法
 T1はプログラムではcwPulseの値で決めており、9行目の値を変更します。単位はmsで初期値は17msです。
 SW1をGND側に入れてデモプログラムを走らせると0.5秒間隔で正回転パルスが出ます。うまく動かない場合はcwPulseの値を変えます。マージンを見るために正常に動く範囲を確認し、その中心値をT1とします。

 これでT1はOKになったので、残りの値を決定します。そのためにはSW1をオープンの状態で起動した後でGNDに切り替えます。うまくいっていたらYoutubeに投稿した状態で動くはずです。

◆T2の決定方法
 T2はプログラムの49行目のdelay(25);の値として入っています。 単位はmsで初期値は25msです。
 値を小さくすると高速になりますが、最初は誤動作してわけがわからなくなるでしょうから、100msあたりで始めた方がいいです。全体が落ち着いてきたら、値を小さくして高速化します。

◆T3,T4の決定方法
 T3はccwPulse1、T4はccwPulse2で指定します。プログラムの10,11行目です。単位はμsで、初期値はT3=3500μs、T4=12000μsになっています。
 ちゃんと動いているかどうか判り難いので、T5の値を大きくしてから始めるといいでしょう。T5の値は、プログラムの58行目のdelay(50)で50msになっていますが、最初はこれを200msくらいにして調整すると良いと思います。

 何しろココが最大の山場です。T3とT4の最適値は関連性があるような気がしていますが実は私自身も良く判っていません。T3は2000から5000くらいの範囲に最適値があるような気がします。T4は8000から24000μsくらいの範囲に最適値があるような感じです。適当なステップで試行錯誤を繰り返し、その結果をT3とT4のマトリックス上に○×を書くことで、うまく逆転する範囲が見えてくるので、その中心をT3,T4の値としました。

◆T2,T5の設定
 ここまで来たら単発パルス送りは大丈夫な状態になっているはずなので、T2,T5の値を小さくしていって高速化すればOKです。
 以下はここまでの説明に使ったプログラムで、Youtubeに掲載した動画に使ったものです。
/*
  100円ショップのアナログ時計を正転/逆転させる
 Pin8:モードスイッチ
 Pin9,10:時計ステッピングモータコイルへ220Ωを経由して接続
 2013.11.9 ラジオペンチ
 http://radiopench.blog96.fc2.com/
 */
boolean flag=true;                  // 駆動極性フラグ
unsigned int cwPulse = 17;          // 順回転パルス幅 標準は17mS
unsigned int ccwPulse1 = 3500;      // 逆回転パルス幅1
unsigned int ccwPulse2 = 12000;     // 逆回転パルス幅2(値の上限は16383)

void setup() {                
  pinMode(13, OUTPUT);         // 動作表示LED 
  pinMode(9, OUTPUT);          // conect coil thrugh 220Ω
  pinMode(10, OUTPUT);         // coil return
  pinMode(8, INPUT);           // 動作モード設定スイッチ
  digitalWrite(8, HIGH);       // weak pull up pin 8

  while(digitalRead(8)==LOW){  // 8ピンがHIGHになるまで
    cwP();                     // 順回転させて秒針の位置あわせ
    delay(500);
  }
}

void loop() {
  while(digitalRead(8)==HIGH){    // 8ピンがLOWになるまで待つ
  }
  for(int p=5; p<=15; p+=5){      // 適当にデモ運転
    cw(p);
    delay(300);
    ccw(p); 
    delay(500);
    ccw(p);
    delay(300);
    cw(p); 
    delay(500);
  }
  cw(60);
  delay(500);
  ccw(60);
  delay(1000);
}

void cw(int n){                       // 指定パルスだけ順回転
  if(n !=0){
    for(int x = 1; x <=n; x++){
      cwP();
      delay(25);                      // 順回転速度設定
    }
  }
}

void ccw(int n){                      // 指定パルスだけ逆回転
  if(n !=0){
    for(int x = 1; x <=n; x++){
      ccwP();
      delay(50);                      // 逆回転速度設定
    }
  }
}

void cwP(){                           // 順回転パルス発生
  digitalWrite(13,HIGH);              // LED flash
  flag = ! flag;
  if (flag == true) {
    digitalWrite(9, HIGH);            // coil drive foward
    delay(cwPulse);                   // wait 
    digitalWrite(9, LOW);             // coil drive end
  }
  else {
    digitalWrite(10, HIGH);           // coil drive revers
    delay(cwPulse);                   // wait
    digitalWrite(10, LOW);            // coil drive end
  }
  digitalWrite(13,LOW);               // LED flash end
}

void ccwP(){                          // 逆回転パルス発生
  digitalWrite(13,HIGH);              // LED flash
  flag = ! flag;
  if (flag == true) {
    digitalWrite(9, HIGH);            // coil drive foward
    delayMicroseconds(ccwPulse1);     // wait 
    digitalWrite(9, LOW);             // coil drive end

    digitalWrite(10, HIGH);           // coil drive revers
    delayMicroseconds(ccwPulse2);     // wait 
    digitalWrite(10, LOW);            // coil drive end
  }
  else {
    digitalWrite(10, HIGH);           // coil drive revers
    delayMicroseconds(ccwPulse1);     // wait 
    digitalWrite(10, LOW);            // coil drive end

    digitalWrite(9, HIGH);            // coil drive foward
    delayMicroseconds(ccwPulse2);     // wait 
    digitalWrite(9, LOW);             // coil drive end
  }
  digitalWrite(13,LOW);               // LED flash end
}

 以下はお願いですが、100円ショップのアナログ時計の正転逆転駆動可能な条件をまとめてみたいと思っています。
 つまり、実際にうまく動いたT1~T5の値と抵抗値を集めたいと思います。こういう情報を集めることでこれから挑戦される方の参考になると思います。
 情報をお持ちの方はコメントで教えていただくと、他の方の参考になると思います。
 連絡は、以下の情報があると嬉しいです。不明なところは書かなくて結構ですが、私の場合だと、こんな感じになります。

T1=17ms, T2=25ms, T3=3.5ms, T4=12ms, T5=50ms, コイル抵抗=90Ω, R1=220Ω, ポート電圧=5V

【9/17追記】
 皆様から頂いたコメントを記事にまとめました。

Plotclockを作ってみた

 前の記事でPlotclockを作ってみたいと決意表明してから一週間以上経ってしまいましたが、ようやく完成しました。

 Plotclockについてはこちらの資料をご覧下さい。

▼3mmのアクリル板に型紙を貼って
部品の切り出し
 残す部分にハッチング(この場合は緑色の斜線)を入れておきます。細かく分離すると間違い易くなるので、こういう一手間入れておくほうがいいです。

 データーはレーザーカッターか3Dプリンタを使って部品を作ることを想定して作られています。でもそんな物は無いので、うちにあるノコ(糸ノコ、金ノコ、ピラニアソー)を総動員して切り出します。

 ハイテクなツールを使うことが前提の設計で、手作業で切り出すことは想定されていないみたいな配置なので、作業は大変でした。何しろ電動のツールはドリルしか持っていません。せめて両頭グラインダーでもあれば外形の修正とかが楽になったはずなんですが、そういうのも無いのでヤスリを総動員してゴシゴシw。

 あれこれあったけど、とりあえず完成。

▼Plotclock
PlotClock完成

▼後ろ側
PlotClock 裏側
 イレーサーは太いボールペンのキャップを切断して製作。

▼ペンの上下機構
ペンの上下機構

▼Arduinoへの接続方法
PlotClockへの接続
 これは解説ページに書いてある方法です。赤い線が+5Vでサーボの電源,青がGNDで、横方向にハンダでぷよぷよ接続します。信号はデジタルの2,3,4ピンから出ているので、このように小さなユニバーサル基板とピンヘッダを使うと、3チャンネル分のサーボモーター接続コネクタが簡単に出来ます。電源はArduinoから出ている+5Vのピンから取ればOKです。

▼動いている様子

 時計なので本当は1分間隔でしか動かないのですが、編集で動いているところだけを切り出しました。時刻は23:45~23:49までを表示しています。文字の書き順が変なところはご愛嬌、自分で消す動きが何ともけなげです。

 ひとつ500円くらいで手に入るサーボですが、いい仕事しています。

◆製作上の注意点、オリジナルからの変更点などは以下の通りです。
・オリジナル設計では六角ナットを使ったネジ止めで組み立てるようになっていますが、加工が面倒なので接着に変更。
・関節の穴はきっちりと3mmのドリルを使いましょう。実は見つからなかったので3.2mmで穴あけしたらガタが大きくて、作り直すハメに。orz
・文字を消すにはけっこう押し付け力が必要です。ペンの高さは作画時と同じなので、イレーサーの穴底のかさ上げ量を変えて押し付け力の調整が必要でした。ちなみに作図時の押し付け力が強すぎると、ペンが上がる時に変な「はね」が付いてしまいます。
・キャリブレーションの方法はArduinoのスケッチに書かれていますが、ポイントは。
 -#define CALIBRATIONをコメントアウトすると本番モードで動く。
 -キャリブレーションモードではサーボのホーンが水平と垂直位置に交互に動くようにパラメーターを調整。
  #define SERVOFAKTOR 650 // サーボ感度 original value = 620
  #define SERVOLEFTNULL 1980 // サーボ原点 original value = 1900
  #define SERVORIGHTNULL 900 // original value = 984
・timeライブラリのインクルードが必要。
・数字の1の形が7と紛らわしいので、直線に変更。
・時刻はtime関数で設定。この関数にはNTP、RTC、GPSを参照した時刻合わせ機能があるらしいのですが、実際にはハードウェアが無いので自動時刻合わせは出来ません。時刻はプログラムの中で決め打ちした値が開始時刻になります。
・サーボとアームはサーボホーンをうまく使って2点ネジ留めで固定。

 機械加工は大変でしたが、制御系はArduinoなので、こちらは得意な領域なので比較的スムーズに進めることができました。

 これで経験値を一つ上げることが出来、サーボによる位置決めが出来るようになりました。Plotclockのアイディアと製作に必要な全ての情報を提供して下さったjooさんに感謝します。

tag : 手書き 時計 サーボ

カレンダー
07 | 2014/08 | 09
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31 - - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード