回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【行空板k10】校园积分兑换机 中等

头像 攸攸 2025.02.09 36 0

项目背景

随着校园活动的日益丰富,学校为激励学生积极参与,推出了积分奖励机制。然而,现有的积分兑换方式较为传统,通常需要人工登记和管理,不仅效率低下,还容易出现错误。此外,学生在兑换过程中缺乏趣味性和互动性,导致参与度不高。为了提升校园积分兑换的效率和趣味性,同时结合信息科技课程的教学目标,我们设计了一款基于行空板K10和Mind+平台的“智能校园积分兑换机”。该项目不仅能够解决现有兑换方式的不足,还能通过人工智能技术(如人脸识别)和机械控制(如旋转铁丝控制物品掉落)激发了学生对信息科技的兴趣,培养他们的创新思维和实践能力。

 

作品介绍
 

《校园积分兑换机》是我用编程和人工智能技术制作的小作品。它通过人脸识别或刷卡进行确认身份,保证安全。选择兑换物品后,机器会控制旋转铁丝让物品掉落。这个作品不仅能帮助同学们用积分兑换奖品,还能锻炼我们的编程和动手能力,这种积分制的制度大幅度的提高了同学们上课的积极性,让校园生活更有!

 

项目目标

1. 解决校园积分兑换机操作复杂的问题。
2. 结合信息科技课程,培养学生的人工智能和编程能力。
3. 提升学生对信息科技的兴趣和跨学科应用能力。
 

项目功能

1. 人脸识别:通过行空板人工智能摄像头进行人脸识别,验证学生身份。
2. 刷卡识别:通过NFC模块进行刷卡,验证学生身份                                                                             3. 物品选择:学生通过按钮选择兑换物品。
4. 物品掉落:根据选择结果,控制旋转铁丝让物品掉落。


 

 

 


 

 


 

材料清单

  • 行空板k10 X1
  • 人工智能摄像头 X1
  • 数字大按键 X2
  • LED灯 X2
  • 360度舵机 X2
  • NFC近场通讯模块 X1

作品流程图

 

 

校园积分兑换机.png

作品视频

 

 

_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=6989175543993033044&skey=@crypt_a99f4979_26c9fcc1cb064dee516cd125cadc8be0&mmweb_appid=wx_webfilehelper.jpg

程序截图

 

 

screenshots-校园积分兑换机.mp-1740062365514.png

代码
/*!
 * 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 = "首页";
}

评论

user-avatar