作业11:输入设备[FabNotes023]
给微控制器电路增加一个传感器,测量感兴趣的值
这周开始,芯片 Attiny45 将会频繁出场:
电路设计
尝试用 phototransistor (光电晶体管)作为输入模块,去控制 LED 。
在 Eagle 先画 schematic:
然后生成 board。可以先用 autorouter 自动布线,然后再根据需要手动调整。
在完成设计之前,需要用 ERC 命令检查 schematic 的错误,用 DRC 检查 board 的错误。根据机器刀头的尺寸,设置线路间隔为 16mil 。
全部仔细检查后,再分别把 top 图层和 dimension 图层输出为两个 png 文件,要注意勾选单色输出:
Download the eagle sch & brd & png files.
电路板制作
依然使用 Roland SMR-20 刻电路板,用 1/64 刀头刻线路,1/32 切割外框。在 fabmodules.org 里面,设置输入的 png 图像 dpi 为 1500 ,然后计算雕刻路径:
将元件们焊好:
程序
这周开始用 Arduino 写程序。在上传之前,需要选好板子的类型以及芯片。 Attiny45 使用 8 MHz 内频。
代码如下,也可以到这里下载。
1 |
|
在这个简单的电路程序中,光电晶体管起到开关的作用,根据光亮控制电路中 LED 的明灭:
试验1:用 Python 和串口通信
制作一块带有光电晶体管的板子:
下载 hello.light.45.c 和 makefile。在 terminal cd 进入文件夹,输入命令 make -f hello.light.45.make
得到回应:
1 | avr-gcc -mmcu=attiny45 -Wall -Os -DF_CPU=8000000 -I./ -o hello.button.45.out hello.button.45.c |
然后输入命令: sudo make -f hello.light.45.make program-usbtiny
得到回应:
1 | avr-objcopy -O ihex hello.light.45.out hello.light.45.c.hex;\ |
Python 程序可以在这里下载.
用 USB to TTL 连接好板子并运行程序:
python hello.light.45.py /dev/ttyUSB0
这时出现错误提示:
1 | Traceback (most recent call last): |
Google 一下这个问题 Failed to open port /dev/ttyUSB0 - ROS Answers: Open Source Q&A Forum。
问题可能是因为我还没有装 FTDI (用于 USB 和串口通信)驱动。
使用命令 ls /dev/tty*
可以列出当前可用的串口。确实没有 /dev/tty.usbserial-A400gwhT 串口。所以我尝试安装 FTDI 驱动 - D2XX Direct Drivers 以及 Virtual COM Port Drivers。但是依然不成功。
接着,Google 到这一篇 How to Install FTDI Drivers - learn.sparkfun.com 照着再装了一遍驱动。重启电脑后,插入 FTDI 2 USB 设备, /dev/tty.usbserial-A400gwhT 总算出现在串口列表中。
接着,尝试用新的串口运行程序:
python hello.light.45.py /dev/tty.usbserial-A400gwhT 9600
继续看到错误提示:
command line: hello.light.45.py serial_port
到 python 程序中仔细看了看,将 len(sys.argv) 从 2 改为 3:
1 | if (len(sys.argv) != 3): |
问题解决:
实验2:开关
做了一个带开关的板子:
下载 hello.button.45.c 和 makefile。 在 terminal cd 进入文件夹,运行命令: make -f hello.button.45.make
和 sudo make -f hello.button.45.make program-usbtiny
。都正常。
然后用 TTL 2 USB 连接板子:
运行命令
python term.py /dev/tty.usbserial-A400gwhT 9600
每按一次按钮,屏幕打出一个“du”:
实验3:温度传感器
做了一个带有温度传感器的板子:
下载 hello.temp.45.c 和 makefile。输入命令 make -f hello.button.45.make
和 sudo make -f hello.button.45.make program-usbtiny
。
然后运行程序 python hello.temp.45.py /dev/tty.usbserial-A400gwhT 9600
。传感器开始实时监测温度变化。