Pieces for electronic kits

For Ubiquitous Computing

M5Stackで姿勢に応じた3D表示をする

M5Stack grayにはIMUとLCDディスプレイが付いている。
簡単にARライクなアプリを作ってみる。

作ったもの

f:id:nekosystem:20190317195013g:plain
視点 - M5Stack - 対象が直線上にあり、M5Stackのディスプレイの法線と視線が平行なとき、ARライクな動作をする

用意するもの

  grayでないとIMUが載っていない。

プログラム

github.com

  • quaternionFilters.cpp / .h
    • 外乱に弱い地磁気センサを使いたくないので、加速度と角速度だけからAHRSを更新する関数MadgwickQuaternionUpdateIMU()を追加
    • 物体の回転操作にQuaternionは使いづらい(使えるが分かりづらい)ので、Quaternion -> Rotation Matrixの変換を追加
    • RotationMatrixを取得する関数getR()を追加
    • M5Stackのデフォルトのライブラリの/src/utility/quaternionFilters.cppの代わりに使う
  • 3Dwire-AHRSanim.ino
    • 3D wire-frameをM5Stackの姿勢の転置行列で回転、つまり、M5Stackの姿勢変化を補償するように回転させることを目指す
    • M5.Lcd.fillScreen()だと重たく画面がちらつくので、M5.Lcd.drawLine()で前フレームの画像を消す

以上。

Arduinoで簡単にLEDマトリクスを光らせる

夏と言えばLEDマトリクス。
最近ではとても安く、簡単に動かせるので試す。

用意するもの

  LEDマトリクスはLEDのピッチが狭ければ狭いほど偉いのでこちらを選択。

  5V動作のArduino互換ボード。この値段でブートローダが書き込まれているのでそのまま使える。安い。

  Pro MiniにUSBがついていないので書き込み及び給電のため用意。

  • ブレッドボード
  • ジャンプワイヤ
  • micro-B USBケーブル

安いもので揃えると2500円以内に収まるはず。

組み立て

  • LEDマトリクスキットをはんだづけして組み立てる。絵の通りに付ければ良い。

 ジャンパJP1、JP2は複数のLEDマトリクスを動かしたい人だけが繋げばよい。繋いでしまったらI2Cのアドレスが変わることに注意。
f:id:nekosystem:20160716011800j:plain:w300

  • ピンヘッダとマトリクスを取り付ける。マトリクスの上下に注意。型番の文字が手前に来るはず。

f:id:nekosystem:20160716011837j:plain:w300

  • ブレッドボードにジャンプワイヤで配線。
Arduino LED matrix
A5 SCL
A4 SDA
GND GND
5V VCC

このようになるはず。
f:id:nekosystem:20160716012116j:plain:w300

プログラム書き込み

  • ArduinoをPCにインストール
  • FTDIのドライバをインストール FTDI Drivers
  • Arduinoを起動し、[スケッチ]->[ライブラリをインクルード]->[ライブラリを管理]からライブラリマネージャを開く
  • Adafruit LED Backpack Libraryを検索してインストール

f:id:nekosystem:20160716013401p:plain:w300

  • すかさず[ファイル]->[スケッチの例]->[Adafruit LED Backpack Library]->[HT16K33]を開く

[ツール]から書き込みたいボード、マイコンの種類、シリアルポートを設定。
f:id:nekosystem:20160716013923p:plain:w300

  • 書き込む。

完成

f:id:nekosystem:20160716014014j:plain:w300

以上。

NUCをUbuntuで動かす

頭に乗るサイズのPCが出回っているらしい。

何かあった時に備えて手に入れておく。

用意するもの

CPYHだとデュアルコアらしい。クアッドコアのPPYHを選択。

PPYHには一枚しかメモリが乗らない。DDR3L(ノートパソコン用の方)の、8GBを用意する。

CPUクロックが大したことないので、せめてSSDに。

f:id:nekosystem:20160628001346j:plain:w300

組み立て

プラスドライバでネジを外して、そっと開ける。
f:id:nekosystem:20160628003319j:plain:w300

カチッと言うまでメモリを差し込む。
シャコっと言うまでSSDを差し込む。
f:id:nekosystem:20160628003428j:plain:w300

そっと閉める。

動かす

USBメモリUbuntuのISO焼く
Ubuntu焼いたUSBメモリと、キーボードをNUCに挿して起動
F2連打でBIOS起動
[Advanced]->[Boot]->[Boot Configuration]->[OS Selection]をLinuxに変更
起動してよしなにインストール
以上

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フットペダル

用意するもの

 踏み心地がいいものを。

 安くて簡単にバラせれば良い。今回はこちらを使った。

 モノのフォンジャックをフットペダルの数だけ用意する。

  • 適当なケース

組み立て

電子部品屋にある適当なアルミケースを用意する。
自作エフェクターに使われているようなケースのサイズが手頃。
f:id:nekosystem:20151213220310j:plain:w300

φ6mmの穴を開け、フォンジャックをネジ止め。
f:id:nekosystem:20151213220414j:plain:w300

ゲームパッドの基盤を取り出し、糸のこでカット。
適当なボタン接地部の+と-をフォンジャックにハンダ付けしてケースに入れる。
f:id:nekosystem:20151213220353j:plain:w300

フォンジャックを挿す。
f:id:nekosystem:20151213220454j:plain:w300

ソフトウェア

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ケーブル
f:id:nekosystem:20140623105055j:plain
Beaglebone Black表
f:id:nekosystem:20140623105040j:plain
Beaglebone Black裏
f:id:nekosystem:20140623105047j:plain
HDMI-DVI変換器を通すと不安定っぽいからHDMI読めるモニタに取り替える.
フラッシュメモリにOSが最初から入っています.GUIが普通に動きました.
f:id:nekosystem:20140623105103j:plain

最初から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

GPIO,PWM,I2C,SPI,UARTをPythonから弄れるようにする

sudo ntpdate pool.ntp.org
sudo apt-get update
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus -y