Wikipediaで検索する

今日は、Wikipediaで検索するプログラムを作ってみました。

Wikipediaでは、JSON形式で応答するAPIが公開されていることを知りました。

参考文献:https://ja.wikipedia.org/w/api.php

そこで、以下のようなプログラムで検索してみました。

#!/usr/bin/env python3
# coding: utf-8
# Example 08 IoT連携の基本 HTTP GET Wikipedia情報の取得

# 参考文献:https://ja.wikipedia.org/w/api.php

from sys import argv
import urllib.request
import urllib.parse
import json

keyword = 'ウィキペディア'

print('Usage:', argv[0], '検索キーワード') 

if len(argv) >= 2:
    keyword = argv[1]

url_s = 'http://ja.wikipedia.org/w/api.php?'
url_s += 'format=json' + '&'
url_s += 'action=query' + '&'
url_s += 'prop=extracts' + '&'
url_s += 'exintro' + '&'
url_s += 'explaintext' + '&'
url_s += 'titles='
url_s += urllib.parse.quote(keyword)
print(url_s)

try:
    res = urllib.request.urlopen(url_s)
    res_s = res.read().decode()
    res.close()
    res_dict = json.loads(res_s)
except Exception as e:
    print(e)
    exit()

# pages_dict = res_dict['query']['pages']
query_dict = res_dict.get('query')
pages_dict = query_dict.get('pages')
for pageid in pages_dict:
    # extract = pages_dict[pageid]['extract']
    pageid_dict = pages_dict.get(pageid)
    extract = pageid_dict.get('extract')
    if extract == None or extract == '':
        print('見つかりませんでした。',pageid)
    else:
        print(extract.split('\n')[0])

https://github.com/bokunimowakaru/iot/blob/master/learning/example08_htget_wiki.py

以下は、実行結果です。

pi@metal:~/iot/learning $ ./example08_htget_wiki.py 百科事典
Usage: ./example08_htget_wiki.py 検索キーワード
http://ja.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro&explaintext&titles=%E7%99%BE%E7%A7%91%E4%BA%8B%E5%85%B8
百科事典(ひゃっかじてん、拉: encyclopaedia)とは、あらゆる科目にわたる知識を集め、これを部門別やアルフ ァベット順・五十音順などに配列し、解説を記した書物のこと。「百科」と略記されることもある。
pi@metal:~/iot/learning $

応用として、音声認識で入力した内容をWikipediaで検索し、その結果を音声合成で再生するといった使い方が考えられます。

by ボクにもわかるRaspberry Pi
https://bokunimo.net/raspi/

XBee3 ZigBee MicroPython 基本サンプル・スクリプトで無線通信実験

MicroPythonの実行が可能なXBee3 ZigBeeモジュールでワイヤレス通信の実験を行ってみました。
XBee 3 ZigBee子機(下図・右側)の内蔵温度センサで測定した温度値をZigBee送信し、Raspberry Piに接続したXBee親機(下図・左側)で受信します。
親機(左側):Raspberry PiへXBeeを接続して製作する。子機で測定した温度情報を受信する。
子機(右側):XBee3内蔵マイコン上で動作するMicroPythonスクリプトで温度を測定し、親機へ送信する。

子機・XBee3 ZigBee の構成・MicroPythonスクリプトの書き込み方法

子機にはXBee3 ZigBeeモジュールを使用します。
MicroPythonのスクリプトを書き込むには、XBee USBエクスプローラとPCなどが必要です。スクリプト書き込み後は、電源を供給するだけで動かすことが出来ます(工作が得意な人であれば、XBee USBエクスプローラは1台だけでよい)。
使用可能なXBeeモジュール:XBee3 シリーズ
必要な機器:XBee USBエクスプローラ (スクリプト書き込み時に必要)、PC(DiGi X-CTUに必要)
必要なソフト:DiGi X-CTU(スクリプト書き込み時に必要)
サンプルスクリプトは、下記に公開しました。
XBee3 ZB用MicroPythonサンプル集
温度送信用サンプル bas04_tx_temp.py
以下に、設定方法、書き込み方法を示します。
Digi MicroPython 設定方法
1. DIGI XCTU (最新版)の「Radio Modules」のアイコン[+](Add a radio Module)で使用するシリアルCOMポートを選択する。 
2. シリアル接続したXBeeモジュールが画面左側のフレームに表示されるので、それを選択する。 
3. 右フレーム「Radio Configuration」にXBee 設定画面が表示されるので、スクロールして、「AP APIEnabe」で[MicroPython REPL [4]]を選択する。 
  [Radio Configuration]
  ▼ UART Interface
   AP APIEnabe
    MicroPython REPL [4]
4. 右フレームの上部の鉛筆アイコン(Write)をクリックする。 
5. XCTUの「Tool」メニューから[MicroPython Terminal]を選択し、接続アイコン(Open)をクリックする。
(Tera Termを使用する場合は、通信設定=9600-8-N-1・フロー制御なし、改行コード=CR、ローカルエコー=無しなどを設定する。) 
サンプル・スクリプトの書き込み方法
1.サンプルスクリプトをメモ帳や秀丸エディタで開き、[Ctrl]+[A]の操作で全選択し、[Ctrl]+[C]でクリップボードにコピーします。
2.XCTU の MicroPython Terminal または TeraTermなどで、[Ctrl]+[F]を操作し、プログラムをXBee3 ZigBeeモジュールへ書き込むモードに設定します。
3.右クリック操作でペーストを行い、クリップボードに保持したサンプルスクリプトを転送します。
4.[Ctrl]+[D]を操作し、コンパイルを実行します。
5.「Automatically run」に対して[Y]を入力すると、起動時やリセット操作時に、自動起動させることが出来ます。
6.[Ctrl]+[R]でフラッシュメモリ内のプログラムを実行します。Automatically runを設定していた場合は、リセット操作[Ctrl]+[D]で実行することも出来ます。

親機 XBee ZigBee Coordinator の構成

親機は、Raspberry PiへXBee USBエクスプローラ経由でXBeeモジュールを接続して製作します。
XBeeモジュールには、最新のXBee3 ZigBeeシリーズ、従来のXBee ZB S2Cシリーズ、S2シリーズが利用できます。
使用可能なXBeeモジュール:XBee3 シリーズ、XBee ZB S2Cシリーズ、S2シリーズ
必要な機器:Raspberry Piとその周辺機器、XBee USBエクスプローラ
必要なソフト:後述(ダウンロード)
構成: [Raspberry Pi]—-[XBee USB エクスプローラ]—-[親機XBee]-  –  –  -[子機XBee3]
XBee3とS2Cシリーズの場合は、後述のZigBeeモード設定ツール「xbee_zb_mode」を使って、Coordinator APIモードに設定します。S2シリーズの場合は、X-CTUを使ってCoordinator API用のファームウェアを書き込みます。
また、筆者が作成したXBee テスト用ツール「xbee_test」を使って、子機が送信した温度情報を受信する実験を行います。
Raspberry Pi用のプログラムを下記のコマンドでダウンロードし、コンパイルしてください。
Raspberry Pi用プログラムのダウンロード
pi@raspberrypi:~ $ git clone -b raspi https://github.com/bokunimowakaru/xbeeCoord.git
pi@raspberrypi:~ $ cd xbeeCoord/tools/
pi@raspberrypi:~/xbeeCoord/tools $ make
ZigBeeモード設定ツール「xbee_zb_mode」を起動し、XBee Coordinator APIモードに設定して下さい。下記の実行例の引数「B0」は、XBee USBエクスプローラのUSBシリアルポートです。ポートが「/dev/ttyUSB0」の場合は「B0」、「ttyUSB1」の場合は「B1」といった具合に指定してください。(ttyUSBポートが不明な場合は、マウスやキーボード以外のUSB機器を外し、Raspberry Piを再起動してから、「~/xbeeCoord/tools/xbee_zb_mode」を入力してください。)
実行後、「10」と「Enter」を入力すれば、設定できます。設定時にエラーが出た場合は、やり直してください。
ZigBeeモード設定ツールxbee_zb_mode
pi@raspberrypi:~/xbeeCoord/tools $ ./xbee_zb_mode B0
CONNECTED 0(0x00):176(0xB0)
ZIGBEE Device Type Switcher for XBee ZB S2C / XBee3 Series
00:Coordinator AT,  01:Router AT,  02:End Devic
e AT
10:Coordinator API, 11:Router API, 12:End Device API
Mode =10
設定が完了したら、XBee テスト用ツール「xbee_test」を起動してください。末尾の「B0」は「ttyUSB0」の場合です。
XBee テスト用ツールxbee_testを起動する
pi@raspberrypi:~ $ cd ~/xbeeCoord/tools
pi@raspberrypi:~/xbeeCoord/tools $ ./xbee_test B0
ここで重要な作業「ペアリング」を行います。
xbee_testは、XBeeモジュールを常時ペアリングが可能なモードに設定します。このため、通常は自動的にペアリングが行われ、xbee_testに「recieved IDNT」が表示されます。しかし、周囲に他のZigBeeが動作していた場合、他のネットワークに参加してしまうことがあります。この場合、子機のコミッショニングボタンを4回、押して、初期化して再実行する、または親機と同じPAN IDを子機に設定するなどが必要になることがあります。
ペアリング後に、子機XBee3から温度情報が送られてくると、「recieved UART」に続き、温度値と電源電圧値が表示されます。下記の例では、温度19.0℃、電源電圧3.302Vが得られました。
--------------------
recieved UART
--------------------
from   :0013A200 xxxxxxxx
status :02 broadcast packet
length :10 (0x0A)
data   : 19.0, 3.302
AT>

XBee3 MicroPythonで受信する

受信用のMicroPythonサンプル・スクリプトも準備しました。
(受信の確認には、子機XBee3をX-CTUのMicroPython Terminalに接続しておく必要があります。)
データ受信用サンプル bas05_rx.py
デバイス検索用サンプル bas06_rx_disc.py
親機となるRaspberry Piから送信を行うにはXBee テスト用ツール「xbee_test」から「tx=HELLO」のように「tx=」に続いて文字列を入力してください。
by
ボクにもわかるRaspberry Pi
https://bokunimo.net/raspi/
ボクにもわかるXbee
https://bokunimo.net/xbee/

Digi XBee3 ZB対応 XBeeライブラリ Raspberry Pi 版の公開について

Digi XBee3 ZBが、スイッチサイエンスより販売されましたので、公開中のXBee制御用ライブラリxbeeCoordのRaspberry Pi 版のXBee3対応を行いました。
スイッチサイエンスでの国内販売が開始されたXBee3 ZBモジュール。

ツールxbee_zb_modeのXBee3 対応

従来のXBee シリーズ2では、ZigBeeデバイスタイプを変更する際に、ファームウェアの書き換えが必要でした。
XBee ZB S2Cモジュールからは、XCTUや当方が作成したツールxbee_zb_mode(書籍「Wi-Fi/Bluetooth/ZigBee無線用Raspberry Piプログラム全集」付属のCD-ROMに収録)を使うことで、ファームウェアの書き換えなしに変更できるようになりました。
今回のXBee3シリーズについても、xbee_zb_modeを使ってデバイスタイプの変更が可能です。
書籍を買っていただいた方は、P.89の「新しいXBee ZB シリーズS2Cについて」に記載している方法で、XBee3シリーズのデバイスタイプを変更することが出来ます。
書籍をお持ちでない方は、後述の「XBee3対応・最新版xbeeCoord一式のダウンロード」の方法で、GitHubからダウンロードください。
XBee3を使った実験の様子。従来の開発ボードで問題なく動作した

XBeeライブラリ xbee.cのXBee3 対応

XBeeライブラリについては、XBee3対応版へ更新が必要です。GitHub上のxbee.cをダウンロードして入れ換える、もしくは一式をダウンロードしてください。

XBee3対応・最新版XBee.cのダウンロード方法

下記はXBee用ライブラリxbee.cのみをダウンロードする方法です。

pi@raspberrypi:~ $ cd ~/xbeeCoord/libs
pi@raspberrypi:~/xbeeCoord/libs $ mv xbee.c xbee_old.c
pi@raspberrypi:~/xbeeCoord/libs $ wget https://raw.githubusercontent.com/bokunimowakaru/xbeeCoord/raspi/libs/xbee.c

XBee3対応・最新版xbeeCoord一式のダウンロード方法

下記はRaspberry Pi用XBeeライブラリxbeeCoord一式をダウンロードする方法です。
pi@raspberrypi:~ $ mv xbeeCoord xbeeCoord_old
pi@raspberrypi:~ $ git clone -b raspi https://github.com/bokunimowakaru/xbeeCoord.git
pi@raspberrypi:~ $ cd xbeeCoord/tools
pi@raspberrypi:~/xbeeCoord/tools $ make clean; make
pi@raspberrypi:~/xbeeCoord/tools $ ./xbee_zb_mode B0
Running ./xbee_zb_mode
Serial port = USB0 (/dev/ttyUSB0,0xB0)
CONNECTED 176(0xB0):176(0xB0)
ZIGBEE Device Type Switcher for XBee ZB S2C Series
00:Coordinator AT,  01:Router AT,  02:End Device AT
10:Coordinator API, 11:Router API, 12:End Device API
Mode = 12
End Device API
Sending AT commands in AT mode
AT command (AT) :OK
AT command (ATAP01) :OK
AT command (ATCE00) :OK
AT command (ATSM04) :OK
AT command (ATWR) :OK
AT command (ATFR) :OK
> ~
SUCCESS
by
ボクにもわかるRaspberry Pi
ボクにもわかるXbee

CR2032コイン電池で2か月間動作するLazurite 環境センサ

スイッチサイエンス製 SSCI-031288 と Lazurite 920J との組み合わせで、CR2032コイン電池による長期間動作の確認を行ったので、報告します。
試算上1年間の動作が可能な Lazurite 920J を用いて、長時間駆動の動作確認を行ってみた。 
動作条件
子機(センサ)側のハードウェア構成は、以下の通りです。実験には、別途、親機が必要です。
Lazurite 920J
Lazurite mini用環境センサ基板
Lazurite 920Jは、試算上、コイン型リチウム電池で1年間の動作が可能ですが、今回は、送信間隔60秒、送信出力20mW、通信速度100Kbpsの厳しい条件で、確認してみました。以下に今回の条件を示します。
条件
送信間隔 60秒
送信出力 20mW
通信速度 100Kbps
使用電池 CR2032 (約200mAh) 
実験結果
上記の条件にて、67日間の動作が可能であることが分かりました。下図は期間中の測定結果です。
温度、湿度、気圧、電圧の4データを約1分に1度67日間にわたり送信し続けた。
ただし、実際にデータが得られたのは64日間で、最後の3日間は同じ値を送信していました。センサ側の動作電圧が不足して取得できなくなっていたものと思います。
停止時の電池電圧は2.63Vと、まだ残っている状態ですが、電池の内部インピーダンスや無線動作時の負荷によって、動作できなくなったものと考えられます。また、最後の3日間についても、環境センサ(Bosch製 BME280)の起動時に最小動作電圧(1.8V)を下回る状態になっていたのでしょう。
結果まとめ
終止時の電池電圧 2.63 V (開放電圧)
送信回数 97,675回
データ送信日数 67.04日
うち有効データ送信日数 64.32日
最後に
試算だけでは、分からない実際の動作時間。試算条件へフィードバックして相違点を埋めてゆくことで、より長い動作が可能になるかもしれません。
もし、似たような環境で異なる結果が得られているようでしたら、ぜひ教えていただけるよう、お願いします。
By ボクにもわかる電子工作

スピーカボックスへ収容したRaspberry Pi用ラジカセ風Speaker pHAT

Raspberry Pi用ラジカセ風Speaker pHATをケースへ入れるだけで、音質が格段にアップします。
スピーカユニットだけでは、振動版の背面の空気振動が、前面にも放射されるので、スピーカから効率よく音波を出力することが出来ません。スピーカボックスには、振動版の背面の空気振動を吸収したり、ボックス内で反射した振動により振動版を効率よく振動させたり、あるいはスピーカボックスそのものをほどよく振動したりするといった役割があります。

前回は、Raspberry Pi用ラジカセ風スピーカ Pimoroni製Speaker pHATの使い方について説明しました。今日は、このSpeaker pHATをポリプロピレン製のケースに収容してみました。
(前回の記事)
Raspberry Pi用ラジカセ風スピーカ Pimoroni社Speaker pHATの使い方

ポリプロピレン容器の蓋にSpeaker pHATを取り付ける

まずは、下図のように容器の蓋へSpeaker pHATを取り付けます。Speaker pHAT基板の裏側に実装されている電子部品をポリイミド製のテープなどで絶縁保護し、ケースの蓋をくり抜いて、装着します。
ご注意:
ここでは、ポリプロピレン製の耐熱容器を使用しましたが、ポリプロピレンは良く燃える素材です。火花や内部発熱などによって引火すると、火災の原因になります。十分に注意して実験し、実験後はACアダプタなどを抜き、電源を切って安全な場所に保管ください。
基板の4隅では、直径2.6mmのネジで容器へ固定します。さらに、背面の空気振動が前面に漏れたり、異音が発生したりしないように、接着剤を使ってスピーカとケースの長手方向を固定しました。

Speaker pHATには8個のナットが付属しています。このナットをスペーサとしてSpeaker pHAT基板とスピーカユニットとの間に入れると、隙間が出来てしまい、背面の空気振動が前面へ漏れてしまいます。したがって、基板とスピーカとの間にはナットを入れないようにしましょう。

Raspberry Pi Zero Wを取り付け、電源コードをハンダ付けする

Speaker pHATにRaspberry Pi Zero Wを取り付けます。写真の赤のコードが5V、黒がGNDです。

ただし、Raspberry Pi Zeroシリーズの5V電源には過電流保護の部品が入っていません。そこで、ヒューズを挿入しました。

ヒューズは0.3A以上、かつACアダプタからの供給でヒューズが溶断できるものを選びます。音楽を聴くような場合は、0.5Aくらいのヒューズを使用し、1.0AくらいのACアダプタを使用すれば良いでしょう。1時間に、数回程度、音声で時報や警報、連絡事項などをアナウンスする程度であれば、0.25Aくらいでも良いでしょう。ボクは長さ20mmのミニガラス管ヒューズを使用しました。

GPIOコネクタ部をより美しく

GPIOコネクタのハンダ付け部は、FMラジオのチューニングのようなデザインになっています。ピンを基板のギリギリまでニッパで切断し、ハンダを丸く盛ると、より美しく仕上がります。ただし、若干、挿抜耐回数が下がるかもしれません。製作後にHATを取り外さないのであれば、問題ないでしょう。

レベルメータの動作の様子(動画)

音楽の再生方法や、テキストの音声読み上げ方法については、下記の前回の記事をご覧ください。
(前回) Pimoroni製Speaker pHATの使い方
by ボクにもわかるRaspberry Pi
https://bokunimo.net/raspi/

Raspberry Pi用ラジカセ風スピーカ Pimoroni社Speaker pHATの使い方メモ

Pimoroni社(英国)はRaspberry Pi用の虹色のケースで有名なメーカーです。最近はRaspberry Pi用の拡張ボード(HAT)などを次々に開発しており、SwitchScienceや秋月電子通商でも取り扱われるようになりました。
その拡張ボードのなかから、スピーカ、DAコンバータ、スピーカ用アンプ、10個のバーLEDが実装されたラジカセ風スピーカSpeaker pHATを紹介します(部品は全て裏面に実装されている)。
写真は、Raspberry Pi Zero 本体+Pibow Zero ケース+Speaker pHATを組み合わせた時の一例です。懐かしいラジカセのような図柄と、再生音とともに変化するLEDバー表示、そして基板の背面では白色LED(バーLED兼用)が透過色のPibow Zeroケースを照らします。
音楽とともに揺れる光を想像してみると、ワクワクしませんか?
Pimoroni
なお、ハードウェアを製作するには、ピンヘッダとスピーカ端子の半田付け、スピーカのビス止め作業が必要です。また、Raspberry Pi Zero には、Micro SDカード、ACアダプタを始め、開発用の周辺機器(モニタ、キーボード、マウス、USBハブ、USB無線LANアダプタ等)が必要です。
スピーカを基板へビス止めするときは、スペーサ用のナットを使用せずに、スピーカ本体を基板へ接触させてください。Pibow ケースの天面がスピーカのマグネット部に接触するので、スペーサを入れると、その厚みで下記長IOコネクタの接触が不十分となります(ケースに入れない場合はスペーサを使っても良い。音質はスペーサなしのほうが良いが、スペーサが無いと大音量時に音が割れる)。

インストール方法と使い方

インストールを行うには以下のcurlコマンドを実行します。
test.shを実行すると簡単な音声と音楽を再生します。test.pyはLEDのテスト用です。
また、mpg321でMP3ファイルの再生が出来ます。
$ sudo apt-get install mpg321
$ cd Pimoroni/speakerphat/test
$ ./test.sh                                                  # LED+オーディオデモ(mpg321なしでも再生可能)
$ ./test.py                                                  # LEDテスト用
$ mpg321 test.mp3                                      # MP3再生デモ
$ mpg321 再生したい音楽ファイル.mp3           # 好きな曲を再生しよう。

AquesTalkで漢字交じりのテキスト読み上げ(音声再生)

次に、漢字交じりの音声を読み上げるAquesTalkのインストールを行ってみましょう。
$ wget http://www.a-quest.com/download/package/aquestalkpi-20130827.tgz
$ tar xzvf aquestalkpi-*.tgz
$ aquestalkpi/AquesTalkPi -f aquestalkpi/test.txt |aplay
$ aquestalkpi/AquesTalkPi "漢字交じりのテキストを読み上げます" |aplay
筆者が配布しているESP-WROOM-02用のgitをダウンロード済の方は、下記のコマンドでインストールが可能です。
$ cd ~/esp/tools/
$ aquestalk_setup.sh
インストーラ:

簡易HTTPサーバで音声データ入力用のユーザインタフェースを作成

(追記:2017/8/13)
より音声データを簡単に再生するために、Raspberry Pi上で簡易HTTPサーバを動かします。下図は、パソコンやスマホのブラウザからRaspberry Piへアクセスした時の画面です。テキストボックスへ文字を入力し、[Enter]キーもしくは[送信]ボタンをクリックすると、音声が出力されます。
以下は簡易HTTPサーバのBashスクリプトです。nkfをインストールしてから実行してください。
#!/bin/bash
amixer cset numid=1 200
IP=`hostname -I|cut -d" " -f1`
TALK="日本語を話します。"
HTML="\
HTTP/1.0 200 OK\n\
\n\
<html><head>\n\
<title>Test Page</title>\n\
<meta http-equiv=\"Content-type\" content=\"text/html; charset=UTF-8\">\n\
</head>\n\
<body>\n\
<h3>AquesTalkPi</h3>\n\
<form method=\"GET\" action=\"http://"${IP}"/\">\n\
<input type=\"text\" name=\"TEXT\" value=\"TALK\">\n\
<input type=\"submit\" value=\"送信\">\n\
</form>\n\
</html>\n\
\n\
"
echo "Listening HTTP port 80…"  
while true
do
    echo -e $HTML\
    |sed -e "s/\"TALK\"/\"${TALK}\"/g"\
    |sudo netcat -lw0 -v 80\< br>    |while read TCP
    do
        HTTP=`echo -E $TCP|cut -d"=" -f1`
        if [ "$HTTP" = "GET /?TEXT" ]; then
            TALK=`echo -E $TCP\
            |cut -d"=" -f2\
            |cut -d" " -f1\
            |sed -e "s/+/ /g"\
            |nkf –url-input` 
            echo -E "TEXT="${TALK}
            kill `pidof aplay` &> /dev/null
            sleep 0.5
            aquestalkpi/AquesTalkPi "${TALK}"|aplay &
        fi
    done
done
# ダウンロード:

音量を変更するには

音が大きすぎる時は、以下のコマンドで音量を下げることが出来ます。スピーカの振動が構造部品などで共振し、音が割れてしまう場合は、音量を下げることで、多少、改善することができます。末尾の数字を小さくするほど、音も小さくなります。

amixer cset numid=1 230

動作の一例

完成後の動作例を示す動画です。

OSのバージョンによってはSpeaker pHATが動作しないらしい

Linuxのバージョンによっては動作しないという情報を得ています。ネットに記載された情報だと、少し古い4.9.24や、4.9.25では動作しないようです。
ただし、より古いバージョンでも動作するようなので、必ずしも最新版が良いとは限りません。当方が動作確認を行った時のバージョンです。

$ uname -a
Linux raspberrypi 4.9.30+ #1001 Fri May 26 16:03:39 BST 2017 armv6l GNU/Linux

バージョンによっては下記のようなエラーが出るらしい
Unable to determine hardware version. I see: Hardware : BCM2835
つぎは、スピーカボックスへ収容します。下記のリンクをクリックしてください。
スピーカボックスへ収容したRaspberry Pi用ラジカセ風Speaker pHAT
https://bokunimo.net/blog/raspberry-pi/55/
by ボクにもわかるRaspberry Pi

熱抵抗15℃/W!? 誤差は大きいかもしれないが効果は確か!

驚きの15℃/Wの熱抵抗で放熱できることが確認できました。
タカチ製のプラスチックケースの中にRaspberry Pi Zeroを収容したときの熱対策を行っています。今回は、3M製の放熱シートを使って放熱効果を高める実験を行ってみました。
使用した3M製ハイパーソフト放熱シート 5589H。10cm×10cm×厚み1.5mm で800円程度。粘土のように変形する。1mmほどの隙間だったが、常に圧力がかかるように、1.5mmの厚目のもの放熱シートを選定した。
3M製ハイパーソフト放熱シート 5589H :
前回は、タカチのプラスチックケースLC115H-N-Dへアルミ板を装着し、放熱を高めることに成功しました。今回は、Raspberry Pi Zeroと放熱版との間に3M製のハイパーソフト放熱シート 5589H を挟み込んでみました。
前回の記事(アルミ板の効果):
前々回の記事(ケースへ収容):

※プラスチックケースからの放熱を含みます。
※簡易的な測定につき誤差が多く含まれます。

放熱シートを挟み込む

Raspberry Pi Zeroの基板の裏側に3M製ハイパーソフト放熱シート 5589H を貼り付け、筐体内のアルミ板へ接触するようにして、Raspberry Pi Zeroの発熱を、外部へ逃がせるように工夫しました。
ケース上側(写真・左)のアルミ板と、Raspberry Pi Zero基板(写真・右)との間に放熱シートが入るようにした。放熱シートをRaspberry Pi Zero基板へ張り付けた。
Raspberry Pi Zero の基板の裏側に放熱シートの接着面側を張り付けた。基板上の黄色のテープは絶縁用。放熱シートの接着面以外を囲むようにポリイミドテープで絶縁保護した。ピンヘッダなどのハンダ付け部の突起は、ニッパで切断し、平らにした。コンデンサは破裂防止用の切込が放熱板に接触しないように、一部分だけに通常のシリコンシート(3M製ではない汎用品)を貼った。
アルミ板の表面へ熱を伝えるためのビス部に凹みをつけ、放熱シートとアルミ板との接触面積が大きくなるようにした。2mm厚のアルミ板と0.5mm厚のアルミ板の2層構造にした(ビスは0.5mm厚のアルミ板に取り付け、2mm厚のアルミ板はビスを避けるための開口部を設けた)。
完成例(前回の写真の引用)

実験結果。

          状 態  室温  CPU温度  熱抵抗
          対策前 25.8 ℃  41.2 ℃  25.6 ℃/W
          対策後 27.0 ℃  35.8 ℃  14.6 ℃/W (11.0℃の改善)
簡易的な測定方法なので、実験による誤差があるかもしれませんが、11℃もの熱抵抗を改善することに成功しました。表面のアルミ板だけでも熱抵抗が10℃/W以上あると思いますので、少し過剰な改善結果のように感じられますが、大幅な改善効果があったことは明らかです。
はじめから金属製のケースで製作すれば、簡単なのかもしれませんが、加工が容易で防水加工が簡単なプラスチックケースを使った放熱は有用だと思います。参考にしていただければ幸いです。
by ボクにもわかるRaspberry Pi

Zero W対応準備を完了。タカチ製ケースに放熱対策を行ってみた。

プラスチックケース内に機器を収容しときの放熱対策として、アルミ板をケース内外に取り付けてみました。Raspberry Pi Zero Wへ対応する準備が出来たので、紹介します。
前回、タカチのプラスチックケースLC115H-N-DへRaspberry Pi Zeroを収容しました。Raspberry Pi Zeroの消費電力は80mA(0.4W)ほどと低いのですが、発熱をともなう部品であることには変わらないので、放熱対策が必要です。
前回の記事(タカチのプラスチックケースLC115H-N-D):
はじめに対策方法について説明し、後半で対策効果と検証結果について説明します。

発熱対策の方法

プラスチックケースの上部にアルミ板を取り付けて放熱します。また、内部にはRaspberry Pi Zeroからケース上部への熱路を作りました。
ケースの上部にアルミ板 40mm×30mmを取り付けた
ケース内部にもアルミ板を取り付け、Raspberry Pi Zeroと熱伝導シートなどで接触させる。

対策効果を確認する

Raspberry Pi にはCPU内部の温度を測定する機能があります。CPU内部の温度と室温との差を測定すると、ケースの熱抵抗が求まります。熱抵抗が下がれば効果ありと判断することが出来ます。
熱抵抗 = (CPU内部温度-室温) / 消費電力 [℃/W]
以下は、測定時の様子です。左側が温度計、右側が測定対象機器です。右側の機器の液晶の下段の数値がCPU内部温度です。
室温とCPU内部温度を測定しているときの様子。室温26.3℃、CPU42.8℃、消費電力0.6Wから熱抵抗は27.5℃/Wであることが分かった(撮影時)
記事の順序は前後しますが、あらかじめ製作前に対策前の熱抵抗についても求めておきました。比較結果は以下の通り、放熱対策による効果が確認できました。
          状 態  室温  CPU温度  熱抵抗
          対策前 25.0 ℃  42.8 ℃  29.7 ℃/W
          対策後 25.8 ℃  41.2 ℃  25.6 ℃/W (4.1℃/Wの改善)

対策効果の検証

最後に追加した放熱器の性能を推定することで、対策効果の検証を行います。とはいっても、かなり荒っぽい検証です。考え方だけ、参考にしていただければと思います。
熱抵抗が下がったのは対策した放熱器が、元のケースの熱抵抗に対して並列に入ったためです。
熱抵抗は、その名の通り抵抗と同じように計算することが出来ます。すなわち、29.7Ωの抵抗と未知の抵抗の並列接続で25.6Ωの抵抗値が得られたことと同じであり、以下のようになります。
          放熱器の熱抵抗 = ( 29.7 × 25.6 ) ÷ ( 29.7 – 25.6 ) = 185 ℃/W
一見するとケースよりも高い熱抵抗というのは妙に感じるかもしれません。
ケースよりも高いのは、ケースに比べて面積が5.5分の一ほどだからです。比較のために5.5分の一にすると33.6℃/Wになります。それでも、ケースよりも高いのは元のケースの面積が減ることを無視しているからです。元のケースの29.7℃/Wの5.5分の一は5.4℃/Wに相当し、この分を考慮すると追加した放熱器の性能は、28.2℃/W相当と換算でき、元のケースを下回ります。
なお、本記事で示した「ケースの熱抵抗」、「放熱器の熱抵抗」には、CPUとRaspberry Piの基板との熱抵抗や、基板から放熱器までの熱抵抗も加算された値を示しています。実際には、CPU~Raspberry Piの基板間のほうが大きいみたいです(最後の写真にケース内の温度の目安を示しています)。
※現時点では、Raspberry Pi Zero Wは国内の電波法への適合が受けれれていませんので、本ブログでは、Raspberry Pi Zero Wのアンテナ部を51Ωのダミー抵抗に置き換えて確認しました。
by ボクにもわかるRaspberry Pi

タカチのプラスチックケースに秋月I2C液晶AQM0802がピッタリ

タカチのプラスチックケースLC115H-N-Dの開口部に、秋月のI2C液晶AE-AQM0802を取り付けてみました。
余ったスペースにはDCジャックを取り付けました。
まるで市販品みたいに仕上がります。
タカチ電機工業 LC115H-N-D
秋月電子通商 AE-AQM0802
電子工作用のケースといえばタカチ電機工業。同社のプラスチックケースの開口部が秋月の液晶にピッタリだったので活用してみた。

中身はマイコンボードとWi-SUN通信モジュール

今回製作した機器の中身です。Raspberry Pi ZeroとWi-SUN通信モジュールを内蔵しました。そのうちRaspberry Pi Zero Wに置き換えて無線LANとBLEに対応する予定。
今回はRaspberry Pi Zeroを内蔵した。Raspberry Pi ZeroのUSB端子にはUSB HUBと無線LANアダプタを接続。そのうち無線LANとBLEを搭載したRaspberry Pi Zero Wへ置き換える予定。

基板をネジ止め出来るけど、秋月のユニバーサル基板とは合わない

残念なことは、秋月電子通商で販売されているCタイプやBタイプといったユニバーサル基板とは合っていないので、基板のネジ止めには工夫が必要です。
秋月のCタイプ基板を内蔵した様子。ネジ止め穴が一致しない。奥の1穴のみネジ止めが可能。他の穴には秋月で販売されているミニカードスペーサMPS-04-0を使用した。また基板が動かないように、基板の1か所にケースに合わせた穴をあけてネジを追加した。スペーサを接着剤で止めても良いかも。

完成例

下図は完成例です。液晶がピッタリとおさまっています。液晶基板の周囲にはポリミイドテープ(オレンジ色)を貼って、万が一、火花などが発生したときにケースへ引火しにくくするための対策です。
液晶がケースにピッタリとおさまった。オレンジ色のポリミイドテープを貼ることにより、火花などによる引火の懸念を低減した。
なお、今回、使用したRaspberry Pi Zeroにはワイヤレス通信機能が無いので、ケースへ収容してしまうと、Raspberry Pi Zeroの操作が出来なくなります。一方、ワイヤレス通信機能を搭載したRaspberry Pi Zero Wについては、現時点で国内の電波法に適合した認証が得られておらず、実験をすることが出来ません。
次回は、アンテナ部へ給電するチップコンデンサを取り外し、アンテナの代わりに51Ωのチップ抵抗を実装して発熱対策を行います。
by ボクにもわかるRaspberry Pi

わずか$8。Raspberry Pi 用の格安カメラを組み込んでみた

純正のRaspberry Pi専用カメラだと高価なので加工してケースに入れるのには躊躇してしまいます。
格安カメラだと加工ししたり接着して専用カメラにしてしまったとしても惜しくありません。

中国でわずか$8で販売されているRaspberry Pi用カメラをRaspberry Piのケースに組み込んでみました。

格安カメラモジュールをApple Pi 基板に接着剤で固定し、Raspberry Pi用のケースへ組み込んだ。Apple Pi基板とケースについても組み込みるように加工が必要。大切なRaspberry Pi本体については加工不要で、接続、配線が可能。

純正のカメラと同様に「raspistill」コマンドで撮影することが出来ます。
raspistill -n -o photo.jpg
例えば、下記のサンプルのシャットダウン部分にraspistillコマンドを追加すれば、ボタン操作でシャットダウンしたときの操作者の写真を保存することができます。
Raspberry Pi用 Apple Pi を実用的に使うサンプルスクリプト

5Mピクセルの高解像度撮影が可能

撮影を実行すると、数秒後に2592×1944(4:3)の5Mピクセルの高解像度写真がファイルとして保存されます。下図は撮影した写真を圧縮したものです。実用的なカメラとして十分に使えそうです。
ただし、被写体に接近するとピントが合わずにぼけてしまいます。(ピント調整部は接着剤で固定されており、調節できない)

格安カメラで撮影した写真の例。被写体が近いので、ややピントが甘くなっている。5Mピクセルの高解像度を生かせていないが、ブログ用の写真であれば十分に利用できるレベル。

以下で販売されていますが、海外からの発送につき、リスクと時間を要する点に注意してください。
海外発送・送料込 US $7.85 (Ali Express)
海外発送・送料込み 950円 (Amazon)
by ボクにもわかるRaspberry Pi