2016年1月4日月曜日

秋月AE-ATmegaマイコンボードとUSBシリアルコンバータ(CP2102)の接続




秋月の基板AE-ATmega168/328用マイコンボード(I/Oボード)を使ってarduino互換機をよく作るのですが、それぞれに秋月のUSBシリアルコンバータAE-UM232Rは用意は経済的にきつい。
取り外せるようにピンソケットに取り付けるとシールドと干渉する。
1個を使いまわしていちいち取り外すのは面倒、足が曲がったり折れやすい。

そこでebayで購入したコンバータ(200円前後)を使う時の接続例です。
購入したのはこれ。

 CP2102を使ったものです。macユーザーには評判がよろしくないようですが。



AE-ATmegaボードのページにある経路図の一部を実態に合わせて配置したもの。



◆コンバータのTXD、RXD、DTRをAE-UM232Rのピンソケットに接続する場合(電源の配線は省略)
 X4はショート(クローズ)する。



◆コンバータのTXD、RXD、DTRをX4に接続する場合
(電源の配線は省略)

X4に接続するときは保護抵抗(R3、R4)は機能しません。
 
保護抵抗について
熾火研究所*電子工作室 Japanino の忘れ物、保護抵抗をつけてみた

DTRを直接X4の5に接続するとコンデンサ(C2)が機能しないので、スケッチ書き込み時のリセットが働かず、失敗します。
別途0.1μFのコンデンサが必要になります。






2016年1月2日土曜日

スマホ・MVNO:b-mobileからIIJmioに乗り換えた時のメモ





b-mobileのMVNOでスマホを使ってきましたが、IIJmioに乗り換えた時のメモです。
MNP転出は3,000円。
SIM返却は自己負担の郵送。返却しなかった場合、請求があるかなど不明。


音声通話が要るので「IIJmio音声通話機能付きSIMみおふぉん」
ミニマムスタートプランだと1,600円(データ3GB 900円+音声通話機能 700円)

・余ったデータ量は翌月に繰り越し・おサイフケータイは正式には対応していないが、ネット情報では利用実績あり。
・楽天でんわを引き継ぐ手続き不要
(電話番号にプレフィックスをつけてダイアルすることで20円/30秒→10円/30秒)
・みおふぉんダイアルも同等のサービス 転出などをすると使えなくなる・クーポン(データ通信残量)がない、またはOFF(低速モード)にして3日366MBの通信で通信規制となる場合がある
・SIM返却は自己負担の郵送だが、返却しなくても請求等は発生しないとFAQに記載あり・下り最大225Mbps、上り最大50Mbps、クーポン非適用時最大200kbps
・通信速度は速いこともあれば遅いこともあるので、あまり重視しない。

その他は大きく異ならない


◆IIJmioの手続き
IIJmioのHPで手続きを開始すると3,000円。
amazonからパッケージ(エントリーコード)を購入(SIM無し)するなら980円でOK。
SIMは手続き後に郵送。

SONY SO-04EはマイクロSIM。
MNP予約番号の申し込み時、SIMに書いてある番号の入力が必要だった。
4営業日程度かかると書いてあったが、翌日メールでMNP予約番号が来た。
IIJmioのページで手続き、amazonで購入したエントリーコード入力。
メールで画像のアップロードのURLが送られてくるので、免許証などの身分証明書の写真をアップロード。
翌日 認証完了。1週間程度でSIMが届く予定。



◆IIJmio課金開始時期について

https://www.iijmio.jp/hdd/miofone/flow.jsp
・ お届け予定日が「課金開始日」になります。利用開始月の月額料金と音声通話付帯料は日割です。
・ バンドルクーポンのデータ量も日割になります。

https://help.iijmio.jp/app/answers/detail/a_id/67/related/1
【データ通信専用及びSMS機能付きSIMカード】
サービスのお申し込み時にお客様にご指定いただいたSIMカード配達希望日(課金開始日)から発生します。
配達希望日をご指定いただいていない場合は、最短配送可能日から発生します。
【音声通話機能付きSIMカードをMNP転入にてお申し込みいただいた場合】
SIMカードの到着後、開通手続きを行われた日から発生します。


◆b-mobile課金終了月について

b-mobileの終了月は日割りにならない。
料金月(課金区切り)の締め日少し前に、開通するようにすると無駄がないかと。
1日でも新しい料金月が始まると1ヶ月分課金されるようですが、通話オプションは日割り計算されるようです。

投稿に間違い、投稿後の規約変更もありえます
通信事業者の課金期間などは必ず御自身で御確認ください


認証の翌日、発送したとメールが届いた。
2日後にSIMが到着。

b-mobileの料金月末日3日前の週末に自宅でMNP手続き。
自動応答の電話にかけて、DTMFを送信する(プッシュボタンを押す)だけ。
数時間で開通とのことで旧SIMを刺した状態で放置。

1時間たたずにネットワークが切れていたので、新SIMに交換してandroidのモバイルネットワークの設定を変更。

無事開通

b-mobileの会員ページにログインして、解約ボタンを押して乗り換え完了。

IIJmioは、1年以内の解約は解除調停金。(12,000円~1,000円)

おサイフケータイ(edy)は、ネット情報通り問題なく使えてます。
が、保証はしません。





2015年11月29日日曜日

デジカメ用LEDリングライトの自作



↑バージョン2

↑バージョン1

リングライトは、カメラに取り付けるこういうもの(google画像検索)です。
LEDは、 車用ルームランプ(12V)として売られているものをebayで購入。
amazonでも安いですが、ebayならもっと安く購入できます。
色々なリスクは有りますが・・・(ebay「led car bulb」で検索


購入したのはこれ。10個でたったの2.99ドル、送料込み。
中国発送で、オーダーしてから10日ほどで届きました。


端子の金属パーツはハンダゴテで取り外し。


DVD-Rを50枚買った時のスピンドルケースのサイズが丁度良さそうなので使います。


8個ぐらいでいいかなと。
スピンドルケースへの固定はホットボンド(グルーガン)を使用。


車用LEDパーツなので電源は12V、すべて並列につなぎます。
上記配置に変更しましたが、出っ張りを引っ掛けるとホットボンドがすぐに剥がれます。


試験点灯。まぶしい!



ボルト、ナット、スペーサー、金属プレートなどを組み合わせて、三脚用ネジ穴で固定できるように。



カメラの三脚用ネジのサイズは1/4インチ(約6mm)。
ミリ規格の6mmのボルトを無理にねじ込まないでください。壊れます。

Q&A カメラネジの規格について教えて欲しい。
http://www.velbon.com/jp/support/faq.html

近くのホームセンターに1/4インチボルトはありましたが、ちょうどいい長さが無かったので、 ディスクグラインダーでカットしました。
カットした時のバリとカットした部分のねじ山がずれて、スムーズにナットに入りにくいです。
カメラ側のネジを削ってしまわないように、カットした時のバリはヤスリなどで綺麗に整えましょう。

金属プレートに6.5mmのドリルで穴を開けて、1/4インチボルトが通るように。
スリットの入った金具を使ったので、レンズの伸び縮みに合わせて調整可能。

1/4インチボルトの蝶ボルト(ツマミ付きボルト)があれば、しっかりと固定できます。
エポキシパテなんかで、つまみを作ってもいいかも。
3Dプリンターがあれば作るんだけどなぁ。


 

カメラはフジフィルムのFinePix HS30EXR。






蛍光灯+LEDリングライトで撮影 (ホワイトバランス・自動)
レンズと被写体の距離は5cmぐらい
見た目以上に青白くなってしまいました。

蛍光灯+LEDリングライトで撮影 (ホワイトバランス・マニュアル)
色味が自然な感じに。
LEDがむき出しなので、8方向の影が重なりあってます。


蛍光灯のみで撮影 (ホワイトバランス・自動)
レンズと被写体の距離は5cmぐらい

蛍光灯+フラッシュで撮影 (ホワイトバランス・自動)

蛍光灯+LEDリングライトで撮影 (ホワイトバランス・自動)

蛍光灯+LEDリングライトで撮影 (ホワイトバランス・マニュアル)
最初の2枚に比べ影が柔らかくなり、下にある部品にも光が回っているのがわかります。



金属製の腕時計を撮影してみましたが、全体につやがあると反射しまくり、反射がうるさい感じ。うまく撮れませんでした。

顔を写すと一応キャッチライトが入りました。この場合円形ではなく8組のLEDですが。


ドーナツ型の白色アクリルボードをLEDの前に配置すると、8方向の影がもっと柔らかくなるかも?

2015/12/08追記
ネジ部分が少しの力で曲がってしまう、ズームレンズの長さに合わせるのがめんどくさい、カメラを置きにくいなど、不満あり。
ステップアップリングにLEDを取り付けるバージョンに作り直しの予定。

2015/12/20追記
ebayで注文したステップアップリングが届きました。
58-82mm、0.99ポンド(送料込み約180円)


100円ショップのフォトフレームの背板を使います。
これは柔らか目のMDFといった感じです。
プラ板とプラネジは何かに使えるかな。


 
リューターのダイアモンドカッターで切り出し、紙やすりビットで滑らかにしました。
リューター用丸のこ刃があればそっちの方が作業しやすいかも。

切り出したリングをホットボンドでステップアップリングに取り付け、ホットボンドでLEDを固定しました。

試験点灯。撮影のために供給電圧を下げています。

以下、テスト撮影



金具を集める必要もなく作成が楽かと思います。
撮影時のカメラの置きやすさ、取り外してからの収納も楽になりました。
ズーム時の調整も不要。
バージョン1はちょっとした負荷でボルト部分で曲がりましたが、そのようなこともなく良いです。



2015年3月22日日曜日

ニコ動技術部イベント「NT京都2015」へ行ってきました




ニコニコ動画技術部イベント「NT京都2015」の見学をしてきました。
ニコニコ技術部ラベルの記事はこちら
他地域でのNTなどの情報はこちら


撮った写真をpicasaにアップロードしました。
写真とレールガン発射動画です。
撮り忘れ、ごめんなさい。
https://picasaweb.google.com/100871806871046134452/NT2015322




技術部、NTの紹介目的のブログ、動画や写真の補完などにお使いください。
ここへの報告は要りませんが、あると嬉しいです。

ファイルサイズの関係から1920x1440に縮小しております。




初体験のOculus Riftに感動。目の前にミクですよ。


Oculus Rift+ロボットの組み合わせや、Nゲージはお子さんにも大人気


江戸、明治時代の立版古をシャドーボックス技術でアレンジ


4回目の見学なのにまだ未体験のプラネタリウム(去年の写真)


みなさんおつかれさまでした。来年も楽しみにしています。









2015年3月14日土曜日

arduinoで3x3x3 LEDキューブを作ってみる






LEDキューブを作ってみました。
youtubeには、フルカラーLEDや、大量のLEDを使ったものの動画がたくさんありますが、手始めに3x3x3から。
27個のLEDを制御しないといけないので、ダイナミック点灯しなければなりません。
LEDに9本、段の選択に3本のIOピンを使います。

UNOで4x4x4以上なら、シフトレジスタやLEDドライバICが必要になってきますね。
RX、TXも使えば、ギリ4x4x4もできるかも?
でもatmega328Pの最大電流200mAも考慮しないといけなくなります。
3x3x3がお手軽でいい。

このサイズであれば、arduinoシールドに収まります。


LEDの電流を20mAで計算するとトランジスタ1815では定格をオーバーするので、NchMOSFET 2N7000を使いましたが、手持ちのLEDで220Ωならギリギリ1815でもいけてたはず。
段ごとのFETはPWMを使えるピンにつなぎましたが、以下のスケッチではPWMを使っていません。

使ったLEDは3mm、間隔は約18mm
ダンボールに穴を開けて差し込みハンダ付けします。
基板は秋月のarduino用ユニバーサル基板

アノードは2箇所、カソードは1箇所で曲げ

カソードは全部接続できれば、つなぎ方はなんでもOK
アノードと接触しないように

3段分作り

上下のアノード同士を接続
 

電流制限抵抗を隙間から差し込むのは苦労します

各段からGNDを伸ばしFETに接続
スケッチでは1段のLEDをこの写真↑の角度から見て
678
345
012 と割り当てています。led[0]は左下のLEDが接続されているピン番号を示す。
level[]で各段のFETを接続されているピン番号を示す。level[0]は下段。

完成

基板の空きにatmega328P乗せられそう。



// 3x3x3 LED cube
//     http://cranberrytree.blogspot.jp/2015/03/arduino3x3x3-led.html
//         2015/3/14    by cranberry

const byte led[9]    = {3, 2, 8, 4, 5, 7, A2, A3, A1};//0~9番LEDが、どのピンにつながっているのか
const byte level[3]  = {11, 10, 9};                   //例)level[0]は下段のFETをONにするピン番号
bool state[3][9]     = {};                            //各LEDのON/OFFを保存

void setup(){
  Serial.begin(9600);
  for(byte i = 0; i < 9; i++){         // LEDを接続したピンの初期化
    pinMode(led[i], OUTPUT);
    digitalWrite(led[i], LOW);
  }
  for(byte i = 0; i < 3; i++){         // FETを接続したピンの初期化
    pinMode(level[i], OUTPUT);
    digitalWrite(level[i], LOW);
  }
  randomSeed(analogRead(0));
}

void loop(){
  all(1000);
  updown(5000);
  wall(5000);
  cycle(5000);
  random_poll(5000);
  random_3(5000);
  random_2(5000);
  random_led(5000);
}

void reflect_state(int val){       // state[][]の内容に従ってLEDをON/OFF   val:フレーム数
  int j = 0;
  while(j < val){
    for(byte z = 0; z < 3; z++){
      for(byte num = 0; num < 9; num++){
        digitalWrite(led[num], state[z][num]);
      }
      digitalWrite(level[z], HIGH);
      delay(1);
      digitalWrite(level[z], LOW);
    }
    j += 1;
  }
}

void init_state(){
  for(byte z = 0; z < 3; z++){     // 変数の初期化
    for(byte i = 0; i < 9; i++){
      state[z][i] = 0;
    }
  }
  for(byte i = 0; i < 9; i++){     // LEDを接続したピンを全部LOW
    digitalWrite(led[i], LOW);
  }
  for(byte i = 0; i < 3; i++){     // FETを接続したピンを全部LOW
    digitalWrite(level[i], LOW);
  }
}

void updown(int dur){              // dur:実行する時間 ms
  init_state();
  unsigned long st = millis();
  char z = 0;
  char a = 1;
  while(millis() - st < dur){
    for(byte i = 0; i < 9; i++){
      state[z][i] = 1;
    }
    reflect_state(50);
    for(byte i = 0; i < 9; i++){
      state[z][i] = 0;
    }
    z += a;
    if(z == 3){
      a = -1;
      z = 1;
    }
    else if(z == -1){
      a = 1;
      z = 1;
    }
  }
}

void wall(int dur){              // dur:実行する時間 ms
  init_state();
  unsigned long st = millis();
  char cnt = 0;
  char a = 1;
  while(millis() - st < dur){
    for(byte z = 0; z < 3; z++){
      if(cnt == 0){
        state[z][0] = 1;
        state[z][3] = 1;
        state[z][6] = 1;
      }
      if(cnt == 1){
        state[z][1] = 1;
        state[z][4] = 1;
        state[z][7] = 1;
      }
      if(cnt == 2){
        state[z][2] = 1;
        state[z][5] = 1;
        state[z][8] = 1;
      }
    }
    reflect_state(50);
    init_state();
    cnt += a;
    if(cnt == 3){
      cnt = 1;
      a = -1;
    }
    if(cnt == -1){
      cnt = 1;
      a = 1;
    }
  }
}

void cycle(int dur){              // dur:実行する時間 ms
  init_state();
  unsigned long st = millis();
  while(millis() - st < dur){
    byte num[8] = {0, 1, 2, 5, 8, 7, 6, 3};
    for(byte i = 0; i < 8; i++){
      digitalWrite(led[ num[i] ], HIGH);
      for(byte z = 0; z < 3; z++){
        digitalWrite(level[z], HIGH);
        delay(15);
        digitalWrite(level[z], LOW);
      }
      digitalWrite(led[ num[i] ], LOW);
    }
  }
}

void all(int dur){              // dur:実行する時間 ms
  init_state();
  unsigned long st = millis();
  for(byte num = 0; num < 9; num++){
    digitalWrite(led[num], HIGH);
  }
  while(millis() - st < dur){
    for(byte z = 0; z < 3; z++){
      digitalWrite(level[z], HIGH);
      delay(1);
      digitalWrite(level[z], LOW);
    }
  }
}

void random_led(int dur){              // dur:実行する時間 ms
  init_state();
  unsigned long st = millis();
  while(millis() - st < dur){
    for(byte z = 0; z < 3; z++){
      for(byte i = 0; i < 9; i++){
        state[z][i] = random(2);     // 0 or 1
      }
    }
    reflect_state(40);
  }
}

void random_poll(int dur){              // dur:実行する時間 ms
  init_state();
  unsigned long st = millis();
  while(millis() - st < dur){
    byte num = random(9);
    int j = 0;
    digitalWrite(led[num], HIGH);
    while(j < 30){
      for(byte z = 0; z < 3; z++){
        digitalWrite(level[z], HIGH);
        delay(1);
        digitalWrite(level[z], LOW);
      }
      j += 1;
    }
    digitalWrite(led[num], LOW);
  }
}

void random_2(int dur){
  init_state();
  unsigned long st = millis();
  while(millis() - st < dur){
    byte num = random(9);
    byte z = random(3);
    state[z][num] = 1;
    reflect_state(20);
  }
}

void random_3(int dur){
  init_state();
  unsigned long st = millis();
  while(millis() - st < dur){
    byte num = random(9);
    byte z = random(3);
    state[z][num] = 1;
    reflect_state(20);
    state[z][num] = 0;
  }
}





参考にしたスケッチはないですが、うまく書かないと明るさとちらつきのバランスがうまくいかないですね。
速度を上げる方法として、digitalWrite();ではなく、PORTレジスタを直接書き換える方法もあるようですが・・・




環境:arduinoUNO、arduinoIDE1.6.0、win7(64)