声光提醒军棋智能裁判
发布时间:2023-06-25
步骤1 一、创作灵感及设计思路

1.创作灵感:我们都喜欢下军棋,可是下军棋要有个裁判,也就是说必须有三个人才能好好下军棋,其中一个人专门做裁判。可是如果裁判的这个人不公正,或不熟悉军棋规则,可能就会误判,造成不公平的结果。有没有办法用我们所学的知识来解决这些问题的呢?

2.设计思路:我们知道,军棋的电子裁判主要功能是用来比较大小。在学校我参了人工智能课程,学习了创客的知识后,我突然来了灵感。是否可以应用Arduino、Micro:bit等智能单片机的强大的控制、判断功能,来实现军棋的电子裁判功能呢?

步骤2 作品演示视频
步骤3 制作说明

其实网上有很多现成的电子裁判,但是成本比较高,究其原因,主要就是要生产专用的棋子和增加裁判电路,以实现识别判断不同的棋子,同时改造成本又要很低;二是要用什么方式实现军棋间关系的识别。

首先,是要对军棋进行改造,如果是进行内部改装,要很麻烦,那是否可以直接在军棋上加装什么来实现军棋的识别呢?军棋有司令、军长、师长、旅长、团长、营长、连长、排长、工兵、地雷、炸弹、军棋,共12种棋子,电子裁判就是要对他们关系进行识别。

在老师的提醒下,在计算机系统里的二进制,一个01就两种状态,如果有多个01就可以有多种状态,可以用于军棋大小关系的识别。经过我们的计算,我发现,只要用四个端口的01组合,就可以识别所有的军棋。

军棋

识别码

司令

0111

军长

1011

师长

1101

旅长

1110

团长

0011

营长

0101

连长

0110

排长

1001

工兵

1100

炸弹

1111

地雷

0001

军旗

1010

我们用连接的线代表1(高电平),断开的线代表0(低电平),四个端口的01组合共有14种,我用了其中的12种,全1的和全0的没用。

2.确定使用的硬件

(1)确定军棋的改造方案(创新亮点)

经过思考,我选择了在军棋底部加装一块表示高低电平的小电路板,对棋子的大小影响很小,只要用双面胶粘上即可。下面是改造的过程:

取一块完整的缚铜板,拿棋子对照确定需要裁切的线路板大小,根据代码切割缚铜板,并粘在棋子下面:

projectImage
projectImage

(2)确定硬件的使用

我们用易用易得的单片机Arduino Nano及micro:bit来实现我的控制,非常适合我的科技发明制作.同时我还需要一片声音播放模块

projectImage
projectImage

同时,还需要一个发光的LED灯,来指示胜负方。

projectImage

找齐了这些硬件,我就要想办法把这些连接在一起了。在老师的指导下,我们开始尝试连接端口以及连线。

projectImage
projectImage

3.编写控制程序

(1)程序的初步设计。

接着,我要学习编写程序来控制智能单片机。我应用的是Mind+进行编程

projectImage

这个程序主要是比较各个组合所代表的棋子大小,经过多次试验,我把四位高低电平的组合分别用不同的数字变量来代表他们:。

projectImage

下面是我们编写的判断程序:

projectImage

程序编写好后,通过USB线把程序下载到智能单片机中进行测试。经过多次不断改进,终于成功!

4.进行外观设计

接下来,要对外观进行设计。我用学校的激光切割机进行切割制作。

在老师的指导下,我们终于一步步攻克难关,把图纸设计出来了!

projectImage
projectImage
projectImage

5.硬件制作及连接测试

projectImage

用万用板制作军棋高低电平检测电路

projectImage

6.测试结果

经过测试,该产品可以正常工作,指导清晰,效果良好,成功的解决了裁判的难题,可以做为军棋的电子裁判。

6.存在问题

在使用的过程中,我发现如果检测线路板和棋子的线路板如果连接不好,可能会出现误判。

projectImage
步骤4 硬件清单

序号

硬件

数量(个)

 

1

arduino nano

1

 

2

LED灯

2

 

3

自制检测板

2

 

4

码片

50

 

5

外壳

1

 

6

按钮开关

1

 

7

电源开关

1

 

8

电池盒

1

 

9

导线

若干

 

10

固定柱

若干

 
步骤5 硬件接线图
projectImage
步骤6 软件源代码
代码
led.enable(false)
let a = 0
let b = 0
let c = 0
let d = 0
let e = 0
let f = 0
let g = 0
let h = 0
let i = 0
let j = 0
pins.digitalWritePin(DigitalPin.P11, 1)
basic.forever(function () {
    pins.digitalWritePin(DigitalPin.P5, 1)
    pins.digitalWritePin(DigitalPin.P10, 1)
    if (pins.digitalReadPin(DigitalPin.P11) == 0) {
        a = pins.digitalReadPin(DigitalPin.P1)
        basic.pause(50)
        b = pins.digitalReadPin(DigitalPin.P2)
        basic.pause(50)
        c = pins.digitalReadPin(DigitalPin.P3)
        basic.pause(50)
        d = pins.digitalReadPin(DigitalPin.P4)
        basic.pause(50)
        e = pins.digitalReadPin(DigitalPin.P6)
        basic.pause(50)
        f = pins.digitalReadPin(DigitalPin.P7)
        basic.pause(50)
        g = pins.digitalReadPin(DigitalPin.P8)
        basic.pause(50)
        h = pins.digitalReadPin(DigitalPin.P9)
        basic.pause(50)
        if (a == 0 && b == 0 && (c == 0 && d == 0)) {
            i = 0
        }
        if (e == 0 && f == 0 && (g == 0 && h == 0)) {
            j = 0
        }
        if (a == 1 && b == 1 && (c == 1 && d == 1)) {
            i = 11
        }
        if (e == 1 && f == 1 && (g == 1 && h == 1)) {
            j = 11
        }
        if (a == 0 && b == 0 && (c == 0 && d == 1)) {
            i = 10
        }
        if (e == 0 && f == 0 && (g == 0 && h == 1)) {
            j = 10
        }
        if (a == 1 && b == 1 && (c == 0 && d == 0)) {
            i = 1
        }
        if (e == 1 && f == 1 && (g == 0 && h == 0)) {
            j = 1
        }
        if (a == 1 && b == 0 && (c == 0 && d == 1)) {
            i = 2
        }
        if (e == 1 && f == 0 && (g == 0 && h == 1)) {
            j = 2
        }
        if (a == 0 && b == 1 && (c == 1 && d == 0)) {
            i = 3
        }
        if (e == 0 && f == 1 && (g == 1 && h == 0)) {
            j = 3
        }
        if (a == 0 && b == 1 && (c == 0 && d == 1)) {
            i = 4
        }
        if (e == 0 && f == 1 && (g == 0 && h == 1)) {
            j = 4
        }
        if (a == 0 && b == 0 && (c == 1 && d == 1)) {
            i = 5
        }
        if (e == 0 && f == 0 && (g == 1 && h == 1)) {
            j = 5
        }
        if (a == 1 && b == 1 && (c == 1 && d == 0)) {
            i = 6
        }
        if (e == 1 && f == 1 && (g == 1 && h == 0)) {
            j = 6
        }
        if (a == 1 && b == 1 && (c == 0 && d == 1)) {
            i = 7
        }
        if (e == 1 && f == 1 && (g == 0 && h == 1)) {
            j = 7
        }
        if (a == 1 && b == 0 && (c == 1 && d == 1)) {
            i = 8
        }
        if (e == 1 && f == 0 && (g == 1 && h == 1)) {
            j = 8
        }
        if (a == 0 && b == 1 && (c == 1 && d == 1)) {
            i = 9
        }
        if (e == 0 && f == 1 && (g == 1 && h == 1)) {
            j = 9
        }
        if (i < 10 && j < 10) {
            if (i > j) {
                pins.digitalWritePin(DigitalPin.P5, 0)
                pins.digitalWritePin(DigitalPin.P10, 1)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            } else if (i == j) {
                pins.digitalWritePin(DigitalPin.P5, 0)
                pins.digitalWritePin(DigitalPin.P10, 0)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            } else {
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 0)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            }
        } else if (i == 11 || j == 11) {
            pins.digitalWritePin(DigitalPin.P5, 0)
            pins.digitalWritePin(DigitalPin.P10, 0)
            basic.pause(2000)
            pins.digitalWritePin(DigitalPin.P5, 1)
            pins.digitalWritePin(DigitalPin.P10, 1)
        } else if (i == 10) {
            if (j == 1) {
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 0)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            } else {
                pins.digitalWritePin(DigitalPin.P5, 0)
                pins.digitalWritePin(DigitalPin.P10, 1)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            }
        } else if (j == 10) {
            if (i == 1) {
                pins.digitalWritePin(DigitalPin.P5, 0)
                pins.digitalWritePin(DigitalPin.P10, 1)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            } else {
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 0)
                basic.pause(2000)
                pins.digitalWritePin(DigitalPin.P5, 1)
                pins.digitalWritePin(DigitalPin.P10, 1)
            }
        }
        a = 0
        b = 0
        c = 0
        d = 0
        e = 0
        f = 0
        g = 0
        h = 0
        i = 0
        j = 0
        pins.digitalWritePin(DigitalPin.P11, 1)
        pins.digitalWritePin(DigitalPin.P5, 1)
        pins.digitalWritePin(DigitalPin.P10, 1)
    }
})
步骤7 结构设计文件
附件
icon 刘译钟+王皓+声光提醒军棋智能裁判激光切割文件.zip 10KB
下载
参赛组别 初中
参赛学生 刘译钟 晋江市实验中学 王皓 晋江市实验中学