忍者ブログ

nyaruratoの製作記録

フィギュアやプラモデルについてもそもそと語っていきます。 最近は電子工作・ゲーム製作に興味アリ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ラズベリーパイで温度センサ(ADT7410)を触った

アキバに行ったので秋月電子で温度センサ買ってきました。
I2Cモジュールがラズパイでは使いやすいらしいということで、ADT7410が載った温度センサモジュールを購入。500円。

とりあえずラズベリーパイと温度センサモジュールとをつなぎます。
基板にVDD、SCL、SDA、GNDと小さく書いてあるのでその順につなげました。


次にI2Cを使えるようにしました。
その辺は他のブログが詳しいです。http://nanicananica.blog.fc2.com/blog-entry-21.html

シェルで動作確認ですが、
$ sudo i2cdetect -y 1
でいけました。
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --     
こういう風に出てきます。このモジュールのバスアドレスは0x48なので一致します。

ここから温度のデータを取っていきます。
シェル上では
i2cget 1 -y [I2Cバス] [センサの内部アドレス]  w
でデータが取れるようです。

I2Cバスは0x48でいいのですが、センサの内部アドレスがどうしたらいいかわかりませんでした。
そこでデータシート(http://www.analog.com/static/imported-files/data_sheets/ADT7410.pdf)の13ページあたりを見るとTemperature value most significant byteと書かれたものがあったのでこれを使いました。よってセンサの内部アドレスは0x00です。

$ sudo i2cget -y 1 0x48 0x00 w
こうなります。
打つと0xc80bみたいな値が出てくると思います。

このままだと温度はわからないので分かる値へと変えていきます。
まずエンディアンを逆にしなきゃならないそうです。

こんな感じっぽいです。詳しくはググってください。間違ってたら教えてください。
とりあえず0x0bc8という数字を使います。

下位3ビットを捨てるらしいので8で割ります。
なんで8で割るのかなと思って調べたらこのサイト(http://www.geocities.jp/zaqzaqpa/2sinsuu10.htm)の右シフトの部分を見てなるほど~となりました。

あとはこのサイト(http://atelier-orchard.blogspot.jp/2013/12/raspberry-pi.html)の温度の取得のところを参考に0x0bc8を8で割った後、0.0625をかけるとそれっぽい値が出てきました。



今度はスクリプトから温度を取得してみました。
http://nanicananica.blog.fc2.com/blog-entry-17.html
http://nanicananica.blog.fc2.com/blog-entry-22.html
https://projects.drogon.net/raspberry-pi/wiringpi/i2c-library/
これらのページを参考にC言語で書きました。
ページを見るとわかると思いますが、wiringPiを使ってます。

ハマってしまったのは
gccでコンパイルした時に
test.c:(.text+0x18): undefined reference to `wiringPiI2CSetup'
test.c:(.text+0x48): undefined reference to `wiringPiI2CReadReg16'
collect2: ld returned 1 exit status
といったエラーがでたことです。
これは
gcc test.c -lwiringPi
といったように -lwiringPiをつけてやるのを忘れたために起きていました。

とても汚いですがソースを公開します。


#include <stdio.h>
#include <wiringpii2c.h>
#include <stdlib.h>
#include <string.h>

int main(){
int ID = 0x48,reg = 0x00;//regは内部アドレス
int fd,temp,this_is_temp;//tempは仮の温度入れ、this_is_tempは最終的な温度入れ
char buf[5],temp_buf[5];


fd = wiringPiI2CSetup(ID);
temp = wiringPiI2CReadReg16(fd,reg);
printf("original temp data : %d\n",temp);

//エンディアンが逆に出ているのを直すために16進数の文字列にする
sprintf(buf,"%x",temp);

printf("now : %s \n" , buf);

//エンディアンが逆なのを直すところ
temp_buf[0] = buf[2];
temp_buf[1] = buf[3];
temp_buf[2] = buf[0];
temp_buf[3] = buf[1];
temp_buf[4] = buf[4];
printf("next : %s \n" ,temp_buf);

//文字列をintに
sscanf(temp_buf,"%x",&this_is_temp);

printf("convert temp: %x , %d \n",this_is_temp,this_is_temp);
//温度を出すための計算
this_is_temp = this_is_temp / 8 * 0.0625;
printf("This is temperature : %d\n" , this_is_temp);

//ツイート用
char temp_texts[3],texts[140]="tw テスト 今の部屋の温度は";
sprintf(temp_texts,"%d",this_is_temp);

strcat(texts,temp_texts);
strcat(texts,"度なう");

system(texts);

return 0;
}







出力結果はこんなかんじ
original temp data : 30731
now : 780b 
next : 0b78 
convert temp: b78 , 2936 
This is temperature : 22
tweet "テスト 今の部屋の温度は22度なう"?  (17 chars)
[Y/n]

こんな感じでツイートされます

ちなみにtwitterへの投稿にはtwを使っています。

拍手[0回]

PR

ラズベリーパイでラジコン

作ったのはちょっと前ですが一応記事にします。
今は作って動かして満足して放置されちゃっていますが・・・;

Raspberry Piでラジコンを作るにあたって「RaspberryPiで遊ぼう!」という本を参考にさせて頂きました。
スマートフォンで動くラジコンを作る章があるのですごく参考になりました。
(ほぼ見ながら作りました)




【用意したもの】
・モータドライバー(TA7291P)
・LED(赤外線)
・トランジスタ(2SC1815)
・ダブルギヤボックス
・トラック&ホイールセット
・ユニバーサルプレート
・WEBカメラ
・RaspberryPi
・モバイルバッテリーや電池



だいたいこんなところですかね。


【やったこと】
目標として暗いとこでもなんとか走ることの出来るラジコンを目指しました。

まずモータを動かすためにモーターの制御回路を作りました。
ちなみにハンダ付けはほとんどしてません。LEDの回路だけハンダ付けしましたが、モーターの制御回路は小さめのブレッドボードで作ってます。


モータードライバのTA7291Pは信号2つでモーターの正転、逆転、ストップを制御してます。
なのでGPIO端子2つを使って1つのモーターを制御します。
モーターは2つあるので4つの端子を使いました。
(回路関してはネットにも多く上げられていますし、本にも書かれているので省略します。)


モーターを動かす電源は単三充電池を4本使いました。
ラズベリーパイの電源とモーターの電源は分けたほうがいいと見かけたので分けてあります。
ラズベリーパイの電源には手持ちのモバイルバッテリーを使いました。


WebIOPi有効にすると/usr/share/webiopi/htdocsがweb上でアクセス出来るようになるっぽいのでここにtestフォルダを作りラジコン操作のwebページをおきました。


操作のWEBページですがラズベリーパイで遊ぼう(http://v7.com/raspi/)のサンプルプログラムをほぼそのまま使いました。(Javascriptがわからない・・・)


WEBカメラから映像を確認するためにMJPG-streamerを使いました。webカメラは前の記事にて赤外線を捉えられるように改造したものです。
またLEDの赤外線照射ユニットも作りました。ラズベリーパイからLEDを制御できるようにトランジスタをスイッチとして使っています。


MJPG-streamerの映像をWebページに映像を表示するために
<img src="http://192.168.1.28:8080/?action=stream">
操作するwebページに追加しました。

・作ってる時の写真


今は簡単にまとめておきます。

拍手[6回]

Raspberry Pi買いました

こんにちは。
最近電子工作に興味が出てきたのですが、マイコンを触ってみたいけどいろいろ揃えるのにお金かかるなぁ・・・・うまく使えるかなぁ・・・と思っていたところ、Raspberry Piというものがあると知り、3300円と安いので買ってみました。



注文したのはRSオンライン(http://jp.rs-online.com/web/generalDisplay.html?id=raspberrypi)です。
個人での注文を押すと英国のストアで購入になってしまうので通常のRSとの取引の方を選択します。

在庫は結構あるようで僕は平日の昼に注文して次の日の昼には届いていました。

会員の登録ですが個人で登録する場合、会社名などといったものは割りと適当でもいいようです。
僕は自分の名前を入れました。



届いた箱。
(伝票など剥がしたため汚いですが・・・・)


届いた中身。
注文したのはラズベリーパイのBとエンクロージャーです。


ラズベリーパイのエンクロージャー。
ラズベリーパイの入れ方ですが指でグッと広げながらラズベリーパイを溝の位置にもっていくという感じです。


ラズベリーパイ。
ピンクのケース付きです。
このケースを改造してケーブルも通るようにしている人もいるようです。


ケースの中身。
クイックスタートガイドやらの紙が2枚入ってます。(英文)


iPhone4Sとのサイズ比較。
本当に名刺サイズで小さいです。


ラズベリーパイ購入レビューはこんな感じです。
このラズベリーパイを使ってラジコンカーを作ってみたので後の記事にて紹介します。

拍手[0回]

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

リンク

最新CM

[07/16 listener]
[07/15 nyarurato]
[07/12 listener]
[12/19 satotaku]

最新TB

プロフィール

HN:
にゃるらと
性別:
男性
自己紹介:
こんにちは。
プラモやフィギュアなどについて書いていくつもりのブログです。
Twitter
https://twitter.com/sakura_metal

バーコード

ブログ内検索

Copyright © nyaruratoの製作記録 : All rights reserved

TemplateDesign by KARMA7

忍者ブログ [PR]