2017/08/30

wiiコントローラ(ぱちもん)の USB 化


 ファミコンもどき、スーファミもどきの両ゲームパッドの調子が悪いので、wii 用のぱちもんコントローラを、USB 化した。ノートPCと短いケーブルで使いたかったので、Arduino は、中に埋め込んだ。

 そのものズバリのサンプルがあったので、作業は簡単。市販のコントローラと違って割り当てを自由にプログラムできるのが最大の利点。

 アナログスティックがついているので、スーファミのぱちもんの倍ぐらいの値段(700円くらい)なのも妥当か。プラスチックの支えがあるので、意外とまともに使える気がする。純正のコントローラは、もう買えないみたいだし、最近のゲーム機のコントローラは、無線化していて高いし、微妙なんだよね。



 元のプログラムは、スタンダードな配列と、XBOX的な配列とを、HOMEボタンで、切り替えられるようになっている。Pro Micro 自体には、13番ポートのLED は付いていないので、別途、追加した。点灯したら、特定のゲームに合わせた特殊な配列、無点灯なら、通常コントローラとして機能するよう設定した。

2017/08/17

2.4 GHz 無線モジュール その3「プレステ2のコントーローラ」


 格ゲー用のプレステ・コントローラは、接続に成功したので、次はプレステ2のコントーローラ。2つで700円のジャンクなので、全く認識しなかったらどうしよう、というか、壊れているのか、接続の仕方が間違っているのか、判断つかないから困るわけで、引きが悪いと両方ハズレな可能性もないわけでもないが。

 とりあえず、無線化以前に、Arduino に認識させないといけない。このコントローラを使った Arduino の作例は、ネットに色々とあり、ライブラリも用意されていた。接続は、下記4ピン+電源を繋ぐだけ。DATAピンだけは、プルアップする必要があった。振動機能は、不要なので省略。
GitHub
  madsci1016/Arduino-PS2X PS2 controller Arduino Library

 プレステのと違うのは、アナログのスティックが2つ付いている点だが、元々、アナログのコントローラのゲームとかやったこともないので、どう動くのが正しいのか不明。左スティックは、XYなのは分かるが、右は? 馬鹿正直に、取得したデータをそのまま送ればいいのか? ある程度調整した値を送るのか? この辺は要調査。

 ボタンはキチンと動いているようだし、仕組みとして作成可能なのは分かった。送信、受信と2セット分作業するわけだが、単純にワイヤレス仕様のコントローラをベースにすれば、受信側だけを作ればいい。

 というか、そもそも、新品の無線コントローラが、1000円台で買えるのに、わざわざ面倒なことする必要は無い。これは、あくまでも実験であって、作業してみないことには、本当の意味での勉強にはならないと思うのだよ。本やネットを見ただけで理解したと勘違いしがちなんだ。

※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2017/08/14

2.4 GHz 無線モジュール その2「互換性無しの別物だった」


 基板上に、四角いチップが見えない安い無線モジュールは、SE8R01 とかいうやつみたい。買った時は、nRF24L01 って書いてあったと思ったが、パチモンでも同じように動くのならば問題も無いが、別物では、素人には手も足も出ない。幸いサンプルをネットにあげてくれている人がいて、ゴミにならずに済んだ。
Semitek SE8R01
  SE8R01_DataSheet_v1 - 副本.pdf
Nerd Ralph
  SE8R01 2.4Ghz wireless modules
Arduino Forum
  Finally Working code for se8r01(similar nrf24l01) サンプルプログラム

 送信側、Pro Mini 3.3V を使用。受信側は、davinci 32U を使っているので、3.3Vに下げる必要がある。モジュールとは、SPI通信、適当なピンに割り振ればいい。

 送信側に、プレステのコントローラを接続。無線で入力データを受信側に送り仮想コントローラとして機能させる。簡単に言えば、オリジナルな、ワイヤレスコントローラが作れる。同じように、ワイヤレスな仮想キーボードや、仮想マウスなんかも出来そう。ミソは、これらの入力は、ハードウェアレベルってこと。

※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2017/08/11

2.4 GHz 無線モジュール その1「全く動かず」


 爪サイズの nRF24L01 無線モジュール。433Mhzのは、出力弱すぎて話にならなかったので、2.4 GHz 版。表面実装用じゃない普通のやつは、ESP-01と同じ 4x2列のピンで、扱いにくい。で、一列のやつを入手したのだが、1.27mm ピッチだった。標準は、2.54mm ピッチだから半分か。デジカメだとクッキリだが、実際は、ルーペで見ても良くわからない。

 老眼でよく見えないのは、ともかく。手もプルプルする(笑)ので、問答無用で、クリーム半田。適当に乗っけて、コテを当てるだけでくっつく。

 ゲタ履かせて、ようやく下準備完了。手間を考えると、普通のにするべきだった。最終的な組み込みするときには、コンパクトでいいかもしれないが。

 で、つないでみたが、全く動かず(笑)。Pro Mini 3.3v / 5v / DaVinci32U4 と色々と変えてやってみたが、ピクリともしない。諦めかけて、何気に検索してたら、どうやらnRF24L01 として一般的なものとは、種類がそもそも違うらしい。なんじゃそれ。

※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。

2017/08/06

digispark clone 赤外線レシーバ

 Atmel の、Attiny85 にUSB接続出来るようにした指先サイズのマイコンボード。Bootloader は、micronucleus が書き込んであった。一応、Arduino IDE からも使える。受光素子を追加して、赤外線入力を、そのままキーボード入力に変換させてみたが、ウチの環境では、少々、不安定。コンパクトかつ、実質USBキーボード扱いであるから Linux 等でも動かせるのは良い。

 ロジクールの無線マウスの USBドングルと、相性悪いようなので、ハブ経由で接続した。元々、書き込み毎に、再接続する必要があるので、digispark の MicroUSB コネクタは、接続ケーブルを繋ぎっぱなしにして、抜き差しは、ハブ側の通常USBコネクタで行う事。Micro USB で、抜き差しを繰り返すと、半田剥がれする可能性大です。
参考リンク
  DIY USB IR Receiver instructables 赤外線リモコン用レシーバ
  Connecting and Programming Your Digispark Digistump Wiki 導入手順


2017/05/01

mSATA SSD → SATA 変換基板


 液晶一体型の動画PC用に、HDD の代わりに、mSATA の SSD を使った。システムを入れるだけなので、HDD は必要ない。

 この変換基板は、ノートPCなんかの、mSATA コネクタのない機種にも便利なはず。2.5インチのHDD、SSDよりも、薄く、小さいので、熱が篭るようなコンパクト筐体での、スペース確保にも有効。

2017/03/01

NAS改 USB外付けHDD(+赤外線レシーバ)


 キューブ型のNASを流用した巨大レシーバ、というか、USB接続の外付けハードディスクのオマケにレシーバが付いてる物体。レシーバに追加したリレーによって、4個のディスクを赤外線リモコンで個別にオン・オフできる。USBハブ経由の接続なので、厳密な意味では正しく動作しない。書き込み中に電源を切ったりしないよう注意する必要がある。

 HDDには、突入電流云々言って電源入れっぱなしが一番良いってのは、よく言われる。間違いとは言わないが、そんなのは、サーバルームのような条件が整って、且つ値段の桁の違う機器類での話。民生用のヘナチョコ機器をいっしょに語るのはマヌケもいいとこ。頻繁に切り替えるのでなければ、使わないときは電源を切っておくのが一番ってのが、僕の結論。

 最初は、ACアダプタ駆動にしようと準備していたが、良く考えてみたら、HDD以外にも、ケースFANを回す分が必要だったので、諦めて普通の電源使うことにした。配線は、変換ケーブルを利用した。一応、マニュアルでも電源操作が出来るよう、オルタネイトのスイッチに変更した。



 基板作り直した。表示部分の7セグメントディスプレイと、赤外線受光部を別基板に、LEDは、電線で引き出した。




 表示パネル裏側、インジケータ用LEDをユニバーサル基板の切れ端にハンダ付け。

 7セグメントディスプレイと、赤外線受光モジュール。HDD1~4のインジケータ用に穴あけた。



HDD用12Vの配線、やり直した。

ファンは、8センチのPWMタイプ。ファンコンは、両面テープでつけた。






 Arduino レシーバに書き込むのは、主電源に接続した 5ch 目のリレーを、HDDに繋ぐ1~4ch と自動連動するようにしたもの。USB接続のHDDは、認識に少々時間がかかるので、わかりやすくするため、rmx3 側でも、ドライブインジケータを表示するようにした。Kodi が起動していれば、そちらにもメッセージを送る。

 スモークフィルムを貼って完成。

2017/02/20

PWMファンコントローラ基板


 4ピン・12vファン用のコントローラ。温度センサが付いていてファンの回転数を自動調整する。これ一つで完結するから、外付けハードディスクみたいな自作デバイスにも利用できる。Arduino で作るまでもなかった。

 3ピンファンでは、回転数を取得するまで。そこに、制御信号を追加したのが、4ピンのPWMファン。難しい理屈は分らないが、12Vのまま、回転数を調整できるらしい。電圧を絞って回転数を落とすのは、そもそもイレギュラーなやり方なんだろう。

2017/01/19

外部 CSSファイルの強制読込み

 ブラウザで更新しても、外部CSSのように間接的に読み込まれるファイルは、キャッシュを読み込んでしまって反映されない。対策としては、CSS 読み込みのアドレスの指定に、適当なクエリを追加すればいいらしい、クエリが変化した時点で、新規に読み込まれる。へー、なるほど。

 このブログシステムでも、CSS を更新したときに、クエリを自動で書き換えるようにした。かなり前に、この問題に気づいたが、面倒くさいので、ブラウザのキャッシュ全削除で、ごまかしてた。それだと、閲覧者のほうは変化ないから、全く解決にはなっていなかった。

2017/01/16

ATX電源の再利用


 PC 自作とかやっていた人には、2個、3個ころがっていると思われる古いATX電源。わりと簡単に再利用できる。
 ① 緑+黒=電源単体で起動
 ② 灰+抵抗+LED+黒=電源ランプ
 ③ 黄 x 黒=12 V
 ④ 赤 x 黒=5 V
 ⑤ 橙 x 黒=3.3 V

 ※ 何のことか分らない人は、危ないだけなので手をだしてはいけません
 割と大きな電流が流せるので、電動ドリルとか、ACアダプタで動かせないようなものも利用できる。

2017/01/05

433Mhz 無線モジュール


 送信・受信それぞれ別の基板のモジュール。片方向のみのワイヤレス通信。試してみたけど電波弱くて話にならん。電圧上げるのは、実用度低いし、ちゃんとしたアンテナつければ、まともに使えるようになるのか?

 まぁ、電波が届いても、ガシガシ通信するような用途には使え無さそう。通信相手が、PCとかだったら、送信側だけ作ればいい ESP8266 でいいわけで、今となっては使いどころもないのかも。
参考リンク
 VirtualWire Library

2017/01/03

USBtinyISP + Da Vinci 32U + Pro Micro 治具


 Da Vinci 32U のブートローダを書き換えるのに必要なライタ用の治具を作った。表向きと、裏向き、両方で使える。ISP用6ピン端子付けていれば、こんなのは不要だけど、邪魔というか、出っ張っちゃうからね。

 一応、書き込めてるみたいだけど、ヒューズ・ビットの設定が良く分らない。DFU 版の初期値はいくつだったのか?しくじったなぁ。
Da Vinci 32U ブートローダ
 Arduino 版 da-vinci-32u.zip da-vinci-32u-master.hex
 DFU 版 megaUSB_DFU_Bootloaders.zip ATMega32U4-usbdevice_dfu-1_0_0.hex
 Pro Micro のクローンは、まんま Leonardo だな。

 USB HUB 経由だとベリファイ・エラー出まくりだったが、本体に直接繋いだら何の問題も無かった。上手く書き込めない場合は、USBポートや、ケーブルを疑う必要がある。
davinci_usbtiny_bootloader.bat

@echo off
echo Da Vinci 32U を初期化します
pause
avrdude -v -patmega32u4 -cusbtiny -e -Ulock:w:0x3F:m -Uefuse:w:0xcb:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m
timeout 3
avrdude -v -patmega32u4 -cusbtiny -Uflash:w:da-vinci-32u-master.hex:i -Ulock:w:0x2F:m
echo エラーがないか確認して下さい
pause
bat 実行結果


Da Vinci 32U を初期化します
Press any key to continue . . .

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "D:\_program\avrdude\avrdude.conf"

Using Port : usb
Using Programmer : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : USBtiny
Description : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.04s

avrdude: Device signature = 0x1e9587
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as C3
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "0x3F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3F:
avrdude: load data lock data from input file 0x3F:
avrdude: input file 0x3F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xcb"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xcb:
avrdude: load data efuse data from input file 0xcb:
avrdude: input file 0xcb contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xd8"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xd8:
avrdude: load data hfuse data from input file 0xd8:
avrdude: input file 0xd8 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xff"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xff:
avrdude: load data lfuse data from input file 0xff:
avrdude: input file 0xff contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: safemode: Fuses OK (H:CB, E:D8, L:FF)

avrdude done. Thank you.


Waiting for 0 seconds, press a key to continue ...

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "D:\_program\avrdude\avrdude.conf"

Using Port : usb
Using Programmer : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : USBtiny
Description : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9587
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "da-vinci-32u-master.hex"
avrdude: writing flash (32750 bytes):

Writing | ################################################## | 100% 62.61s

avrdude: 32750 bytes of flash written
avrdude: verifying flash memory against da-vinci-32u-master.hex:
avrdude: load data flash data from input file da-vinci-32u-master.hex:
avrdude: input file da-vinci-32u-master.hex contains 32750 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 40.41s

avrdude: verifying ...
avrdude: 32750 bytes of flash verified
avrdude: reading input file "0x2F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x2F:
avrdude: load data lock data from input file 0x2F:
avrdude: input file 0x2F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: safemode: Fuses OK (H:CB, E:D8, L:FF)

avrdude done. Thank you.

エラーがないか確認して下さい
Press any key to continue . . .
 正しく実行できていれば、Arduino は、初期化されて、BLINK のプログラムがピコピコ動いてるはず。

2017/01/01

PlayStation Controller 改




TP5ATT
TP33VCC
TP32GND
TP4CLOCK
TP3COMMAND
TP2ACK
TP1DATA
 
 HORI Fighting Stick PS / HPS-07 / 基板 0888-32

 ジャンクなプレステ用のコントローラーを、PC に接続するべく、Da Vinci 32U で工作。チャタリングなのか、入力が安定しない。デバウンス対策が必要か。信号変換よりも、直接ボタンに繋いだほうが、確実なんだろうけど。

 たまにしか使わないのに、Arduino を1個消費するのも、もったいないんで、ソケットを筐体の横に貼り付けた。
参考リンク
 PSX Library デジタル入力のコントローラ用
 Arduino Joystick Library Arduino IDE 1.6.6 以降

2016/12/12

デジタルノギス導入


 精度もへったくれも無い安物だが、定規ではかるよりはまし。笑っちゃうほど見やすい。ガキの頃から目だけは悪くなかったのに、老眼ではどうしようもない。見えなくなったと自覚していたものの、はっきりしたのは、何とノギスの目盛りが判別不能だったとき。PC のモニタとかは、ある程度距離があるから、ちゃんと見えるのだけど、近いものはダメ。ピントが合わない、困ったもんだ。

 その昔、機械加工の仕事をしていたんで、ノギスやら、マイクロメータは扱えるけど、あれ、油まみれになるよな。デジタルのは大丈夫なんだろうか。この安物は、絶対壊れるのは間違いないが。

2016/12/10

Delphi 10.1 Berlin Starter Edition


 無料の Delphi 、期間限定じゃなくなったらしい。前に確認だけして放っておいた Delphi 10.1 を使ってみた。以前の Turbo Delphi の無料版より、よっぽど出来はいい気がする。32ビット版アプリしか作れないくらいで、致命的な制限は無さそう。
 リモコンソフト rmx の次の Version は、こいつでコンパイルした ユニコード対応版にしよう。しかし、通信部分や、文字コード絡み、かなり修正しないと動きそうに無い。それでも、Lazarus でやるよりは楽かな。

 それにしても、Delphi 5 に、Lazarus に、Delphi 10.1。パスカル環境だけを、3種類もインストールしてる変態さんは、俺ぐらいか。いいかげん、Delphi 5 は、無くしたいな。

2016/12/03

WeMos D1 Mini clone


 WeMos D1 Mini のぱちもんです。外見上の違いは、ESP-12F ? のロゴぐらいで、パターンもオリジナルをなぞった感じ。

 USB 付きで扱いも簡単。ワイヤレスLAN付きの Arduino として使えます。まぁ、LoLin の縮小版です。ESP8266 は、ほんと面白い。以下は、導入部分の説明。
デバイスドライバ

 PC に認識させるべく、CH340 のドライバをインストールします。

 WEMOS のサイトからダウンロードできます。

 ドライバのインストール完了すると、COMポートとして認識されます。

Arduino IDE

 Arduino IDE を起動して、設定画面のボードマネージャのURL に”http://arduino.esp8266.com/stable/package_esp8266com_index.json”を入力。

 ボードマネージャを開いて、ESP8266 をインストール。

 完了後、ボードと、COM ポートを指定すれば、普通に使えるようになります。

※ 技適マーク無しの無線デバイスの実験は、日本国外で行いましょう。