革製包丁の鞘(ケース?)作成

自宅の包丁をキャンプ道具として持っていくのです①。

f:id:else-something:20170615225534j:plain

去年から作ろうと思ってたキャンプ道具、その2。

持っていくことを忘れてしまったこともある包丁。
刃がついてるので、そのままお箸なんかのカトラリーとまとめて持っていくと、取り出すときなんか怖い気がしてて。

ちょうど余ってた革が合ったので、ちゃっちゃと縫って鞘にしてみました。

革はなんかの作用で和包丁なんかとは相性悪いみたい。(錆が出るとか?)
しかし、今回は安いステンの包丁だしいいかなー。

簡単な作り方

続きを読む

raspberry piでHDMIをOffにしているのに、バックライトが消えない問題への対応②

raspberry piでHDMIをOffにしているのに、バックライトが消えない問題への対応②

前回はこちら

とりあえず、単純なコマンドだとバックライトは消えないので、MOS FETを使ってモニターへの給電をコントロールする作戦。

やってみたけど、何故か失敗でしたー

ブレットボードで回路を組んでみる。

f:id:else-something:20170606231705j:plain

2SK4017を使って、ゲートにGPIO 23番を接続。
ソースをGNDに接続しつつ、ACアダプタからの12v+をモニターの電源に接続して、12v-をドレインへ。
ソースをそのままACアダプタの-に繋いだら、回路は完成。

ためしに、ラズパイのコンソールでpythonからGPIO 23をLOW/HIGHにしてみてテスターでチェックすると、ACアダプタからの通電が通ったり、切られたり。

これは期待通りの動きだと、ワクワクでテスターを外してモニターにつないでみるものの……

なんか、ずっと通電してる……

GPIOの状態関係なし……

HDMIケーブルを通じて、GNDがつなかった状態になったゃった?

あまりにも不可思議なので、色々ケーブル抜き差ししてみたりしたところ、何故かHDMIケーブルをはずした状態だと、電気的には期待した動きをする様子。

しかし、それでは映像が出なくて本末転倒虫……

考察としては、HDMIのGNDが、ラズパイのGPIOのGNDと繋がってるので、MOS FETを経由せずにぐるりと通電しちゃったのかな、と。

ラズパイ、壊れなくてよかった。。。

しかし、悔しい。

次はリレースイッチを手に入れて、試してやる。

焚き火台に合うテーブルの自作③

火に近いところにL字アングル、柿渋塗料で仕上げ

f:id:else-something:20170602205443j:plain

前回からの続き。

諸々写真にとるの忘れでた……

無塗装で行くか、オイル仕上げにするか、ウレタン塗料にするか、悩んだけれど、火の粉で焦げたりしても味になるかなぁ、と柿渋塗料を選択。
早速使ったら焦げができたので、もう少し色を濃くするかなー

柿渋塗料

ターナー 無臭柿渋 500ml

ターナー 無臭柿渋 500ml

使用感

パッチンで繋ぐの、なかなか良いけど、少し外れないか心配な感じ。
実際使ってても外れはしなかったんだけど……

パッチンは、この机における上下の衝撃に弱いようなので、ゆるゆるのダボとか、スチールの板のなどで上下ズレを抑える工夫をした方がいいかもしれない。

ちと考えます。

以上。

焚き火台に合うテーブルの自作②

囲炉裏テーブル、とりあえず組んでみよう。

f:id:else-something:20170601080551j:plain

作り方とか考えてた前回からの続き。(前回:焚き火台に合うテーブルの自作① - Live the Life you Love

ホームセンターで木材を切ってもらってるので、あとは組んでいくのみ。

机面を作っていく

1x2材で、なるべく歪みのないものを選んできたつもりだったけど、若干の反りが確認されたり、今後も歪んで来ないとも限らないので、机面の板2枚は一応ダボでつないでおくことに。

更に下穴開けて、ビスで次々止めていくと完成!

足の作成

足は、これまたホームセンターで安く売ってた松の角材?を四等分にしたものに ハンガーボルトを刺して完成。

f:id:else-something:20170601081456j:plain

ボルト受け側は、鬼目ナットで対応します。

パーツをつなぐパッチンをとめる。

パッチンを裏板の上に付けると、ばらしたときにパッチンが邪魔になってきれいに収まらない。
なので、パッチンの周りの裏板を切り取って、設置することに。

こんな感じになってます。 f:id:else-something:20170601081634j:plain

f:id:else-something:20170601082208j:plain

パッチンを互い違いに付けて、ミニテーブルにも

長い方のパーツだけでも組めるように、パッチンの付け方に気を付けておきます。

f:id:else-something:20170601082326j:plain

引っ掻けて、裏返すと、一応ミニ机に!

f:id:else-something:20170601082524j:plain

収納もそれなりにコンパクト(?)

ばらして重ねても、凸凹が無いのでスッキリとしてます。

おぉ、いいんじゃないかな?!

f:id:else-something:20170601082633j:plain

しかし、パッチンの止め方がシビアで、一ヶ所緩く閉まる所も確認できました。 ここは接合部に滑り止めも兼ねてゴムを貼って対応しよう。

うむ。

つづく。

焚き火台に合うテーブルの自作①

なぜあえて囲炉裏テーブルを作ったのかと問われれば、それは作りたかったから。

f:id:else-something:20170530083601j:plain

暖かくなってきたし、キャンプに行こうという話になり、そろそろキャンプ道具のチェックやメンテナンスをしようかなーと思ってたら、気がついた。

去年キャンプしてて、「来年こそはアレとコレを準備しておこう」と思ってたこと

という事で、去年から欲しかった焚き火台を囲むテーブル、ファイアープレイステーブルったり、囲炉裏テーブルって言ったりする、あの机の自作です。

形と作り方を考える。

まずは情報収集という事で、各社が販売している囲炉裏テーブルを調べてみる。

素材も色々あるけど、分解したときなるべく小さくなるやつが良い。 と考えると、シンプルに4つに分かれる構成で、できれば長辺同士を繋いでちいさなつくえとしてもつかえるようにしたいなと思ったり。

なので、基本的な形はやっぱりコールマンのファイアプレイステーブルを参考にすることに。

コールマン ファイアープレーステーブル 2000010397

コールマン ファイアープレーステーブル 2000010397

素材は木で、ホームセンターをぶらぶらしながら縦と横の繋ぎ方を考えてると、ふとパッチン錠(ボックスの蓋を閉めたりするやつ)の存在を知る。

こんなの。 f:id:else-something:20170531205509j:plain

これ、つかえば面白いかも……

ざっくり設計

なるべく安くあげたい気持ちがあるので、長い方の木材は、売り物の板の半分の長さにすることに。
すると短い方の木材は、板の幅の二倍、というか、机面の奥行きを長い方の板の長さから減らした長さにすれば、良いのではないかと。

更に同じ木材で裏の押さえを作れば、強度もあがるかなー。

と、そんな感じで、GoogleDriveのスプレッドシートに販売されてる板の長さ、幅、厚みをいれると、必要購入枚数とカットする長さとカット後の部材数が分かるシートを作ってみました。

囲炉裏テーブル板購入試算 - Google スプレッドシート

で、カットしてもらった木材はこんな感じ。

f:id:else-something:20170531210839j:plain

組み立ては続きで! 焚き火台に合うテーブルの自作② - Live the Life you Love

raspberry piでHDMIをOffにしているのに、バックライトが消えない問題への対応①

Raspberry pi で情報表示端末を作っているのだけど、いない時にも液晶がついててもったいない!

簡単に消せると思ったのに、消えないんだ。。。。

ざっとネット上の諸先輩方の情報をしらべていると、

tvservice

というコマンドで、HDMIのオンオフができる様子。 Raspbery Piで、HDMI出力をON/OFFする|Soramimi Vox

これぞっ!と思ってコマンドを打ってみると、下記コマンドで表示が消えるし、つけられる。

# HDMIへの信号出力を停止
tvservice -o

# HDMIへの信号出力を再開
tvservice -p
fbset -depth 8
fbset -depth 24

だが、しかし。。。 HDMIはオフにすることができて、表示は消えているのに、バックライトが消えない。。

f:id:else-something:20170512122757j:plain

HDMI信号は止まっているようなので、ハードウェアの問題?

モニタの設定でスリープの設定など弄ってみるも、改善する気配がない。 まぁ、安いモニター使ってるからねぇ。。。。

ということで、強制的に電源供給をコントロールすることにしました。 モニターの寿命が縮まるかもしれないけど、まぁやってみよう。

続きは追って。

Ubuntu16.04でDigits5を動かす方法と、CUDA8とDigits5,nVidia Driver 378の組み合わせでDigitsは動いているように見えるのに、GPUが見えない!の対処法

nvidia-smiでは正しくGPUを認識しているはずなのに。。。。

nVidiaドライバのインストールも、CUDAのインストールも、Digitsのインストールもとても簡単になったもんだ。。。と鼻歌歌いながらインストールしてたら、なぜかDigitsからGPUが見えないという現象に陥る。

インストール自体はなんの問題もなく完了しているはずなのになぜだ。。。。

結論からいうと、「libcuda1-378」が入っていなかったから。

別の端末でセットアップして、その時には同じ現象が起こっていなかったので、大層不思議だったのだけど、インストールされているパッケージをチェックして発覚。

libcudaが入っていなかったら、そりゃ動かないわ。。。。

Digits5インストール手順振り返り

nVidiaドライバのインストール

nVidiaのサイトから、ドライバを検索して必要なバージョンをチェック。

nVidiaドライバダウンロード

下記コマンドでPPAを追加して、必要なドライバをインストール

sudo add-apt-repository ppa:graphics-drivers/ppa

sudo apt-get update

sudo apt-get install nvidia-378

一度再起動しておきます。

起動完了後に下記コマンドでドライバが動いているか確認。

nvidia-smi

CUDA8のインストール

nVidiaのサイトからOSなどの環境を選択してインストーラーを入手。

Ubuntuだったので、debファイルをダウンロードします。

CUDA Toolkit ダウンロード

ダウンロードサイトで指示された通りの手順でインストール

ネットワーク経由でのインストールをするdebファイルを選んだので、

下記のような感じ。

sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

sudo apt-get update

sudo apt-get install cuda

一度再起動

起動完了後に下記コマンドでドライバが動いているか確認。

nvidia-smi

CUDAインストール後にnVidiaドライバのバージョンが変わっていたらドライバの再インストール

再インストールしなくても動くこともあると思うのだけど、公式にサポートしているとアナウンスされているものではないドライバが利用されると不具合が起こった時に悲しくなるので。。。

sudo apt-get install nvidia-378

Digits5のインストール

こちらは、経験上nVidiaのサイト上の情報でうまくいかなかったことがあったので、GitHubのドキュメントを参考にインストール。

書かれているコマンドをそのままコピペしていく感じです。

今回はUbuntu16.04なので、こんな感じに。

私の環境では。ML_REPOのインストール辺りでエラー吐いていたのだけど、一旦無視で。

ドライババージョンを気にする割に、大雑把。。。

# For Ubuntu 16.04

CUDA_REPO_PKG=http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.61-1_amd64.deb

ML_REPO_PKG=http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/nvidia-machine-learning-repo-ubuntu1604_1.0.0-1_amd64.deb

# Install repo packages

wget "$CUDA_REPO_PKG" -O /tmp/cuda-repo.deb && sudo dpkg -i /tmp/cuda-repo.deb && rm -f /tmp/cuda-repo.deb

wget "$ML_REPO_PKG" -O /tmp/ml-repo.deb && sudo dpkg -i /tmp/ml-repo.deb && rm -f /tmp/ml-repo.deb

# Download new list of packages

sudo apt-get update

# インストール

sudo apt-get install digits

一度再起動

再起動後にマシンのIPをブラウザで叩くか、マシンのLocalhostにアクセスすると、Digits5の画面が確認できるはず。

CUDA8とDigits5,nVidia Driver 378の組み合わせでDigitsは動いているように見えるのに、GPUが見えない!の対処法

もしこのような自体になったら、dpkg -l | grep cudaでCUDA関連でインストールされているパッケージをチェック。

libcuda1-378とか、ドライバーバージョンにあったパッケージが入ってなかったら、インストール。

sudo apt-get install libcuda1-378

以上

rasbian でVNCサーバーを立ち上げたのに、ログインできない時の対処法

クライアントがデフォルトの認証方法をサポートしてないみたい。

原因は、デフォルトの認証方法であるUNIX認証をサポートしていないから。(remminaの場合)
認証方法を変えればよいのだけれど、それをするためにはコンソールにアクセスし、X上で設定変更する必要があるみたい。

Xにログインするためには、モニタやらキーボード・マウスを接続する必要があり、それが嫌でVNCなんだけど。。。。

まずは、RealVNC提供のViewerで、接続してみる。

一番簡単だったのが、この方法。
接続できるクライアントアプリを使う。

www.realvnc.com

RealVNCが提供するビューアーがあるので、こちらをダウンロード。 .gzで圧縮されたバイナリファイルがダウンロードできるので、 解凍したあとに、

chmod +x VNC-Viewer-6.0.2-Linux-x64

で、実行権限をつけた後に、実行。

表示されたアプリでラズパイに接続すれば、認証問題を起こさず、接続できるはず。

remminaなどで接続できるようにする。

※今後上記Viewerを利用し続けるなら、別にこの設定する必要なし。

f:id:else-something:20170319143011p:plain

上記ビューアーで接続した後に、ラズパイのVNCサーバのオプションを開く。
securityにある「Authentication」を「VNC password」に変更。

「OK」を押すと、VNCパスワードを聞いてくるので、任意のパスワードを設定すればOK。

これで、remminaなどからでもVNCでアクセスできるはず。

raspbian jessie with pixelで、autostartファイルが機能しない場合の対処法

/etc/xdg/lxsession/LXDE-pi/autostart じゃなくて、~/.config/lxsession/LXDE-pi/autostart を使うと良い

ファイルはあるのに、使われてないみたいだから、要注意かなぁ。。。

もう、まんま、このスレッドで解決しました。

https://github.com/basdegroot/raspberry-pi-kiosk/issues/4

pixelでautostartを利用してchromium-browserを起動しようとした時、何故か全然いうこと聞いてくれない。

autostartのファイルで、試しにパネルをコメントしても、パネルが起動するし。。。。

悩んで、検索したら、
/etc/xdg/lxsession/LXDE-pi/autostart
ではなくて、

~/.config/lxsession/LXDE-pi/autostart

を編集して利用したら良かったみたい。

少しハマってしまったわ。

解決できて良かった。

PythonでOpenCVのwaitKey(1)の戻り値がなんか数値になっちゃう時の対処法

とりあえず、&0xffをつけて、ASCIIコードで判断しよう

64bit + utf-8の環境なら起こる現象みたい。(つまり、最近のほとんどのlinux環境なら起こるのね)

なんか、突発的に書き捨てるpythonプログラムで、OpenCV3系統を使ってると、いつもはまるので、備忘録的にメモ。

期待した動きをしないプログラム

例えば、こんなプログラム。

import cv2

cap = cv2.VideoCapture(0)

while True:
  ret, frame = cap.read()
  cv2.imshow('test',frame)
  key = cv2.waitKey(1)
  if key == 'q':
    cv2.destroyAllWindows()
    exit()

期待としては、ビデオデバイス0のキャプチャ画像を画面に表示している画面で、qが入力されたら終了、なんですが。

効かない。
全く効かない。

期待した動きをするプログラム

こんな風にして逃げたらいいみたい。

import cv2

cap = cv2.VideoCapture(0)

while True:
  ret, frame = cap.read()
  cv2.imshow('test',frame)
  key = cv2.waitKey(1)&0xff
  if key == ord('q'):
    cv2.destroyAllWindows()
    exit()

これでqを押したら終了するはず。

waitKeyの戻り値に0xffをつけることで、ASCIIコードにしておいて、
評価したい文字をord()を使ってASCIIコードにすることで、入力文字を正しく判定できるようにしているはず……

はずなのです。

ちゃんと理解してないから、気持ち悪いわ……