29287浏览
查看: 29287|回复: 4

[讨论] 用Arduino 制作scratch传感器板

[复制链接]
由于scratch软件在国内刚开始起步,现在picoboard的传感器板子已经有很多了,但是scratch官方公布了所有的通讯协议与标准,我们可以使用目前也是比较流行并且开源的Arduino板子来自己制作一块我们自己的传感板。

既然制作基于arduino的传感版,那么大家必须首先要有一块arduino的板子。Arduino的板子大家可以去附近的电子元件市场购买,或者在淘宝上购买,arduino的板子有很多种,偶个人推荐大家购买ardunio uno R3的板子,也可以买更高级的2560的R3板子,同样的,其他的arduino MINI板,arduino的NANO板子也都可以使用的。当我们准备好板子后,那么我们就可以开始自己动手做我们的传感板啦。

今天我们做的传感板,上面暂时还没有任何传感器,如果你在购买arduino板的时候,个人建议一起购买好一些传感器和一些电子元件。比如电位器(可变电阻),光敏电阻,声音驻极芯片,面包板,面包线,杜邦线等,有可能的话,再一起购买一些超声波传感器,PS摇杆,红外遥控,无线通讯等等,这些都在以后的教程中会陆陆续续给大家介绍的。反正买的时候一起买,估计全部都买齐了,总价在100-200之间吧。

Arduino板是需要自己编程的,那么你就需要在网上下载一个编程软件,大家可以去官方网站http://arduino.cc上下载arduin IDE最新版本,将软件下载下来,运行arduino.exe程序就OK了,你会看到一个小窗口。同样的你可以把arduino.exe发送到桌面快捷方式进行使用。

ArudinoIDE 的启动界面:

Arudino IDE 的编程界面

第一次启动默认是英文的,我们可以通过参数设置改成中文界面的啦,点菜单项中的FILE菜单,选择Preferences选项,这个选项是配置arduino IDE参数的。进入参数设置界面

将红色框中的下拉菜单中选择我们熟悉的母语,简体中文。然后点OK,确定后,关闭arduino IDE,重新启动arduino IDE,大家就能看到熟悉的母语啦。关于arduino IDE 的简单实用配置就到这里结束啦,如果您想研究更多的关于arduino IDE,请在网上搜索相关教程。

OK,我们现在完成了前期的准备工作啦,软件跟硬件都到位了,下一个课程内我们来让arduino与scratch进行第一次亲密接触。
与arduino来一次接触吧
1、  首先将arduino插上USB线(这个usb线一般情况下都是当时买arduino的时候,卖家随带送过来的),将arudino的USB线插入电脑的USB口,电脑应该会提示有新的硬件插入,需要你安装驱动程序,驱动程序就在arduino目录中的drivers目录里面,作为一个电脑老师,安装驱动都不会的吧,那是应该要打PP的哦。安装完成后,到这里为止,我们的arduino已经跟电脑连接起来啦,以后的教程中,不会出现这个步骤了,默认都是arduino跟电脑是连接的。接下来开始调试程序啦。
2、在arduino IDE中把程序复制进去吧,或者选择打开文件,把源代码文件arduino_to_scratch_01.ino文件打开都可以。程序内每行都加了中文的注释,相信大家应该能看懂,如果不懂或者有疑问请在群里或者论坛上咨询一下啦。
源代码程序如下:
  1. <font face="微软雅黑" size="3">int val0;//定义一个电阻D使用的变量。
  2. int val1;//定义一个电阻C使用的变量。
  3. int val2;//定义一个电阻B使用的变量。
  4. int val3;//定义一个按钮使用的变量。
  5. int val4;//定义一个电阻A使用的变量。
  6. int val5;//定义一个光线使用的变量。
  7. int val6;//定义一个声音使用的变量。
  8. int val7;//定义一个滑竿使用的变量。
  9. void setup() //arduino程序的必要函数,一个arduino程序必须有setup()与LOOP()
  10.               //setip()函数是一些关于一些设置的,loop()函数是循环执行的程序。
  11. {
  12.   Serial.begin(38400);//设置串口通讯速率为38.4K。按照官方的资料,但是偶设置9600也是可以正常通讯的。^-^
  13. }
  14. void loop() //同上的注释,也是arduino的必要函数,本函数主要是进行循环执行。
  15. {
  16.   val0=100;  //对电阻D变量赋值,先暂时赋值为100吧,大家可以自己调整这个数字,看看scratch中接收的数据变化
  17.   sendSensorValues(); //这个是自定义的一个函数,这个函数主要是通过串口发送数据给scratch。
  18.   delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
  19. }
  20. void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
  21. {
  22.    ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
  23.    ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
  24.    ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
  25.    ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
  26.    ScratchBoardSensorReport(3,val3);//3编号的通道传递一个参数val3,3编号通道是按钮的数据。
  27.    ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
  28.    ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
  29.    ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
  30.    ScratchBoardSensorReport(7,val7);//7编号的通道传递一个参数val7,7编号通道是滑竿的数据。
  31. }
  32. void ScratchBoardSensorReport(int sensor, int value)
  33. {                                          
  34.   Serial.write( B10000000                 
  35.                 | ((sensor & B1111)<<3)   
  36.                 | ((value>>7) & B111));   
  37.   Serial.write( value & B1111111);         
  38. }
  39. //自定义函数,本函数主要对数据进行编码,并通过串口发送给scratch。每次发送2个字节。上面程序中一共调用9次,则一共发送18个字节。
  40. //本函数需要2个参数,第一个参数是通道编号,第二个参数是该通道上传感器的数值,现在我们没有接传感器,所以我们可以用变量直接赋值模拟一下。
  41. //先编码高字节,(sensor & B1111)<<3的意思将编号为sensor值的通道进行和二进制数1111与操作,然后左移动3位,这个操作就是将通道编号放到
  42. //高字节的第2-5位上,不够位数的自动补0操作。(value>>7) & B111)的意思是将变量数值右移7位后与二进制111进行与操作,则刚好将value的值
  43. //放到高字节的第6-8位。加上最前面的B10000000的与操作,那么高字节的第1位就是为1,这样刚好组成一个高字节的编码要求了。
  44. //编码低字节,跟B1111111与操作,刚好第1位置为0,后面不变。这样刚好符合低字节的编码要求。 </font>
复制代码

3、 源代码程序复制进去后,请点击菜单下的下载按钮,或者选择FILE菜单,点菜单中的下载。这时候arduino IDE会将程序编译成机器码并且写入到arduino板中的主芯片中。Arudino板就会一直执行这个程序,一直到断电或者更新了里面的程序。界面如下:

4、到这里为止,我们的arduino板已经在运行程序了,这个程序就是跟scratch软件进行通讯的,如果你打开scratch软件,在侦测积木组中的传感器的值上面点右键,可以出来一个对话框,选择显示scratchboard监视器。那么在舞台上就会出现传感器的数据显示。



5、大家可以看到scratch的传感器数据显示出来了,其中分别显示滑竿:0,光线:100,声音:0,按钮:true,电阻A:0,电阻B:0,电阻C:0,电阻D:9。也许有很多老师会有疑问,为什么明明程序中,只是对电阻D的参数传递过来是100,其他传感器都没有传递数据,为什么会有数据显示呢,并且电阻D的数据明明传递是100的,为什么显示出来是9呢?这个疑问最早偶做实验的时候也是迷惑不解的啦。接下来,偶慢慢给大家解释清楚,这样有利于大家能对这个通讯协议能有更多的了解,为以后的传感器的使用进行一个更深入的知识了解。通用传感器数据处理:
Scratch软件对接收到的传感器数据进行一些处理,除了对声音,光线,按钮这三个传感器数据值进行特殊处理后,其他的传感器都按照通用模式处理,处理的公式为(X*100/1023),其中X表示传感器的数据值,将这个值乘以100再除以1023,对这个公式计算出来的数据再进行一次取整数部分处理。这样就把0-1023之间的传感器数据值对应成0-100之间的值啦。
接下来,我们根据上面的公式对程序内传递的参数进行计算,首先我们看到程序中对电阻D的数据值进行了赋值,让这个电阻D值为100,然后我们根据这个公式计算结果为9.77。再进行一次取整处理,那么结果就是9,所以scratch的传感器变量显示为9。

光线传感器数据处理:
光线传感器数据值处理分为2种情况,设定X为光线传感器的值,如果数据值25>X,则返回100-X。如果数据值X>=25,则返回(1023 - X) * (75 / 998)),然后将计算结果进行取整。
我们刚才程序中光线传感器的数据值默认设置为0,则按照上面的计算法则,是小于25的,则返回结果为100-0=100。所以scratch的传感器变量值显示为100啦。

声音传感器数据处理:
声音传感器处理有点复杂,首先对数据值进行一次处理,将数据值X都减去18,如果是负数的话,则返回0,如果是0-50之间的数据,则返回X/2,否则话,返回25 + min(75, round((X - 50) * (75 / 580)))。

大家可以根据上面的scratch软件处理数据的公式进行计算。看看你传递过来的数据是否正确。

同样的,我们可以禁止scratch对这些数据值进行处理,就是直接显示原始数据。只要你在传感器变量上面,用shift键+鼠标右键,点击一下后。选择report raw data,则传感器变量上显示的数据变成原始数据值了,所谓的原始数据值就是arduino传过来的原始数据。如图显示:




关于scratch对原始数据的处理方法已经介绍完了,大家可以修改源代码中的变量,看看不同的数据是否可以传递到scratch中,或者验证一下以上处理公式是否正常。

接下来的一个教程,开始教大家开始使用第一个传感器来接收外部物理世界的数据,arduino将物理世界的数据转换成电子数据,然后传递给scratch。;P

制作传感板上滑竿传感器

上个课程,我们尝试了让arduino跟scratch软件进行了通讯,这节课程我们主要在原来的程序基础上增加一个滑竿的传感器,让scratch能通过滑竿变量的变化来实现程序的控制。
整个思路就是在arduino板上加一个可变电阻,可变电阻接到arduino板的模拟口0上面,通过变化可变电阻的电阻值,arduino板接收到的电压值发生变化,arduino将接收到的电压值信号传递给scratch。
偶现在手上没有滑竿变阻器,找到一个电位器,可以实现同样的效果啦,通过变化电位器的阻值,再说电位器的体积小,价格便宜嘛,一个电位器才1-2元哦。
材料清单:
Arduino板:1块。
电位器:1个(偶用的是50K的阻值的)
面包板:1块
面包线:3根

将材料按照图示连接起来,其中红色面包线跟arduino的5V电压口相连,蓝色的面包线跟arudino的地线相连。中间的黄色线跟arudino的模拟口0相连。如下图所示:

OK,连接完成后,请参考源代码程序,把源代码程序复制到IDE编辑中,然后下载到arudino板中。就一切搞定啦。
源代码如下:
  1. int val0;//定义一个电阻D使用的变量。
  2. int val1;//定义一个电阻C使用的变量。
  3. int val2;//定义一个电阻B使用的变量。
  4. int val3;//定义一个按钮使用的变量。
  5. int val4;//定义一个电阻A使用的变量。
  6. int val5;//定义一个光线使用的变量。
  7. int val6;//定义一个声音使用的变量。
  8. int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
  9. void setup()
  10. {
  11.   Serial.begin(38400);
  12. }
  13. void loop()
  14. {
  15.   val7=analogRead(0);  //对滑竿变量赋值,数据来自arudino的模拟口0.
  16.   sendSensorValues(); //发送数据给scratch软件。
  17.   delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
  18. }
  19. void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
  20. {
  21.    ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
  22.    ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
  23.    ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
  24.    ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
  25.    ScratchBoardSensorReport(3,val3);//3编号的通道传递一个参数val3,3编号通道是按钮的数据。
  26.    ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
  27.    ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
  28.    ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
  29.    ScratchBoardSensorReport(7,val7);//将接收到的滑竿的实际测量出来的数据传递给scratch软件。
  30. }
  31. void ScratchBoardSensorReport(int sensor, int value)
  32. {                                          
  33.   Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));   
  34.   Serial.write( value & B1111111);         
  35. }
复制代码

细心的话,你可以看到这个程序跟上节课程中的程序一模一样,唯一的区别就是在LOOP函数中,修改了val7=analogRead(0)这句话,其实这句话的含义是告诉ARDUINO,val7这个变量的值为从模拟口0段读取的数据。这样,就把电位器的值转交给scratch啦。是不是装个传感器很简单哦
    接下来arduino下载完成后,打开scratch软件,就可以从scratch软件中获取传感器的数值啦。大家转到电位器的按钮,会发现scratch中的滑竿变量发生变化了,变化值是从0-100哦。

制作传感板上按钮传感器

上节课程中完成了滑竿传感器的制作,那么这节课程我们继续增加一个传感器,那就是按钮传感器。按钮传感器其实就是一个开关啦,当你手按下的时候,开关闭路,电路会导通。当你松开手的时候,开关开路,电路就不通啦。这个元器件很便宜,电子元件市场都有卖,1-2毛钱一个哦。
因为按钮只有2种状态,就是开或者关,电路通或者不通,所以我们可以把按钮接到数字口上去,arduino判断这个数字口是高电平,那么说明电路导通了,如果这个数字口是低电压,那么说明电路不通哦。今天我们把按钮开关接到数字口8。
实验材料清单如下:
Arduino板:1块
面包线:3根
小面包板:1块
10K电阻:1个
按钮开关:1个
如图所示:



准备好材料后,我们将按钮开关的一端连到arduino板的5V电压口,将按钮开关的另一端连到arduino的数字口8,同时再引到10K电阻上,电阻的另一端跟arduino板的接地口相连。
如图所示:

线路连接完毕后,将arduino的USB口跟电脑连接上。打开arduino IDE,将下面的源代码复制到编辑区后,将程序下载到arduino板上。
源代码如下:

  1. int val0;//定义一个电阻D使用的变量。
  2. int val1;//定义一个电阻C使用的变量。
  3. int val2;//定义一个电阻B使用的变量。
  4. int val3;//定义我们的按钮开关的数值,整了半天才知道数值9以下才显示关闭,10以上才显示打开=、=
  5. int val4;//定义一个电阻A使用的变量。
  6. int val5;//定义一个光线使用的变量。
  7. int val6;//定义一个声音使用的变量。
  8. int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
  9. void setup()
  10. {
  11.   Serial.begin(38400);
  12.   pinMode(8,INPUT);//设置按钮开关接在arudino的数字口8为输入模式。
  13. }
  14. void loop()
  15. {
  16.   if (digitalRead(8)==LOW) //if语句,根据数字接口8,对val3进行赋值操作。
  17.     {val3=103;}           //scratch软件对按钮数据处理大于102为false,其他为true
  18.     else
  19.     {val3=0;}
  20.   val7=analogRead(0);  //对滑竿变量赋值,数据来自arudino的模拟口0.
  21.   sendSensorValues(); //发送数据给scratch软件。
  22.   delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
  23. }
  24. void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
  25. {
  26.    ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
  27.    ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
  28.    ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
  29.    ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
  30.    ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
  31.    ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
  32.    ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
  33.    ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
  34.    ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
  35. }
  36. void ScratchBoardSensorReport(int sensor, int value)
  37. {                                          
  38.   Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));   
  39.   Serial.write( value & B1111111);         
  40. }
复制代码

等下载完成后,把scratch软件打开,显示传感器的变量,大家可以看到传感器界面中的按钮会显示 flase。当你按下按钮开关的时候,传感器的数据显示为 true。至此,我们的按钮开关的传感器制作完成啦。

接下来是光线传感器教程跟声音传感器教程。等四个教程完毕后,我们就把这四个教程的内容整合在一起。那么我们就可以制作出一款与官方传感器功能一样的传感板啦。

^-^制作完官方版的传感板,接下来就是遥杆控制传感器与无线遥控传感器的使用制作啦,一直到最后,我们会制作8个传感器整合在一起的一个全新的传感板。

制作传感板上光线传感器


完成了前面2个实验教程,大家应该对传感器和arduino有一个初步的认识啦。本次教程主要讲光线传感器。
光线传感器我们使用的是光敏电阻,电子元件市场去淘一下,1元一个哦。光敏电阻会随着照射到电阻上的光线强弱而改变电阻值,当光线越强的时候,电阻越小,当光线暗的时候,电阻很大。偶今天在杂物堆里翻了半天,总算找到一个光敏电阻,其他的都被朋友们蹭走了,哭一下先。
OK,开始我们的教程,材料清单跟上一节课程差不多,只不过是把按钮开关换成光敏电阻啦。由于光敏电阻是测量电压的,所以接到arudino的模拟口上去,这次我们接到arduino的1号模拟口。
实验材料清单:
Arduino板:1块
面包线:3根
小面包板:1块
10K电阻:1个
光敏电阻:1个
如图所示:

准备好材料后,我们将光敏电阻的一端连到arduino板的5V电压口,将光敏电阻的另一端连到arduino的模拟口1,同时再引到10K电阻上,电阻的另一端跟arduino板的接地口相连。
如图所示:

线路连接完毕后,将arduino的USB口跟电脑连接上。打开arduino IDE,将下面的源代码复制到编辑区后,将程序下载到arduino板上。
源代码如下
  1. <font face="微软雅黑" size="3">
  2. int val0;//定义一个电阻D使用的变量。
  3. int val1;//定义一个电阻C使用的变量。
  4. int val2;//定义一个电阻B使用的变量。
  5. int val3;//定义我们的按钮开关的数值,整了半天才知道数值9以下才显示关闭,10以上才显示打开=、=
  6. int val4;//定义一个电阻A使用的变量。
  7. int val5;//定义我们现在使用的光敏电阻的数据。
  8. int val6;//定义一个声音使用的变量。
  9. int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
  10. void setup()
  11. {
  12. }
  13. void loop()
  14. {
  15.   val5=analogRead(1); //读取接在模拟口1的光敏电阻的数据。
  16.   sendSensorValues(); //发送数据给scratch软件。
  17.   delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
  18. }
  19. void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
  20. {
  21.    ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
  22.    ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
  23.    ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
  24.    ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
  25.    ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
  26.    ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
  27.    ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
  28.    ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
  29.    ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
  30. }
  31. void ScratchBoardSensorReport(int sensor, int value)
  32. {                                          
  33.   Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));   
  34.   Serial.write( value & B1111111);         
  35. }
  36. </font>
复制代码

等下载完成后,把scratch软件打开,显示传感器的变量,大家可以看到传感器界面中的光线会显示出数据来。当你使用不同的光源照射这个光敏电阻,或者把光敏电阻遮挡住时候,传感器的数据显示为会发生变化。当光线越亮的时候,数值越小,当光线越暗的时候,数值越大。。如果想反个方向来,那么就在程序里修改一下吧。
    哦哦哦哦,再找个驻极话筒过来就可以做下一个教程了。一个驻极话筒大约0.5-1元一个哦

制作传感板上声音传感器
完成了前面3个实验教程,大家应该对传感器和arduino有一个初步的认识啦。本次教程主要讲声音传感器。
声音传感器我采用的是驻极体话筒,电子元件市场去淘一下,0.5元一个哦。驻极体话筒的工作原理请参考网上相关资料,由于驻极体话筒产生的电压很低,只有几到几十毫伏,因此无法直接接到arduino上使用。如果你闲麻烦的话,可以直接买一个声音传感器,大约30元左右一个,已经带好放大电路的,直接插到arduino板上就可以使用啦。
今天既然我们使用驻极体话筒,那么我们可以采用2个方法,第一个方法就是使用9014三极管进行放大处理。第二个方法就是使用运算放大电路进行直接处理。今天我们采用第二种方法,运算放大电路使用的是LM358P的放大电路,当然你也可以使用其他运算放大电路,一个LM358P放大电路大约1.2元一个。
LM358P的集成电路一共8个引脚,把有端口的一面朝左,正面标示面对自己,那么下排从左到右分别是1,2,3,4,上排就是8,7,6,5编号。OK。把引脚搞清楚后,接下来给大家介绍一下LM358P的内部大致原理,LM358集成电路是一个双运算放大电路,内部能对2个信号进行放大哦。其中3(+),2(-)脚位一组输入信号,1号脚输出放大信号,4号脚接地。5(+),6(-)脚位一组输入信号,7号脚输出放大信号,8号接电源正极。
我们今天要做的实验就是把驻极体话筒的信号给第一个放大器,把信号进行第一次放大后,再输入到第二个放大器中,进行第二次放大信号。放大后的信号引到arduino的模拟口2中,这样arduino就可以检测到信号啦。

实验材料清单:
Arduino板:1块
面包线:诺干根
LM358P:1块
10K电阻:2个
100K电阻:2个
2.2K电阻:1个
0.1uF电容:3个
发光二极管:1个
如图所示:


由于器材比较多,我们要做一个声音放大的电路,我初步画的电路图,比较粗糙,不过大致的能看懂吧。电路图如下:

根据电路图,我们把电容,电阻,LM358等组装起来哦。效果图如下:

线路连接完毕后,将arduino的USB口跟电脑连接上。打开arduino IDE,将下面的源代码复制到编辑区后,将程序下载到arduino板上。
源代码如下:

  1. int val0;//定义一个电阻D使用的变量。
  2. int val1;//定义一个电阻C使用的变量。
  3. int val2;//定义一个电阻B使用的变量。
  4. int val3;//定义我们的按钮开关的数值,整了半天才知道数值9以下才显示关闭,10以上才显示打开=、=
  5. int val4;//定义一个电阻A使用的变量。
  6. int val5;//定义我们现在使用的光敏电阻的数据。
  7. int val6;//定义一个声音使用的变量。
  8. int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
  9. void setup()
  10. {
  11.   Serial.begin(38400);
  12. }
  13. void loop()
  14. {
  15.   val6=analogRead(2); //读取接在模拟口2的声音的数据。
  16.   sendSensorValues(); //发送数据给scratch软件。
  17.   delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
  18. }
  19. void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
  20. {
  21.    ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
  22.    ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
  23.    ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
  24.    ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
  25.    ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
  26.    ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
  27.    ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
  28.    ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
  29.    ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
  30. }
  31. void ScratchBoardSensorReport(int sensor, int value)
  32. {                                          
  33.   Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));   
  34.   Serial.write( value & B1111111);         
  35. }
复制代码
等下载完成后,把scratch软件打开,显示传感器的变量,大家可以看到传感器界面中的光线会显示出数据来。当你讲话的时候,或者环境声音有变化的时候,你可以看到传感器界面中的声音数值在变化哦。
另外,如果你嫌面包板太麻烦,可以把元器件焊在洞洞板上面哦。比如如下图:

制作完整的传感板
完成了前面4个实验教程,其实这四个实验的功能就是官方传感板上的四个主要的传感器哦。今天主要是把前面四个实验整合起来而已,这样我们就差不多可以做一个简易的传感板了。
将四个传感器整合起来,最简单的办法就是把前面四个实验都一起插在面包板上哦。通过连线跟arduino连接起来,然后在arduino板上灌入程序就OK了。还有一个办法,就是你手上如果有洞洞板,那么可以把各个元器件都焊接在洞洞板上啦。如果您动手能力再强一些,自己做个电路板,把元件焊接在上面,然后电路板上安装一些排针,直接插入arduino,这样就可以把传感板当成一个arduino的扩展板,需要用的时候直接插上就OK了,不用的时候再拿下来,arduino可以用做智能小车的控制板,机器人的控制板等等。一物多用才是好东西哦。
实验器材清单:
    请参考前面四个教程的清单哦。^-^,偶偷懒就不列出来了

电路图:

组装完成后的效果图:
(请忽视旁边那块绿色的电路板,这个电路板是偶无聊焊上去的,增加无线控制的一个功能)


线路连接完毕后,将arduino的USB口跟电脑连接上。打开arduino IDE,将下面的源代码复制到编辑区后,将程序下载到arduino板上。
源代码如下:
  1. int val0;//定义一个电阻D使用的变量。
  2. int val1;//定义一个电阻C使用的变量。
  3. int val2;//定义一个电阻B使用的变量。
  4. int val3;//定义我们的按钮开关的数值,
  5. int val4;//定义一个电阻A使用的变量。
  6. int val5;//定义我们现在使用的光敏电阻的数据。
  7. int val6;//定义一个声音使用的变量。
  8. int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
  9. void setup()
  10. {
  11.   Serial.begin(38400);
  12.   pinMode(8,INPUT);//设置按钮开关接在arudino的数字口8为输入模式。
  13. }
  14. void loop()
  15. {
  16.   if (digitalRead(8)==LOW) //if语句,根据数字接口8,对val3进行赋值操作。
  17.     {val3=150;}           //scratch软件对按钮数据处理大于102为false,其他为true
  18.     else
  19.     {val3=0;}  
  20.   val7=analogRead(0); //读取接字模拟口0的滑竿电阻的数据。
  21.   val5=analogRead(1); //读取接在模拟口1的光敏电阻的数据。
  22.   val6=analogRead(2)*2.5; //读取接在模拟口2的声音的数据。
  23.   sendSensorValues(); //发送数据给scratch软件。
  24.   delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
  25. }
  26. void sendSensorValues()  //自定义函数,本函数主用是用于发送8个数据值给scratch。
  27. {
  28.    ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
  29.    ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
  30.    ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
  31.    ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
  32.    ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
  33.    ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
  34.    ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
  35.    ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
  36.    ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
  37. }
  38. void ScratchBoardSensorReport(int sensor, int value)
  39. {                                          
  40.   Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));   
  41.   Serial.write( value & B1111111);         
  42. }
复制代码

等下载完成后,把scratch软件打开,显示传感器的变量,大家可以看到传感器界面中的各种传感器会显示出数据来。如图

备注:本资料来自网络,觉得不错 很详细 就转给大家了解一下

丄帝De咗臂  高级技匠

发表于 2015-5-8 19:31:00

好棒的动手能力,看到最后一句话我也是醉了,难道真的不是你做的吗
回复

使用道具 举报

fbygg  高级技师

发表于 2015-5-8 23:09:39

看懂原理要有一定的模拟电路知识
回复

使用道具 举报

大连林海  初级技神
 楼主|

发表于 2015-5-9 06:50:28

丄帝De咗臂 发表于 2015-5-8 19:31
好棒的动手能力,看到最后一句话我也是醉了,难道真的不是你做的吗

这个真的不是 不过我能根据原理做出来的  我就是一个水货而已:dizzy:
回复

使用道具 举报

WmhYCMR9  学徒

发表于 2019-10-23 15:12:26

图片显示不出来啊 什么情况
回复

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail