发明内容
本发明是为了解决孩子在学习编程时必须使用屏幕,而使用屏幕的时间和要控制孩子使用屏幕的时间之间存在冲突的不足,提供一种孩子在学习编程时无需使用屏幕,采用积木连接方式将要执行的程序写入主控模块中,由主控模块根据写入的程序去控制被控制对象完成相应的指令动作,从而实现无需屏幕就能让孩子学习编程,可靠性高,趣味性好的基于有形编程指令积木的编程教育系统。
以上技术问题是通过下列技术方案解决的:
基于有形编程指令积木的编程教育系统,包括积木端、电脑端和机器端;积木端包括若干个积木,并在每个积木上都分别设有能将任意两个积木进行两两相互可分开式固定对接连接在一起的固定连接机构和能将任意两个积木进行两两相互可分开式数据线对接连接在一起的数据传输接口;在若干个积木中包括一个主控积木、若干个指令积木和若干个参数积木;在主控积木上分别设有主控模块和木端通信模块,木端通信模块和设置在主控积木上的数据传输接口分别与主控模块连接;在每个指令积木上分别设有指令模块,设置在同一个指令积木上的数据传输接口和指令模块连接;在每个参数积木上分别设有参数模块,设置在同一个参数积木上的数据传输接口和参数模块连接;在电脑端上设有脑端通信模块;在机器端上设有机端通信模块和能控制机器端进行各种基本动作的机端控制器,机端通信模块与机端控制器相连接;主控积木上的木端通信模块能同时与机器端上的机端通信模块和电脑端上的脑端通信模块通信连接。
通过积木这种有形模块让孩子边玩边学习编程。制作一个个有形的积木模块代替复杂的计算机代码,有了它就能让小孩都可以学习编程了。通过积木进行有形编程,正是利用孩子们在玩乐当中学习的天性与计算机思维结合在一起,从而让编程变得简单容易。
本发明将scratch里的部分指令搬到了现实中,成为现实中可搭接的积木,孩子能完全脱离屏幕,直接通过指令积木,完成编程,控制被控制对象机器人等。
同时,本发明相比于Google的ProjectBloks这样的有形编程,本发明解决了能在同一个产品里,将有形编程直接过渡到软件编程,实现编程教育的目的,让孩子最终能够学会通过编程语言进行编程。
本发明可实时将积木搭建出的指令同步到iPad或电脑中,实时查看转化成的高级编程语言,如JavaScript或Python,并可执行或单步执行程序,进行debug编程工具。
孩子在学习编程时无需使用屏幕,采用积木连接方式将要执行的程序写入主控模块中,由主控模块根据写入的程序去控制被控制对象完成相应的指令动作,从而实现无需屏幕就能让孩子学习编程,可靠性高,趣味性好。
作为优选,所述木端通信模块、所述脑端通信模块和所述机端通信模块分别包括wifi和或蓝牙。
wifi和或蓝牙易于连接,可靠性高。
作为优选,在机器端上设有分别与机端控制器连接的声音模块、发光模块、传感器模块、扩展模块和能根据指令模块的指令让机器端进行各种基本动作的运动模块。
增加玩积木的乐趣,结构简单,可靠性高。
作为优选,若干个指令积木则有若干个指令模块,并且这若干个指令模块为基础指令集;基础指令集包括执行函数指令、循环控制指令、逻辑判断指令和基本动作指令;若干个参数积木则有若干个参数模块,并且这若干个参数模块是为基础指令集提供指令参数的辅助指令集;所述辅助指令集包括用于执行函数指令的函数名、可调节数字模块、可调节角度模块和可调节是否模块。
基础指令集和辅助指令集的配合能让机器端运行孩子需要的各种动作,大大提高了机器端运行动作的使用范围,便于孩子探索机器端的各种运行动作,增加编程兴趣和玩积木的乐趣。
作为优选,所述机器端包括机器人,所述基本动作指令包括能让机器人执行基本动作的机器人基本动作指令,所述机器人基本动作指令包括前进指令、后退指令、左转指令、右转指令、转圈指令、发声指令、闪光指令、前倾斜指令、后倾斜指令、左倾斜指令、右倾斜指令、抬起指令和放下指令。
针对机器人的机器人基本动作指令大大提高了积木编程的娱乐性和趣味性。
作为优选,所述机器端还包括智能家电,所述基本动作指令还包括能让家电执行基本动作的家电基本动作指令,所述家电基本动作指令包括开关指令、计时指令和选择指令。
通过对智能家电的控制,让孩子在娱乐中理解编程能控制各种对象,让孩子了解编程还能帮助自己干家务活的意义,增强孩子兴趣。
作为优选,在智能家电上还设有控制端与智能家电上的机端控制器连接的摄像头,所述家电基本动作指令还包括摄像指令。
通过摄像头让孩子便于远处查看智能家电当前的时间工作状况,使用方便简单,可靠性高。
作为优选,电脑端包括iPad或基于树莓派的微型电脑。
电脑端还可以是智能手机。电脑端能起到查看程序代码或其他显示或者程序升级等作用。电脑端的多样性为本发明扩大了使用范围,可靠性好,使用方便简单。
作为优选,固定连接机构包括能相互磁性吸住的若干个磁铁;在积木的每个壁面内都分别嵌入有至少一个磁铁;两个积木之间通过设置在这两个积木对应壁面内的磁铁磁性吸住后固定对接连接在一起;
数据传输接口包括若干个插座和与插座匹配的插头,在每个积木的至少一个壁面上设置有插座,在每个积木的至少一个壁面上设置有插头,并且在同一个积木上的插头和插座不在该积木的同一个壁面上;
设置在主控积木上的插头和插座分别与设置在该主控积木上的主控模块连接;设置在同一个指令积木上的插头和插座分别与设置在该个指令积木上的指令模块连接;设置在同一个参数积木上的插头和插座分别与设置在该个参数积木上的参数模块连接。
这种结构易于将两个积木对接连接在一起,并且两个积木对接连接后,这两个积木之间的数据信号传输稳定性好,信号不易中断。
作为优选,在积木内设有木腔,在木腔内设有与该积木上的插头个数相等的支点和与支点个数相等的拉绳,在每个支点上分别设有杠杆;在支点左方的木腔内设有一号定滑轮,在支点右方的木腔内设有二号定滑轮;
在插头处的积木内设有与木腔相连通的头滑孔,插头滑动连接在头滑孔内,并在头滑孔内设有能将插头往头滑孔的木腔端挤压的头挤压弹簧;
在磁铁处的积木内设有与木腔相连通的磁滑孔,磁铁滑动设置在磁滑孔内,并在磁滑孔内设有能将磁铁往磁滑孔的木腔端挤压的磁挤压弹簧;
杠杆的阻力臂端部滑动连接在插头的里端面上;拉绳的一端固定连接在杠杆的动力臂端部,拉绳的另一端依次经过二号定滑轮和一号定滑轮后固定连接在磁铁的里端面上;杠杆的动力臂长度大于杠杆的阻力臂长度。
这种结构可靠性高,在两个积木通过磁铁固定连接在一起后,磁铁的力还能同时让其中一个积木的插头上的金属插条插入连接在另一个积木的插座的插孔内。并在这两个积木分开后,插头上的金属插条缩入到积木内,易于使用,在使用过程中插头上的金属插条不易伤到手,使用简单,安全方便,可靠性好。
本发明能够达到如下效果:
本发明孩子在学习编程时无需使用屏幕,采用积木连接方式将要执行的程序写入主控模块中,由主控模块根据写入的程序去控制被控制对象完成相应的指令动作,从而实现无需屏幕就能让孩子学习编程,可靠性高,趣味性好。
实施例1,基于有形编程指令积木的编程教育系统,参见图1-图6所示,包括积木端47、电脑端38和机器端36;积木端包括若干个积木,并在每个积木上都分别设有能将任意两个积木进行两两相互可分开式固定对接连接在一起的固定连接机构和能将任意两个积木进行两两相互可分开式数据线对接连接在一起的数据传输接口;在若干个积木中包括一个主控积木、若干个指令积木和若干个参数积木;在主控积木26上分别设有主控模块44和木端通信模块43,木端通信模块43和设置在主控积木上的数据传输接口27分别与主控模块44连接;在每个指令积木1上分别设有指令模块45,设置在同一个指令积木1上的数据传输接口30和指令模块连接;在每个参数积木上分别设有参数模块,设置在同一个参数积木21上的数据传输接口22和参数模块46连接;在电脑端上设有脑端通信模块;在机器端上设有机端通信模块和能控制机器端进行各种基本动作的机端控制器,机端通信模块与机端控制器相连接;主控积木上的木端通信模块能同时与机器端上的机端通信模块和电脑端上的脑端通信模块通信连接。
参见图3所示,主控积木26上的固定连接机构29还没固定对接连接在指令积木1上的固定连接机构31上,并且此时指令积木1上的数据传输接口30也没对接连接在主控积木26上的数据传输接口27上,指令积木1上的固定连接机构34也没固定对接连接在参数积木21上的固定连接机构35上,指令积木1上的数据传输接口25也没对接连接在参数积木21上的数据传输接口22上。在指令积木上还设有数据传输接口24。在参数积木上还设有数据传输接口23。在主控积木上还分别设有固定连接机构28、数据传输接口32和数据传输接口33。
参见图4所示,主控积木26上的固定连接机构29已经固定对接连接在指令积木1上的固定连接机构31上,并且此时指令积木1上的数据传输接口30也已经对接连接在主控积木26上的数据传输接口27上,指令积木1上的固定连接机构34也已经固定对接连接在参数积木21上的固定连接机构35上,指令积木1上的数据传输接口25也已经对接连接在参数积木21上的数据传输接口22上。
所述木端通信模块、所述脑端通信模块和所述机端通信模块分别包括wifi和或蓝牙。
在机器端上设有分别与机端控制器连接的声音模块、发光模块、传感器模块、扩展模块和能根据指令模块的指令让机器端进行各种基本动作的运动模块。
若干个指令积木则有若干个指令模块,并且这若干个指令模块为基础指令集;基础指令集包括执行函数指令、循环控制指令、逻辑判断指令和基本动作指令;若干个参数积木则有若干个参数模块,并且这若干个参数模块是为基础指令集提供指令参数的辅助指令集;所述辅助指令集包括用于执行函数指令的函数名、可调节数字模块、可调节角度模块和可调节是否模块。
所述机器端36包括机器人48,所述基本动作指令包括能让机器人执行基本动作的机器人基本动作指令,所述机器人基本动作指令包括前进指令、后退指令、左转指令、右转指令、转圈指令、发声指令、闪光指令、前倾斜指令、后倾斜指令、左倾斜指令、右倾斜指令、抬起指令和放下指令。
参见图2所示,电脑端38包括iPad40或基于树莓派的微型电脑39。微型电脑39通过设置在微型电脑39上的脑端通信模块41与积木端47主控积木26上的木端通信模块43无线连接。iPad40通过设置在iPad40上的脑端通信模块42与积木端47主控积木26上的木端通信模块43无线连接。
参见图2所示,机器端36的机器人48通过设置在机器人48上的机端通信模块37与积木端47主控积木26上的木端通信模块43无线连接。机器人48上的机端控制器51与设置在该机器人48上的机端通信模块51连接。机器人48上的声音模块59、发光模块60、传感器模块61、扩展模块62和运动模块63分别与机器人48上的机端控制器51连接。
固定连接机构包括能相互磁性吸住的若干个磁铁;在积木的每个壁面内都分别嵌入有至少一个磁铁;两个积木之间通过设置在这两个积木对应壁面内的磁铁磁性吸住后固定对接连接在一起;
数据传输接口包括若干个插座和与插座匹配的插头,在每个积木的至少一个壁面上设置有插座,在每个积木的至少一个壁面上设置有插头,并且在同一个积木上的插头和插座不在该积木的同一个壁面上;
设置在主控积木上的插头和插座分别与设置在该主控积木上的主控模块连接;设置在同一个指令积木上的插头和插座分别与设置在该个指令积木上的指令模块连接;设置在同一个参数积木上的插头和插座分别与设置在该个参数积木上的参数模块连接。
参见图5所示,指令积木1上的磁铁14还没被参数积木21上的磁铁18磁性吸住。指令积木1上的插头15的金属插条16还没插入连接在参数积木21上的插座20的插孔19内。
参见图6所示,在积木内设有木腔10,在木腔内设有与该积木上的插头个数相等的支点6和与支点个数相等的拉绳5,在每个支点上分别设有杠杆3;在支点左方的木腔内设有一号定滑轮2,在支点右方的木腔内设有二号定滑轮9;
在插头处的积木内设有与木腔相连通的头滑孔13,插头滑动连接在头滑孔内,并在头滑孔内设有能将插头往头滑孔的木腔端挤压的头挤压弹簧11;
在磁铁处的积木内设有与木腔相连通的磁滑孔17,磁铁滑动设置在磁滑孔内,并在磁滑孔内设有能将磁铁往磁滑孔的木腔端挤压的磁挤压弹簧12;
杠杆的阻力臂4端部设有滚轮8,滚轮滑动连接在插头的里端面上;拉绳的一端固定连接在杠杆的动力臂7端部,拉绳的另一端依次经过二号定滑轮和一号定滑轮后固定连接在磁铁的里端面上;杠杆的动力臂长度大于杠杆的阻力臂长度。
主控模块:基于树莓派,运行nodejs,通过蓝牙模块控制机器端,通过蓝牙模块同步指令到电脑端,通过wifi模块连接电脑端上进行软件升级。
若干指令模块:为基础指令集,包括执行函数指令(Func())、循环控制指令(for循环)、逻辑判断(条件)指令(if/else)、基本动作指令(前进、后退、左转、右转、转圈、发声、LED闪灯等)。指令模块的电路原理示意图如图10所示。
若干参数模块:辅助基础指令,提供指令参数,包括函数名(用于执行函数指令)、可调节数字模块、可调节角度模块、可调节是否模块等。参数模块的电路原理示意图如图11所示。
参见图9所示,指令积木控制机器人的流程为:
主控积木的主控模块启动后,通过蓝牙模块,搜索机器人和iPad,主控模块作为蓝牙主机,机器人和iPad作为蓝牙外设,机器人和iPad随时启动,随时蓝牙连接成功。
孩子开始根据自己的意愿或课程要求,自行设计程序,添加指令模块和参数模块,参数模块上的数字、角度、是否等可以随意调整,参数模块还包含针对传感器状态的判断。
完成指令模块和参数模块的搭建后,打开开关,完成指令。主控模块将指令通过蓝牙同步给iPad。
同时,主控模块基于blockly平台解析指令,生成可执行程序并运行,执行过程中将控制机器人的命令通过蓝牙发送给机器人。
iPad的程序启动后,在蓝牙连接主控模块后,一直监听蓝牙输入。收到主控模块同步的指令后,基于blockly平台解析指令,将指令展示为blockly积木形式,转换成JavaScript和Python语言,并生成可执行程序,开始运行,在iPad上画出机器人的行走路线。
机器人程序启动后,在蓝牙连接主控模块后,一直监听蓝牙输入。机器人上的传感器通过蓝牙不断返回传感器状态,主控模块通过全局变量,记录传感器状态值。收到主控模块发出的命令后,机器人执行命令,完成舞蹈动作或者闯关。
主控积木的主控模块为树莓派(RaspberryPi)的linux操作系统,运行环境为Nodejs,加载googleblockly模块。利用googleblockly平台提供的接口,实现对于指令积木的xml解析,指令积木的功能配置和参数配置。
例如:
1、调用为blockly封装的nodejs模块。
//调用googleblockly模块
varBlockly=require(’node-blockly’)。
2、通过B1ockly的Blocks函数,对指令积木进行定义。
Blockly.Blocks[’bee_moveforward’]={
init:function(){
this.appendDummy Input()
.appendField(″向前走″)
.appendField(newBlockly.FieldNumber(10,1,10000),″moveSteps″)
.appendField(″步″);
this.setPreviousStatement(true,null);
this.setNextStatement(true,null);
this.setColour(255);
this.setTooltip(’letbeemoveforward’);
this.setHelpUrl(”);
}}。
3、通过JavaScript函数,定义指令积木对应的JavaScript函数。
Blockly.JavaScript[’bee_moveforward’]=function(block){
varnumber_movesteps=block.getFieldValue(’moveSteps’);
varcode=″Bee.moveForward″+″(″+number_movesteps+″);\n″;
returncode;
}。
4、定义对应函数需要完成的功能,比如通过蓝牙向机器人发出向前走的指令。
//自定义Blocks的功能,与ble的蓝牙模块进行ajax通信,传递指令
Bee.moveForward=function(number_steps){
console.log(″moveforward″+number_steps);
BLE.runBLECommand(″command″,″moveForward″,number_steps)
}。
5、通过Blockly.Xml.textToDom函数,将主控模块读到的积木指令对应xml转换为blockly可以识别的workspace,然后通过Blockly.JavaScript.workspaceToCode函数把workspace转换为可执行的JavaScript代码:
Bee.workspace=newBlockly.Workspace();
varcommandXml=XML.generateXml(commandString);
try{
varxml=Blockly.Xml.textToDom(commandXml);
}catch(e){console.log(e);
Return
}
Blockly.Xml.domToWorkspace(xml,Bee.workspace);
varcode=Blockly.JavaScript.workspaceToCode(Bee.workspace)。
可自定义函数模块:
当机器人需要完成复杂的动作组合时,指令模块和参数模块就会越积越多,不仅浪费模块,也不能养成好的编程习惯。所以,本项目还支持自定义的函数模块,让孩子学会通过函数来优雅地实现复杂的功能。
定义函数模块需要:
主控模块:用于读取函数定义,并写入函数定义文件;
定义模块:承载函数定义的关键字;
函数模块:承载函数名,如“新动作1”,“新动作2”,硬件同参数模块;
指令模块:用于搭建完成定义函数功能的各个指令;
参数模块:用于搭建完成定义函数功能的指令参数。
定义函数模块的流程为:
指令积木主控模块启动;
将开始模块改为定义模块,后面添加函数模块,函数模块用于承载函数名;
添加该函数功能所需的指令模块和参数模块,比如让机器人跳8字舞所需的所有动作和参数;
主控模块收到指令后,判断是否为函数定义,如果是函数定义,则将该函数定义的指令存储到定义文件里。
函数定义以JSON串的格式存储到文件中。参见图8所示。
执行函数模块需要:
主控模块:用于蓝牙通信,读取指令,解析指令,执行程序;
执行模块:用于触发自定义函数的执行;
函数模块:承载函数名;
指令模块:用于搭建编程的各个指令;
参数模块:用于搭建编程的指令参数。
执行函数模块的流程为:参见图7所示。
主控积木的主控模块启动;
添加执行模块和函数模块;
添加其他需要的指令模块和参数模块;
确认完成指令搭建;
主控模块收到指令后,判断是否有执行模块,如果有,则读取函数定义文件,将函数定义的指令加入到要执行的指令集中;
主控模块解析指令,执行程序。
本发明将scratch里的部分指令搬到了现实中,成为现实中可搭接的积木,孩子能完全脱离屏幕,直接通过指令积木,完成编程,控制被控制对象机器人等。
同时,本发明相比于Google的ProjectBloks这样的有形编程,本发明解决了能在同一个产品里,将有形编程直接过渡到软件编程,实现编程教育的目的,让孩子最终能够学会通过编程语言进行编程。
本发明可实时将积木搭建出的指令同步到iPad或电脑中,实时查看转化成的高级编程语言,如JavaScript或Python,并可执行或单步执行程序,进行debug编程工具。
孩子在学习编程时无需使用屏幕,采用积木连接方式将要执行的程序写入主控模块中,由主控模块根据写入的程序去控制被控制对象完成相应的指令动作,从而实现无需屏幕就能让孩子学习编程,可靠性高,趣味性好。