上海智位机器人股份有限公司 沪ICP备09038501号-4
随着时代的发展,信息的普及度越来越超前,许多学龄儿童沉迷于网络,不能有一个好的启蒙教育,对数字的敏感度越来越低,为了让学龄儿童对数字保持敏感,我们设计了这个便设计了这个天平。
我们的启发来源于天平以及数字的对应关系,天平是学习物理和化学及生活中常用工具。一般用于科研机构、学校实验室、药店等场所,用来称一些小计量物品。但是,由于现实中的天平操作复杂,不便于学龄儿童的的操作。所以我们简化了天平的使用。
大致的流程就是当天平两端的托盘上没有任何物体的时候,会提醒使用者“正在初始化,请稍候”以及“请在左侧托盘放入物体,并在右侧托盘放入物品的个数,按下按钮开始检测。”,然后使用者便可以在天平的一个托盘上放上相同的物品,而另外一端放上数字卡片,然后会说“检查放入物品的个数”以及“检查写出的数字。”。在摄像头分别在两个托盘上扫描过物体的数字以及卡片上的数字后,便会比较他们的大小,如果是相等的话便会对使用者说“恭喜你数对了,托盘两侧的物品和数字相等。”,如果卡片数字小于物品的个数,则会说“写出的数字比放入的物品少一些。”,如果是卡片数字大于物品的个数,则会说“写出的数字比放入的物品多一些”。整个程序结束。
我们简单搭建了一个天平的外形,在上面加装一大一小的舵机以及一个语音合成模块,语音合成模块可以在使用者,大舵机用于调节天平的平衡,而小舵机则是用于摄像头在两个托盘上移动,使摄像头可以精准地分别照到托盘上的物体,从而去辨别托盘上的物体数量。托盘的一边可以放物体,而摄像头在此托盘上方时便可以识别物体的个数便记录,而托盘的另一边则是放数字卡片的,当数字卡片上的数字等于另一托盘上物体的个数时,大舵机便不动,使天平控制在平衡位置,若数字大于或小于物体的个数时,托盘便会向大的那一边倾斜。
/*!
* MindPlus
* uno
*
*/
#include <DFRobot_Servo.h>
#include <DFRobot_HuskyLens.h>
#include <DFRobot_SpeechSynthesis_M.h>
// 动态变量
volatile float mind_n_geshu, mind_n_shuzi;
// 创建对象
DFRobot_SpeechSynthesis_I2C sstts;
DFRobot_HuskyLens huskylens;
Servo servo_10;
Servo servo_11;
// 主程序开始
void setup() {
Serial.begin(9600);
servo_10.attach(10);
servo_11.attach(11);
delay(2000);
sstts.begin(sstts.eV1);
sstts.speak("正在初始化,请稍候");
delay(1000);
huskylens.beginI2CUntilSuccess();
servo_10.angle(abs(90));
sstts.speak("请在左侧托盘放入物品,并在右侧托盘放入物品的个数,按下按钮开始检测");
}
void loop() {
if ((analogRead(A0)<500)) {
servo_10.angle(abs(90));
servo_11.angle(abs(10));
huskylens.writeAlgorithm(ALGORITHM_TAG_RECOGNITION);
sstts.speak("检查放入物品的个数");
delay(3000);
huskylens.request();
mind_n_geshu = huskylens.readCount(HUSKYLENSResultBlock);
Serial.println(mind_n_geshu);
servo_11.angle(abs(165));
huskylens.writeAlgorithm(ALGORITHM_OBJECT_CLASSIFICATION);
sstts.speak("检查写出的数字");
delay(3000);
huskylens.request();
mind_n_shuzi = huskylens.readBlockParameterDirect(1).ID;
Serial.println(mind_n_shuzi);
if ((mind_n_geshu==mind_n_shuzi)) {
servo_10.angle(abs(90));
sstts.speak("恭喜你数对了,托盘两侧的物品和数字相等");
}
else {
if ((mind_n_geshu>mind_n_shuzi)) {
servo_10.angle(abs(105));
sstts.speak("写出的数字比放入的物品少一些");
}
else {
servo_10.angle(abs(75));
sstts.speak("写出的数字比放入的物品多一些");
}
}
delay(2000);
sstts.speak("请在左侧托盘放入物品,并在右侧托盘放入物品的个数,按下按钮开始检测");
}
}