Arduino自動カーテンオープン目覚まし時計

「Arduino自動カーテンオープン目覚まし時計」の編集履歴(バックアップ)一覧に戻る
Arduino自動カーテンオープン目覚まし時計」を以下のとおり復元します。
*計画
朝になったら自動でカーテンを開ける目覚まし時計を作りたい。
カーテンの端っこにひもを引っかけて朝になったらタイマーが作動してひもを巻き取りカーテンが開くという仕組み。

**材料
-[[Arduino2009>http://www.amazon.co.jp/gp/redirect.html?ie=UTF8&location=http%3A%2F%2Fwww.amazon.co.jp%2Fs%3Fie%3DUTF8%26x%3D12%26ref%255F%3Dnb%255Fss%255Fgw%26y%3D28%26field-keywords%3Darduino%26url%3Dsearch-alias%253Daps&tag=arduino-22&linkCode=ur2&camp=247&creative=7399]]
-[[モータードライバ BD6211F>http://www.switch-science.com/trac/wiki/BD62xx-Basic]] ←いただきもの
-[[6速ギヤボックスHE>http://www.amazon.co.jp/gp/product/B00061HIEY?tag=arduino-22]]
-リアルタイムクロック
-ブレッドボード
-ひも&フック(カーテンを引っ張る)
-円柱ゴム(ひもを巻き取る)
-木の板&ねじ
-抵抗とかコンデンサとか配線材とか

**消費電流
RE-260 http://www.mabuchi-motor.co.jp/motorize/branch/b_0100.html
適正電圧適正負荷で700mA
負荷によって変わるだろうから動作させながら実測する!

**[[6速ギヤボックスHE>http://www.amazon.co.jp/gp/product/B00061HIEY?tag=arduino-22]]
広いギヤ比に組み替えられるのでとりあえずこれにした。
クラッチギアが付いているので大きい負荷がかかっても少し安心。

**完成品は
-mega88 Arduino内蔵クロックで動かす。
-過電流で電源を止めるやつをつける。ポリスイッチ?

**電源
-開発時はUSB 5V
-ACアダプタ
-5V or 3V
 http://www.switch-science.com/trac/wiki/BD62xx-Basic
 モーターの定格電圧が信号系(マイコン)の電源電圧よりも低い場合は困ってしまいます。
 モーターによっては、PWMで一定のデューティよりも上げないように注意すれば大丈夫な場合があります。
arduinoは3Vで動くのか?
-モータとArduinoの電源が同じでOK?

**リアルタイムクロック
-秋月の時計IC
-バッテリバックアップしたい。

**ユーザインターフェイス
-正回転/逆回転ボタン
-タイマー時刻の設定/ロータリエンコーダ?
-7セグ時計表示

**巻き取り終了の検出
マイクでクラッチの音?
一定の秒数の作動でよい?

*(1)ざっと組み立て
-ギアボックス
-巻き取り部取り付け
-ギアボックス&ブレッドボードを板に固定
-Arduinoを固定
-モータドライバにピン取り付け

*(2)モータードライバの実験(2009/4/18)
-正転/逆転を実験
-スピード&パワーを確認
-消費電流を確認

スイッチサイエンスさんのスケッチをちょっと改造で動作OK。
http://www.switch-science.com/trac/wiki/BD62xx-Basic
 int FIN = 5;
 int RIN = 6;
 int LED = 13;
 int OFFSET = 0.7 * 256 / 5;       // analogに255を出したら5V => 0.7V
 int MAX = 3.0 * 256 / 5 - OFFSET; // RE-260なので3V 3.0V-0.7V = 2.7V
 int degree10 = 0;
 int i;
 
 void setup() {
  Serial.begin(300);
  pinMode(FIN, OUTPUT);
  pinMode(RIN, OUTPUT);
 
  pinMode(LED, OUTPUT);
  for(i=0; i<5; i++){
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(LED, LOW);
    delay(200);
  }
 }
 
 void loop() {
  delay(10);
  degree10 += 3;
  degree10 %= 3600;
  long v = int(sin(degree10 * 2 * PI / 360 /10) * MAX);
  Serial.println(v);
  if (v > 0) {
    analogWrite(FIN, v + OFFSET); // v(0V..2.7V) OFFSET(=0.7V) なので 0.7V..3.0V
    analogWrite(RIN, 0);
  } else
  if (v < 0) {
    analogWrite(FIN, 0);
    analogWrite(RIN, OFFSET - v); // v(-0V..-2.7V) OFFSET(=0.7V) なので 0.7V..3.0V
  } else {
    analogWrite(FIN, 255);
    analogWrite(RIN, 255);
  }
 }

正回転・逆回転をなめらかに繰り返す。
OFFSETは回転開始の最低電圧。
 正:0.7V => 0.8V => ... => 2.9V => 3.0V => 2.9V => ... 0.7V
 逆:0.7V => 0.8V => ... => 2.9V => 3.0V => 2.9V => ... 0.7V
を繰り返す。

**ノイズ?
たぶんモーターからのノイズのせいでシリアル通信が途中でとぎれてしまう。
まともにデバッグできないと困るので対策が必要かもしれない。
http://www.picfun.com/motorframe.html
モーターの端子と金属ケースの間にコンデンサをいれるといいらしい。

*(3)リアルタイムクロック

*(4)7セグ時計

*(5)ロータリエンコーダ

*(6)バッテリバックアップ

*(7)Arduino mega88 

復元してよろしいですか?

ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。