2015年08月29日

UpgradeでI2Cがエラー

久しぶりにRaspberry Piを起動したので、
sudo apt-get update
sudo apt-get upgrade
で各種モジュール等を更新。再起動して、今まで作ったものの動作確認をしてみたら
smbus.SMBus(1)のところで
IOError: [Errno 2] No such file or directory
とか出るように(~_~;

ネットで調べてみると、事前に、
sudo raspi-config
で、I2Cを有効にしないといけなくなったらしい。
[8 Advanced Options]
afterUpdateError_5.png
[A7 I2C]
afterUpdateError_6.png

で、「I2Cを使うようにするのか?」とか「カーネルモジュールにデフォルトで読み込むのか?」とか訊いてくるので <はい> でOK。再起動する。

念のため設定ファイルが以前のとおりになっているかを確認。

sudo leafpad /etc/modprobe.d/raspi-blacklist.conf
で、i2c-bcm2708の行がコメントアウト(行頭に#)されているか?

sudo leafpad /etc/modules
で、i2c-dev という記述があるか?

sudo apt-get install i2c-tools python-smbus
で、i2cのPythonモジュールがインストールされているか?

私の場合は問題なかった(設定ファイルの上書きは無かった)ので、これでI2Cも動くようになるはず。


再び、動作確認。I2C関係だけが動かないのようなので、まず温度センサー(ADT7410)だけを使うプログラムを実行してみると正常(^^)。
もう一つのI2Cの液晶ディスプレイ(ACM1602NI)だけのプログラムを実行すると
IOError: [Errno 5] Input/output error
が(~_~;

ACM1602はbaudrateを落とさないといけないので、以前やった設定ファイルが戻されちゃったかな?と確認。
sudo leafpad /etc/modprobe.d/i2c.conf
で見てみると、ちゃんと
options i2c_bcm2708 boudrate=50000
の記述は残っている。

このACM1602を使うときに参考にした『これ1冊で出来る!ラズベリー・パイ超入門』のサポートページを見てみると、ありました! /boot/config.txtを直さないとダメらしい。
sudo leafpad /boot/config.txt
で、末尾に
dtparam=i2c_baudrate=50000
を追記。

これで、ラズパイを再起動・・・しても実はダメで、ACM1602への供給電力が一度完全に切れないといけないようだ。ラズパイをシャットダウン、AC電源を抜いて、数秒待ってから、電源入れ直して起動。
今度はACM1602も正常に作動した。


タグ:ACM1602
posted by pattayan at 00:53| Comment(0) | 日記

2015年05月25日

GPIOポートを外部へ引き出し

自分のラズベリー・パイは、今までの実験で使った回路をほとんど壊すことなく拡張していったので、すんごい状態になっている^^;
image-94e3f.jpg
image-a4f3d.jpg
image-e1f0e.jpg

特に問題なのが、本体のGPIOポートから複数のブレッドボードにジャンパー線が伸びていて、しかも長さに余裕がないため、これを崩さずに持って置き場所を移動するのは困難な状態にあった(-.-;
(ここまでくると、一度バラして元に戻すのは大変)

とりあえず、本体とブレッドボードを切り離せるだけでも、だいぶ違うだろうと、以下のものを購入(^^)。

『ラズベリーパイB+/A+用ブレッドボード接続キット』(秋月電子)
http://akizukidenshi.com/catalog/g/gK-08892/

image.jpg
image-bcabf.jpg

これはキットなので、ピンヘッダのハンダ付けは自分でやらないといけない。経験者はわかると思うがピンヘッダの何が難しいって

基板に対して垂直にハンダ付けすること(^^;

40ピンもあると少しでも曲がっているとブレッドボードに挿し難くなりそうでヤだな・・・と、考えて思いついたのが

最初からブレッドボードにピンヘッダを刺しておいて、そのままハンダ付けしてしまえば間違いない\(^o^)/

ハンダの熱でブレッドボードのプラスチック部分が溶けないか?と若干気にはなったが、ピンが垂直に刺さっていれば、プラスチック部分に触れないはずだし、もし多少溶けたところで、このブレッドボードはこのキット専用になるのだから別にイイか、と挑戦(^^;。

やってみたら結果はバッチリ(笑)。当たり前だがハンダ付けは素早く(でも確実に)やることがポイント。全体が十分冷めてからブレッドボードから抜き取り、ひっくり返してフラットケーブルを挿すピンヘッダをハンダ付け。こちら側は20ピン2列のピンヘッダなので、差し込めばそのまま垂直になるため普通にハンダ付けすれば良い。

すべてのハンダ付けが終わったら、1ピンずつテスターで通電チェック。
再びブレッドボードにキットを挿し(この時はまだフラットケーブルは挿さない)、電気を通す針金(電子パーツの脚を切り取ったものなど)をチェックしたいピンの穴に挿してテスターの一方を接触させる。そして、そのピンに該当するコネクタ接続側のピンにテスターのもう一方を接触して通電を確認する。
隣のピンとショートしてないか調べるために、そのピンの隣のピンにもタッチして通電しないことを確認する。ただし、3.3VおよびGNDのようにもともと複数のピンがあるものはキットの(T型の)基板でつながっているようなので、チェックしている番号と違うピンで通電しても(該当するピンなら)問題ない。


さて、通電確認できたらフラットケーブルを挿すのだが、

フラットケーブルは、挿す側が決まっている

T型基板をよく見るとコネクタの出っ張りを合わせるマークがプリントされているので、それに合うように挿せば正解。逆側でも一応差し込めてしまうので注意。また、ラズベリー・パイ本体のGPIOポートに挿す側のコネクタも、GPIOポートを前後左右からよく見て40ピン全てに挿さるように差し込むこと。特にケースに入れている場合は、1列ずれても見えにくいので要注意。


配線し直したらこんな感じ。100円ショップで売っていた台所用グッズを使って「2階建て」にしてみた。
image-336a1.jpg
image-ef00f.jpg
image-85228.jpg

これで、フラットケーブルを抜けば、ラズベリー・パイ本体とブレッドボード群を切り離すことは出来るので、持ち運びもしやすくなる。しかし、引き出したGPIOポートのブレッドボードから他の回路のブレッドボードへつながるジャンパー線は、ブレッドボードの幅の分だけ距離が広がり、ジャンパー線の長さがより厳しくなった部分もある(-o-;。

そこでよく考えてみたら、オス−メスのジャンパー線は「延長ケーブル」として使えるのだった(笑)。
image-3d3a2.jpg

こうすれば、ジャンパー線の長さが稼げる上に、必要に応じて一つの回路をブレッドボードごと切り離すこともできる。ジャンパー線の色を合せておけばあとで戻すのも簡単だ。また、モーター制御の回路のように、Raspberry PiとArduinoのGPIO電圧の差(*1)が影響しない回路であれば、ブレッドボードへつなぐジャンパー線のオスメスを以下のようにすれば、切り離してそのままArduinoに流用できる。
(*1)Raspberry Piは3.3V、Arduinoは5V

【Arduinoに流用する場合のジャンパー線の接続方法】
[Raspberry Pi]==[GPIOポートのブレッドボード]--[(オス)ジャンパー線(メス)]--{ここで切離し可}--[(オス)ジャンパー線(オス)]--[回路のブレッドボード]

切り離した回路側のジャンパー線は「オス」なので、ArduinoのGPIOポート(メス)にそのまま挿せる。
[ArduinoのGPIO]--[(オス)ジャンパー線(オス)]--[回路のブレッドボード]


[amazonでお買い物]
posted by pattayan at 02:39| Comment(0) | 日記

2015年05月18日

Arduino君、こんにちは

ここは、ラズベリー・パイのブログだが、突然の Arduino(アルドゥイーノ)(^^;。

とりあえず最初は、“お約束”のLチカ(笑)。


ラズベリー・パイは、LinuxベースのOSとGUI環境を持った「超小型パソコン」と言えるが、Arduinoは、OSが無く、より「マイコン」である。

そのため、本体だけではプログラムを作ることもできないが(そもそもキーボードやディスプレイをつなぐ端子がない)、“母艦”となるPC(Win/Mac)でコンパイルしたプログラムを転送した後は、電源さえあればプログラムを動かすことができる。また、メモリーは不揮発性なので、電源を切ってもプログラムが消えることは無い。OSが無いので、電源を入れた途端にプログラムが動き出し、いつ電源を切ってもよいというところが、ラズベリー・パイとは大きく違うところ。


【用意したパーツ】
LED: SLP-9118C-51H (2.0V/20mA) x2
CdSセル: MI527 (10kΩ〜 1MΩ)
炭素皮膜抵抗(1/4W): 180Ω x1、10kΩ x1

回路はシンプル。今回は最初からCdSを使って明るさを感知させて、LEDの点滅の速さを変えている。
ARD_LED_CdS.PNG
(回路図はクリックで拡大)

ラズベリー・パイと違ってありがたいのは、
アナログ入力が標準装備
ということ。
MCP3208などA/D変換のICが必要なく、そのままArduinoのAnalog端子に繋げるだけで良いので、回路図も単純だ。
(ラズパイの場合のアナログ入力の記事『MCP3208でA/D変換』

Arduinoのプログラム言語はC++風の独自のもの。
基本形は、初期処理のsetup()とメインループのloop()だけの非常にシンプルな構造だ。
ard_led_blink.png

アナログ値は、analogRead()という関数だけで読み込むことができる。なんとも楽ちん(^^)。

CdSのアナログ入力値を調べるために、IDE環境のシリアルモニターにCdSの値を表示できるように Serial.begin()やSerial.println()が入れてあるが、本体の動作には必要ないので、実際には無くても良い。
アナログ値が700を下回ったら暗くなったと判断して、delayの値を短くしている(⇒つまり速く点滅する)。


今回は初めてなのでこんな程度だが、アナログ入力が簡単なことや小型タイプがあるなど、先日の“昆虫ロボット”に積むとしたら、こちらのほうが有利かも。ラズベリー・パイとの違いを認識して、うまく使い分けと連携が出来たらいいな。
タグ:Arduino
posted by pattayan at 13:15| Comment(0) | 電子工作