查看: 1379|回复: 21

[项目] 学生智能打卡系统(接入blinker)

[复制链接]
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

    发表于 2019-3-20 17:26 | 显示全部楼层 |阅读模式
    本帖最后由 新手之帆 于 2019-4-28 21:10 编辑

    项目名称】学生智能打卡系统(接入blinker)打卡物联网部分,5/1期间再钻研,最近学习太紧了,望各位评委老师理解。
    一.感谢各位大佬
    首先感谢社区的管理员大佬,然后感谢奈何大佬,以及帮助过我的各位大佬。

    二.项目思路
    我正是小学6年级,学习任务很紧,班里每天都不允许迟到,老师每天都要记迟到的号数,实在太麻烦了!如果有时老师没来,该怎么办?于是,我就想创造一个学生智能打卡系统。
    三.项目介绍
    本项目是接入了blinker,接入了blinker,接入了blinker(重要的事情说三遍),通过blinker来选择删除一切注册信息,设置迟到时间,获取未到号数。
    本项目主要有4个界面(1.初始时间显示 2.注册学号 密码 指纹 3.用指纹或密码打卡 4.查看未到的人的号数   还有一些小界面)


    说明:密码是4位,号数是2位!

    1.初始时间及项目名称显示,通过blinker获取年 月 日 时 分 星期几进行显示,还有上面是项目名称,用取模

    2.注册学号,按下按键3进入注册学号界面,每次按下按键3,所在的位数数值+1,按下按键2,下一位。直至第3位就进入注册密码界面,如果该号数已经注册,就会显示号码重复,重新输入直至不重复为止。注册密码界面也是同理每次按下按键3,所在的位数数值+1,按下按键2,下一位。直至第5位进入指纹注册界面,如果密码重复,也会重复输入。指纹注册界面显示的都是英文,我会翻译后,再发在帖子里。指纹完成后(也就是屏幕出现“
    stored),就会显示注册是否成功,如果成功,显示号数和密码,语音播放“注册成功”。后,有返回初始界面。


    3.打卡,首先,会显示"press button 1 pw(就是password)press button 2 finger(指纹)"就是按下按键1,密码打卡,按键2,指纹打卡。如果按键1被按下,就进入密码打卡,密码打卡按下按键1该数位的数+=1,按键2下一位。5位后,如果成功,显示“打卡成功”以及该学号,失败,显示“打卡失败”,3秒后退出。  如果按键2被按下,进入指纹打卡界面,等待到"ok”就可以了,就会显示是否符合存储指纹,不符合显示“打卡失败”,语音播放"打卡失败"后退出,符合显示“打卡成功”,语音播放“打卡成功”。


    4.查看未到的人的号数
    单独按下按键2自动查看,3秒后返回初始界面。
    四:图片和视频
    IMG_20190325_125405_看图王.jpg IMG_20190325_130021.jpg

    视频地址:https://www.bilibili.com/video/av50015041/<iframe src="//player.bilibili.com/player.html?aid=50015041&cid=87560776&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
    五.部分代码(关键)
    代码也很容易写,我就放指纹代码和所用到的库吧

    kittenblock中小学创客名师推荐的图形化编程软件

    int get_fingerprint() {
      display.clearDisplay();
      display.setCursor(20,20);
      display.print("finger now as");
      display.display();
      uint8_t p = finger.getImage();
      if (p != FINGERPRINT_OK)  return -1;
    
      p = finger.image2Tz();
      if (p != FINGERPRINT_OK)  return -1;
    
      p = finger.fingerFastSearch();
      if (p != FINGERPRINT_OK)  return -1;
    
      // found a match!
      display.setCursor(20,0);
      display.print("OK ID");
      display.print(finger.fingerID);
      display.display();
      get_finger_flag=1;
      c_ok[finger.fingerID]=1;
    // play(0x01);
      Blinker.delay(1500);
      return finger.fingerID; 
    }
    
    
    
    //上面是打卡时的指纹代码,下面是注册时的
    
    uint8_t get_finger(uint8_t id) {
      display.clearDisplay();
      int p = -1;
      display.setCursor(0,0);
      display.print("As #"); display.println(id);
      display.display();
      Blinker.delay(2000);
      display.clearDisplay();
      while (p != FINGERPRINT_OK) {
        p = finger.getImage();
        display.setCursor(0,0);
        switch (p) {
        case FINGERPRINT_OK:
          display.print("Image taken");
          break;
        case FINGERPRINT_NOFINGER:
          display.print(".");
          break;
        case FINGERPRINT_PACKETRECIEVEERR:
          display.print("error");
          break;
        case FINGERPRINT_IMAGEFAIL:
          display.print("Imaging error");
          break;
        default:
          display.print("Unknown error");
          break;
        }
        display.display();
        Blinker.delay(1500);
        display.clearDisplay();
      }
      display.clearDisplay();
      // OK success!
    
      p = finger.image2Tz(1);
      display.setCursor(0,0);
      switch (p) {
    
        case FINGERPRINT_OK:
          display.print("Image converted");
          display.display();
          Blinker.delay(1500);
          break;
        case FINGERPRINT_IMAGEMESS:
          display.print("Image too messy");
          display.display();
          Blinker.delay(1500);
          return p;
        case FINGERPRINT_PACKETRECIEVEERR:
          display.print("error");      
          display.display();
          Blinker.delay(1500);
          return p;
        case FINGERPRINT_FEATUREFAIL:
          display.print("can't find features");     
          display.display();
          Blinker.delay(1500);      
          return p;
        case FINGERPRINT_INVALIDIMAGE:
          display.print("can't find features");
          display.display();
          Blinker.delay(1500);
          return p;
        default:
          display.print("Unknown error");
          display.display();
          Blinker.delay(1500);
          return p;
      }
      display.clearDisplay();
      display.setCursor(0,0);
      display.print("Remove finger");
      display.display();
      Blinker.delay(2000);
      display.clearDisplay();
      p = 0;
      while (p != FINGERPRINT_NOFINGER) {
        p = finger.getImage();
      }
      display.setCursor(0,0);
      display.print("ID "); display.print(id);
      p = -1;
      display.print("same again");
      Blinker.delay(2000);
      display.clearDisplay();
      while (p != FINGERPRINT_OK) {
        display.setCursor(0,0);
        p = finger.getImage();
        switch (p) {
        case FINGERPRINT_OK:
          display.print("Image taken");
          break;
        case FINGERPRINT_NOFINGER:
          display.print(".");
          break;
        case FINGERPRINT_PACKETRECIEVEERR:
          display.print("error");
          break;
        case FINGERPRINT_IMAGEFAIL:
          display.print("Imaging error");
          break;
        default:
          display.print("Unknown error");
          break;
        }
        display.display();
        Blinker.delay(1500);
        display.clearDisplay();
      }
    
      // OK success!
      display.clearDisplay();
      p = finger.image2Tz(2);
      display.setCursor(0,0);
      switch (p) {
        case FINGERPRINT_OK:
          display.print("Image converted");
          display.display();
          Blinker.delay(1500);
          break;
        case FINGERPRINT_IMAGEMESS:
          display.print("Image too messy");
          display.display();
          Blinker.delay(1500);
          return p;
        case FINGERPRINT_PACKETRECIEVEERR:
          display.print("error");
          display.display();
          Blinker.delay(1500);
          return p;
        case FINGERPRINT_FEATUREFAIL:
          display.print("can't find finger");
          display.display();
          Blinker.delay(1500);
          return p;
        case FINGERPRINT_INVALIDIMAGE:
          display.print("can't find finger");
          display.display();
          Blinker.delay(1500);
          return p;
        default:
          display.print("Unknown error");
          display.display();
          Blinker.delay(1500);
          return p;
      }
       display.clearDisplay();
      // OK converted!
      display.setCursor(0,0);
      display.print("Creating model for #");  display.print(id);
      display.display();
      Blinker.delay(2000);
      display.clearDisplay();
      p = finger.createModel();
      display.setCursor(0,0);
      if (p == FINGERPRINT_OK) {
        display.print("Prints matched!");
        display.display();
        Blinker.delay(1500);
      } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
        display.print("error");
        display.display();
        Blinker.delay(1500);
        return p;
      } else if (p == FINGERPRINT_ENROLLMISMATCH) {
        display.print("Did not match");
        display.display();
        Blinker.delay(1500);
        return p;
      } else {
        display.print("Unknown error");
        display.display();
        Blinker.delay(1500);
        return p;
      }   
      display.clearDisplay();
      display.setCursor(0,0);
      display.print("ID "); display.print(id);
      display.display();
      Blinker.delay(1500);
      p = finger.storeModel(id);
      display.clearDisplay();
      display.setCursor(0,0);
      if (p == FINGERPRINT_OK) {
        display.print("Stored!");
        display.display();
        Blinker.delay(1500);
      } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
        display.print("Communication error");
        display.display();
        Blinker.delay(1500);
        return p;
      } else if (p == FINGERPRINT_BADLOCATION) {
        display.print("Could not store in that location");
        display.display();
        Blinker.delay(1500);
        return p;
      } else if (p == FINGERPRINT_FLASHERR) {
        display.print("Error writing to flash");
        display.display();
        Blinker.delay(1500);
        return p;
      } else {
        display.print("Unknown error");
        display.display();
        Blinker.delay(1500);
        return p;
      }
      flag=1;  
      display.clearDisplay(); 
    }


    指纹库太大了!

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <Adafruit_Fingerprint.h>
    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>/*OLED库*/
    #include <Adafruit_SSD1306.h>/*OLED*/
    #include <Blinker.h>/*blinker库*/

    几个库网上都有,需要就加我Q3320987642


    终于更新完了,以后会继续改进的
    1.加入语音播报(模块已经有了,懒)
    2.换成薄膜矩阵键盘(我绝对不会告诉你我会用2个板子通信识别指令的)
    3.………………


    好了,大赛终于提交好了!上学去了!!!!










    最后,献上丑照。



    IMG_20190325_134022.jpg IMG_20190325_133844.jpg IMG_20190325_133911.jpg

    绝对是应付的!!!!!(斜眼笑)















    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 2019-3-25 17:20 | 显示全部楼层
    做好冷板凳
    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 2019-3-25 20:29 | 显示全部楼层
    今晚做好了语音播报,明天视频更新!!
    打赏作者鼓励一下!
  • TA的每日心情
    慵懒
    2019-2-11 19:33
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2019-3-26 01:03 | 显示全部楼层
    可以啊,我六年级还不会看帖子。。也就会点亮个灯泡吧。。。
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 2019-3-26 12:38 | 显示全部楼层
    Dhgs1026805647 发表于 2019-3-26 01:03
    可以啊,我六年级还不会看帖子。。也就会点亮个灯泡吧。。。

    大佬,过奖
    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 2019-3-26 19:53 | 显示全部楼层
    等电容按键到,我再发个第二代(其实只更新了语音播报,换了按键(为了更方便)),但是,这个项目会不断更新的,所以请大佬多多支持
    打赏作者鼓励一下!
  • TA的每日心情
    擦汗
    2019-1-26 16:31
  • 签到天数: 446 天

    [LV.9]以坛为家II

    发表于 2019-4-7 22:54 | 显示全部楼层
    演示视频前加加下比赛海报哈~
    PY让世界更美好~
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 2019-4-8 13:20 | 显示全部楼层
    syl312 发表于 2019-4-7 22:54
    演示视频前加加下比赛海报哈~

    好的,我有空发个新版本再加
    打赏作者鼓励一下!
  • TA的每日心情
    奋斗
    2019-5-12 14:06
  • 签到天数: 75 天

    [LV.6]常住居民II

     楼主| 发表于 2019-4-8 21:39 | 显示全部楼层
    blinker端还没调好,,,,,,我努力吧
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    体验OneNET4.0,一起来拼开发板
    体验OneNET4.0,一起来拼
    一、 活动时间2019年04月09日-2019年6月30日 二、活动链接1.登录Arduino中文社区账
    用电阻式压力传感器(SEN0294)做一个简单的杯垫
    用电阻式压力传感器(SEN0
    “多喝开水”这句话在目前似乎已经成了一种戏谑的玩笑话,可是多喝水还是很有好处
    Arduino接欧姆龙编码器
    Arduino接欧姆龙编码器
    请问各位该欧姆龙的编码器如何接到arduino上,我需要接收此编码器脉冲计算电机走的
    教你如何自制一款遥控器,让你的项目变成遥控的!!!
    教你如何自制一款遥控器,
    自从上次制作了一块集成了电机驱动的最小板之后,我就发现现在市场上一块便宜且功能又
    新人有偿求助。。关于DS18B20温度传感器代码烧录时的错误
    新人有偿求助。。关于DS18
    我在学习DS18B20温度传感器时由于使用的是wifiduino出现了以下错误,求大佬指教[/bac
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表