labs_3gim_sample_1
必要なパーツ等 |
No | 分類 | パーツ | 数量 | 実売価格(円) | 補足・販売店 |
1 | マイコン | ATtiny85-20PU | 1個 | 220 | 千石電商・マルツ等で販売 |
2 | ブレッドボード | ミニブレッドボード | 1個 | 200 | スイッチサイエンス等で販売 |
3 | ジャンパ線 | 堅いジャンパ線 | 1式 | 300 | スイッチサイエンス等で販売 |
4 | 温湿度センサ | AM2302 | 1個 | 1,000 | 秋月電子等で販売 |
5 | 照度センサ | S9648-100 | 1個 | 150 | 秋月電子等で販売 |
6 | リチウムポリマ充電池 | リチウムポリマ充電池(400-500mAh程度) | 1個 | 900 | スイッチサイエンス等で販売 |
7 | 電池用コネクタ | JST型2ピンコネクタ用ソケット | 1個 | 100 | スイッチサイエンス・マルツ等で販売 |
8 | コンデンサ | セラミック0.1uF | 1個 | 20 | 秋月電子・千石電商等で販売 |
9 | 抵抗 | 1kオーム | 1個 | 10 | 秋月電子・千石電商等で販売 |
10 | 抵抗 | 10kオーム | 1個 | 10 | 秋月電子・千石電商等で販売 |
11 | 3G通信モジュール | 3GIM(V1) | 1個 | - | |
12 | マイクロUSBケーブル | スマホ充電用ケーブル | 1本 | 100 | 100均ショップ等で販売 |
※上記以外に、ATtinyにスケッチを書き込むために、Arduino UNO(または同等品)およびそのUSBケーブルが必要となる。
必要な工具 |
とくに必要はない。
ただし、綺麗に制作しようとすると、ラジオペンチ、ニッパ(可能ならワイヤストリッパ)があった方が良い。
回路図 |
下記の回路をブレッドボード上で組む。
スケッチ |
// demo_3gim.ino -- Sample of 3GIM // // Date: // R1.0 2014.11.15 1st // // Author: // A.Daikoku // // Schemantic: // MCU: ATtiny85 (by http://highlowtech.org/?p=1695) // AM2321: D0(SDA;pull up 10k) // S9648-100: A2 // 3GIM: D1(PWR_ON),D3(TX),-(RX) // // Parts: // Battery: Li-poli 3.7V rechargable battery // // Note: // You must collect ld.exe's bug before build this sketch. // This skech use cloud service("xively.com"), so you need to set up account, device, // feed and datastreams on xively. //
#include <SoftwareSerial.h>
#include <dht22.h>
const int PowerPin = 1; // D1
const int dhtPin = 0; // D0
const int lxPin = 2; // A2
const char *PostCmd = "$WP https://api.xively.com/v2/feeds/FEED_ID/datastreams/";
const char *Header = "\"X-ApiKey: API_KEY$r$nContent-Type: text/csv$r$n\"";
uint32_t interval = 40000; // Interval time [mS] -- adjusted value
SoftwareSerial iemSerial(100, 3); // RX is not used
DHT22 dht;
char body[20];
void setup()
{
pinMode(PowerPin, OUTPUT); digitalWrite(PowerPin, HIGH); // 3GIM on
iemSerial.begin(9600);}
void loop()
{
// sense humidity(x10) and temperature(x10) if (dht.get(dhtPin) != DHT22_OK) { delay(3000); return; // error }
int h = dht.humidity * 10; int t = dht.temperature * 10; int i = (((long)analogRead(lxPin) * 37000L) / 1023L) / 29;
// upload sensing data to the xively.com uploadToCloud(t, h, i);
delay(interval);}
void uploadToCloud(int t, int h, int i) {
// upload temperature iemSerial.print(PostCmd); iemSerial.print("temp?_method=put "); sprintf(body, "\"%d.%d\" ", (t / 10), abs(t % 10)); iemSerial.print(body); iemSerial.println(Header); iemSerial.flush(); delay(3000);
// upload humidity iemSerial.print(PostCmd); iemSerial.print("hum?_method=put "); sprintf(body, "\"%d.%d\" ", (h / 10), (h % 10)); iemSerial.print(body); iemSerial.println(Header); iemSerial.flush(); delay(3000);
// upload illuminance iemSerial.print(PostCmd); iemSerial.print("ill?_method=put ");
sprintf(body, "\"%d\" ", i); iemSerial.print(body); iemSerial.println(Header); iemSerial.flush();}
補足 |
- 使用するマイコンについて
この例では、通常のArduino UNO等ではなく、小型のマイコンチップATtiny85をArduino IDEを使って使用している。ATtinyはピン数がわずか8ピンであり、ミニブレッドボードで使う時に便利であるため、今回採用している。
ATtinyをArduino IDEで利用する方法は、下記に詳しい解説がある。
日本語での紹介ページもWeb検索(検索キーワード「Arduino attiny」等)で見つけることができる。
- 使用するクラウドサービスxively.comについては、下記に解説記事があるので参照されたい。
- 使用しているライブラリの公開元URLがアクセスできないようなので、ライブラリファイル一式をここ dht22.zip に置きました。
(問題があるようでしたらお知らせください。すぐに公開を中止します)
- 最終更新:2014-11-25 22:37:41