本帖最后由 虚怀若谷 于 2024-4-29 13:58 编辑
【比赛优秀作品】数量认知教学天平
作品来源:第五届全国青少年人工智能创新挑战赛——开源硬件创意智造专项赛
参赛学生:
-
彭楚寻 重庆市第八中学校
-
刘雯萱 重庆市第八中学校
原文链接:
https://contest.dfrobot.com.cn/tcwl2022/project/312685?p=dfrobot2022sh
步骤1 结构设计
随着时代的发展,信息的普及度越来越超前,许多学龄儿童沉迷于网络,不能有一个好的启蒙教育,对数字的敏感度越来越低,为了让学龄儿童对数字保持敏感,我们设计了这个便设计了这个天平。
我们的启发来源于天平以及数字的对应关系,天平是学习物理和化学及生活中常用工具。一般用于科研机构、学校实验室、药店等场所,用来称一些小计量物品。但是,由于现实中的天平操作复杂,不便于学龄儿童的的操作。所以我们简化了天平的使用。
大致流程:当天平两端的托盘上没有任何物体的时候,会提醒使用者“正在初始化,请稍候”以及“请在左侧托盘放入物体,并在右侧托盘放入物品的个数,按下按钮开始检测。”,然后使用者便可以在天平的一个托盘上放上相同的物品,而另外一端放上数字卡片,然后会说“检查放入物品的个数”以及“检查写出的数字。”。在摄像头分别在两个托盘上扫描过物体的数字以及卡片上的数字后,便会比较他们的大小,如果是相等的话便会对使用者说“恭喜你数对了,托盘两侧的物品和数字相等。”,如果卡片数字小于物品的个数,则会说“写出的数字比放入的物品少一些。”,如果是卡片数字大于物品的个数,则会说“写出的数字比放入的物品多一些”。整个程序结束。
步骤2 结构搭建
我们简单搭建了一个天平的外形,在上面加装一大一小的舵机以及一个语音合成模块,语音合成模块可以在使用者,大舵机用于调节天平的平衡,而小舵机则是用于摄像头在两个托盘上移动,使摄像头可以精准地分别照到托盘上的物体,从而去辨别托盘上的物体数量。托盘的一边可以放物体,而摄像头在此托盘上方时便可以识别物体的个数便记录,而托盘的另一边则是放数字卡片的,当数字卡片上的数字等于另一托盘上物体的个数时,大舵机便不动,使天平控制在平衡位置,若数字大于或小于物体的个数时,托盘便会向大的那一边倾斜。
步骤3 软件源代码
代码
/*!
* 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("请在左侧托盘放入物品,并在右侧托盘放入物品的个数,按下按钮开始检测");
}
}
刘雯萱 彭楚寻 天平程序.zip
步骤4 附件
刘雯萱 彭楚寻 天平建模.zip
步骤5 作品演示视频
https://www.bilibili.com/video/BV1Em4y1Y71i/
硬件清单
步骤6 硬件接线图
往期推荐
|