M5Stackで姿勢に応じた3D表示をする
M5Stack grayにはIMUとLCDディスプレイが付いている。
簡単にARライクなアプリを作ってみる。
作ったもの
視点 - M5Stack - 対象が直線上にあり、M5Stackのディスプレイの法線と視線が平行なとき、ARライクな動作をする
プログラム
- quaternionFilters.cpp / .h
- 外乱に弱い地磁気センサを使いたくないので、加速度と角速度だけからAHRSを更新する関数MadgwickQuaternionUpdateIMU()を追加
- 物体の回転操作にQuaternionは使いづらい(使えるが分かりづらい)ので、Quaternion -> Rotation Matrixの変換を追加
- RotationMatrixを取得する関数getR()を追加
- M5Stackのデフォルトのライブラリの/src/utility/quaternionFilters.cppの代わりに使う
- 3Dwire-AHRSanim.ino
以上。
Arduinoで簡単にLEDマトリクスを光らせる
夏と言えばLEDマトリクス。
最近ではとても安く、簡単に動かせるので試す。
用意するもの
LEDマトリクスはLEDのピッチが狭ければ狭いほど偉いのでこちらを選択。
5V動作のArduino互換ボード。この値段でブートローダが書き込まれているのでそのまま使える。安い。
Pro MiniにUSBがついていないので書き込み及び給電のため用意。
- ブレッドボード
- ジャンプワイヤ
- micro-B USBケーブル
安いもので揃えると2500円以内に収まるはず。
組み立て
- LEDマトリクスキットをはんだづけして組み立てる。絵の通りに付ければ良い。
ジャンパJP1、JP2は複数のLEDマトリクスを動かしたい人だけが繋げばよい。繋いでしまったらI2Cのアドレスが変わることに注意。
- ピンヘッダとマトリクスを取り付ける。マトリクスの上下に注意。型番の文字が手前に来るはず。
- ブレッドボードにジャンプワイヤで配線。
Arduino | LED matrix |
---|---|
A5 | SCL |
A4 | SDA |
GND | GND |
5V | VCC |
このようになるはず。
プログラム書き込み
- ArduinoをPCにインストール
- FTDIのドライバをインストール FTDI Drivers
- Arduinoを起動し、[スケッチ]->[ライブラリをインクルード]->[ライブラリを管理]からライブラリマネージャを開く
- Adafruit LED Backpack Libraryを検索してインストール
- すかさず[ファイル]->[スケッチの例]->[Adafruit LED Backpack Library]->[HT16K33]を開く
[ツール]から書き込みたいボード、マイコンの種類、シリアルポートを設定。
- 書き込む。
完成
以上。
NUCをUbuntuで動かす
頭に乗るサイズのPCが出回っているらしい。
何かあった時に備えて手に入れておく。
用意するもの
CPYHだとデュアルコアらしい。クアッドコアのPPYHを選択。
PPYHには一枚しかメモリが乗らない。DDR3L(ノートパソコン用の方)の、8GBを用意する。
- 適当なSSD
CPUクロックが大したことないので、せめてSSDに。
USB接続のmidi機器をRaspberry Piに接続する
次のような、USB接続のMIDI機器の信号をRasPiで扱いたい。
Amazon CAPTCHA
GUIから弄る分にはmidi機器の販売元のUSBドライバを使えば良い。
この記事では、PythonでUSB機器の入出力を云々できるようになることを目標にする。
ゲームパッドを使うときにはpygamesを使うという話があった。
Raspberry Piにゲームパッドを繋ぐ - Pieces for electronic kits
調べてみると、このpygamesはmidi機器にも対応していた。これを使わない手はない。
すかさず
#! /usr/bin/env python # -*- coding: utf-8 -*- import pygame.midi # midi機器の初期化 pygame.midi.init() # 何番のportの機器が使えるか確認 for i in range(pygame.midi.get_count()): print i print pygame.midi.get_device_inifo(i) # 使用するportの出力を用意 out = pygame.midi.Input(3) while True: if out.poll() is True: inkey = out.read(1) print inkey[0][0]
以上。
USBフットペダルを自作する
- エディタ使用時にCtrlを足に振りたい
- こたつの中に全身埋めたまま、Tumblrをスクロールしたい
- PCゲームのEnterを足に振りたい
こんな時にはUSBフットペダル
用意するもの
踏み心地がいいものを。
安くて簡単にバラせれば良い。今回はこちらを使った。
モノのフォンジャックをフットペダルの数だけ用意する。
- 適当なケース
組み立て
電子部品屋にある適当なアルミケースを用意する。
自作エフェクターに使われているようなケースのサイズが手頃。
φ6mmの穴を開け、フォンジャックをネジ止め。
ゲームパッドの基盤を取り出し、糸のこでカット。
適当なボタン接地部の+と-をフォンジャックにハンダ付けしてケースに入れる。
フォンジャックを挿す。
ソフトウェア
UNIX
pygamesでゲームパッド⇔キーボード変換が書ける。
こちらを参考に。
Raspberry Piにゲームパッドを繋ぐ - Pieces for electronic kits
Win
ゲームパッドのキー割り当てを行うソフト。
JoyToKey 公式ホームページ - 最新版をダウンロード
押されたボタンをCtrlなりEnterになり割り振って完成。
ブラウザ時にScroll、PCゲーム時にEnterはとても有効。
Raspberry Piセットアップの記録
sudo raspi-config
- Expand File System(SDカードの容量をすべて用いる)
- Internationalisation Options
Change Keyboard Layout(JISキーボードを指定)
[Generic 105-key (Intl) PC]->[other]->[Japanese]->[Japanese(OADG109A)]->[yes/no]->[yes/no]
無線LAN接続の設定
sudo vi /etc/network/interfaces
dhcp
wpa-conf
sudo vi /etc/wpa.../wpa...
ssid=""
psk=""
sudo /etc/init.d/networking restart
sudo ifup wlan0
sudo apt-get update
sudo apt-get install vim -y
sudo wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py
sudo easy_install pip
sudo pip install tweepy
sudo apt-get install screen
sudo apt-get install avahi-daemon -y
host名を適宜設定
sudo vim /etc/hostname
sudo vim /etc/hosts
<span style="color: #333333">sudo vim /etc/avahi/services/ssh.service <?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">%h</name> <service> <type>_ssh._tcp</type> <port>22</port> </service> </service-group></span>
sudo /etc/init.d/avahi-daemon restart
今度は起動するはずだ。
sudo reboot
以下のコマンドでavahiが自動起動しているかを確認する。
sudo /etc/init.d/avahi-daemon status
sudo insserv avahi-daemon
この後再起動して自動起動しているかを確認
sudo reboot
sudo /etc/init.d/avahi-daemon status
ssh pi@hostname.local
Beaglebone Black rev.c初回起動の記録
電源,LANケーブル,キーボードを繋いで動かしてみる.
こちらが必要なもの。
Beaglabone Black
5V2A、ACアダプタ
MicroHDMI端子のあるHDMIケーブル
Beaglebone Black表
Beaglebone Black裏
HDMI-DVI変換器を通すと不安定っぽいからHDMI読めるモニタに取り替える.
フラッシュメモリにOSが最初から入っています.GUIが普通に動きました.
最初からCUIで操作したい
xserverが動くからdisplay managerを殺す
systemctl disable lightdm.service
→エラー吐いて動かない
/etc/lightdm/lightdm.confを全部コメントアウトしてみる
→CUIすらロクに動かなくなった
Debianはrunrevel弄ってもGUI<=>CUIは切り替わらないみたいだからCUI起動を諦める
Ctrl+Alt=>F2ですぐCUIになるし,一度起動したら起動させっぱなしだしね.
SDにDebianを焼き直して,SDからBBBをブートする
↓からDebianのイメージを拾ってくる
http://beagleboard.org/latest-images
↓からPi Fillerを拾ってくる
http://ivanx.com/raspberrypi/
Pi Filler起動,img選択,SDを挿してSDを選択,20分ぐらい待つ
BBBにSD突っ込んでS2スイッチ押しながら起動,SDから動いた!
ペヤング食べてたら接触不良か停止,SDから起動しなくなる.
仕方がないから20分かけてSD焼き直し
http://debian.beagleboard.org/images/bone-debian-7.5-2014-05-14-2gb.img.xz
で4時間とかでる…
と思ったら勝手に止まって直ってた。なんじゃらほい。
アカウント周り
addusrで日頃から使うユーザを追加,pass設定
passwdでrootのpassを設定
visudoで
ユーザ名 ALL=(ALL) ALLをsudoers
Defaults rootpw
を追加,一般ユーザでもrootのpassを入力することでsudoできるように
日本語キーボード化
/etc/default/keyboardを開いて
XKBMODEL="jp106"
XKBLAYOUT="jp"
microSDカードをマウントする
ls /dev/とすると接続した機器が沢山並んでいるが
fdisk -l でDisk /dev/mmcblk0: 15.8GB,とかいう表示が出るので,mmcblk0こそがmicroSDカードだと分かる.
/dev/mmcblk0p1、/dev/mmcblk0p2はmicroSDカードのパーティションなので,これらをまうんとしてやればよい.
mkdir /mnt/usbmem(任意)
mount -t vfat /dev/mmcblk0p1 /mnt/usbmem(任意)
アンマウントは
umount -t /mnt/usbmem(任意)
busyだって言われてumountできない時は
fuser -v /mnt/usbmem(任意)で誰が使っているか確認、
processをkillすればアンマウントできる
シェルスクリプトにして~/.bashrcにパスを追加
PATH="$PATH":~/bin