Raspberry PiでMCP3425を16Bitモードで使う方法 (Python)

Raspberry Piにアナログ入力が無いことに不満を申す筆者です。Arduinoにはありますが性能が10ビット(0~1023)でこれまたなんとも心許ないです。さて、MCP3425では16ビットもの分解能を誇り、I2Cで通信することが可能なので容易に設定を行うことができます。更に、MCP3425はマイナス値も測ることが可能です。ここではI2Cの設定方法は記載しません(ググってみてください)。

1. – MCP3425の構成

はじめにMCP3425の構成を確認する必要がある。

上記画像ではMCP3425の役割とRaspberry Piに接続するための案内図。

%e7%84%a1%e9%a1%8c%e3%81%ae%e5%9b%b3%e5%bd%a2%e6%8f%8f%e7%94%bb-2
MCP3425実図

MCP3425の方向は白い点を観て向きを確認。

Untitled Sketch_ブレッドボード.png
電池の電圧計測 (結線図)

実際に結線をして実際に動作しているかを確認コマンドで確認。

$ sudo i2cdetect -y 1

2. – 16Bitモードで計測を開始

PythonでMCP3425を操作する。電圧値が取得&表示されるプログラム。

$ vi mcp3425.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import smbus
import time
bus = smbus.SMBus(1)
bus.write_i2c_block_data(0x68, 0b10001000, [0x00])
time.sleep(1)

data = bus.read_i2c_block_data(0x68, 0x00, 2)
raw  = data[0] << 8 | data[1]

if raw > 32767:
   raw -= 65535
vol = 2.048 / 32767
print str(raw*vol) + " [V]"

2017-02-03 04:02 レイアウトがズレて誤ったプログラムを記述していました。修正済みです。申し訳ございません。WordPressの仕様で勝手に変換されてしまうみたいです。

最後に実行。

$ sudo python mcp3425.py

測定結果は下に載せておきます。

3. – 解説

MCP3425のデータシートを参考にする。

bit 7

RDY:Ready Bit
This bit is the data ready flag. In read mode, this bit indicates if the output register has been updated with a new conversion. In One-Shot Conversion mode, writing this bit to “1” initiates a new conversion.
Reading RDY bit with the read command:
1 = Output register has not been updated.
0 = Output register has been updated with the latest conversion data.
Writing RDY bit with the write command:
Continuous Conversion mode: No effect
One-Shot Conversion mode:
1 = Initiate a new conversion.
0 = No effect.

bit 6-5

C1-C0: Channel Selection Bits
These are the Channel Selection bits, but not used in the MCP3425 device.

bit 4

O/C: Conversion Mode Bit
1 = Continuous Conversion Mode. Once this bit is selected, the device performs data conversions
continuously.
0 = One-Shot Conversion Mode. The device performs a single conversion and enters a low power
standby mode until it receives another write/read command.

bit 3-2

S1-S0: Sample Rate Selection Bit
00 = 240 SPS (12 bits),
01 = 60 SPS (14 bits),
10 = 15 SPS (16 bits)

bit 1-0

G1-G0: PGA Gain Selector Bits
00 = 1 V/V,
01 = 2 V/V,
10 = 4 V/V,
11 = 8 V/V

MICROCHIP社『MCP3425  16-Bit Analog-to-Digital Converter with I2C Interface and On-Board Reference』 14ページより引用

各種説明

各ビット ビット 説明
Bit 7 1 新しい変換を開始。
0 何もせず。
Bit 6 0 チャンネル選択ビットだが、このチップでは使いません。0を選択。
Bit 5 0 チャンネル選択ビットだが、このチップでは使いません。0を選択。
Bit 4 1 連続変換モード。
0 ワンショット変換モード。デバイスは1回の変換を実行し、低電力になる。
Bit 3-2 00 12ビットで取得。1秒間に240取得。
01 14ビットで取得。1秒間に60取得。
10 16ビットで取得。1秒間に15取得。
Bit 1-0 00 ゲイン 1倍。
01 ゲイン 2倍。
10 ゲイン 4倍。
11 ゲイン 8倍。

3.1. – 書き込み設定

これを参考にしてパラメータを設定した。以下のプログラムの一部がそれである。

bus.write_i2c_block_data(0x68, 0b10001000, [0x00])

端から並べていくのだ!Bit 7には新しい変換要求、Bit 6からBit 5は無視して0、Bit 4はワンショットコンバージョンモードの選択、Bit 3からBit 2までがビット指定(12ビットの場合 [00]、14ビットの場合[01]、16ビットの場合[10])、Bit 1からBit 0までがゲイン設定(1倍指定は[00]、2倍指定は[01]、4倍指定は[10]、8倍指定は[11])。これらをつなげる。今回であれば0b10001000という構成になった。ちなみに12ビットにしたければ、0b10000000です。

ちなみに基数の接頭表記法は下記の表に示す。

基数 接頭
2進数 0b 0b110
8進数 0o 0o310
10進数 0d 0d209
16進数 0x 0x1F2
無題の図形描画 (3).png
MCP3425 要求

これらが各種ビットによる性能。16ビットで電圧を測定すると12ビットに比べて16倍細かく計測することが可能となる。しかしSPSは1/16しか計測できない。

ビット数 1秒あたりの取得数 [SPS] 設定値 分解階調
12ビット 240 00 4,096
14ビット 60 01 16,384
16ビット 15 10 65,536

これらが各PGAゲイン。倍率を示す。

PGAゲイン 設定値 倍率 [倍]
1 V/V 00 1
2 V/V 01 2
4 V/V 10 4
8 V/V 11 8

3.2. – 読み込み設定

MCP3425からデータを読み出す必要がある。bus.read_i2c_block_dataにて読み出す。右は2バイト(=16ビット)でデータ格納を行っている。

data = bus.read_i2c_block_data(0x68, 0x00, 2)

これによって読み込みが行われる。次にビットをシフトして16Bitとして整形しなければならない。”bus.read_i2c_block_data”はdata[0]及びdata[1]に格納される。

raw = data[0] << 8 | data[1]

実際にdata[0]とdata[1]に何が格納されているか確認する必要がある。

AAAAAAAAAAAAAA.png
表示サンプル

data[0]とdata[1]を合わせた(OR = 論理和)のが562である。

無題の図形描画.png
data[0]とdata[1]の表示
表示は10進数で表示されているが、実際の作業は2進数で行われる。

無題の図形描画 (1).png
変換工程

ここでまた話が戻るが、ビット演算を使っている。”<< 8″は左に8つシフトを表している。詳しくは図解で。

raw = data[0] << 8 | data[1]
無題の図形描画 (1).png
ビットシフトの原理

data[0]を左に8動かす。その間には0が8入る。次にORによる演算を行う。次にdata[1]を導入する。

raw = data[0] << 8 | data[1]
無題の図形描画 (3).png
ビットシフトとORの原理

3.3. – 測定結果

測定結果は以下の通り。小さい電圧値も計測できることに加えて、マイナス値もしっかりと計測できることを確認した。

ccc1
測定結果 #1
ccc2
測定結果 #2

以上です。今後プログラムについては修正する場合があります。間違いがあったら教えてください!

以上

[Armbian]: How to Connect Orange Pi Zero to WiFi

Raspberry Pi Zero has no WiFi function. However, Orange Pi Zero has WiFi function. You cannot use the WiFi function simply by installing Armbian on Orange Pi Zero.

Here, we describe a method for connecting Orange Pi Zero with Armbian installed to WiFi.

1. Setting “wpa_supplicant.conf”

Introduction it’s necessary to set basic information for connecting to WiFi. Please prepare your WiFi SSID and Password. Write the setting information using an arbitrary Editor. Please change the part of “[SSID]” and “[PASSWORD]”.

$ sudo sh -c "wpa_passphrase [SSID] [PASSWORD] >> /etc/wpa_supplicant/wpa_supplicant.conf"
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
 ssid="Your_SSID"
 #psk="Your_Password"
 psk=c174a8f925b06ba03ad00bfa0d91210c7f28f9071bac05c8530146eb59c1e250
}

2. Setting “interfaces”

After setting WiFi, proceed to the next. Edit “/etc/network/interfaces” using an arbitrary editor.

$ sudo vi /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet dhcp

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
$ sudo reboot

 

Thank you.

あけましておめでとうございます

あけましておめでとうございます!こんにちは、筆者です。2017年来ましたね。5.4万人がこのスカスカのサイトに来てくれました。

あけましておめでとうございます!

2017年から筆者も忙しくなりそうですが、『きのこタイム』は更新していくのでよろしくお願いします。あと個人的なことですが、ある期間すごく忙しかったので絶賛白髪が増殖中。こまった…。

以上

PHPでCPU温度やCPU周波数を取得するプログラム

こんにちは、筆者です。PHPでCPU温度とCPU周波数を取得するプログラムを作成しました。WordPress上でウィジェットなどに実装して使えます。ちなみにウィジェットに実装する場合、『Insert PHP』というプラグインを実装すればよいかと。

  • CPU温度取得

root不要で取得できます。単位は°Cです。

echo round((exec('cat /sys/class/thermal/thermal_zone0/temp')/1000),2);
  • CPU周波数取得

root不要で取得できます。単位はMHzです。

echo round((exec('cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq')/1000),2);
  • ウィジェット実装例

実際にWordPressに実装してみました。サーバーはRaspberry Pi 2でCoreが4つあります。
*cpu0 ~ cpu3まで

server-info
WordPressに実装
  • あとがき

こんな感じで表示できます。よろしければ使ってみてください。

Raspberry PiにHamachiをインストールするのが更に簡単になったので紹介

以前紹介した方法は古いヴァージョンでインストールにはlsbやlsb-coreが必要であった。今回紹介するヴァージョンではパッケージ等の導入する必要がない。

今回使うヴァージョンは2.1.0.174-1である。これ単体でインストールすると、Hamachiの導入とHamachiの自動起動まで設定される。

$ wget https://www.vpn.net/installers/logmein-hamachi_2.1.0.174-1_armhf.deb
$ sudo dpkg -i logmein-hamachi_2.1.0.174-1_armhf.deb

ログイン作業を行えばHamachiのグループに参加することが可能となる。最後のhamachi joinはWEB承認を使っている場合不要で、WEB承認を使っている場合はWEB上から承認すると参加できる。

$ sudo hamachi login
$ sudo hamachi attach [Your Hamachi Email Address]
$ sudo hamachi set-nick [Whatever Nickname You Make]
$ sudo hamachi join [Network ID] [Password]

これでログインが完了となる。Raspberry Piを再起動して自動起動するか確かめてもらいたい。

以上

クリスマスが仏滅である年 (クリスマス六曜カレンダー) 2016年~2049年まで

クリスマスが仏滅である年、クリスマス六曜カレンダーを作ってみました。ネット上に無かったので。筆者自身あまり、占いの類にはあまり興味ないのですが、よく競馬などで六曜を見たりします。まぁ暇だったのでクリスマス版を作りました。

六曜のサイクル。大安に始まり仏滅。そして時間帯によって吉だったり凶だったりする。それを表に示します。
(クリスマスと仏滅ってまったく関係ないですけども…。)

六曜 午前 午後
大安
赤口 11時~13時が○、以外は×
先勝 ×
友引 11時~13時が×、以外は○
先負 ×
仏滅 × ×

さぁ!これがクリスマス六曜カレンダーだ!イブの仏滅が8個、クリスマスに4個である。

区分 曜日 六曜
2016年
クリスマス・イブ(12/24) 土曜日 赤口
クリスマス(12/25) 日曜日 先勝
2017年
クリスマス・イブ(12/24) 日曜日 大安
クリスマス(12/25) 月曜日 赤口
2018年
クリスマス・イブ(12/24) 月曜日(振休) 仏滅
クリスマス(12/25) 火曜日 大安
2019年
クリスマス・イブ(12/24) 火曜日 友引
クリスマス(12/25) 水曜日 先負
2020年
クリスマス・イブ(12/24) 木曜日 友引
クリスマス(12/25) 金曜日 先負
2021年
クリスマス・イブ(12/24) 金曜日 先勝
クリスマス(12/25) 土曜日 友引
2022年
クリスマス・イブ(12/24) 土曜日 先勝
クリスマス(12/25) 日曜日 友引
2023年
クリスマス・イブ(12/24) 日曜日 仏滅
クリスマス(12/25) 月曜日 大安
2024年
クリスマス・イブ(12/24) 火曜日 仏滅
クリスマス(12/25) 水曜日 大安
2025年
クリスマス・イブ(12/24) 水曜日 先負
クリスマス(12/25) 木曜日 仏滅
2026年
クリスマス・イブ(12/24) 木曜日 友引
クリスマス(12/25) 金曜日 先負
2027年
クリスマス・イブ(12/24) 金曜日 先勝
クリスマス(12/25) 土曜日 友引
2028年
クリスマス・イブ(12/24) 日曜日 先勝
クリスマス(12/25) 月曜日 友引
2029年
クリスマス・イブ(12/24) 月曜日(振休) 赤口
クリスマス(12/25) 火曜日 先勝
2030年
クリスマス・イブ(12/24) 火曜日 仏滅
クリスマス(12/25) 水曜日 赤口
2031年
クリスマス・イブ(12/24) 水曜日 先負
クリスマス(12/25) 木曜日 仏滅
2032年
クリスマス・イブ(12/24) 金曜日 友引
クリスマス(12/25) 土曜日 先負
2033年
クリスマス・イブ(12/24) 土曜日 先勝
クリスマス(12/25) 日曜日 友引
2034年
クリスマス・イブ(12/24) 日曜日 赤口
クリスマス(12/25) 月曜日 先勝
2035年
クリスマス・イブ(12/24) 月曜日(振休) 大安
クリスマス(12/25) 火曜日 赤口
2036年
クリスマス・イブ(12/24) 水曜日 大安
クリスマス(12/25) 木曜日 赤口
2037年
クリスマス・イブ(12/24) 木曜日 仏滅
クリスマス(12/25) 金曜日 大安
2038年
クリスマス・イブ(12/24) 金曜日 先負
クリスマス(12/25) 土曜日 仏滅
2039年
クリスマス・イブ(12/24) 土曜日 先勝
クリスマス(12/25) 日曜日 友引
2040年
クリスマス・イブ(12/24) 月曜日(振休) 先勝
クリスマス(12/25) 金曜日 友引
2041年
クリスマス・イブ(12/24) 火曜日 大安
クリスマス(12/25) 水曜日 友引
2042年
クリスマス・イブ(12/24) 水曜日 大安
クリスマス(12/25) 木曜日 赤口
2043年
クリスマス・イブ(12/24) 木曜日 仏滅
クリスマス(12/25) 金曜日 大安
2044年
クリスマス・イブ(12/24) 土曜日 仏滅
クリスマス(12/25) 日曜日 大安
2045年
クリスマス・イブ(12/24) 日曜日 先負
クリスマス(12/25) 月曜日 仏滅
2046年
クリスマス・イブ(12/24) 月曜日(振休) 大安
クリスマス(12/25) 火曜日 友引
2047年
クリスマス・イブ(12/24) 火曜日 赤口
クリスマス(12/25) 水曜日 先勝
2048年
クリスマス・イブ(12/24) 木曜日 大安
クリスマス(12/25) 金曜日 赤口
2049年
クリスマス・イブ(12/24) 金曜日 仏滅
クリスマス(12/25) 土曜日 赤口

本日の筆者

こんにちは、筆者です。12月は書く記事もなく終わりそうなのでくだらないことを記事にします。

筆者の本日の昼飯

Amazonのセールにて大量にポテチを購入した筆者。昼飯にはポテチは欠かせないのです。それとからしマヨネーズをつけて食べるのがマイブーム。

からしマヨネーズとコンソメポテトチップス
奇跡のコラボレーション

AMD Athlon 5350でVMware

1年前くらいに筆者はAMDのAthlon 5350という省電力かつ安価なCPUを購入しました。作っていつも満足している筆者。今回は5350を使ってVMwareでUbuntu Mateを動作させたいと思います。そして動作の感想などを報告したいと思います。

インストールに成功

解像度の調整やアップデートをしてきのこタイムをFireFoxでみてみました。動作も問題なく比較的安定していました。これはVMwareだからかもしれませんね!それを加味しても5350で仮想を動かせるとはかなりコスパの良いCPUといえます。ヌルヌル動いてくれました。

実際にサイトを観てみた

 

こんな感じで今日も筆者はダラダラ過ごしています。

以上

AliExpressで頼んだものが届いたもの報告 #02

こんにちは筆者です。報告2日目です。iPhone関連のアクセサリーが思った以上に速く届くので嬉しいなーなんて思ってるところです。

トップバッターはMicro USBをMini USBに変換するアダプターです。1つで0.85 USDです。日本だと200~300円しちゃいます。結構お買い得だったので2つ買いました。

Micro USBをMini USBに変換するアダプタ

昨日に引き続きiPhoneのLightning Cableが届きました。PZOZというもので3つ買いました。グレーとシルバーでどちらも1.87 USDです。

PZOZ iPhone Lightning Cable
しっかりとした作りでした。
別アングル

充電とPCとの同期も確認しました。ちなみに筆者の使ってるiPhoneはiOS 10.1.1です。機種はiPhone 6s Plus。コスパいいですねこのケーブル。

次はXiaomiのイヤホン PISTON 4 (2016)です。19.92 USDで購入しました。中国で大手のXiaomiは品質がよく筆者が大好きなメーカーです。ちなみにXiaomiのイヤホンは中国国内で偽物が出回るほど人気の商品です。

しっかりとしたパッケージ
中身は取扱説明書、イヤーピース イヤホン本体
ケーブルには正規品か確認するQRコードがあります。

ちなみにこのQRコード読み取ってみると502 Bad Gatewayが発生します。

502 Bad Gateway

解決方法として中国のプロキシ(Proxy)を使うことによって正しく認証画面が表示されたことを確認できました。

最後に電池ボックスです。日本で買うとケッコー高いのです。こちらは1つ0.18 USDです。20個も買っちゃいました。

Battery Box

今日はこれくらいで報告終了。

報告以上

WLI-UC-GNHPをWindows10で使う方法

変な時間帯に寝てしまった筆者。寝れなくなって暇だし、10月に何も投稿していないからちょうどいいしと。

WLI-UC-GNHPってどんなやつってこんなやつです。

机の上に落ちていたWLI-UC-GNHP

==========
追記:3:20
『子機インストールCD』を使うことによって下の長い手順を踏まなくても簡単にインストールできるみたいです。
BUFFALO – 子機インストールCD
結局こっちの簡単な方で使うのか、長々と書いた方でやるのかどっちがいいんだろうか…。たぶんこっちの方なんだろうなーと。さてまた寝るか…。
==========

この無線LAN子機結構古い!古すぎるのだ!ドライバーは公式からダウンロードしてきた。

ちなみに普通にインストールすると

このWindowsには対応していません。[完了]ボタンをクリックするとインストール方法を表示します。

こんなメッセージが表示されちまいます。そりゃ『2010年11月8日掲載』と書いてるだけありますな!6年前になにしてたっけと思いながら。以下が筆者のインストール手順です。一応自己責任でお願いします。

  1. さっきダウンロードした公式ドライバー(wliucgn-211)を実行して展開します。インストール実行が開かれますが、閉じてください。デスクトップに『WLIUCGN211』というフォルダができます。
  2. 『Windows Key』か『スタートメニュー』を表示させ、『コンピューターの管理』と検索して選択してください。
  3. 『システムツール』に『デバイスマネージャー』という項目があり、それを選択します。
  4. 『ほかのデバイス』に『802.11 n WLAN』という項目があると思います。
  5. 右クリックをして『ドライバーソフトウェアの更新(P)…』を選択します。
  6. 『コンピューターを参照してドライバーソフトウェアを検索します(R)』を選択します。
  7. フォルダーの選択には先ほどデスクトップに展開された『WLIUCGN211』を選択します。あとサブフォルダーも検索にチェックを入れます。
  8. 『BUFFALO WLI-UC-GNHP Wireless LAN Adapter』が追加されます。

これで使えるようになったかと思います。ちなみに使用環境はWindows 10 x64です。

wifi.png
接続完了

デスクトップPCだからLANケーブルで繋げばよいのだけど、LANポートフルに使っちゃってるので暫定的な対策とし使ってみました。

書いてるうちに眠くなってきちゃった…おやすみ。

以上

三沢基地航空祭2016に行ってきた #2

三沢基地航空祭2016に行ってきた #1に引き続き三沢基地航空祭2016に行ってきた #2を投稿します。F-2を近くでみることができました。

F-2
F-2 – 後方部
F-2 – 後方部
F-2 – 後方部
F-2 – 後方部
F-2 – 後方部
F-2 – 後方部
F-2 – 真ん中
F-2 – 背中
F-2 – コックピット
F-2 – コックピット

近くでF-2を観ることができるよい機会でした。

【案内】
三沢基地航空祭2016に行ってきた #1
三沢基地航空祭2016に行ってきた #2
三沢基地航空祭2016に行ってきた #3
三沢基地航空祭2016に行ってきた #4
三沢基地航空祭2016に行ってきた #5 ≪最終≫