C 语言实验室 1:Arduino
本实验会给你一份说明书,它描述了一个程序,你需要运用你在前几章中学到的知识构建这个程序。
这个项目比你之前见识到的项目都要大,所以动手之前请阅读完全部内容,并给自己一点时间。不要担心会被难倒,这里没有新概念,你也可以接着往后读,回过头再来做这个实验。
我们还为你补充了一些设计上的细节,万事俱备,你甚至可以搭建物理设备。
该去实现程序了,我们不会给你任何代码或答案。
说明书:让盆栽说话
你可曾想过,你的植物告诉你它需要浇水?有了 Arduino,植物就可以开口了!本实验中,你将创建一个由 Arduino 驱动的植物监控器,全用 C 语言来写。
需要构建以下这些东西。
物理设备
植物监控仪用湿度传感器测量植物土壤的湿度。当植物需要浇水时,LED 就会亮起,并重复向你的计算机发送字符串“给我浇水”,直到你给植物浇水为止。
等你给植物浇了水,LED 灯就会关闭,然后向计算机发送字符串“谢谢啊!”。
Arduino
植物监控仪的核心是 Arduino。Arduino 是一个基于微控制器的小型开源平台,它可以用来设计电子设备的原型。你可以在 Arduino 上面连接传感器,采集真实世界中的信息,Arduino 的执行器会做出反应。整个过程需要用 C 代码来控制。
Arduino 板上有 14 个数字 IO 管脚,它们用来输入和输出数据。我们可以用这些管脚来读取数据或控制执行器。
板上还有 6 个模拟输入管脚,可以从传感器读取电压值。
Arduino 板用计算机的 USB 端口供电。
Arduino IDE
C 代码在 Arduino IDE 中写,你可以用 Arduino IDE 检验代码是否正确并编译代码,然后通过计算机的 USB 端口把代码上传到 Arduino。IDE 还自带一个串口监视器,用来查看 Arduino 发回的数据(如果有的话)。
Arduino IDE 是免费的,可以在 下载。
www.arduino.cc/en/Main/Software
装配物理设备
第一步是装配物理设备。虽然这一步是可选的,但我们强烈建议你试一试,你的植物会为此感激你的。
制作湿度传感器
取一根长跨接线,将其连接到一枚镀锌钉的钉帽上,可以绕在上面,也可以焊上去。
然后再取一根长跨接线,与另一枚镀锌钉相连。
湿度传感器会测量两枚镀锌钉之间的导电率,导电率高表示湿度高,导电率低说明湿度低。
连接 LED
仔细观察 LED,你会发现它一根导线长(正极),一根导线短(负极)。
凑近 Arduino,可以看到 14 道插槽沿着边缘一字排开,分别代表 0~13 号数字管脚,旁边还有一道插槽,标的是 GND。把 LED 较长的那根导线(正极)插入 13 号插槽,较短的那根导线(负极)插入 GND 插槽。
这样就可以通过 13 号管脚控制 LED。
连接湿度传感器
湿度传感器的连接方法如下所示。
- 用短跨接线将 Arduino 的 GND 管脚与实验电路板的 D15 插槽相连。
- 10K 欧姆电阻的一端与实验电路板 C15 插槽相连,另一端与 C10 插槽相连。
- 用短跨接线将 0 号模拟输入管脚与实验电路板 D10 插槽相连。
- 将镀锌钉上的跨接线与实验电路板 B10 插槽相连。
- 用短跨接线将 Arduino 的 5V 管脚与实验电路板的 C5 插槽相连。
- 将另一枚镀锌钉上的跨接线与实验电路板 B5 插槽相连。
现在,Arduino 的物理装置已经组装好了,下面来看 C 代码……
代码应该做
Arduino C 代码应该做以下事情。
读取湿度传感器的数据
湿度传感器连到了模拟输入管脚,代码需要从该管脚读取模拟量。
在实验室,我们发现,一般当这个值低于 800 时,植物就需要浇水了。你种的植物可能不用,如果它是仙人掌的话。
把数据写到 LED
LED 连到了数字管脚。
当植物不需要浇水时,把数据写到 LED 连接的数字管脚,让它关闭 LED。
当植物需要浇水时,把数据写到数字管脚,让它打开 LED。如果你想做得更好,就让 LED 闪烁,还可以在数字接近 800 时让 LED 闪烁。
向串口写数据
当植物需要浇水时,需要重复地向计算机的串口写字符串“给我浇水!”。
当植物有了充足的水分,向串口写字符串“谢谢啊!”,写一次就行了。
假设 Arduino 已经插入了计算机的 USB 插口。
C 代码怎么写
Arduino C 程序有特定结构,必须这么写才行:
用 Arduino IDE 来写 Arduino C 代码非常方便。你可以用它来检验代码是否正确并编译代码,然后把完整的程序上传到 Arduino 板,这样就可以看到运行结果了。
Arduino IDE 还提供了一个 Arduino 函数库和一些有用的示例代码。我们在下一页列出了一些函数,对于写程序很有用。
几个有用的 Arduino 函数
在创建 Arduino 时需要用到下面这些函数。
void pinMode(int pin, int mode)
告诉 Arduino 数字管脚 pin 是输入还是输出,mode 可以是 INPUT 或 OUTPUT 。int digitalRead(int pin)
从数字管脚读取数据,返回值是 HIGH 或 LOW 。void digitalWrite(int pin, int value)
把一个值写到数字管脚,value 是 HIGH 或 LOW 。int analogRead(int pin)
从模拟管脚读取一个值,返回值是 0 到 1023 的一个数。void analogWrite(int pin, int value)
向某个管脚写模拟量,value 是 0 到 255 的一个数。void Serial.begin(long speed)
让 Arduino 以 speed 比特/秒的速率发送或接收串行数据,通常把 speed 设为 9600。void Serial.println(val)
向串口打印数据,val 可以是任意数据类型。void delay(long interval)
让程序暂停 interval 毫秒。
植物监控仪下线
Arduino 项目的最后一步就是把湿度传感器插到植物的土壤中,并把 Arduino 连到计算机上,然后你就等着得到植物的最新状态吧。
如果你有 Mac,并且想让你的植物开口说话,可以到 Head First 实验室网站下载一个脚本,它可以识别串行数据流,并大声地朗读出来:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论