http://www.wvshare.com/product/3.2inch-RPi-LCD-B.htm これっぽいものを ebay から買ってみた。2000円ぐらい http://www.ebay.com/itm/181663639529


320x240 WaveShare SpotPear V3 Touch panel control chip XPT2046 というやつ。ピクセル数的にものすごく解像度低いがとりあえず液晶を試してみたかった。

表示するまで

基本的には https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi これの通りするのだが、一部手順が古いためハマる。

fb0 -> fb1 に (HDMI からTFT側に)

sudo vi /usr/share/X11/xorg.conf.d/99-fbturbo.conf

FBTFT kernel module を使えるように firmware update をかける。ちなみにLinux のカーネルバージョンが4系になる。SPI の DMA 転送が有効化される。

sudo REPO_URI=https://github.com/notro/rpi-firmware rpi-update

これは 50MB ぐらいダウンロードする。が https://github.com/notro/rpi-firmware から前もって Download Zip したやつを使うこともできる。notro-rpi-firmware-master.zip としてファイルをダウンロードして、ローカルネットワーク内から scp で転送しておいたとする、そのうえで

unzip -d "/tmp/rpi-firmware"  notro-rpi-firmware-master.zip 
sudo FW_REPOLOCAL="/tmp/rpi-firmware/rpi-firmware-master" SKIP_DOWNLOAD=1 rpi-update

とすれば良い。

/etc/modules に追記

spi-bcm2708

fbtft_device name=waveshare32b gpios=dc:22,reset:27 speed=48000000

waveshare32b width=320 height=240 buswidth=8 init=-1,0xCB,0x39,0x2C,0x00,0x34,0x02,-1,0xCF,0x00,0XC1,0X30,-1,0xE8,0x85,0x00,0x78,-1,0xEA,0x00,0x00,-1,0xED,0x64,0x03,0X12,0X81,-1,0xF7,0x20,-1,0xC0,0x23,-1,0xC1,0x10,-1,0xC5,0x3e,0x28,-1,0xC7,0x86,-1,0x36,0x28,-1,0x3A,0x55,-1,0xB1,0x00,0x18,-1,0xB6,0x08,0x82,0x27,-1,0xF2,0x00,-1,0x26,0x01,-1,0xE0,0x0F,0x31,0x2B,0x0C,0x0E,0x08,0x4E,0xF1,0x37,0x07,0x10,0x03,0x0E,0x09,0x00,-1,0XE1,0x00,0x0E,0x14,0x03,0x11,0x07,0x31,0xC1,0x48,0x08,0x0F,0x0C,0x31,0x36,0x0F,-1,0x11,-2,120,-1,0x29,-1,0x2c,-3

/boot/cmdline.txt を変更

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbtft_device.custom fbtft_device.name=waveshare32b fbtft_device.gpios=dc:22,reset:27 fbtft_device.bgr=1 fbtft_device.speed=48000000 fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo dma.dmachans=0x7f35 console=tty1 consoleblank=0 fbtft_device.fps=50 fbtft_device.rotate=90

ここまでやって reboot すればTFT側に表示がでる、はず。

タッチパネルを有効にする

書いてある通りパッケージをいれる。

sudo apt-get -y install xinput evtest libts-bin
wget http://adafruit-download.s3.amazonaws.com/xinput-calibrator_0.7.5-1_armhf.deb

sudo dpkg -i -B xinput-calibrator_0.7.5-1_armhf.deb
sudo rm /usr/share/X11/xorg.conf.d/99-calibration.conf
sudo reboot


/boot/config.txt に追記。XPT2046ADS7846 (-> TSC2046) 互換の中華コントローラらしいので ADS7846 を指定したらいいっぽい?

dtoverlay=ads7846,speed=1000000,penirq=17,swapxy=1

/etc/X11/xinit/xinitrc に追加 (軸補正)

DISPLAY=:0.0 xinput -set-prop "ADS7846 Touchscreen" "Evdev Axis Inversion" 1 0

startx

dpi が恐しく低いので指定して起動したほうが良い。とはいえフォントサイズしか変化しないので、アイコンとかはデカいまま。

startx -- -dpi 60

タッチパネルキャリブレーションは以下でできるが、結果を conf に書いておかないとreboot時に失われる。

DISPLAY=:0.0 xinput_calibrator

備考

タッチパネル座標と画面座標をあわせるためには

  • /boot/cmdline.txt の fbtft_device.rotate=90
    • reboot 必要
  • /boot/config.txt の swapxy=1 (と rotate=...)
    • reboot 必要
  • "Evdev Axis Inversion" 1 0
    • X が起動していれば xinput -set-prop は即時反映されるので reboot いらない

あたりをしっかりする必要があるが、これが結構面倒で試行錯誤した。とはいえあんまりパターンがあるわけではないので適当にやれば良い。

links

ref. https://github.com/cdario/waveshare-3.5-Spotpear-for-Rpi
ref. https://github.com/notro/fbtft/issues/215
ref. http://www.circuitbasics.com/setup-lcd-touchscreen-raspberry-pi/
ref. http://www.circuitbasics.com/raspberry-pi-touchscreen-calibration-screen-rotation/

  1. トップ
  2. tech
  3. Rasberry Pi で使える2000円ぐらいのTFT液晶モジュール

まず

sudo raspi-config

で desktop がデフォルトで起動するようにしておく

Chromium などをパッケージからインストール

sudo apt-get install chromium x11-xserver-utils unclutter

しかし、apt から入る chromium のバージョンが古すぎる (22) のでなんとかしたい。(あとから)

pi@raspberrypi ~ $ chromium --version
Chromium 22.0.1229.94 Built on Debian 7.0, running on Debian 7.8

~/.xsessionrc

# タッチスクリーン軸補正
# GUI ログインにすると xinitrc が読まれないので書いておく
DISPLAY=:0.0 xinput -set-prop "ADS7846 Touchscreen" "Evdev Axis Inversion" 1 0

# マウスカーソルを消す
unclutter -idle 15 -root &

# 画面のブラックアウトをやめる
xset -dpms &
xset s off &

# kiosk モードかつシークレットモードで chromium を起動する
exec chromium --kiosk --incognito http://www.google.com

incognito (シークレットモード) にしておくとセッション復帰とかされないので面倒なことがない。

  1. トップ
  2. tech
  3. Raspberry Pi で Chromium (Google Chrome) を Kiosk モードで起動する

まっとうな人生を送るにはCNC フライスが必要だと思ったので、買った。

CNC Sable-2015 というやつで、本体・スピンドル・制御基板・電源など一式セットで10万円ぐらい。

これのほかに必須なのは

  • エンドミル
  • 固定用の何か (両面テープとかバイスとか)
  • USB 用のインターフェイス

10pcs エンドミル 1.0mm - SODIAL(R)

SODIAL(R)

4.0 / 5.0

ニチバン 強弱セロハン 両面テープ セルタック 15mm×20m CW-D15 - ニチバン(Nichiban)

ニチバン(Nichiban)

4.0 / 5.0

Grbl - USB G-code 実行

Grbl はシリアル経由で G-code を与えると制御用信号を生成してくれるファームウェアで、オープンソースで開発されている。Arduino に書きこめば動いてくれる。Arduino Nano 互換ボードに書きこんで使っている。

CNC 用のステッピングモータ制御基板は、古来からパラレルポート (という名のGPIO) をインターフェイスにしているが、現代のコンピュータにはパラレルポートは存在していないため、制御信号をコンピュータで直接つくるのではなくマイコンにやらせる、という感じ。

書きこんで設定すれば動くので特筆するようなことはない。

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=1 (dir port invert mask:00000001)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=50.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=25 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=1066.667 (x, step/mm)
$101=1066.667 (y, step/mm)
$102=1066.667 (z, step/mm)
$110=800.000 (x max rate, mm/min)
$111=800.000 (y max rate, mm/min)
$112=800.000 (z max rate, mm/min)
$120=150.000 (x accel, mm/sec^2)
$121=150.000 (y accel, mm/sec^2)
$122=100.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)
$131=150.000 (y max travel, mm)
$132=60.000 (z max travel, mm)

仕様通りに設定すればちゃんと動いた。

配線の回路図

とりあえず仮でリミットスイッチを強力な両面テープを使ってつけており、ホーミングも実際は有効にしている。

緊急停止ボタンは、一番最初のうちからつけておくべき。うっかり操作をミスったときにとても便利。だいたい機械側からガガガガ〜とか音がなるとパニくるので、停止ボタンだけはとにかく物理ボタンで目立つようにすべき。

ちなみにこの緊急停止ボタン、中国製の安いの買ってみたら接点が接触しないという、用途的に致命的だろという欠陥製品だった。一旦分解して接点にハンダ盛ったした……

ノイズ対策

制御基板まわりや Arduino まわりがデリケートで、スイッチング電源の近くに置くとちょいちょい誤動作することがあった。距離を離しつつパッチンコアを入れて対応したら完全に大丈夫になった。

防音箱

動かしている間結構なお点前の音を出すのと、安全性のため、最初から箱を作ろうと考えていた。

仕様に書いてあるサイズを信用できなかったので、届いたものの稼動範囲や、でっぱりを調べたところ、内径として

   H=420mm
   W=410mm
   D=530mm

ぐらいは必要ということがわかった。スピンドルのでっぱりがかなり大きかった…

一旦箱の全景を SketchUp でモデリングしたあと、板取図も SketchUp でおこし、エコモクという通販サイトにカットを依頼した。


かなり正確にカットされたのがきて良かった。板さえ完璧に切れていれば組立は一瞬なので最高。

材質はパーティクルボード。MDF よりも若干比重が高く (遮音性が高いということ)、そして安価なのでこれにした。板は安いが配送料がどうしても高くなる。

防音箱の下にはゴムの防振パッドをしいている。

また、中身に吸音シート (ホワイトキューオン) を貼っている。ホワイトキューオンは50mm厚のやつを裂いて4分の1にしてある。最初吸音材は貼らないつもりだったけど、実際やってみると共鳴音っぽい響きをしてしまったので結局入れた。

東京防音 吸音・防音材 ホワイトキューオン ESW-415 415mm×910mm×厚50mm 1枚入 - 東京防音

東京防音

5.0 / 5.0

東京防音 防音戸当たりテープ TP-25 黒 幅15mm×長2M×厚2.5mm 2本入 - 東京防音

東京防音

3.0 / 5.0

東京防音 防振マットTI-505V4黒 - 東京防音

東京防音

3.0 / 5.0

扉は、スペースに余裕がないため観音開きにし、マグネットキャッチによってできるだけぴったり閉まるように調整をした。最初、ローラーキャッチで試してみたけど、キャッチの力が弱くてダメだった。マグネットキャッチのほうが保持力が強いみたい。

LED のライトもつけてある。秋月で250円で売っているやつ。普通の部屋用のLEDライトだとオーバースペックだよなと思って試してみたけど正解だった。ちょうどいい。micro USB 端子から直接12Vに昇圧できるボードを入れて、配線を簡単にした。

制御まわり

別のエントリを書く

500 Can't connect to lowreal.net:443 (certificate verify failed)

  1. トップ
  2. tech
  3. CNC フライスを買った。

Grbl を使うのはいいとして、Grbl をコントロールして G-code を送りこむプログラムと、そもそも G-code を生成するプログラムなどが必要になってくる。

最初は Using-Grbl にある通り Universal G-code Sender を使ってみたのだけど、最低限の機能はあるんだけど、いまいち自分の要求が満たせなかった。このページの他のも見てみたけど、実装が微妙だったりしたので、結局自分で書いた。

GrblServer


https://github.com/cho45/GrblServer

そもそもやりたいこととして

  • 無線でジョギング(手動でXYZを動かす)
    • スマフォとか
  • 複数の端末で同時に表示を行いたい
    • 箱の近くのRaspiと、ネットワーク上の別のPCとか

で、これらを実現するため

  • シリアルポートで Grbl を通信しつつ WebSocket を喋るサーバ
  • そのサーバと通信して制御するHTMLのビュー

を作った。前者は nodejs、後者は Polymer を使って実装している。

実際の使用

Grbl のサーバはネットワークに繋げた Raspberry Pi で動かしている。WebSocket は same-origin ポリシーとかがないので、LAN 内なら接続を許可するようなコードにしてある (つもり)

サーバさえ立っていれば、LAN 内のどの端末でも Grbl を制御できるので、PC 上で G-code を作ったやつを実行させたり、スマフォで開いてXYZを手動で動かして原点を出したりとできる。自分的には現時点でそこそこ満足いく構成になっている。

G-code 生成ソフト (CAMソフト)

別のエントリを書く

CNC フライス、G-code 生成・CAM・CADソフト編 | tech - 氾濫原

  1. トップ
  2. tech
  3. CNC フライス Grbl 制御編

G-code 流しこむまではいいとして、そもそもG-codeを用意できなければならない。

無料なのも有料なのもいろいろあるが、簡単すぎるのから難しすぎるのまでピンキリで選定が難しい。

結論からいうと SkechUp MAKE を CAD として使用し、SketchUcam という SkechUp 用の CAM プラグインを使って G-code に落としこんでいる。

SketchUcam の勘どころ

SketchUcam は基本的に 2.5D CAM なので、パスの設定は完全に平面でなければならない。(Z軸方向の高さがあってはならない)

また、設定したセーフエリア外のオブジェクトは完全に無視される。SketchUp 上の複数の図面を書いたうえで、セーフエリアだけを動かせばそれぞれ別の G-code として生成できる。

2段以上の加工を行う場合、SketchUcam では一発で生成できないので、図面コピー + 切削条件再設定が必要。セーフエリアを動かして複数回 G-code 生成を行って、連結する。

SketchUcam でワーキングポジション設定

SketchUCam はセーフエリア(機械稼動範囲)の設定ができるが、セーフエリア左下に常に原点が固定されてしまう。しかし実際は「ここを中心(原点)にして機械を動かしたい」という場合がある。

可能なら任意の点を原点にできればいいんだけどできないので、オフセットを設定するしかない。

セーフエリア内の適当なところ(中心とか)にオブジェクトを起き、機械側でも原点まで移動させたあと、ゼロリセットではなく、オフセット分のリセットを行う。

例えば、セーフエリア原点から 50mm, 50mm オフセットした位置を中心にして図面を書いた場合、機械側の原点あわせは、中心点を手動であわせたあと、G10 P0 L20 X50 Y50 とか送ればいい。

生成済み G-code の確認方法

ビューの状態によってオブジェクトが出力されたりされなかったりするので、生成した G-code は必ず確認が必要。

この用途だと OpenSCAM が良さそうなので使っている。

  1. G-code を出力したら、 OpenSCAM 側でそのファイルを開く。
  2. OpenSCAM の Workpiece Settings を Manual にし、切削対象の大きさにあわせる
    • 最低でも Z 軸は正しくしないといけない。1mm厚で原点を上に設定する場合 Z Dimension は 1.00000, Offset は -1.00000 になる
  3. Tool View を選択し、エンドミル直径を変更する
  4. Simulation View の下側にある Rerun simulation ボタンを押す

特に Z 軸方向のチェック、例えば貫通すべきパスが貫通しているかとかをちゃんとチェックする。

出力しなおした場合、Rerun simulation すれば再度リロードされる。

これで正しく切削できそうなのが確認できればいよいよ実際に切削できる。

  1. トップ
  2. tech
  3. CNC フライス、G-code 生成・CAM・CADソフト編

WebAudio で入門する 信号処理

メインセッションは、いつも20分枠に応募して、かなり説明をはしょりまくってもギリギリ、という感じだったので60分(50分)にしてみたのですが、時間配分が難しくて結局あわあわしてしまいました。これならもっと切りつめて20分のほうがメリハリがあってよかったので、大変大変反省しています。

いちおう少しでも面白いという反応が頂けのがよかったです。少しでも WebAudio 面白そうということで手を出していただければ幸いです。

LT コミュ力あげてこ

音量がうまくでないトラブルがありご心配をおかけしました。接続テスト時にネタバレをしたくなかったので、別のツールで「音が出る」ことだけを確認して、音量ならいくらでもあがるやろwwwと思っていたら全然あがらなくてあせりました。

本当は 1.5分ぐらいひたすらモールス聞きとり(説明しませんでしたが、流れてくるモールスの聞きとりをやっていたのです)をやろうと思ったのですが、トラブルで時間をとられたので早々に諦めました (音が出た時点でデオチなので)。

ネタですがモールスやったらいいのにというのはマジ

YAPC::Asia Tokyo 2015

今回あんまりセッションを聞けなかったので、動画の公開を楽しみにしたいと思います。

とりあえず CONBU さんの LT が最高に面白かったし、衝撃的すぎて良かった。LT でいっぱい人が出てくるという発想がまず全くなかったのでやばかった。

あと、今回は LT のドラの前に終わる人が多いように感じた。自分もそうだけど焦りすぎたかもしれない。結構、20分トークぐらいのをLTで圧縮する(そしてドラがなる)というのが例年あった気がするけど、リジェクトコンとかが充実してきてそういうのがなくなったのかもしれない。

最後の YAPC::Asia Tokyo、牧さんはじめスタッフのみなさん本当にありがとうございました。

  1. トップ
  2. tech
  3. YAPC::Asia Tokyo 2015 - 「WebAudio で入門する 信号処理」「(LT) コミュ力あげてこ」

個人で何か開発するなら、何らかのプロダクトに対する哲学が必ずあるはずだと考える。「作りたいから作った」はそうだけど、「作りたい」という気持ちには必ずなぜ作りたいと思ったかの理由があり、突き詰めると自分の根本的な考えかたが出てくるはずだと考える。