分类目录归档:电子

室内空气监测

GP2Y1010AU0F
左图[1] 是夏普的紧凑型光学灰尘密度传感器 GP2Y1010AU0F (PDF),淘宝三十元不到。

传感器内部有一个 LED,通过检测灰尘对光的反射的强度来估计空气中单位体积内灰尘的质量。
虽然因为无法区分灰尘颗粒的体积,无法直接推算出 PM2.5 数值,但我想它和 PM2.5 之间应该还是比较强的相关性的 来源请求

(嘛 30 块一个东西还是不要想太多比较好。

另一个传感器是 DHT22,淘宝大概 20 元一个。用于测量空气温度和湿度。

去年暑假我把这两个东西用了起来,监测室内空气状况并绘制图表然后显示在网页上。干嘛用?就是玩具,好玩嘛… 如果你也觉得有点意思,想搞个玩玩… 这篇文章也许可以用作参考。

事隔较久,一些细节记不太清了,可能会有些疏漏。相关代码在使用前记得改改文件名路径什么的。 继续阅读

Watchdog Timer on Cubieboard

准备将 Cubieboard 留在家里,放在路由器边长期开着收收短信什么的。
有了 Watchdog Timer(看门狗计时器)一旦 Cubieboard 死机,系统将自动重启。重启由硬件实现,确保可靠性。

内核支持

需在编译 Linux 内核时开启 Watchdog Timer 支持、编译 sunxi watchdog 驱动

选项位于Device Drivers >> Watchdog Timer Support,勾选WatchDog Timer Driver CoreAllwinner A10/A13 Watchdog。可以考虑勾选Disable watchdog shutdown on close,选择后若 watchdog 进程意外结束也将触发重启,否则 watchdog 将随 watchdog 进程的关闭而关闭。[1]

CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
CONFIG_WATCHDOG_NOWAYOUT=y
CONFIG_SUNXI_WDT=m

若驱动编译为内核模块,需要手动加载:

sudo modprobe sunxi_wdt

可在/etc/modules加入一行,系统启动时将自动加载:

sunxi_wdt

加载成功后可以看见/dev/watchdog。任意程序打开该文件将启动 watchdog,打开后必须定期“戳一下” (poking) 它,即往里写数据。[1]

安装用户空间程序

戳狗程序当然有现成的:

sudo apt-get install watchdog
sudo service watchdog start

可以留意下配置/etc/watchdog.conf,有检测负载、内存、网络和自定义检测命令等可选功能。

U-Boot 支持

上述方案中,watchdog 只会在系统正常启动,且正常加载 sunxi_wdt,且 watchdog daemon 正常运行后才会生效。若开启 U-Boot 内置的 watchdog 支持,可在系统引导失败时重启系统

这是可选项,我还没试过,只是看文档中有写。(嘛毕竟有山寨货了(见下文((

首先编译 u-boot-sunxi 时需启用CONFIG_WATCHDOG
其次修改boot.scr,在bootm这行之上加入watchdog 16。该文件在引导分区,若无需自行建立。
我还没试过,就不乱说了,请参考 u-boot-sunxi/wiki#bootscr-support 配置。

需要注意的是,A10 只支持最长 16 秒的间隔时间[2]。也就是说,从加载内核、挂载分区、一直到启动 watchdog daemon 必须在 16 秒内完成,否则将触发重启。

在此之前…

由于不知道 SoC 内置了 watchdog,我翻了些零件自己山寨了一个

山寨 Watchdog (左) 和 Cubieboard (右)

山寨 Watchdog (左) 和 Cubieboard (右)

洞洞板是以前焊的,其上是一块 ATmega16U,都闲置好久了;
左边方块是一个继电器和三极管二极管电阻之类的,通过 USB 口连接着 Cubieboard 的电源;
中间蓝线连着单片机与一 GPIO 口,用一个脚本周期性输出 0,1 来戳狗。

单片机检测到超时没戳时,给继电器通电几秒,就成了..

(说来 ATmega 也内置一个 Watchdog Timer…

[1] The Linux Watchdog driver API;
[2] Allwinner A10 User Manual v1.20 (PDF), P99 10.3.25. Watch-Dog Mode Register.

MMA7455L + Python + Cubieboard

MMA7455L (PDF) 三轴加速度传感器,可以使用 I2C 或者 SPI 总线连接。两者 Cubieboard 均有提供,虽然不懂有多大区别但是 SPI 要四根线好麻烦所以就用 I2C 了..(

与 Cubieboard 的连接参照 WikiPB18 (TWI1-SCK)PB19 (TWI1-SDA) 两根接在模块的 SCLSDI 口上,接好电源(3.3V)和地线,模块的 CS 也接在电源上(以使能 I2C)。官网 ubuntu 镜像默认启用 I2C-1,若未启用则需修改 Fex 文件:twi1_used = 1

可以使用 i2c-tools 确认连接正确。装好后输入i2cdetect -y 1,如果出现1d(MMA7455L 的地址),说明连接无误可以通讯。

在 Cubieboard 上使用 Python 读取加速度数值,代码在这:MMA7455L.py,目前实现功能有:

  • 读取 8 或 10 位的 X, Y, Z 轴加速度数值(-127 ~ 128 / -511 ~ 512);
  • 切换 ±2g, ±4g 和 ±8g(set_range());
  • 自动校准(set_offset()clear_offset())。

继续阅读

U盘无反应——换个晶振试试

数学代课老师的山寨U盘坏了……
据说他已经坏了N个U盘了…山寨品质靠不住啊

U盘插入电脑后,U盘LED常亮,Windows 毫无无反应。没有出现任何声响、提示……设备管理器里啥也看不见…
拆开,检查了USB口接触良好,外观上也看不出什么异常……

Google 之,发现很多人表示(这里还有这里),晶振很容易坏…
短路晶振,U盘LED闪烁,电脑出现反应,提示无法识别USB设备…

嗯,于是翻出了古董64兆U盘,把那12MHz晶振换上去,OK
不过郁闷的是那古董U盘上的晶振体积太大..根本塞不进啊~ >_<

最重要的还是数据,数据恢复出来了就好

另外U盘也容易丢…所以还是在PC上留份备份吧……

M8耳机接口故障解决

去年M8自带的EP20在陪某猩买MP3的时候丢掉了…
后来买了TP850,效果貌似略微逊于EP20,用了两个多月后一边没声。当时是保修三个月,于是返厂修了……

现在已经过保,忽然音乐严重失真,人声几乎没了……在接头上用力按才能恢复…
由于一直在想“这次不知道能用多久”..所以直接就认为是耳机头坏了..没有继续测试就拆了..
结果发现是M8耳机接口问题!一阵蛋疼…试过用纸巾清洁耳机接口,插头上镀锡..都没用..
换了一个耳机插头,可以了..

几天后,旧病复发了…在网上找到了这篇文章,成功解决!
具体方法是:用牙签塞入耳机接口最外面一个金属触点背后,将触点翘起…

这是很常规的方法,但是由于其他触点都很难接触到,于是想到就直接放弃了…
还好只是最外面一触点的问题……

#update110313: 只需要拿个尖头小钳子即可将里面几个触点拉出。这样解决问题更彻底了。
另外,这样还可以解决死都不外放的问题

P.s 班上已经两位童鞋(要)买M9了!一位已经到手,另一位已经预定…叫我这个M8用户情何以堪啊……
M9的摄像总算是正常些了,720P,30Fps 。光线暗时(比如日光灯提供照明的教室内),依然保持流畅,但是色彩还原却变得很惨…基