由于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文件打开都可以。程序内每行都加了中文的注释,相信大家应该能看懂,如果不懂或者有疑问请在群里或者论坛上咨询一下啦。
源代码程序如下:
<font face="微软雅黑" size="3">int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义一个按钮使用的变量。
int val4;//定义一个电阻A使用的变量。
int val5;//定义一个光线使用的变量。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量。
void setup() //arduino程序的必要函数,一个arduino程序必须有setup()与LOOP()
//setip()函数是一些关于一些设置的,loop()函数是循环执行的程序。
{
Serial.begin(38400);//设置串口通讯速率为38.4K。按照官方的资料,但是偶设置9600也是可以正常通讯的。^-^
}
void loop() //同上的注释,也是arduino的必要函数,本函数主要是进行循环执行。
{
val0=100; //对电阻D变量赋值,先暂时赋值为100吧,大家可以自己调整这个数字,看看scratch中接收的数据变化
sendSensorValues(); //这个是自定义的一个函数,这个函数主要是通过串口发送数据给scratch。
delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues() //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
ScratchBoardSensorReport(3,val3);//3编号的通道传递一个参数val3,3编号通道是按钮的数据。
ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
ScratchBoardSensorReport(7,val7);//7编号的通道传递一个参数val7,7编号通道是滑竿的数据。
}
void ScratchBoardSensorReport(int sensor, int value)
{
Serial.write( B10000000
| ((sensor & B1111)<<3)
| ((value>>7) & B111));
Serial.write( value & B1111111);
}
//自定义函数,本函数主要对数据进行编码,并通过串口发送给scratch。每次发送2个字节。上面程序中一共调用9次,则一共发送18个字节。
//本函数需要2个参数,第一个参数是通道编号,第二个参数是该通道上传感器的数值,现在我们没有接传感器,所以我们可以用变量直接赋值模拟一下。
//先编码高字节,(sensor & B1111)<<3的意思将编号为sensor值的通道进行和二进制数1111与操作,然后左移动3位,这个操作就是将通道编号放到
//高字节的第2-5位上,不够位数的自动补0操作。(value>>7) & B111)的意思是将变量数值右移7位后与二进制111进行与操作,则刚好将value的值
//放到高字节的第6-8位。加上最前面的B10000000的与操作,那么高字节的第1位就是为1,这样刚好组成一个高字节的编码要求了。
//编码低字节,跟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板中。就一切搞定啦。
源代码如下:
int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义一个按钮使用的变量。
int val4;//定义一个电阻A使用的变量。
int val5;//定义一个光线使用的变量。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
void setup()
{
Serial.begin(38400);
}
void loop()
{
val7=analogRead(0); //对滑竿变量赋值,数据来自arudino的模拟口0.
sendSensorValues(); //发送数据给scratch软件。
delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues() //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
ScratchBoardSensorReport(3,val3);//3编号的通道传递一个参数val3,3编号通道是按钮的数据。
ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
ScratchBoardSensorReport(7,val7);//将接收到的滑竿的实际测量出来的数据传递给scratch软件。
}
void ScratchBoardSensorReport(int sensor, int value)
{
Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));
Serial.write( value & B1111111);
}
复制代码
细心的话,你可以看到这个程序跟上节课程中的程序一模一样,唯一的区别就是在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板上。
源代码如下:
int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义我们的按钮开关的数值,整了半天才知道数值9以下才显示关闭,10以上才显示打开=、=
int val4;//定义一个电阻A使用的变量。
int val5;//定义一个光线使用的变量。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
void setup()
{
Serial.begin(38400);
pinMode(8,INPUT);//设置按钮开关接在arudino的数字口8为输入模式。
}
void loop()
{
if (digitalRead(8)==LOW) //if语句,根据数字接口8,对val3进行赋值操作。
{val3=103;} //scratch软件对按钮数据处理大于102为false,其他为true
else
{val3=0;}
val7=analogRead(0); //对滑竿变量赋值,数据来自arudino的模拟口0.
sendSensorValues(); //发送数据给scratch软件。
delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues() //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
}
void ScratchBoardSensorReport(int sensor, int value)
{
Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));
Serial.write( value & B1111111);
}
复制代码
等下载完成后,把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板上。
源代码如下
<font face="微软雅黑" size="3">
int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义我们的按钮开关的数值,整了半天才知道数值9以下才显示关闭,10以上才显示打开=、=
int val4;//定义一个电阻A使用的变量。
int val5;//定义我们现在使用的光敏电阻的数据。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
void setup()
{
}
void loop()
{
val5=analogRead(1); //读取接在模拟口1的光敏电阻的数据。
sendSensorValues(); //发送数据给scratch软件。
delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues() //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
}
void ScratchBoardSensorReport(int sensor, int value)
{
Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));
Serial.write( value & B1111111);
}
</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板上。
源代码如下:
int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义我们的按钮开关的数值,整了半天才知道数值9以下才显示关闭,10以上才显示打开=、=
int val4;//定义一个电阻A使用的变量。
int val5;//定义我们现在使用的光敏电阻的数据。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
void setup()
{
Serial.begin(38400);
}
void loop()
{
val6=analogRead(2); //读取接在模拟口2的声音的数据。
sendSensorValues(); //发送数据给scratch软件。
delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues() //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
}
void ScratchBoardSensorReport(int sensor, int value)
{
Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));
Serial.write( value & B1111111);
}
复制代码
等下载完成后,把scratch软件打开,显示传感器的变量,大家可以看到传感器界面中的光线会显示出数据来。当你讲话的时候,或者环境声音有变化的时候,你可以看到传感器界面中的声音数值在变化哦。
另外,如果你嫌面包板太麻烦,可以把元器件焊在洞洞板上面哦。比如如下图:
制作完整的传感板
完成了前面4个实验教程,其实这四个实验的功能就是官方传感板上的四个主要的传感器哦。今天主要是把前面四个实验整合起来而已,这样我们就差不多可以做一个简易的传感板了。
将四个传感器整合起来,最简单的办法就是把前面四个实验都一起插在面包板上哦。通过连线跟arduino连接起来,然后在arduino板上灌入程序就OK了。还有一个办法,就是你手上如果有洞洞板,那么可以把各个元器件都焊接在洞洞板上啦。如果您动手能力再强一些,自己做个电路板,把元件焊接在上面,然后电路板上安装一些排针,直接插入arduino,这样就可以把传感板当成一个arduino的扩展板,需要用的时候直接插上就OK了,不用的时候再拿下来,arduino可以用做智能小车的控制板,机器人 的控制板等等。一物多用才是好东西哦。 实验器材清单:
请参考前面四个教程的清单哦。^-^,偶偷懒就不列出来了
电路图:
组装完成后的效果图:
(请忽视旁边那块绿色的电路板,这个电路板是偶无聊焊上去的,增加无线控制的一个功能)
线路连接完毕后,将arduino的USB口跟电脑连接上。打开arduino IDE,将下面的源代码复制到编辑区后,将程序下载到arduino板上。
源代码如下:
int val0;//定义一个电阻D使用的变量。
int val1;//定义一个电阻C使用的变量。
int val2;//定义一个电阻B使用的变量。
int val3;//定义我们的按钮开关的数值,
int val4;//定义一个电阻A使用的变量。
int val5;//定义我们现在使用的光敏电阻的数据。
int val6;//定义一个声音使用的变量。
int val7;//定义一个滑竿使用的变量,现在我们要对这个变量进行赋值,原始数据来源模拟口0,外接可变电阻。
void setup()
{
Serial.begin(38400);
pinMode(8,INPUT);//设置按钮开关接在arudino的数字口8为输入模式。
}
void loop()
{
if (digitalRead(8)==LOW) //if语句,根据数字接口8,对val3进行赋值操作。
{val3=150;} //scratch软件对按钮数据处理大于102为false,其他为true
else
{val3=0;}
val7=analogRead(0); //读取接字模拟口0的滑竿电阻的数据。
val5=analogRead(1); //读取接在模拟口1的光敏电阻的数据。
val6=analogRead(2)*2.5; //读取接在模拟口2的声音的数据。
sendSensorValues(); //发送数据给scratch软件。
delay(100); //系统等待100毫秒,等待结束后,继续循环执行。
}
void sendSensorValues() //自定义函数,本函数主用是用于发送8个数据值给scratch。
{
ScratchBoardSensorReport(15,4); //15编号的通道传递一个版本参数。。
ScratchBoardSensorReport(0,val0);//0编号的通道传递一个参数val0,0编号通道是scratch中电阻D 的数据。
ScratchBoardSensorReport(1,val1);//1编号的通道传递一个参数val1,1编号通道是电阻C 的数据。
ScratchBoardSensorReport(2,val2);//2编号的通道传递一个参数val2,2编号通道是电阻B 的数据。
ScratchBoardSensorReport(3,val3);//3编号的通道,将接收到的按钮状态发送给scratch软件。
ScratchBoardSensorReport(4,val4);//4编号的通道传递一个参数val4,4编号通道是电阻A 的数据。
ScratchBoardSensorReport(5,val5);//5编号的通道传递一个参数val5,5编号通道是光线的数据。
ScratchBoardSensorReport(6,val6);//6编号的通道传递一个参数val6,6编号通道是声音的数据。
ScratchBoardSensorReport(7,val7);//7编号的通道,将接收到的滑竿的实际测量出来的数据传递给scratch软件。
}
void ScratchBoardSensorReport(int sensor, int value)
{
Serial.write( B10000000 | ((sensor & B1111)<<3) | ((value>>7) & B111));
Serial.write( value & B1111111);
}
复制代码
等下载完成后,把scratch软件打开,显示传感器的变量,大家可以看到传感器界面中的各种传感器会显示出数据来。如图
备注:本资料来自网络,觉得不错 很详细 就转给大家了解一下