步骤1 前言
之前在第二轮做了一个无人售卖机,上位机用的是电脑做的人脸支付功能。有了二哈(HUSKYLENS)之后,我的售卖机终于和放飞自我。摆脱了电脑的束缚,想怎么识别就怎么识别!本项目总体流程是:掌控板做上位机:药品的选择与人脸支付。通过mqtt协议发送到easyiot物联网平台!下位机arduino通过obloq物联网模块接收到的数据,做相应药品的出货。
步骤2 设计流程
1,用laserbox制作上位机盒子模型
步骤3 硬件连接
步骤4 硬件组装
步骤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 视频演示
橙子昂2024.08.13
厉害
庞老师122023.12.09
你好,可以加一下联系方式吗?想向您咨询一下。原来的联系方式加不上了
silJEzhj9ZE32022.04.01
作者你好,可以加个联系方式吗,程序上有些问题想咨询你一下
Xh2022.04.19
Aym030 加下WX 互相讨论交流一下
舵机缔造2021.12.28
我这边是专门做舵机的,工业/机器人,玩具型号都有,有需要的朋友可以加我微信了解13202713017
赵文栋2021.09.20
我这边是做科技教育培训行业的,想要获得你的联系方式,是否方便添加一下微信13701338504,这个是我的微信,看合作一下
志中2021.08.10
出货方式厉害
士大夫大师傅2021.01.31
兄弟,可否留下一个联系方式,有些地方不太懂,想请教一下
Xh2022.02.23
兄弟 做出来了吗
士大夫大师傅2020.12.29
好!,我研究一下怎么做
DFS1w2cb8o82020.08.07
厉害厉害
ST东东东2020.06.30
用什么切割的木板啊?
DFryr8_UMhI2020.06.03
中药的售药机就更好了
对方已恢复2020.05.09
尹
可爱小李子2020.04.26
那这样触碰频率太高啦呀,可以弄语音识别吗
DFHJM_IpFmV2020.04.24
点赞
DFHJM_IpFmV2020.04.24
哈哈,真棒!
DFr18f9QI4U2020.04.21
赞赞赞赞
木子呢2020.04.02
赞啊
且歌且行2020.04.02
真好,万物皆能造!
rzyzzxw2020.04.02
哈哈,很棒啊。