arduino互換 USB直結技術を活用し、秋月電子で買った湿度センサHS-15Pを使い湿度計・温度計を作ってみました
反省点(1)アナログポートに接続する温度センサは精度が低いので注意。I2Cなどのシリアル接続がよさげ。(2)5Vの三端子レギュレータは、電池駆動の場合、高くとも低ドロップを使って、供給電圧を下げる。3.3Vの電池2個で駆動できるようにするとよい。(3)発熱するレギュレータの近くにセンサを配置しない。ちなみに湿度センサは写真中のブルーの素子です。使い方が難しいHS-15P湿度センサですが、1Khzの正弦波をトランジスタ1個で発生させて使っています。回路自体はLCDの下に隠れて見えません。ということで、温度、湿度計をバッチ形式で胸につけられるようにするつもりでしたが、小型であってもLCDを採用した関係で重くて、ちょっと無理。シリアル接続の温度センサ、軽いLCD、消費電力の少ないCPUを使って、もう一度、回路から設計しなおします。課題(1)USB直結型のarduinoで、デバック用にシリアルプリントする方法を教えてください。サンプルスケッチを一応紹介します。 <>は、小文字にしてください。電圧から温度を求める式は、実装した素子にあわせて定数を変更しています。#include <math.h>#include <LiquidCrystal.h>int ledPin = 13; // LED connected to digital pin 13int ledonetmp = 9 ;int ledonetemp = 10 ;int ledtentmp = 11 ;int ledtentemp = 12 ;int analogPinin =0 ;int analogPinout =1 ;int analogPintemp =2 ;int tentmp = -99 ;int tentemp = -99;int ten =0 ;char tenchartmp = '?';char tenchartemp = '?';int onetmp = -99;int onetemp = -99;int one = 0;char onechartmp = '?';char onechartemp = '?'; static unsigned long tmp;int temp;long wtime = 0 ; LiquidCrystal lcd(2,3, 4, 5, 6, 7, 8);unsigned int measurement(unsigned short channel){ unsigned int ad, max, min, cnt; // analogReference(INTERNAL) ; ad = 0; max = 0; min = 1024; for (cnt = 0; cnt < 1000; cnt++) { ad = analogRead(channel); max = ad > max ? ad : max; min = ad < min ? ad : min; analogReference(EXTERNAL) ; } return (max - min);}unsigned int tempm(unsigned short channel){ delay(100); unsigned int cnt; unsigned long ad; // ad = 0; for (cnt = 0; cnt < 100; cnt++) { ad = analogRead(channel) + ad ;// Serial.println(analogRead(channel)); delay(5); } ad = ad /100; Serial.print(ad); Serial.print(" "); return (ad);}void setup() // run once, when the sketch starts{ analogReference(EXTERNAL) ; Serial.begin(9600); // シリアル通信の初期化 lcd.print("Designed by Odrie");lcd.setCursor(0, 1) ; lcd.print(" Minaminoshima"); pinMode(ledonetmp, OUTPUT); pinMode(ledonetemp, OUTPUT); pinMode(ledtentmp, OUTPUT); pinMode(ledtentemp, OUTPUT); }void loop() // run over and over again{ delay(1000); int val1 = 0; int val2 = 0; val1 = measurement(analogPinin); // アナログピンを読み取る val2 = measurement(analogPinout); // val2 = val1 / val2 ; //lcd.clear();//lcd.setCursor(0, 0) ;// lcd.print(val1 ); // デバグ用に送信// lcd.print(" "); // lcd.setCursor(0, 1) ;// lcd.print(val2 ); tmp = val2; tmp *= 1000; tmp /= val1; Serial.print(" "); Serial.print(tmp ); Serial.print(" "); if (tmp