Raspberry Pi + MCP3002で照度センシング

先日書いたMCP3002でのアナログ入力方式で照度センシング基板を作った。
今回、片面基板の銅箔面に部品を載せる方法にした。両面基板は以前にも書いた様に、CNCで切削するには位置合わせが面倒なのだ。

Sense with MCP3002

MCP3002を用いた照度センサ

以前、OpenStickで作った基板はこれ。

OpenStickを用いた照度センサ

OpenStickを用いた照度センサ

多チャンネルが不要なら、MCP3002で作る方がかなりシンプルになる。

 

Raspberry Piで正統派のアナログ入力

Raspberry Piでのアナログ入力方法として、OpenStickを用いる例を先日書いたが、今回はA/D変換ICを用いる正統派の方法を試してみた。

使用したのは秋月電子で¥200のMCP3002。アナログ入力が2CHあり、SPIでRaspberry Piと接続する。

回路図

RaspiAN_SPI

回路図

Raspberry Pi側の準備
こちらを参考に設定した。

  1. sudo apt get install python-dev  でpython-devをインストール
  2. /etc/modprobe.d/raspi-blacklist.confファイルをエディタで開き、
    blacklist spi-bcm2708 行の先頭に#を追加してコメントアウト。
  3. リブート後、lsmodコマンドを実行して「spi_bcm2708    ・・・」の表示がある事を確認。
  4. 下記を実行してPython-spiをインストール
    mkdir python-spi
    cd python-spi
    wget https://raw.github.com/doceme/py-spidev/master/setup.py
    wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c
    sudo python setup.py install

お試し
次のスクリプトをspiread.pyという名前で作成。

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

import spidev
import time

CE=0

spi = spidev.SpiDev()
spi.open(0,CE)

while True:
retspi = spi.xfer2([0x68,0x00])
value = (retspi[0]*256+retspi[1]) & 0x3ff
print value
time.sleep(1)

実行結果(可変抵抗でアナログ値を変化させながら実行した例)

$ ./spiread.py
0
0
128
292
489
1023
1023
1023

Raspberry PiのSPIはCE0とCE1端子を用いて2個のSPIデバイスを個別に使用できる。これをスクリプト中では変数CEで指定している。
spi.xfer2()に渡している0x68はMCP3002に対し、「シングルエンド動作」、「アナログ入力CH0を使用」、「MSPから出力」 を設定している。 変換結果は配列retspiに2バイトで入るので、連結して下位10ビットを取出した後、print文に渡している。
なおspi.xfe2()に渡す値0x68を0x78に変更するとCH1入力を使用する事になる。

OpenStick方式と比べると・・・

  1. ICが安い
    OpenStickで使うPIC18F2550は350円。更に発振子やUSBコネクタが必要だが、MCP3002だと200円で殆ど外付け部品が不要。
  2. チャンネルが2つだけ
    OpenStickだとアナログ10CHで更にデジタル入力も使えるがMCP3002は2CHのみ。
  3. プログラムが簡単
    慣れや使用言語にもよると思うが・・・ジョイスティックの値を取るよりSPIの方が簡単な気がする。
  4. PIC18F2550のアナログソースは最大2.5KΩのインピーダンスにせよと取説に記載がある。 一方MCP3002の取説によるとアナログ入力リークが0.001μA(TYP)なので、こちらの方が扱いやすそうである。
  5. OpenStickはUSB電源駆動なので0~5Vの範囲でA/D変換する。 MCP3002はRaspberry Piと直結する場合、SPI信号が3.3VなのでA/D変換も0~3.3Vの範囲となる。

Raspberry Pi + OpenStickで照度センシング

ワケあって部屋の明るさをネットワーク経由で検出するシステムを作成しようと思った。
センシング部分は無線LANで接続したいので、簡単に行うにはやはりRaspberry Piが良い。
しかしRaspberry Piにはアナログ入力が無いので、以前にもここで書いた様にOpenStickを用いてみる事にした。

フォトトランジスタの電流変化をオペアンプでバッファリングしてPIC18F2550のアナログ端子に入力した。 ジョイスティックのデータとしてRaspberry Piに伝えるので接続はUSBでよい。

OpenStickを用いた照度センサ

OpenStickを用いた照度センサ

とりあえずRaspberry Piから読み込めている事を確認できた。
しかしシリアルインターフェースのA/DコンバータICを使うのと、どちらが簡単だったろうか?

FusionPCBにプリント基板を発注してみた。 その後

FusionPCBの基板でモータードライバを組み立ててみた。特に問題なく動作している。

RaspiMD&ROBO

レスキュークローラに実装した。さすがCNC切削基板よりもすっきりしている。

 

モータードライバの拡大写真。100μFのコンデンサのスペースが狭すぎて若干取り付け難かったが他は問題なし。

RaspiMD UP

モータードライバ部分のアップ

 

激安プリント基板のFusionPCB、他人の基板が送られて来たり、(普通便だと)かなり時間を要したり、発送番号が間違っていたりと色々問題があった。 普通だと嫌になるのだが、やっぱり激安なので次回も頼むかもしれない。

 

FusionPCBにプリント基板を発注してみた。 が・・・ の続きの続き

その後、FedExで送ったとの連絡があった。Tracking numberが記載されていたのでFedExのサイトに入力したら配送状況が表示されたので、まずは一安心した。だが・・・・

なんだかアメリカに送られている模様。テネシー、バージニア、メリーランド等、TVや映画で聞く様なところを旅している。 サイズと重量が書かれており、どう考えても大きすぎる荷物なのでどうやらTracking numberが間違って書かれている様だ。 またまたFusionPCBに問い合わせたら、「ごめん、正しい番号はこれでした :XXXXX」てな感じで返答が来た。 仕事はアバウトだがメールのレスポンスは確実に来る。

で、今日やっと到着した。

RaspiMD001Board

やっと届いた。12枚入っている。2枚はおまけ。

RaspiMD001Board_F

開封した。こちらは部品面。

RaspiMD001Board_R

そしてこちらは半田面

ちょっとゴタついたが、CNCで切削した基板とちがって本物はなんだかカッコイイ。
問題なく使えるかどうかはこれから確かめます。

 

FusionPCBにプリント基板を発注してみた。 が・・・ の続き

間違った基板が届いた件の続き。

FusionPCBから連絡があり、「間違ったから最製作して発送します。製作に7~10日かかって配送に15~30日かかります。」という様な意味の返事が来た。

そんなに待っていられないので「こっちは急いでるからExpressで送れ」と書いたら、「自分たちのポリシーで初回と同じ発送方法で送る。Expressにするなら追加で$35払え。」と言ってきた。
日本的な感覚では信じられない。ちょっと嫌になって暫く返事せずに放っておいた。

そして今日、「要求通りExpressで送ると」との事。なんで気が変ったのだろう。 さすがに評判を落としかねないと思ったのか。
という事で少しは早く届くのだろう。なお間違って届いた基板は念のため袋を開けずに置いているが、特に返せとも言ってこないのでそろそろ空けてみようかな?

しかし英語でのこんなやり取り、翻訳サイトがあって良かった。。。

FusionPCBにプリント基板を発注してみた。 が・・・

基板切削CNCを作成した事により自宅でプリント基板を作れる様にはなったが、細い配線は結構厳しい。そこで激安で話題のFusionPCBにプリント基板を発注してみた。
発注した基板はレスキュークローラ用に作成したRaspberryPi用モータードライバ。CNCで切削した時のデータを元にして、細線が使えるのでシャットダウンボタンとLED駆動用トランジスタを追加した。 発注時の数量を入力欄は最低5枚であるが、何故か10枚でも金額が同じだったので10枚で発注した。送料含めても18.61USドルで確かに安い。

RaspiMD001 Gerber

今回発注したガーバーデータ

11月30日に発注し、12月10日に発送した旨のメールが届いた。 しかしそれからが長かった。 配送状況をトレースする為の番号がメールに記載されていたが、最初は調べる方法がわからなかった。でも普通に郵便局のサイトを開いて国際郵便のページで番号を入力すればよかったのね。これによるとシンガポールを経由してスイスまで行ってから神奈川に入り熊本に届いた模様。今日(12月29日)やっと到着した。

RaspiMD001 Package

やっと届いた。

早速あけてみた。しか~し・・・

WringBoard

なんじゃこりゃ?

中身がぜんぜん違う! “1348 GN9 10113″とシルク印刷してあり、ウチの発注番号は101139なので入れ替わったのか? ならばウチのはどこか他におくられたのか? この写真をみて自分のだと思われる方が居るだろうか?8pinのオペアンプを搭載するっぽい基板です。
仕方ないので先程カスタマーサポートに連絡しました。 これから再製作して発送してもらったとしたら、いったいいつ届くのだろう?
以前、RepRapperからフィラメントを発注した時も違う太さのが届いたし、中国での通販購入は2連敗です。

Make:Japanのブログでレスキューロボットを紹介いただいた。

Make:Japanのブログでレスキューロボットを紹介いただいた。
山口ミニメイカーフェアの時も紹介頂いたが、あの時はミニメイカーフェアのレポートの中のひとつ。でも今回は単品での紹介なのだ。

でもここに書かれている通り、確かに「直球な工作」ですよねー。
メイカーフェアではパン焼き器で文字を書いたり、畳を楽器にしたり、よくこんな発想ができるなぁと思う出展が多くあります。
直球も悪くはないと思うけど、柔軟な発想ができればいいですよね。

Raspberry Piのモータードライバー

レスキュークローラ用に作ったRaspberry Piモータードライバーは次の回路で製作した。

RaspiMDschematic

Raspberry Pi Motor driver schematic

手持ちにあった東芝TA7291Pを3個使用してモータを3つ制御する。。
Raspberry PiのPWM端子(Raspiの18ピン=コネクタの12ピン)をTA7291PのVref端子に接続しておりモータに与える電圧を制御できる。  回路図では3CH共PWM制御にしているが、実際には前部クローラ上下用モータは常にフルパワーで動く様にVCCと接続した。 PWM端子とVref端子の間には手持ち(ソーラーLEDライトで使用した余り)の330uHを用いたLCフィルタを挿入している(CRでも十分な気がする)。

TA7291Pの信号入力(IN1,IN2)は、H入力は3.5V以上という仕様になっているが、Raspberry Piは3.3Vしか出せないので若干仕様を割っている。 実際どれくらいからHと認識するか実測したところ、2.46V~2.52V程度だったので、実用上は問題なしとする。

またRCサーボをコントロールする為の端子を2つ設けた。 これも本来5Vで制御するものであるが、手持ちのサーボは3.3Vでも動作した。

プリント基板に載せたのはここまでだったが、後付けでShutdown用ボタン((Raspi25ピン=コネクタ22ピン)と、LED制御信号(Raspi24ピン=コネクタ18ピン)を取り付けたので回路図に追記している。

Shutdownボタンはシステム立ち上げ後10秒以上経過した後、このボタンを3秒以上長押しすると「shutdown -h now」コマンドが実行される様にした。 キーボードもディスプレイも無しで動作させる為の対策である。

LED制御は2SC1815で電流増幅して白色LEDに約15mAを流している。 この回路はユニバーサル基板で息子が製作した。

RaspiMD

動作確認中。

—————————————————————————————
2013-11-26
回路図中、Shutdownボタンの配線が間違っていたので修正しました(プルダウンしているのにボタンを押した時GNDに繋がる様になっていた。3.3Vに繋がる様修正)。