项目背景
随着校园活动的日益丰富,学校为激励学生积极参与,推出了积分奖励机制。然而,现有的积分兑换方式较为传统,通常需要人工登记和管理,不仅效率低下,还容易出现错误。此外,学生在兑换过程中缺乏趣味性和互动性,导致参与度不高。为了提升校园积分兑换的效率和趣味性,同时结合信息科技课程的教学目标,我们设计了一款基于行空板K10和Mind+平台的“智能校园积分兑换机”。该项目不仅能够解决现有兑换方式的不足,还能通过人工智能技术(如人脸识别)和机械控制(如旋转铁丝控制物品掉落)激发了学生对信息科技的兴趣,培养他们的创新思维和实践能力。
作品介绍
《校园积分兑换机》是我用编程和人工智能技术制作的小作品。它通过人脸识别或刷卡进行确认身份,保证安全。选择兑换物品后,机器会控制旋转铁丝让物品掉落。这个作品不仅能帮助同学们用积分兑换奖品,还能锻炼我们的编程和动手能力,这种积分制的制度大幅度的提高了同学们上课的积极性,让校园生活更有!
项目目标
1. 解决校园积分兑换机操作复杂的问题。
2. 结合信息科技课程,培养学生的人工智能和编程能力。
3. 提升学生对信息科技的兴趣和跨学科应用能力。
项目功能
1. 人脸识别:通过行空板人工智能摄像头进行人脸识别,验证学生身份。
2. 刷卡识别:通过NFC模块进行刷卡,验证学生身份 3. 物品选择:学生通过按钮选择兑换物品。
4. 物品掉落:根据选择结果,控制旋转铁丝让物品掉落。
材料清单
- 行空板k10 X1
- 人工智能摄像头 X1
- 数字大按键 X2
- LED灯 X2
- 360度舵机 X2
- NFC近场通讯模块 X1
作品流程图

作品视频

程序截图

/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include "unihiker_k10.h"
#include <DFRobot_NFC0231.h>
#include <DFRobot_Libraries.h>
#include <DFRobot_HuskyLens.h>
#include "arduino_image_cache.h"
// 动态变量
String mind_s_XingMing, mind_s_my_string_variable;
volatile float mind_n_cishu, mind_n_MiXiaoQuan, mind_n_TieTou, mind_n_my_float_variable,
mind_n_ShangPin;
// 函数声明
void DF_ShouYe();
void DF_DuiHuanZhong();
// 创建对象
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
DFRobot_Servo360 servo360_P0;
ASR asr;
DFRobot_Servo360 servo360_P1;
DFRobot_HuskyLens huskylens;
DFRobot_PN532_IIC pn532;
// 主程序开始
void setup() {
k10.begin();
Serial.begin(9600);
k10.initScreen(screen_dir);
k10.creatCanvas();
servo360_P0.attach(P0);
asr.setAsrSpeed(2);
servo360_P1.attach(P1);
huskylens.beginI2CUntilSuccess();
huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
mind_s_my_string_variable = "首页";
mind_n_MiXiaoQuan = 20;
mind_n_TieTou = 50;
mind_n_ShangPin = 0;
mind_n_cishu = 0;
mind_n_my_float_variable = 0;
digital_write(eP13, LOW);
digital_write(eP14, LOW);
pn532.begin();
}
void loop() {
huskylens.request();
if ((mind_s_my_string_variable=="首页")) {
DF_ShouYe();
if (((digital_read(eP8))==1)) {
if (pn532.scan("6173b3a1")) {
mind_s_XingMing = "米小圈";
mind_s_my_string_variable = "兑换中";
}
}
if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
mind_s_XingMing = "米小圈";
mind_s_my_string_variable = "兑换中";
}
else if (huskylens.isAppear(2,HUSKYLENSResultBlock)) {
mind_s_XingMing = "铁头";
mind_s_my_string_variable = "兑换中";
}
else {
k10.canvas->canvasText("本校没有此同学", 20, 100, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->updateCanvas();
delay(3000);
k10.canvas->canvasText("", 20, 100, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->updateCanvas();
}
}
else if ((mind_s_my_string_variable=="兑换中")) {
k10.canvas->canvasRectangle(0, 0, 300, 400, 0x000000, 0x000000, true);
Serial.println("兑换中");
DF_DuiHuanZhong();
}
}
// 自定义函数
void DF_ShouYe() {
k10.setScreenBackground(0x000000);
k10.canvas->canvasText("校园积分兑物机", 30, 50, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, false);
k10.canvas->canvasText("你想要的就在这,快去兑换吧!", 35, 80, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->canvasDrawBitmap(50,130,125,125,image_data1);
k10.canvas->canvasText("按下绿色键开始兑换", 40, 280, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->updateCanvas();
}
void DF_DuiHuanZhong() {
k10.canvas->canvasText("校园积分兑物机", 30, 20, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, false);
k10.canvas->canvasText("你想要的就在这,快去兑换吧!", 35, 50, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->canvasText("按下绿色键选择商品", 35, 70, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
if ((mind_n_cishu==0)) {
k10.canvas->updateCanvas();
}
if ((mind_s_XingMing=="米小圈")) {
k10.canvas->canvasText((String("姓名:") + String(mind_s_XingMing)), 10, 90, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->canvasText((String("积分:") + String((String(mind_n_MiXiaoQuan)))), 10, 110, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
if ((mind_n_cishu==0)) {
k10.canvas->updateCanvas();
}
}
else if ((mind_s_XingMing=="铁头")) {
k10.canvas->canvasText((String("姓名:") + String(mind_s_XingMing)), 10, 90, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
k10.canvas->canvasText((String("积分:") + String((String(mind_n_TieTou)))), 10, 110, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, false);
if ((mind_n_cishu==0)) {
k10.canvas->updateCanvas();
}
}
k10.canvas->canvasDrawBitmap(10,140,80,80,image_data2);
k10.canvas->canvasText("笔记本:10分", 100, 140, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, true);
k10.canvas->canvasText("文具礼包:30分", 100, 230, 0xFFFFFF, k10.canvas->eCNAndENFont16, 50, true);
k10.canvas->canvasText("红色按键按下确认商品", 100, 250, 0xFFFFFF, k10.canvas->eCNAndENFont16, 5, true);
k10.canvas->canvasDrawBitmap(10,230,80,80,image_data3);
if ((mind_n_cishu==0)) {
k10.canvas->updateCanvas();
}
mind_n_cishu = 1;
while (!(mind_n_my_float_variable==1)) {
if (((digital_read(eP8))==1)) {
if ((mind_n_ShangPin==0)) {
digital_write(eP14, HIGH);
digital_write(eP13, LOW);
mind_n_ShangPin = 1;
delay(1000);
}
else {
digital_write(eP13, HIGH);
digital_write(eP14, LOW);
mind_n_ShangPin = 0;
delay(1000);
}
}
if (((digital_read(eP12))==1)) {
mind_n_my_float_variable = 1;
if ((mind_n_ShangPin==1)) {
if ((mind_s_XingMing=="米小圈")) {
if ((10<=mind_n_MiXiaoQuan)) {
servo360_P0.speed(50);
delay(2000);
servo360_P0.speed(0);
mind_n_MiXiaoQuan -= 10;
}
else {
asr.speak("积分不足");
}
}
else {
if ((10<=mind_n_TieTou)) {
servo360_P0.speed(50);
delay(2000);
servo360_P0.speed(0);
mind_n_TieTou -= 10;
}
else {
asr.speak("积分不足");
}
}
}
else {
if ((mind_s_XingMing=="米小圈")) {
if ((30<=mind_n_MiXiaoQuan)) {
mind_n_MiXiaoQuan -= 10;
servo360_P1.speed(50);
delay(2000);
servo360_P1.speed(0);
}
else {
asr.speak("积分不足");
}
}
else {
if ((30<=mind_n_TieTou)) {
servo360_P1.speed(50);
delay(2000);
servo360_P1.speed(0);
mind_n_TieTou -= 30;
}
else {
asr.speak("积分不足");
}
}
}
}
}
k10.canvas->canvasRectangle(0, 0, 400, 400, 0x000000, 0x000000, true);
digital_write(eP13, LOW);
digital_write(eP14, LOW);
mind_n_ShangPin = 0;
mind_n_cishu = 0;
mind_n_my_float_variable = 0;
mind_s_my_string_variable = "首页";
}
评论