如何使用Arduino连接蜂鸣器与温度传感器

实验概述

本实验根据温度传感器的温度变化,利用蜂鸣器播放歌曲
当温度超过30度时,自动播放歌曲葫芦娃

实验所需硬件组件

- 无源蜂鸣器

- 温度传感器(DS18B20)

- Arduino UNO开发板

- 公母线

- USB线

蜂鸣器分为有源蜂鸣器和无源蜂鸣器,这里采用的是无源蜂鸣器
如何使用Arduino连接蜂鸣器与温度传感器_第1张图片
温度传感器(DS18B20)
如何使用Arduino连接蜂鸣器与温度传感器_第2张图片

Arduino UNO开发板
如何使用Arduino连接蜂鸣器与温度传感器_第3张图片
公母线
如何使用Arduino连接蜂鸣器与温度传感器_第4张图片

实验步骤

1. 硬件组装

如何使用Arduino连接蜂鸣器与温度传感器_第5张图片
如何使用Arduino连接蜂鸣器与温度传感器_第6张图片

无源蜂鸣器与Arduino UNO开发板的连接

  • GND —— GND
  • I/O —— 引脚9
  • VCC —— 3.3V

温度传感器与Arduino UNO开发板的连接

  • GND —— GND
  • DQ —— 引脚7
  • VCC —— 5V

最后用USB线将Arduino UNO开发板与电脑连接

2. 下载arduino开发软件

链接:https://downloads.arduino.cc/arduino-1.8.9-windows.zip

3. 下载源码

链接:https://github.com/zwj-state/Arduino-Uno.git
描述:
源码文件:Active.ino
库:Arduino-Temperature-Control-Library-master.zip
库:OneWire.zip

4. 导入代码以及库

导入源码:文件-打开
导入库(上一步骤中的库):项目-加载库-添加.zip库

5. 编译、上传

编译
上传
在下方见到“编译成功”、“上传成功”字样即完成本步骤

6. 查看串口监视器

通过对温度传感器的操作,改变温度,使得蜂鸣器播放/不播放音乐
串口监视器

如何使用Arduino连接蜂鸣器与温度传感器_第7张图片

源码

这里是引用

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

float tempC = 0;

#define NOTE_D0 -1
#define NOTE_D1 262
#define NOTE_D2 293
#define NOTE_D3 329
#define NOTE_D4 349
#define NOTE_D5 392
#define NOTE_D6 440
#define NOTE_D7 494
#define NOTE_DL1 147
#define NOTE_DL2 165
#define NOTE_DL3 175
#define NOTE_DL4 196
#define NOTE_DL5 221
#define NOTE_DL6 248
#define NOTE_DL7 278
#define NOTE_DH1 523
#define NOTE_DH2 586
#define NOTE_DH3 658
#define NOTE_DH4 697
#define NOTE_DH5 783
#define NOTE_DH6 879
#define NOTE_DH7 987
//以上部分是定义是把每个音符和频率值对应起来,这里用NOTE_D+数字表示音符,NOTE_DH+数字表示上面有点的那种音符,NOTE_DL+数字表示下面有点的那种音符。

#define WHOLE 1
#define HALF 0.5
#define QUARTER 0.25
#define EIGHTH 0.25
#define SIXTEENTH 0.625
//这部分是用英文对应拍子

int tune[] = 
{
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,NOTE_D6,
NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,NOTE_D6,
NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,
NOTE_D1,NOTE_D1,NOTE_D3,
NOTE_D1,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,
NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,
NOTE_D5,
NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,
NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,
NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,
NOTE_D1,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,
NOTE_DH1,NOTE_D0,NOTE_D7,NOTE_D5, 
NOTE_D6,
};
//这部分就是整首曲子的音符部分,用了一个序列定义为tune,整数

float duration[]=
{
1,1,0.5,0.5,1,
0.5,0.5,0.5,0.5,1,0.5,0.5,
0.5,1,0.5,1,0.5,0.5,
0.5,0.5,0.5,0.5,1,1,
1,1,1+1,
0.5,1,1+0.5,1,
1,1,0.5,0.5,1,
0.5,1,1+0.5,1,
0.5,0.5,0.5,0.5,1+1,
0.5,1,1+0.5,1,
1+1,0.5,0.5,1,
1+1+1+1,
0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
0.5,1,0.5,1,1,
0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,
0.5,1,0.5,1,1,
1+1,0.5,0.5,1,
1+1+1+1,
0.5,1,0.5,1+1,
0.5,1,0.5,1+1,
1+1,0.5,0.5,1,
1+1+1+1
};
//这部分是整首曲子的节拍部分,也定义个序列duration,浮点(数组的个数和前面音符的个数是一样的,一一对应)

int length;//这里定义一个变量,后面用来表示共有多少个音符
int tonePin=9;//蜂鸣器的pin

void setup()
{
	pinMode(tonePin,OUTPUT);//设置蜂鸣器的pin为输出模式
	length = sizeof(tune)/sizeof(tune[0]);//这里用了一个sizeof函数,可以查出tone序列里有多少个音符
	ensors.begin();//启动单总线
	Serial.begin(9600);//波特率设置为9600
	}

void loop()
{
	sensors.requestTemperatures();//获取温度值
	tempC = sensors.getTempCByIndex(0);//将温度的值赋给tempC
	delay(1000);//等待5秒后
	Serial.println(tempC);//输出温度值
	if(tempC>30)//当温度超过30度,蜂鸣器开始播放葫芦娃
	{   
		for(int x=0;x<length;x++)
		{     
			tone(tonePin,tune[x]);//此函数依次播放tune序列里的数组,即每个音符     
			delay(400*duration[x]);//每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
			noTone(tonePin);//停止当前音符,进入下一音符
	         }   
		delay(5000);//等待5秒后,循环重新开始
         }
}

参考文档

原代码来源:

Arduino Uno 送你一首葫芦娃 无源蜂鸣器实验: https://blog.csdn.net/ling3ye/article/details/56490163
如何用Arduino UNO和DS18B20防水传感器制作一个温度计: https://www.yiboard.com/forum.php?mod=viewthread&tid=1099&highlight=ds18b20

你可能感兴趣的:(物联网)