所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
HUSKYLENS:AI无人售药机2.0
hockel hockel 2020-04-02 20:56:43
25
11
中等
projectImage
步骤1 步骤1
前言

之前在第二轮做了一个无人售卖机,上位机用的是电脑做的人脸支付功能。有了二哈(HUSKYLENS)之后,我的售卖机终于和放飞自我。摆脱了电脑的束缚,想怎么识别就怎么识别!本项目总体流程是:掌控板做上位机:药品的选择与人脸支付。通过mqtt协议发送到easyiot物联网平台!下位机arduino通过obloq物联网模块接收到的数据,做相应药品的出货。

projectImage
材料清单 材料清单
1x
掌控板
2x
百灵鸽拓展板
3x
HUSKYLENS AI人工摄像头
4x
3M椴木板
步骤2 步骤2
设计流程

1,用laserbox制作上位机盒子模型

projectImage
projectImage
步骤3 步骤3
硬件连接
projectImage
步骤4 步骤4
硬件组装
projectImage
projectImage
projectImage
步骤5 步骤5
程序设计

上位机程序设计

代码 代码
	                    					/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <DFRobot_HuskyLens.h>

// 动态变量
volatile float mind_n_DangQianSuoZaiXuanXiang, mind_n_QueRenXuanZhongXuanXiang;
// 函数声明
void DF_TianChongJuXing(float mind_n_TianChongXuanXiang);
void DF_PanDuanXuanXiang(float mind_n_p0, float mind_n_p1);
// 静态常量
const String topics[5] = {"225lgQXWR","","","",""};
// 创建对象
DFRobot_Iot       myIot;
DFRobot_HuskyLens huskylens;


// 主程序开始
void setup() {
	mPython.begin();
	myIot.wifiConnect("Erised_Teach", "erised88");
	while (!myIot.wifiStatus()) {yield();}
	myIot.init("iot.dfrobot.com.cn","6fqog7JZR","","efqoRn1WRz",topics,1883);
	myIot.connect();
	while (!myIot.connected()) {yield();}
	mind_n_DangQianSuoZaiXuanXiang = 1;
	mind_n_QueRenXuanZhongXuanXiang = 0;
	huskylens.beginI2CUntilSuccess();
	huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
	display.fillScreen(0);
	while (!(mind_n_QueRenXuanZhongXuanXiang>0)) {
		DF_PanDuanXuanXiang((analogRead(P0)), (analogRead(P1)));
		DF_TianChongJuXing(mind_n_DangQianSuoZaiXuanXiang);
		yield();
	}
	display.fillScreen(0);
	display.setCursor(20, 15);
	display.print("开始人脸支付");
	display.setCursor(20, 30);
	display.print("请对准摄像头");
	while (!(mind_n_QueRenXuanZhongXuanXiang==0)) {
		huskylens.request();
		if (huskylens.isLearned(1)) {
			if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
				myIot.publish(topic_0, mind_n_QueRenXuanZhongXuanXiang);
				mind_n_QueRenXuanZhongXuanXiang = 0;
				display.fillScreen(0);
				display.setCursor(42, 22);
				display.print("支付成功");
				delay(1000);
			}
		}
		yield();
	}
}


// 自定义函数
void DF_TianChongJuXing(float mind_n_TianChongXuanXiang) {
	if ((mind_n_DangQianSuoZaiXuanXiang==1)) {
		display.setCursor(94, 10);
		display.print("药品1");
		display.setCursor(100, 25);
		display.print("5元");
		display.rect(0, 0, 86, 64, false);
		display.rect(2, 2, 40, 29, true);
		display.setCursor(5, 8);
		display.print("药品1");
		display.rect(44, 2, 40, 29, false);
		display.setCursor(49, 8);
		display.print("药品2");
		display.rect(2, 32, 40, 29, false);
		display.setCursor(5, 37);
		display.print("药品3");
		display.rect(44, 32, 40, 29, false);
		display.setCursor(49, 37);
		display.print("药品4");
	}
	if ((mind_n_DangQianSuoZaiXuanXiang==2)) {
		display.setCursor(94, 10);
		display.print("药品2");
		display.setCursor(100, 25);
		display.print("10元");
		display.rect(0, 0, 86, 64, false);
		display.rect(2, 2, 40, 29, false);
		display.setCursor(5, 8);
		display.print("药品1");
		display.rect(44, 2, 40, 29, true);
		display.setCursor(49, 8);
		display.print("药品2");
		display.rect(2, 32, 40, 29, false);
		display.setCursor(5, 37);
		display.print("药品3");
		display.rect(44, 32, 40, 29, false);
		display.setCursor(49, 37);
		display.print("药品4");
	}
	if ((mind_n_DangQianSuoZaiXuanXiang==3)) {
		display.setCursor(94, 10);
		display.print("药品3");
		display.setCursor(100, 25);
		display.print("15元");
		display.rect(0, 0, 86, 64, false);
		display.rect(2, 2, 40, 29, false);
		display.setCursor(5, 8);
		display.print("药品1");
		display.rect(44, 2, 40, 29, false);
		display.setCursor(49, 8);
		display.print("药品2");
		display.rect(2, 32, 40, 29, true);
		display.setCursor(5, 37);
		display.print("药品3");
		display.rect(44, 32, 40, 29, false);
		display.setCursor(49, 37);
		display.print("药品4");
	}
	if ((mind_n_DangQianSuoZaiXuanXiang==4)) {
		display.setCursor(94, 10);
		display.print("药品4");
		display.setCursor(100, 25);
		display.print("20元");
		display.rect(0, 0, 86, 64, false);
		display.rect(2, 2, 40, 29, false);
		display.setCursor(5, 8);
		display.print("药品1");
		display.rect(44, 2, 40, 29, false);
		display.setCursor(49, 8);
		display.print("药品2");
		display.rect(2, 32, 40, 29, false);
		display.setCursor(5, 37);
		display.print("药品3");
		display.rect(44, 32, 40, 29, true);
		display.setCursor(49, 37);
		display.print("药品4");
	}
}
void DF_PanDuanXuanXiang(float mind_n_p0, float mind_n_p1) {
	if (((mind_n_p0>0) && (mind_n_p0<1800))) {
		if ((mind_n_DangQianSuoZaiXuanXiang==2)) {
			display.fillScreen(0);
			mind_n_DangQianSuoZaiXuanXiang = 1;
		}
		else {
			if ((mind_n_DangQianSuoZaiXuanXiang==4)) {
				display.fillScreen(0);
				mind_n_DangQianSuoZaiXuanXiang = 3;
			}
		}
	}
	else {
		if (((mind_n_p0>2000) && (mind_n_p0<4100))) {
			if ((mind_n_DangQianSuoZaiXuanXiang==1)) {
				display.fillScreen(0);
				mind_n_DangQianSuoZaiXuanXiang = 2;
			}
			else {
				if ((mind_n_DangQianSuoZaiXuanXiang==3)) {
					display.fillScreen(0);
					mind_n_DangQianSuoZaiXuanXiang = 4;
				}
			}
		}
		if (((mind_n_p1>0) && (mind_n_p1<1900))) {
			if ((mind_n_DangQianSuoZaiXuanXiang==1)) {
				display.fillScreen(0);
				mind_n_DangQianSuoZaiXuanXiang = 3;
			}
			if ((mind_n_DangQianSuoZaiXuanXiang==2)) {
				display.fillScreen(0);
				mind_n_DangQianSuoZaiXuanXiang = 4;
			}
		}
		if (((mind_n_p1>2000) && (mind_n_p1<4100))) {
			if ((mind_n_DangQianSuoZaiXuanXiang==3)) {
				display.fillScreen(0);
				mind_n_DangQianSuoZaiXuanXiang = 1;
			}
			if ((mind_n_DangQianSuoZaiXuanXiang==4)) {
				display.fillScreen(0);
				mind_n_DangQianSuoZaiXuanXiang = 2;
			}
		}
	}
	if (((analogRead(P2))==0)) {
		mind_n_QueRenXuanZhongXuanXiang = mind_n_DangQianSuoZaiXuanXiang;
	}
}

	                    				

下位机程序设计

代码 代码
	                    					/*!
 * MindPlus
 * uno
 *
 */
#include <UNO_Obloq.h>
#include <SoftwareSerial.h>

// 动态变量
String mind_s_value;
// 静态常量
const String topics[5] = {"gsjELPXWR","","","",""};
// 创建对象
UNO_Obloq      olq;
SoftwareSerial softSerial(2, 3);


// 主程序开始
void setup() {
	softSerial.begin(9600);
  olq.startConnect(&softSerial, "Erised_Teach", "erised88", "kkuQ6XoZR", "zzXweuTZRz", topics, "iot.dfrobot.com.cn", 1883);
}
void loop() {
	if ((olq.available(olq.topic_0))) {
		mind_s_value = olq.getMessage(olq.topic_0);
		if ((mind_s_value=="1")) {
			digitalWrite(4, HIGH);
			analogWrite(5, 200);
			delay(1000);
			digitalWrite(4, HIGH);
			analogWrite(5, 0);
		}
		if ((mind_s_value=="2")) {
			digitalWrite(7, HIGH);
			analogWrite(6, 200);
			delay(1000);
			digitalWrite(7, HIGH);
			analogWrite(6, 0);
		}
		if ((mind_s_value=="3")) {
			digitalWrite(8, HIGH);
			analogWrite(9, 200);
			delay(1000);
			digitalWrite(8, HIGH);
			analogWrite(9, 0);
		}
		if ((mind_s_value=="4")) {
			digitalWrite(10, HIGH);
			analogWrite(11, 200);
			delay(1000);
			digitalWrite(10, HIGH);
			analogWrite(11, 0);
		}
	}
}

	                    				
步骤6 步骤6
视频演示
Makelog作者原创文章,未经授权禁止转载。
25
11
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]