esp32で音を扱いたくて、その前にトランジスタをあまり扱ってなかったので実験と遊びです
ArduinoIDEでやっていきます
環境
MacOS v10.14.3
ArduinoIDE v1.8.8
ESP32(Arduinoボード) v1.0.2
ESP32-DevKitC http://akizukidenshi.com/catalog/g/gM-11819/
トランジスタ 2SA1015GR http://akizukidenshi.com/catalog/g/gI-00882/
このトランジスタはなんか近くにあったのでこれを使ってみます
esp32の内蔵DACを利用
参考サイト
- https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/dac.html
- https://circuits4you.com/2018/12/31/esp32-dac-example/
サンプルコード
double i=0.0;
void setup() {
Serial.begin(115200);
}
void loop() {
// Serial.println(128+128*sin(i));
dacWrite(25, 128+128*sin(i));
i+=0.01;
}
いたってシンプルでした
esp32の内蔵dacはgpio25と26固定らしく、今回は25を利用しました
参考サイトの上のやつではdac.hをインクルードしていて、それを使えばDAC_CHANNEL_1という定数が使えますね
そして単純にsin()を利用して0〜255の値でsin波を生成しdacWrite()で出力しています
配線
結果
音はなったが小さいです
そしてpwmで出すビープ音とあまり変わらない気が...
sin波以外も試す
参考サイト
サンプルコード
参考サイトのまんまです
void setup() {
Serial.begin(115200);
}
void loop() { // Generate a Sine wave
for (int deg = 0; deg < 360; deg = deg + 8){
dacWrite(25, int(128 + 80 * (sin(deg*PI/180)+1/pow(3,2)*sin(3*deg*PI/180)+1/pow(5,2)*sin(5*deg*PI/180)+1/pow(7,2)*sin(7*deg*PI/180)+1/pow(9,2)*sin(9*deg*PI/180)))); // Triangle
}
}
参考サイトの「ESP32_DAC_Simple.ino」からSquareからTriangleに変えてみたものです
結果
なんか変わった気がするが、やはり小さい?
トランジスタを使うぞ!
参考サイト
ここのサイトがなんか面白そうだったので同じようにやってみるぞ!
人が端子に両手で触れて、微量な電流をトランジスタのベースに送り、音量を変化させたい
先ほどのソースコードから変えずに配線だけ変更します
配線
参考サイトと違うところは5v出力なところと、抵抗を120Ωにしています
写真左と下側に伸びている赤と黄色を触れば音がでるはずです
結果
結局音は小さいですが動画をどうぞ
音が小さいが端子を触って音が出たり触る感じで音量変化
— るしわん (@tkyko13) 2019年8月1日
トランジスタの練習〜 pic.twitter.com/XEa6ImjADm
あまりぎゅっと触ると電流が流れずらいのか逆に音が小さくなるっぽくて面白いですね
あ〜最初から作りたかったものから遠ざかる気がする〜が面白いのできそ〜