ATTiny13で温度計を作ってみました。センサーにはLM61を使い一秒おきにアナログ値(0-1023)を シリアルで出力するように作りました。Arduino 1.0.6でBasicSerial3というライブラリを利用して600バイトくらいになりました。
LM61は秋月で4個200円で買った物ですが、今見てみたら1個60円と値上げされてました。
/* tx and rx pin is hard code in BasicSerial3.S */
#define BAUD_RATE 38400
#include <BasicSerial3.h>
#define LM61_APIN 2
void setup() {
// 10 sec wait at boot
delay(10000);
}
void serOut(const char* str) {
while (*str) TxByte (*str++);
}
void serNumOut(int val)
{
int div = 1000;
while(div != 0)
{
TxByte('0' + ((val / div) % 10));
div /= 10;
}
}
void loop(){
int temp;
// val is 0 to 1024
temp = analogRead(LM61_APIN);
serNumOut(temp);
serOut("\n\r");
// wait 1 sec
delay(1000);
}
出力はこんな感じです。
0529
0529
0529
0529
0529
0529
0529
0529
0529
0528
『昼夜逆転』工作室さんを参考にさせてもらい、LM61の出力を何かからはがしたNJM2904で2倍(Rf=5KΩ/Rg=5KΩ)にしてATTiny13に入れています。
このシリアル出力を蟹さんのmrubyで受けてThingSpeakに投げてテストしてました。実際の温度の計算はMATLABでおこないました。
ボーレートが38400なのは蟹さんのbootがこのボーレートでそのままmrubyで使っているからです。
Adruinoでfloatを使うとバイナリサイズが大きくなるので、生の値を蟹さんに渡しているのですが、そもそも蟹さんのmrubyはfloatが使えないので、そうするしかなかったです。