爱板网论坛

查看: 261|回复: 0

[原创] TurnipBit口袋编程计算机DIY计数存钱罐

[复制链接]

51

主题

0

好友

698

积分

举人

Rank: 4

  • TA的每日心情
    开心
    2016-9-7 16:50
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2017-8-23 17:32:23 |显示全部楼层
      下面使用TurnipBit开发板自己制作了一个计数存钱罐,不光能存钱,还能计数,还能显示存了多少钱,分享出来给大家交流学习一下。

      详细教程可参考:http://turnipbit.tpyboard.com,微-信公众号:MicroPython玩家汇

      实物成品如下图:

    1.png

    2.png

      这个计数存钱罐主要原理就是利用了硬币可以导电的基本特性。在盒子放入硬币的入口处设置一个略小于硬币厚度的金属夹片,分别连接IO口和GND,这样在有硬币投入的时候,就可以检测到导通,进而计数保存的硬币数量。

      这个计数存钱罐主要使用的器件如下:

      TurnipBit一块

    3.jpg

      纸盒一个

      导线若干

      金属夹片两片

      制作过程如下:

      1)硬件制作

      1.在纸盒顶端做一个开口,大小以正好放入一元硬币为最佳;

      2.在纸盒正面做三个开口,大小以正好露出显示屏和按键为最佳;

      3.放入TurnipBit;

      2)软件制作

      1.做一个数组,用来保存显示图形的段码;

      2.做一个函数,用来显示图形;

      3.在循环中循环扫描两个金属夹片是否短路;

      4.检测都短路,延时一会,再次检测是否短路;

      5.两次均检测到短路,即可判断为有硬币投入,即可计数加一;

      6.在显示屏上显示的数值做相应调整。

      以上为TurnipBit制作计数存钱罐的基本原理和做法,几天代码如下:
    1. from microbit import *

    2. coin_count=0
    3. old_count=-1
    4. pinflag=0

    5. def num2img(x):#设置显示函数
    6.         imgarray=[[12,18,18,18,12],[4,12,4,4,14],[14,1,6,8,15],[15,1,2,9,6],[6,10,18,31,2],[31,16,30,1,30],[4,8,14,17,14],[31,2,4,8,16],[14,17,14,17,14],[14,17,14,4,8]]#设置数组,保存显示段码
    7.         numarray=imgarray[x]
    8.         resstr=""
    9.         for i in range(5):
    10.                 numstr=(str(bin(numarray[i])).replace("1", "9"))[2:]
    11.                 c=5-len(numstr)
    12.                 for j in range((c)):
    13.                           numstr="0"+numstr
    14.                         resstr=resstr+numstr+":"
    15.                         return resstr[0:len(resstr)-1]

    16. while True:
    17.         if(old_count!=coin_count):
    18.                 if(coin_count<10):#判断存钱数量在可固定显示范围内
    19.                         display.show(Image(num2img(coin_count)))#显示当前钱数
    20.                 old_count=coin_count

    21.         if(coin_count>=10):#判断当前钱数在滚动显示范围
    22.                 display.scroll(str(coin_count))#显示当前钱数

    23.         if(pin0.read_digital()==0 and pinflag==1):#判断两个夹片是否真的短路
    24.                 coin_count=coin_count+1#钱数加一
    25.                 pinflag=0
    26.         if(pin0.read_digital()==1):#检查两个夹片是否短路
    27.                 pinflag=1
    28.                 sleep(1000)//防抖动延时
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /2 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-11-23 13:34 , Processed in 0.497553 second(s), 11 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部