Tomiya's blog (3DCG & Photo etc.)

 
 写真やCGを中心に、雑談、気になった物を追加していきます。

arduino + Wiiリモコン 1.

要約
arduinoという規格を習得しようとしている。
サンプルコードのコピー&ペーストだけでは気分がナエる。
そこで、ヤル気と興味持続のため、オリジナル制御のラジコンを開発した
1301.jpg

プログラムは下記の通り、TA7291Pの配線はGoogle先生へ
接続はプログラム内のpinMode参照
他、#include でA4,A5がI2C接続
必要ファイルなどはソース内にURLを記載


//ここから
//USB Host Shield 2.0, Bluetooth(iBUFFALO BSBT4D09BK), LCD(AE-AQM0802 ,Wiiリモコン
#include <SPI.h>
#include <Wii.h> //https://github.com/felis/USB_Host_Shield_2.0
#include <usbhub.h>
#include <Wire.h>
#include <ST7032.h> //http://ore-kb.net/archives/195
ST7032 lcd;
USB Usb;
BTD Btd(&Usb);
WII Wii(&Btd, PAIR);
bool printAngle;

void setup() {
lcd.begin(8, 2); //http://akizukidenshi.com/catalog/g/gK-06795/
lcd.setContrast(27);
pinMode(3, OUTPUT); //PWM
pinMode(6, OUTPUT); //PWM
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

if (Usb.Init() == -1) {
}
lcd.setCursor(0, 0);
lcd.print(" PUSH ");
lcd.setCursor(0, 1);
lcd.print("PB 1+2");
}

void loop() {
Usb.Task();
if (Wii.wiimoteConnected) {
if (Wii.getButtonClick(HOME)) {
Wii.disconnect();
}
int Pitch = Wii.getPitch() - 8;//8は水平補正
int Roll = Wii.getRoll();
int R = 0;
int L = 0;
int AX = 0;
AX = constrain( map(Roll, 135, 180, 0, 255), 0, 255 );

if (Pitch <= 180) {
R = constrain( map(Pitch, 135, 180, 0, 255), 0, AX );//45度を0-255出力
L = AX;
}
else if (Pitch > 180) {
L = constrain( map(Pitch, 181, 226, 255, 0), 0, AX );
R = AX;
}
if (Wii.getButtonPress(TWO)) {
analogWrite(3, L );
analogWrite(6, R );
digitalWrite(2, HIGH);
digitalWrite(5, HIGH);
}
else if (Wii.getButtonPress(ONE)) {
analogWrite(3, (L * 0.6 ));
analogWrite(6, (R * 0.6 ));
digitalWrite(1, HIGH);
digitalWrite(4, HIGH);
}
else if (Wii.getButtonPress(UP)) {
analogWrite(3, 180);
digitalWrite(1, HIGH);
analogWrite(6, 180);
digitalWrite(5, HIGH);
}
else if (Wii.getButtonPress(DOWN)) {
analogWrite(3, 180);
digitalWrite(2, HIGH);
analogWrite(6, 180);
digitalWrite(4, HIGH);
// }
// else if (Wii.getButtonClick(LEFT)) {
// Wii.setLedOff();
// Wii.setLedOn(LED1);
// }
// else if (Wii.getButtonClick(RIGHT)) {
// Wii.setLedOff();
// Wii.setLedOn(LED4);
} else {
analogWrite(3, 0);
analogWrite(6, 0);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}

lcd.setCursor(0, 0);
lcd.print round(Pitch);
lcd.write(223);
lcd.print (" ");
lcd.print(AX);
lcd.print (" ");
lcd.setCursor(0, 1);
lcd.print (L);
lcd.print (" ");
lcd.setCursor(5, 1);
lcd.print (R);
lcd.print (" ");
}
}
//ここまで
※プログラムを使う場合はincludeファイルの<>を半角に修正が必要

操作及び動作
コントローラを両手で水平持ちにし、ボタンの1+2でリモコン登録
ボタン2:前進(PWM 速度制御)
ボタン1:後進(PWM 速度制御)
コントローラを左右に傾けると傾きに応じて緩やかに旋回
コントローラを手前に起こすと角度に応じて減速
ボタン→:旋回
ボタン←:旋回







以下、グダグダ

先日までBME280というセンサモジュール(秋月)で温度・湿度・気圧を計測し、
サーミスタの値を比較するため、SDカードへの書き込みを行っていました。

と書くと、かなり難しい実験かも? いやいや実は、
arduinoなのでプログラムはほぼC言語で、マイコン用に最適化されてます。
サンプルプログラムからの切り出しと貼付け、変数調整で実現してしまうので、
自分がすごい技術者になったように錯覚してきます。

しかしながらというやつで・・・
数字だけではなく、動く物が作りたくなりました。

やっぱね、男の子はラジコンでしょ!!

そこでWiiリモコンを流用します。
完成度が高くシンプルな構成が最適。
操縦はOn/Offではなく、コントローラの傾きを2.4GHzのBluetooth通信
楽しそうでしょ? Wiiリモコンを使いますしリアルなゲーム感覚


メカ部は田宮模型の定番部品を選定
 ギヤボックス
 キャタピラ
 プレート

エレキ主要部品は
 Wiiコントローラ
 arduino(びんぼうでいいの) ←要ICSP用ピン追加
 USBホストシールド2.0(詳細不明、Amazonで購入\1500)
 Bluetoothアダプタ(iBUFFALO BSBT4D09BK)
 モータドライバ(TA7291P)×2個
 液晶表示(AE-AQM0802[秋月]) ←開発用なので無くてもOK
 バッテリー(7.4V) ←模型用電池、通称リポ
 抵抗(5.1R 10W) ←モータ電圧ドロップ用、使わないとブラシが溶けるかも

配線図などは次回(いつだ?)

ちなみに、液晶にはこんな感じで数字の情報が表示されるだけです。
1300.jpg

スポンサーサイト

自転車

今日は新しい自転車(ママ用)の初走行です。
1298_20160313002104595.jpg
母子ともにちょっとドキドキの様子。

1297_20160313002104837.jpg
私に手を振る余裕もあり、自転車の後ろは快適そうでした。



さんぽ

週末は家族みんなで散歩。

この姿を見た人はみんな笑顔になります。
チワワと子供(1歳)ですから。

1296_20160313002104447.jpg
しっかりリードを持っているので大丈夫です。

がしかし
この後引っ張られて、転んで鼻血を流して大号泣。

大丈夫だ、がんばれ!!

LM4880を使ってみた

要約
LM4880の直流カットに超低ESRアルミ電解コンデンサを使用したところ、
ホワイトノイズが酷いので33Ωの抵抗を出力に挿入した。

結果だけ書くと短いですが、そういう事で。








以下グダグダな話

通信販売だと送料がモッタイナイ、どうせならコレも購入してしまえ!!
そんなノリで購入したのがLM4880という電子部品、税込60円。
コンデンサは電源用の低ESRアルミ電解、これも単価60円。
あえてオーディオ用というのは避けてみた。
(↑これが泥沼の原因)

USB DAC搭載のヘッドフォンアンプを作りましょう。
今度購入する(未定)モバイルパソコンで使う予定。
久々に真空管ナシのお手軽工作です。

先走って3DプリンタでLM4880とUSB DACの入るケースを作りました。
形状データは CAD(DXF)→Metaseqoia(OBJ)→Cura 左右反転はいつもの事。
1288_201603122344345e1.jpg


部品が届いたので、
LM4880のデータシート通りの回路に、コンデンサの容量アップと・・・
USB DACも出力は電源用超低ESRアルミ電解コンデンサ
1290_20160312234434385.jpg

ケースにセットするとこんな感じ
1291_2016031223443527d.jpg

部品レイアウト
1289_20160312234434a66.jpg


そして
無音時は心地よいホワイトノイズが楽しめました
電源にUSB 5V直を使用したのでマウスやHDDの動きを音で感じ取る事が出来た

だめじゃん!!
 いや・・・ 結果と経験より学ぶ事が出来たのはプラスになります。

対策
LM4880の電源はUSB DACの回路L1(フェライトビーズ)の後から(回路図A:矢印部)
 〃 の出力に33Ωの抵抗追加(回路図B:矢印部)
1293_201603122345518bd.jpg
回路図A

1292_2016031223455155f.jpg
回路図B

結果
ホワイトノイズは他のアンプと同等になった。
全域に渡りクセが無く、抜けの良い音質が楽しめるようになった。
(良いのか悪いのかシットリ感が無いような??)


今後の課題と、さらなるグダグダ
バイアスのかからない回路にしてカップリングを使用せずに、
電源は電池で両電源にすればホワイトノイズが無くなったのか?
特性値の計測を行えば、より面白い工作になったかも?
秋月USB DACはGND共通なので抵抗分圧で両電源駆動出来ないし
この辺は次の工作でのお楽しみ。
1294_20160312234552f74.jpg


 
プロフィール

Tomiya910

Author:Tomiya910
FC2ブログへようこそ!

 
 
最新記事
 
 
カレンダー
02 | 2016/03 | 04
- - 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 - -
 
 
カテゴリ
 
 
月別アーカイブ
 
 
検索フォーム
 
 
QRコード
QRコード
 
 
RSSリンクの表示
 
 
リンク