查看: 1639|回复: 7

十岁孩子做了个数字时钟送妈妈,顺便把作业交了

[复制链接]

该用户从未签到

发表于 2015-12-2 13:35:17 | 显示全部楼层 |阅读模式
分享到:
Alex-1.png
Liz:Alex是我十岁的儿子。最近他和我合作完成了一个学校布置的作业。这是一个很成功的作业,同时作为父母的我们也给予他很好的指导,因此我想在这里与大家分享这次经历。
以下是Alex的分享:
http://static.video.qq.com/TPout.swf?vid=f01745be0yr&auto=0

我妈想要一个数字时钟,而我也需要完成我的作业。所以我花了两个月把闲置的树莓派小电脑做成了数字时钟,一石二鸟,请叫我机智のboy。
爸爸给我提供了来自战斗民族俄罗斯的一些数码管和芯片,还买了一个170V的电池来当数码管的电源。我需要做的第一件事情就是测试这些原材料。
首先我把数码管,芯片和电源安装在了电路板上。芯片有ABCD四个输入端口,这些端口用来指示亮哪一个灯。比如在二进制里7表示为0111,所以我们需要把ABC设置为显示,D设置为不显示,(A=1, B=2, C=4 and D=8)来表示数字7。我测试的时候用一个跨线电缆使四个接口为0V(不显示数字)或5V(显示数字)。
在测试完第一个数码管和芯片后,我在树莓派电脑上编了一个程序进行第二次测试。我用4个 GPIO管脚连接到引脚A、B、C和D芯片。这个程序会从数字0到9循环,然后在二进制中用“high”和“low”的逻辑判断来实现打开或关闭管脚的目的。
一旦这个程序顺利运行,那么接下来测试所有的芯片和数字时钟数码管就会变得so easy。每个部分都正常运行,但有一个数码管除外(测试时出现了3和9同时亮起的问题),所以我把这个数码管用来表示小时的第一位,因为小时的第一位只需要显示数字1(采用12小时计时法)。
Alex-2.png
关于程序
当树莓派电脑启动时,我的数字时钟程序也会自动启动。
我用geany编辑器在c盘写好了数字时钟的程序。
然后我打开管脚0,这也意味着用转换器打开了高压电源。
接着我测试了时钟,让时钟的小时部分从1到12显示,分钟部分从0到59显示。
开始循环时,我是这样做的:
  • 和电脑对照时间(电脑连接互联网以确保时间准确)
  • 小时的数字会在1和23之间循环,所以当小时大于12时,我会减去12.
  • 然后我将小时数和分钟数都以二进制表示。也就是说,用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
  • 这样一来,我们就得到了所有数字的二进制。然后我们就可以用1和0所代表的高低接口来表示了。(比如7,我们就可以表示为低高高高,因为它的二进制写法是0111 。)
  • 如果你是条小懒虫,下面是我为你准备的完整表格,你可以参照。
    Alex-3.png
  • 接下来我们用C语言来写入代码:

#include       /* These are libraries */
#include
#include
#include

// turns a pin on or off
void nixiePin(int p, int v){

  if (p != -1) {
    digitalWrite(p, v);
  }
}


// converts to binary and sends values to 4 pins
void nixiePins(int p1, int p2, int p4, int p8, int v){

  nixiePin(p1,v&1);
  nixiePin(p2,v&2);
  nixiePin(p4,v&4);
  nixiePin(p8,v&8);
}


// splits the time into digits
void nixieTime(int h,int m, int s) {

  nixiePins( 1, -1, -1, -1, h/10);  /* quotient of hour / 10  */
  nixiePins( 2,  3,  4,  5, h%10);  /* remainder of hour / 10 */
  nixiePins( 6,  7, 21, -1, m/10);  /* quotient of minute / 10*/
  nixiePins(22, 23, 24, 25, m%10);  /* remainder or min / 10  */
}


// makue sure all the digits work
void testClock(void){
  int i;
  
  for (i=1; i<=12; i++) {
     nixieTime(i,0,0);
     delay(250);
  }
  for (i=1; i<=59; i++) {
     nixieTime(12,i,i);
     delay(250);
  }
}


// set up the pins we will use
void initPin(int p) {
  pinMode(p, OUTPUT);
  digitalWrite(p, LOW);
}


// this is the main part of the program
int main (void) {           
  time_t now;         /* its a variable that holds time info */
  struct tm *ntm;     /* it is a variable */
  int i;
  
  wiringPiSetup();    /* set up pins 0-7 and 21-29 to use  */
  for (i=0; i <=7;i++) {
    initPin(i);
  }
  for (i=21; i <=29;i++) {
    initPin(i);
  }
  digitalWrite(0, HIGH);            /* turn on high voltage power */
  testClock();                      /* test all the digits */

  while (1) {                       /*starts and infinite loop */
    now=time(NULL);                 /* ask the computer for the time */
    ntm=localtime(&now);            /* it formats the time */
    if (ntm->tm_hour > 12) {        /* if hour is more than 12 - 12 */
      ntm->tm_hour = ntm->tm_hour-12;
    }

    /* it tells it to write that number to the nixie tubes*/
    nixieTime(ntm->tm_hour,ntm->tm_min,ntm->tm_sec);   

    delay (1000);   /* wait for 1 second */
  }

  return(0);
}


电路板
Alex-4.png
爸比帮我焊接了一个塑料板,电路板上面接有四条数码管,每个对应了一个芯片(黄线就是了)。
黑色线用于接地线,红色线为5V和12V的电线,而每个芯片则对应了一条地线和一条5V线。
不过,数码管要求在170V的高压下工作,所以我们还需要接一个高压电源,这里我们用的是绿色线。而且,我们还得外加一个2毫安的电阻,防止电流过大烧毁了我们的作品。
此外,我还加了一个晶体管和两个电阻,以限制电流。这将等同于电源开关,用于控制高压电源。
我还加了一个USB端口,用于连接地线和5V线,作为供树莓派的电源。
外壳
以上步骤完成后,我们就开始做外壳了。所谓人靠衣装美靠亮噢不不不,美靠造型,我用的是木盒子,外加两面的塑料透明板。这个盒子是爸爸帮我锯的(人家还小嘛)。然后用铁钉和螺丝固定,就完成了。
最后
曾经有一个新闻,说一个学生带了个自己做的电子钟到学校去,老师以为是炸弹,都报警了!真是吓死宝宝我了,为了不让我面临这样的人生大场面,爸比和妈咪事先打电话通知了老师。我觉得,老师一定会记得我的,因为她问得非常详细,像查户口一样。
不过,这只是我的作品的开始啦。我准备把它改进一下,再送给妈妈。我想加一个报警器,还有摄像头、麦克风和扬声器,这样就可以进行人脸识别了。要是可以的话,我还想让它变成更高级的东西,就像钢铁侠一样。

回复

使用道具 举报

该用户从未签到

发表于 2015-12-2 13:38:39 | 显示全部楼层
咱技术不牛的将来都没法给孩子指导
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-6-2 19:59
  • 签到天数: 102 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2015-12-2 15:20:16 | 显示全部楼层
    噗噗熊 发表于 2015-12-2 13:38
    咱技术不牛的将来都没法给孩子指导

    噗噗姐 自知之明
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-12-2 15:54:16 | 显示全部楼层
    戏如人生 发表于 2015-12-2 15:20
    噗噗姐 自知之明

    我不有你们么,有你们就够了,将来能帮的要帮啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-6-2 19:59
  • 签到天数: 102 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2015-12-2 15:59:17 | 显示全部楼层
    噗噗熊 发表于 2015-12-2 15:54
    我不有你们么,有你们就够了,将来能帮的要帮啊

    好的没问题!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-6-24 16:41
  • 签到天数: 709 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-12-2 21:15:14 | 显示全部楼层
    十岁啊   牛逼啊  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-21 11:32
  • 签到天数: 409 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-12-3 11:04:34 | 显示全部楼层
    哈哈,不错哦。给孩子点个赞!也为我们以后教育孩子的方式做个指导~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-3-28 17:24
  • 签到天数: 276 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2015-12-3 12:30:51 | 显示全部楼层
    长得好帅                             
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 09:27 , Processed in 0.264355 second(s), 30 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.