電子工作メモ1(圧電スピーカ―、温度センサ)

環境


  1. Arduino Uno

  2. Arduino IDE 2.0.1

  3. 圧電スピーカー(?)

  4. 温度センサ(ADT7310, ADT7410)

圧電スピーカー


圧電スピーカーにはがあって、丸い部分に[+]と表記があり、そこで区別する。
私のスピーカーには[+]表記が無く、代わりに[M]との表記がある。とりあえず[M]が書かれている側を+としてやってみよう。

回路図

圧電スピーカーの回路

人生初めて回路図を書いた。なんか感動。

プログラム

鳴った!音階でいうところの「ド」が鳴った!
やはり[M]表記が[+]でいいらしい。


#define NOTE_C5  523

const int BUZZER_PIN=8;
int duration =500;

void setup() {
  pinMode(BUZZER_PIN,OUTPUT);//デジタル8番PINをアウトプットに設定
}

void loop() {
  tone(BUZZER_PIN,NOTE_C5,duration);//durationミリ秒間、周波数NOTE_C5Hzの音をだす。
  delay(1000);//1秒何もせず待つ
}


温度センサ


温度センサと湿度センサを試したかったが、間違えて温度センサを2つ買っていた…アホ過ぎる…

回路図

ADT7410の回路図

初めて回路図シンボルを作成した。絶対何違うと思う。

プログラム

#include <Wire.h>                 //I2C通信のライブラリ  
 
int adt7410I2CAddress = 0x48;     //温度センサのアドレス
 
void setup(void) {               // 初期化
  Serial.begin(9600);            //シリアル通信開始
  Wire.begin();                  //I2C通信開始
}
 
void loop(void) {
  uint16_t uiVal; //2バイト(16ビット)の領域
  float fVal;
  int iVal;
 
  Wire.requestFrom(adt7410I2CAddress, 2);   //2バイト要求
 
  uiVal = (uint8_t)Wire.read() << 8;   // 1バイト読み出しで上位にシフト
  uiVal |= Wire.read();                 // 1バイト読み出して下位にセット。Wire.readが8ビットずつしか呼べないから、2回呼び出して結合している?
 
  uiVal >>= 3;                          // 右シフトで13bit化。2回目の1バイトデータの下三桁はデータが無いらしい
 
  if (uiVal & 0x1000) {                // 13ビットで符号判定(1ならマイナス、0ならプラの温度を示す)
    iVal = uiVal - 0x2000;             // マイナスの時 (10進数で8192を引く)
  }
  else {
    iVal = uiVal;                      //プラスの時
  }
 
 
  fVal = (float)iVal / 16.0;           // 温度換算(摂氏)
  Serial.println(fVal, 4);             // シリアル送信 小数点以下4桁表示
  delay(1000);                         //1秒待つ
}

コードは「計測ブログ」様を参考にした。
pinModeで入力/出力ピンを指定する必要は無いのかな。
I2I通信についても理解が曖昧である。追って理解しよう。
何はともあれ温度を取得できた!分解能0.0625って地味にすごいな

実行結果(シリアルモニタ画面)

24.1250
24.1250
24.1875
24.1250
24.1250
24.1250
24.1875
24.1875


この記事が気に入ったらサポートをしてみませんか?