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_3g_sch.png


スケッチ
//  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

このWIKIを編集するにはパスワード入力が必要です

認証パスワード