目录
一、前言
本系列篇主要讲述如何通过单片机、led点阵、和键盘、语音输出模块等硬件搭建一个《儿童算术智能出题机》,该机器可以用于幼儿园和1-3年级的小学生的两位数加减乘除答题训练。记录下来,适用于初级硬件创客入门提高。下面先看一下原型机效果:
1)欢迎界面welcome:
2)答题中——按键答题:
3)答完题评分——答题时间和分数:
二、硬件选型
本次的任务是做一个款两位数以内的加减乘除出题机,并可以通过键盘输入,在LED上面显示,并具有语音提示功能。总体上,感觉硬件尽量成本要少,于是选用以单片机作为主板,并进行扩展,经过一番考虑后,选用的硬件配置如下:
2.1单片机选型
选用Arduino UNO R3单片机作为主板,是因为其具有易用的配套IDE开发环境,以及丰富的库资源及相关项目资源,可以大大缩短开发周期和环境的搭建等,其次是具有足够的IO口,及电源输出,本次任务不需要再进行IO口的扩展。
2.2屏幕选型
LED点阵我们选用的是MAX7219驱动,只要占用3个IO口就可以驱动足够多的点阵模块,LED点阵模块可以根据需要进行串联,本次我们选用了8块LED点阵屏。
2.3键盘选型
键盘我们选用了具有按键手感的4X4矩阵键盘,用户是儿童,如果用触摸板不太适合于儿童,用简单通用的教学矩阵按钮又显得太不友好,于是我们挑选了这样一款键盘:
2.4语音输出模块
由于本次项目是入门级产品,我们决定不用太高大上的文本转语音等NLP智能模块,本次任务语音输出只要是用于简单的引导作用,于是用了传统的MP3模块,开发周期短,我们直接采用成熟的集成产品,其驱动芯片为GD3800D:
2.5外观的设计
做一个机器,需要给它配套一个合适的外观,根据显示和键盘的尺寸,利用3D设计软件,简单的设计了一款产品的外壳,如下图所示:
由于不是专门学工业设计的,也不是本次的核心,设计较为简陋。根据与3D打印厂家沟通,本设计由于尺寸较为大,可能出现变形,于是又在设计中加了一些加强筋,以确保打印出来后的外壳具有足够的抗形变能力:
2.6元器件的连接
(1)引脚焊接
由于采购的元器件有些是需要自己焊接引脚的,所以还需要准备一套焊接设备,这里要注意的是,锡焊丝的选择,要选择有牌子的且铅含量低,锡含量高且带助焊剂的焊丝,要有一定流动性。本次采用的是这款锡焊丝(仅供参考):
(2)器件的连接
器件的连接,我们就不单独设计电路板了,直接采用硬线(杜邦线)+面包板的方式进行连接,硬件连接的详细图如下:
由于LED屏幕和MP3模块需要5v的电源,而单片机只有一个5V输出口子,我们采用面包板进行了分流。采用这种方案而不是固定式连接,主要是考虑适用于将来的项目灵活扩展。
三、硬件驱动简介
“工欲善其事,必先利其器”。硬件的硬连接搞定后,着重就要对各硬件进行驱动,使其有利于本项目的方式工作起来。这里几个模块的驱动本质上其实就是通过控制、读取IO接口的高低电平变化,来使得主板芯片与模块芯片(或电路)进行有规律的交互。
3.1 点亮LED点阵
本次用到的驱动芯片为MAX7219 ,该芯片是多位LED 显示驱动器,采用3 线串行接口传送数据,其内部含有8X8 位静态RAM,用于存放8 个数字的显示数据。并且可以多片MAX7219 进行级联,从而可控制更多的LED 点阵显示器。关于此芯片的工作原理,网上有非常多的资料,这里不再赘述。
简言之,我们要在8块LED点阵屏幕上显示不同的数字或者图案,主要的思想是编排好各块LED点阵中每个LED灯的亮和灭组合,就是在合适的位置点灯。而芯片可以接受到我们给它的“什么地址点灯,什么地址灭灯”的一串数据编码,执行电灯灭灯操作。
如上图,我们要显示一个“X”号,就是将相关位置的灯点亮,将不想关的位置的灯熄灭,这样就显示出来了。上面的✖号在程序中可以用一个数组表示:
如上图所示,一个✖的LED亮灭信息我们可以用16进制的字符数组表示:
unsigned char smath[8]={
0x0,0x42,