2015年10月8日木曜日

音声入力 誤認識


買い物リストを作ろうと、音声認識機能を使用。
Androidに「シェービングジェル」と話しかけたところ、

「シャイニングチワワ」

と表示された。

2015年10月7日水曜日

ねじ式薪割り機


先日のタモリ倶楽部にてねじ式薪割り機の存在を知った。
検索してみると、

 ドリル式薪割り機
 コーン スプリッタ
 ユニコーン ログ スプリッタ Unicorn Log Splitter
 スクリュー ログ スプリッタ Screw Log Splitter

などの呼び方があるようだ。
ドリルを自作している人までいる、すごい。

4, 5年前くらいから盛り上がっているようだが知らなかった。
今のところ斧で割っているが、そのうち乗り換えたい。
しかしいかんせんスペースが必要だな。

2015年9月30日水曜日

Raspberry Pi 起動時に Python スクリプトを自動実行させる


/home/pi/.config/lxsession/LXDE-pi

フォルダに行く。
.configフォルダが見えないときは [Ctrl]+[H] とすると隠しフォルダが現れる。
はじめは空フォルダだが、
なかに

autostart

という名前のファイルを作成し、中に

**************
@lxterminal -e "python /home/pi/scripts/test.py"
**************

と記述。
再起動させると自動的にターミナルの画面が立上り、Pythonのプログラムが実行されていることがわかる。

2015年9月4日金曜日

MCP4726 DAC 制御 Python script

Raspberry Pi から、I2C接続にて
12 bit DAC MCP4726
を制御するPython script を書いた。

**************************
import smbus, time
bus = smbus.SMBus(1)

def MCP4726(Vout):
    data1 = (Vout >> 4)
    data2 = ((Vout & 15) << 4
    data0 = [data1, data2]
    print "Vout = ", Vout
    bus.write_i2c_block_data(0x60, 0x40, data0)

for i in range(0, 4095, 500):
    MCP4726(i)
    time.sleep(3)
**************************

MCP4726(Vout) 関数を用いて、Vout に0から4000まで500刻みで
3 sec 間を置いて出力するプログラム。

bus.write_i2c_block_dataの
0x60はI2Cアドレス、
0x40は通常設定、
data0 で12 bit のデータを送る。

12 bit なので、最大で 1111 1111 1111b = 0xFFF = 4095
で、最初の8 bit と、後ろの4 bitのブロックに分けて送信する。

data1 = (Vout >> 4)
data1は最初の8 bitで、入力されたVoutを右に4 bitシフトして後ろの4 bitを消している。

data2 = ((Vout & 15) << 4
data2は後ろの4 bitで、Voutと15(0000 0000 1111b)とANDを取って下位4 bitを取り出し、上に4 bit シフトさせている。

これで、4095 (0xFFF) を送ると、
0xFF, 0xF0
の2ブロックデータが送信される。

MCP4726 DAC を Rapsberry Pi I2C で使う


秋月電子通商で購入した12bit DAC, MCP4726をRaspberry Piに接続してI2C通信して電圧を出力する方法。


MCP4726搭載12ビットD/A変換モジュール
http://akizukidenshi.com/catalog/g/gK-07995/
MCP47X6 (X = 0, 8 bit; X = 1, 10 bit; X = 2, 12 bit)


Raspberry Piのコンソールで、

$ sudo i2cset -y 1 0x60 0x40 0xff 0xf0 i

とすると、0xFFF(12 bit 最大値)が出る。
0x60はI2Cアドレスで、

$ sudo i2cdetect 1

で得られたアドレス。
0x40は通常設定ということのよう。以下URLを参照。
http://www.bitwizard.nl/wiki/index.php/I2C_DAC
というよりデータシートをちゃんと読んだほうが良いかもしれないが、面倒なので読んでない。

あとの0xff 0xf0
のはじめの3 byteがデータ。

最後の i は i2cset でブロックデータを送るときに必要なやつ。


Pythonでやるときは、
*******************************
import smbus

bus = smbus.SMBus(1)

s= [0xff, 0xf0]
bus.write_i2c_block_data(0x60, 0x40, s)
*******************************

などとすると動作してくれる。

参考URL
http://wiki.erazor-zone.de/wiki:linux:python:smbus:doc

Python 16進数 桁数


Pythonにて、

>> hex(0)

とすると、
0x0
と表示される。これを0x00とするには、

>> "0x%02x" % 0

とすれば良い。

参考URL
http://stackoverflow.com/questions/12969188/invalid-hex-values?answertab=votes#tab-top

2015年8月21日金曜日

OneDrive

MicrosoftのOneDriveというサービスがある。

オンラインストレージサービスであり、これにより様々なPCから同一のファイルを編集できるというメリットがある。

先日、PC1よりファイルを編集し、
その後PC2からファイルを開いたところ、先日の編集が繁栄されていない。

PC1はOFFになっており、同時に開いているなどということは無い。

参照ファイルは同じパスになっており、同じファイルである。

PC1を立ち上げ、同じファイルにアクセスしたところ、先日の編集が反映されたファイルが現れた。
復元不可能な多くのデータを追加していたため、安堵したが、

PC2ではいくら開いてもその新しいデータが見えない。

そうこうしているうちにPC1でも見えなくなってしまった。

おいおい。最悪。


オンラインストレージサービスを使用する際はちゃんとローカルにデータを残さないと駄目だと時々思い知らされる。