找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5100|回复: 0
收起左侧

Arduino教程-圣光之音

[复制链接]
ID:99556 发表于 2016-1-10 04:39 | 显示全部楼层 |阅读模式
Hi,大家好!上一次我们用三个扬声器组织了一次大合唱,但遗憾的是,唱出来的调调都是事先确定好的,没有即兴发挥的感觉。这一次,我们不但想通过外部的变化来控制这个调调,而且使用的外部条件是光。嗯,这一次,我们要听一听圣光的声音!
好!让我们进入正题,看看具体是如何做的。
硬件准备 arduino-light-song-parts.jpg
图片来源:Arduino电路配件
具体包括如下:
  • Arduino UNO电路板(1块)
  • 面包板(1块)
  • 扬声器(1个)
  • 100Ω电阻(1个)
  • 4.7KΩ电阻(1个)
  • 光敏电阻(1个)
  • 面包线(若干)
上述配件中,新出现了一个光敏电阻。使用起来很容易,这里简单介绍一下。光敏电阻的特性就是根据外界光源的强弱,实时产生一定数值范围的模拟信号。
软件方面Arduino官方提供的IDE。
连接电路 arduino-light-song.jpg
图片来源:Arduino电路连接
连接电路时,注意与扬声器串联的电阻值是100Ω,与光敏电阻串联的电阻值是4.7KΩ。光敏电阻的连接方式,正负极遵循长正短负的原则。也就是说长腿为正极,短腿为负极。
好,最后一步!
添加几行代码还是新建一个项目窗口。
arduino-ide-new.jpg
图片来源:Arduino官方IDE
向其中添加几行代码:


  1. // 对Arduino电路板或相关状态进行初始化方法
  2. void setup() {
  3.   // 开启串行通信,并设置其频率为9600。
  4.   // 如果没有特别要求,此数值一般都为9600。
  5.   Serial.begin(9600);
  6. }
  7. // 系统调用,无限循环方法
  8. void loop() {
  9.   // 读取A0端口数据。
  10.   // 此时,此端口连接的是光敏电阻,
  11.   // 故,此时读取的是光敏电阻产生的模拟信号数据。
  12.   int sensorReading = analogRead(A0);
  13.   // 向串口打印光敏电阻产生的模拟信号数据。
  14.   // 这行代码只是起到调试作用,无实际作用。
  15.   Serial.println(sensorReading);
  16.   // map()方法的作用是,
  17.   // 对光敏电阻产生的模拟信号数据进行变换。
  18.   // 光敏电阻产生的数据范围为400~1000,
  19.   // 将此数据范围变换到120~1500之间。
  20.   // map()方法输入参数从左边开始依次是,
  21.   // 左一参数为光敏电阻模拟信号数值。
  22.   // 左二和左三是光敏电阻默认的数值范围。
  23.   // 左四和左五是变换后的数值范围。
  24.   int thisPitch = map(sensorReading, 400, 1000, 120, 1500);
  25.   // 对9号数字引脚上的扬声器,
  26.   // 输入变换后的光敏电阻数值,
  27.   // 声音的播放时间长度为10毫秒。
  28.   tone(9, thisPitch, 10);
  29.   // 每次循环之间延时1毫秒。
  30.   delay(1);
  31. }
复制代码



好!代码就这些。这几行代码里出现了一个新面孔,那就是map()方法,已经在代码的注释里说明了,调用方式并不复杂,只是参数多了几个,这里就不再赘述。

图片来源:Arduino官方IDE的文件编辑菜单选项
点击上图中标有向右指向的箭头图标,将编写完成的代码烧入Arduino电路板。如果一切顺利,即可通过控制光敏电阻的受光强弱,扬声器里相应会发出不同的声音。
点击上图中最右侧的放大镜图标,打开串口调试窗口,可以看到调试窗口中光敏电阻产生的模拟信号的数值。

图片来源:Arduino串口调试窗口
总结通过这次的试验,我们通过使用光敏电阻来控制扬声器发音。嗯,这就是我们的圣光之音!除此之外,硬件上我们了解到了一个新的元器件,即光敏电阻。程序上,我们遇到了一个新的方法,即map()方法。
下期预告这次我们听到了圣光之音,我们使用外部光源来控制扬声器发音。下一次我们换一种方式,看看如何使用旋钮开关来控制LED神灯!



ohcoder的系列精彩Arduino教程:
Arduino教程-初识Arduino(包含本教程目录):http://www.51hei.com/bbs/dpj-41334-1.html
Arduino教程-开篇:http://www.51hei.com/bbs/dpj-41335-1.html
Arduino教程-点亮LED神灯:http://www.51hei.com/bbs/dpj-41336-1.html
Arduino教程-让LED神灯闪烁:http://www.51hei.com/bbs/dpj-41337-1.html
Arduino教程-让LED神灯亮度渐变:http://www.51hei.com/bbs/dpj-41338-1.html
Arduino教程-获取输入数字信号:http://www.51hei.com/bbs/dpj-41339-1.html
Arduino教程-获取输入模拟信号:http://www.51hei.com/bbs/dpj-41340-1.html
Arduino教程-另一种时间延迟:http://www.51hei.com/bbs/dpj-41331-1.html
Arduino教程-按键开关:http://www.51hei.com/bbs/dpj-41341-1.html
Arduino教程-停止抖动!:http://www.51hei.com/bbs/dpj-41333-1.html
Arduino教程-抛弃外部电阻!:http://www.51hei.com/bbs/dpj-41332-1.html
Arduino教程-用按键开关计数:http://www.51hei.com/bbs/dpj-41330-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表