11 月 10 日星期四,深圳国际交流书院计算机科学展,G2 计算机科学专业的学生向学校老师和同学们展示了基于他们的计算机知识而设计的手工展品。以下是学生的一些思考和经验。
01自动泊车系统
By Annie, David, Frank, Michael
计算机科学项目周为我们提供了一次走出舒适区的机会。一开始,我们当中没有人是Arduino这方面的专家,但是通过2周的不断学习,完成学校交给我们锻炼的路灯项目,我们对这项技能逐渐熟练,并决定制作一个车位检索系统。
我们的系统由两个主要部分组成:1.传感器用于检测光线强度变化来确定一个车位是否被占用2.显示剩余车位数量的屏幕
制作的过程并不容易。我们发现屏幕和数据线之间常有接触不良的问题,导致屏幕显示出错。因此,需要通过焊接来稳定链接,而我们也在过程中收获了额外的焊接小知识。
在制造开关闸门的的过程中出现了另一个难题:我们使用的伺服机不像往常可以通过预设旋转角度来控制,它只能通过时间来控制(建议:不要购买旧版的Arduino伺服机,新的支持角度控制)。我们不得不多次尝试以测试最理想的时间范围,使其正好转动90度。值得庆祝的是,虽然面临许多难题,我们的系统总算是能正常工作了。
我们的系统能执行如下工作:1. 入口处的光敏传感器检测汽车驶入2.如果停车场仍有空位,在屏幕上显示 "welcome "并打开闸门3.使用另一个LDR检测停车位的当前状态(空闲还是占用)4.计算并在屏幕上显示剩余停车位的数量5.车位满后,如有车辆靠近闸门,将不会打开
在整个过程中,我们从逐渐探索Arduino,从一开始的陌生,到最后的熟悉,给予了我们莫大的鼓励和成就感。这无疑成就了一段值得珍惜的记忆。
如果你对我们的项目感到好奇并想自己尝试的话,可以参考我们的成员David写的攻略:https://create.arduino.cc/projecthub/askasa/build-your-own-parking-space-54ae05
02倒车雷达警示系统
By Teddy, Denny, Steven, Robben
11月3号是我这学期最开心的一天。我和伙伴终于将计算机项目完成了,从这个项目中,我学到了很多。
我们小组领到的任务是:模拟现实生活中倒车雷达警示系统。在小车运行中,当机动车遇到障碍物超过设定的安全距离时,车载警示灯需闪烁并触发警笛。
我们拿到了传感器、电线、电路板、Micro:bit等相关物品和实验教学视频后就开始动手。一开始,大家都觉得这个项目太简单了,不就是按照视频教学的方法,把各种零件连接在一起,输入现成的程序吗?这么简单的事情,五分钟就能搞定!
我们根据视频演示的步骤,按部就班地把所有零件组装了起来,然后输入现成的代码,摁下了运行指令。没想到,理应顺利运行的程序频频报错,LED灯和蜂鸣器也没有动静。
怎么回事?我们又重新严格按照视频教学的步骤再做了一遍,还是没有成功。当时我们一下懵了,到底是哪个环节出错了?视频教学就是这样连接的呀?为什么不能成功呢?这一刻,我们突然意识到,这个项目并没有我们想象的那么简单。
我们一次比一次更认真地观看教学视频,也主动和其他项目组交流实验遇到的问题,这才意识到LED灯接口是有正负极的区别。我们重新按照正负极的要求连接了线路,成功让LED警示灯和蜂鸣器运行了。
但是新的问题接踵而至,这些零件并没有按照我们的代码指示来运行。
如何用代码控制警示灯和蜂鸣器呢?
这一步也是项目中最艰难的一步,不管做了多少次实验,我们仍然没有成功。一直到第二天就要提交项目成果了,我们还没有解决问题,大家绝望了……当天晚上,我躺在床上,想着第二天没有办法提交项目成果,我睡不着,不甘心,我不想这样放弃。于是,我从床上爬起来,上网查资料。
我查了传感器的构成及原理,了解到传感器的连接不是随意的,是严格被格式化的,每一个接口对应的插口都是有自己独特的意义,不是随随便便乱插的。我这才意识到,我们的传感器电路插错位置了。
重新插好了传感器电路,新的问题又来了。每次在Micro:bit盘中输入代码后,它自动推出,同时 LED灯和蜂鸣器没有运作,这使得我以为,Micro:bit和代码出了错误。
我冷静下来,上网去查Micro:bit的工作原理。原来它的工作方式是运行一遍输入的程序后,它就自动将其刻印在Micro:bit中,不需要我再次输入,这说明“自动推出”是Micro:bit正常运作的结果。程序没有问题。
一直到了凌晨2点,我把Micro:bit都烧坏了,实验被迫暂停,LED灯和蜂鸣器仍然没有正常运作,但我此时充满信心,我感觉到我已经摸索到了本次实验的本质,每一个零件我们都需要了解它的工作原理和构成,以及它们运行和代码之间的相互关系。
第二天,在老师得知大部分项目需要进一步调试完善后,又给了我们两天时间。绝处逢生,我们一定要把握住最后的时间。
一放学后,我拿着新的Micro:bit和伙伴一起研究如何使得程序和各一个零件相互响应。我们上网查找验证传感器运作的相关实验,借鉴他人的实验方法,验证我们的传感器是否可以正常运作。举一反三,我们自行设计了验证LED和蜂鸣器是否能通过接收到的信号做出反应的程序。
当独立的两个子程序都成功后,我们将这两个子程序结合到了一起, 并最终得到一个完整的控制程序。
当车载传感器检测到模型车和障碍物之间的距离小于安全距离时,蜂鸣器响了,LED灯亮了;当车载传感器检测到模型车和障碍物之间的距离大于安全距离时,LED灯熄灭,蜂鸣器恢复安静。
成功了…真的成功了,我和伙伴们兴奋地手舞足蹈,我们一遍一遍地反复测试,刺耳的蜂鸣声,在我们听来却堪比天籁之音。
本次项目让我体会到,做任何事情之前,都要先弄明白它的原理再动手,磨刀不误砍柴工。同时,对于成功的强烈渴望和永不放弃的精神,是我们奔向胜利的途中,不可或缺的。
03数据库
By Andrew
过去的几周对我们这些G2的计算机科学学生来说是相当刺激的。11月10日星期四,我们迎来了CS项目的最终展示,这标志着我们的努力得到了认可,也标志着整个项目的正式结束。
这个小组项目对我来说是一个惊喜;也许是因为我从来没有看过课程大纲,我没有预料到在我们的CS课程中会有一个实际的机会让我们跳出看似无止境的理论学习循环。因此,怀着兴奋的心情期待着我们有可能做的事情,我和我的一位挚友Toby Li迅速组成了我们的小组。
我们有两个选择:数据库和物理计算。作为从出生就被互联网世界包裹的Z世代的一部分,我们对网站背后的原理和建设有着同样的好奇心。因此,尽管我们在这个领域几乎没有任何经验,但我们还是选择了利用这个宝贵的机会潜入这个神秘的魔法世界,建立我们自己的网站和数据库。从这里,旅程开始了。
我们项目的最终产品落在了一个工具上,用户可以通过这个工具登录他们的个人账户,将评估结果存储到数据库中,然后收到他们的表现的简要概述。我们原本为我们的产品设计了更多的功能,例如搜索特定课程的测试结果;然而,由于时间有限,我们不得不放弃。
为了使这样的过程变成行动,我们采用了HTML(超文本标记语言)来建立网页(也被称为前端),然后构建了PHP后端,负责处理来自前端的请求,并向数据库发送SQL(服务器查询语言)查询,以存储或搜索数据。尽管这个产品看起来很简单,但对我们两个人来说,它带来了一系列的挑战;例如,我们在用HTML建立网页方面有很大的困难。
起初,我们试图制作自己的代码。然而,结果并不理想:我们的网页的美学效果勉强令人满意,更不用说令人满意了。因此,为了得到我们想要的东西,我们找到了另一种补救办法,那就是一个可以从我们的设计中生成HTML代码的图形页面编辑器。
除了这个,我们还面临着一堆困难,尤其是在调试的时候。我可以向你保证,花三个小时来解决将SQL查询纳入PHP时报告的语法错误,确实不是一个愉快的经历。尽管如此,我们还是成功了。
虽然我们的产品有很大的改进空间,但我认为这个产品是我们90%成功的 "巡礼",因为真正重要的不是最终产品有多完美,而是我们的努力和从项目中获得的知识,特别是考虑到我们在项目之前的相关知识很少。从我自己的角度来看,这个项目本身意义重大;它让我尝到了网络开发的甜头,让我对未来从事CS相关工作的人生有了更清晰的认识。
如果我们比喻说,学习CS是一整道菜,每天获得的理论知识是主菜,那么这个项目在我们学习中的独特作用就是消化剂,它使我们能够将理论应用于实践,帮助我们消化所获得的知识,同时为下一道主菜提振胃口。
04失温报警器
By Alexander, Eugene and Benjamin
我们做这个项目的灵感来源实际上是一篇关于一些运动员因为失温症而险些死亡的新闻,所以我们应该在检测到使用者有失温风险时报警,当然中暑的检测功能也一起加上了。
设备的输入实际上只有温度和湿度,用这二者可以计算出体感温度和风寒指数(实际上风寒指数还需要风速,我们出于便携性和制作难度考虑将本地的平均风速作为它的值);输出有一个红色一个蓝色的LED灯和一个蜂鸣器:如果用户可能中暑(体感温度过高)会亮红灯,蜂鸣器发出高音警报;如果用户有失温风险(风寒指数过低)会亮蓝灯,蜂鸣器发出低音警报。虽然这个项目看起来很简单,但是实际上我们遇到了很多问题:
首先,网上实际上没有现成的演示或者代码,也就是说整个项目的构思,电路设计,编程等全部都要从0做起。我们的小组在创意的部分就有一些分歧:有些功能,比如风速检测功能呢,可以让这个设备更好,但是制作难度比较大,有组员认为应该加上也有人觉得太过复杂不需要,我们因此需要做出取舍。
其次,电路设计:因为模拟软件上实际上并没有我们需要的所有元器件,我们必须在没有模拟系统的协助下自己设计电路并了解不同元器件之间的电路连接,这对于从没接触过面包板的我们是一项不小的挑战。
再者,编程:网上没有任何现成的代码,我们必须找各个元器件的使用代码,比如DHT温湿传感器的代码我们就花了不少时间,包括从网上搜集源代码和放在我们的项目中进行适配。
虽然我们遇到了不少困难,但是都一一克服了,我相信这对于我们的问题解决能力有很大提升,而且大家在电路设计,编程,纠错等方面也有所进步。
05家庭烟雾探测器
By Jean,Sheryl,Cynthia,Sarah
我们的烟雾探测器简介:烟雾探测器是家庭和公共场所的重要设备。我们制作的烟雾探测器能够检测并报告烟雾的存在。在正常情况下,指示灯将保持绿色。当检测到烟雾时,它会在屏幕上显示“Smoke!”字样,并响起蜂鸣器并闪烁红灯。我们的检测器有多种应用,最常见的用途是作为家庭火灾报警系统。它也可以安装在禁止吸烟的地方(例如飞机),以检测任何不遵守规定的吸烟者。
我们做了什么? 1. 画流程图。在有了做烟感器的想法后,我们画了一个工作过程流程图,分阶段描述烟感器的工作原理。
2. 仿真我们使用Tinkercad网站构建并录制了烟雾探测器全自动系统的在线版本,在网上找到组件并将它们组合在一起,通过用C++编程语言键入代码来分配系统的条件和功能。
3. 搭建电路我们从CS老师那里拿到了物理元件,根据网上的仿真样例在面包板上组装在一起。
4. 测试系统我们通过点亮纸张来测试系统,观察红灯是否闪烁,蜂鸣器是否在有烟的情况下蜂鸣,绿灯是否在没有烟雾的情况下闪烁。
5. 最终结果烟雾探测器系统成功开始工作,我们记录下整个过程。
我们遇到的问题:
1.LED 灯和蜂鸣器:在模拟过程中,我们遇到了一个问题,在烟雾靠近烟雾传感器之前,红色 LED 和蜂鸣器就开始工作了。我们首先想到可能是阈值太小,导致即使是非常低浓度的烟雾也会达到极限,让微处理器向执行器发送信号。我们调高阈值,调到20000还是不行,最后我们发现原来是电路开路了。
2. 微位:我们本来想加一个微位组件来显示文字,但发现微位组件只支持python和scratch代码。而我们用来上传代码到UNO R3的LDE只支持C++代码。为了解决这个问题,我们决定把微位元器件改成液晶屏,因为它可以用C++来编码。
3. LCD 屏幕:当我们将 LCD 屏幕的组件添加到面包板时,我们发现它没有允许它与面包板连接的引脚。为了解决这个问题,我们需要将引脚焊接到 LCD 屏幕上。从CS办公室借来烙铁和锡焊后,我们成功焊接了引脚,将液晶屏连接到面包板上。
我们学到了什么?
1. 在仿真阶段,如果电路不能正常工作,请切换到原理图,看电路是否开路或短路。原理图更便于用户调试。
2. 在进行编码部分时学习一些 C++。
3. 列出遇到的问题,并一一解决。例如,如果电路不能工作,首先要确定电路是否与电路板和UNO R3连接良好,然后检查电子元件是否损坏,我们的逻辑(代码)是否有问题。一个问题解决了,就不需要再回头在同一件事上浪费时间了。
4. 永远记住要有耐心!
06人脸追踪摄像头
By William, Barry, Hardy, Harry
在这次的项目中,我们组制作的是一个带有人脸探测、人脸识别和人脸追踪的摄像头,其中包含了硬件和软件的开发与研究,以及最初的搜索和团队讨论。
制作这个摄像头的目的无比单纯,最初只是我们在广泛搜索的时候被人脸追踪摄像头激发出了兴趣,随后经过讨论,一致决定以这个产品作为我们的项目目标,并在其中加入额外的功能。 摄像头的基础原理便是让电脑持续不断地处理摄像头传回的影像。
最初我们写了一个程序,并对此进行一系列的机器学习,通过对人脸数据的录入让电脑学会如何识别人脸。并且我们在录入数据的时候输入了相对应的人的名字,让摄像头在看到这个人的时候电脑屏幕上会显示出其名字。而在人脸平移的时候,电脑识别出人脸不在视野中心,摄像头底下的马达便会启动,让摄像头转动,从而保持人脸一直在视频画面的中心。
我们团队认为人脸追踪摄像头在现实中有广泛的用途,比如作为室内监控摄像头,摄像头可以持续追踪范围内人的移动并反馈相对应的影像,同时也可以识别此人的脸部数据是否在数据库中,若是没有,便会启动相对应的安保程序。又比如在上网课的期间,人脸追踪摄像头可以自动调节角度,省略了使用者自行调节的过程。
课题的制作过程无比艰辛。在我们的团队刚计划开始制作人脸追踪摄像头的时候,气氛很轻松,四个人的小团体利用课上的时间组合,研究,课余时间打打闹闹,闲情逸致。每节课我们的团队中都洋溢着欢乐的气息。
但直到快要提交的那几天,微信群的气氛仿佛要凝固了,每个人的言语中都是道不尽的焦虑。调试的过程中,各种问题接踵而来,硬件上的,代码上的,所有的漏洞都在最后几天被毫无掩盖地展现在了我们面前。
所有人都焦头烂额,不知所措。课题提交的前一天,我们几乎是刚吃完午饭便找了一间空教室组装承载摄像头的平台。下午一放学,四个人便又集合在了空教室里。那天,我们见过了4:30的时候学校中人来人往的喧闹,见过了9:30教学楼的寂静与孤单。五个小时里,我们唯一的休息时间便是吃饭的那半个小时,而晚饭过程也是气氛压抑,所有人都在思考如何解决当前的各种问题。所幸,在9点的时候终于调试成功了。在进行了测试后,我们也是如释重负,随后立即清理回去休息。
在准备展示的前几天,我们又遇到了问题。马达损坏,算法出错,一切来的那么猝不及防,给了高歌猛进的我们一记重锤。我们不得不又花时间重新写了一个调整摄像头的程序,并且买好新的材料替换,最后也总算在展示的当天一路平稳,没有出现任何问题。
这次的项目教会了我们团队协作与沟通,以及批判性思维的使用。总的来说我们认为这是一个非常好的机会,让我们在人生的历程中进步,并在未来越走越远。