用Arduino做的一个小工具

公司有要求,上班的时候笔记本必须锁死在 dock 上,然后不在的时候必须拔掉钥匙锁住,每天中午都会有专人检查。于是,用Arduino做了一个简单的报警装置。

用起来是这样的:

20130815349

元件上除了 Arduino 本身,还用了2个霍尔效应管(霍尔开关)作为传感器

k1

还有一个无源蜂鸣器作为报警装置
k2

原理上来说,在笔记本底部安装一块磁铁,在钥匙上安装一块磁铁,同时将霍尔效应管放置在与之相对的位置。当笔记本底部的霍尔效应管感受到磁力,并且钥匙处也感受到磁力,就表明笔记本放在了dock上,并且钥匙没有拔掉,此时即发出报警声音。
20130815354

后来始料未及的是后来才知道,Lenovo 的笔记本dock在未锁定的状况下可以拔掉钥匙,就是说对于Lenovo的用户来说可能出现笔记本表面上看起来放置好了钥匙也拔掉了但是实际上没有锁住,而这样的情况是无法检测出来的。HP的笔记本没有这样的问题。但是鉴于上面的情况不能完全囊括,我的这个设计也就没有了多少意义。

代码如下
int KeyPin = 3; //钥匙处的霍尔开关管脚
int ButtomPin = 4; //底部的霍尔开关管脚
int BeepPin = 12; //蜂鸣器管脚
int LedPin = 13; //13Pin 上有个LED

void setup() {
pinMode(KeyPin, INPUT); //霍尔开关做输入
pinMode(ButtomPin, INPUT);//霍尔开关做输入
pinMode(BeepPin, OUTPUT); //蜂鸣器是输出
pinMode(LedPin, OUTPUT);
}

void loop() {
int i;
digitalWrite(LedPin,HIGH);
if (LOW == digitalRead(ButtomPin)) { //放回
if (LOW == digitalRead(KeyPin))
{

for(i=0;i<200;i++) //蜂鸣器响声持续时间 { digitalWrite(BeepPin,HIGH); //产生1KHz的脉冲 delayMicroseconds(500); digitalWrite(BeepPin,LOW); delayMicroseconds(500); } digitalWrite(BeepPin,LOW); delay(1000); } } digitalWrite(BeepPin,LOW); //delay(1000); digitalWrite(LedPin,LOW); }

Arduino SENSOR SHIELD v4.0

我是在淘宝上买的Arduino UNO兼容版,同时还购买了 Arduino SENSOR SHIELD v4.0 (又叫做扩展卡,多媒体卡?)主要是为了方便实验。不过不知道该卡的扩展脚的连接,询问卖家,他随手给了Arduino的官网,但是实际上官网上并没有这个Shield的电路图。好在google可以找到

SensorShieldV4-TK1-crop-1024

上述资料来自 http://arduino-info.wikispaces.com/SensorShield

正好搭配我购买的双母头杜邦线(不知道真的假的)。

重新编译EDK2工具的方法(C语言部分)

EDK2 在编译过程中会用到很多工具,比如编译处理Setup菜单的 VfrConmpiler.exe。部分工具是C编写的,部分是Python编写的。本文介绍如何重新编译Windows下面,C编写的这类工具。全部的工具存放在 BaseTools 目录下。Windows编译过程中用到的工具可以在 BaseTools\Bin\Win32下面找到。(实际上我只在Windows下编译过 EDK2)

编译的方法是:

1. 运行EDK2代码根目录下的 edksetup.bat
2. 进入BaseTools目录下运行 toolsetup.bat
3. 运行NMake即可全部重新编译

运行结果如下图,出现Error的原因是我们没有安装Python Freeze 这个工具(这个工具是用来将Python编写的程序封装成Windows EXE的工具)。

computl

全部编译时间上会比较长,我们可以单独编译。比如,我们修改 VolInfo 的Source Code,之后进入 \basetools\Source\c\Volinfo 目录下,使用 nmake 即可编译 (前面提到的1 2两步还是要做的)

www.lab-z.com
Zoologist
2013-8-2

改动代码提取器 1.1

在上一版的基础上进行了升级,加入和修改了如下功能

1.使用运行目录下的INI文件,保存每次搜索的 Tag String 和 文件类型,以及文件最后运行时的窗口位置和大小

2.加入文件是否为 Unicode 的判断,比如,目前使用的 *.uni 就是 unicode文件在上一版无法正常处理

3.任务完成时在

参考:

1. http://www.2cto.com/kf/201208/149623.html 判断文件的编码格式(Unicode;Utf-8;Ansi;Unicode Big Endian)

gcsv1.1

改动代码提取器

这是一个自动提取改动代码的工作,更准确的说是设计给EDK2代码使用的。比如,你在一套代码中做出了改动,只要改动文件有相应的注释,工具找到这样的注释标记即可将改动后的文件提取到上一层目录中同样的子目录下。程序会扫描如下文件的内容来检测是否有标记信息 *.c;*.h;*.bat;*.xml;*.txt;*.asl;*.inf;*.dsc;*.fdf;*.bat;*.asm;*.uni;*.vfi。

例如:修改的代码位于 c:\working\bkc26\ 下,代码中的改动用 Tag_SC01,Tag_SC02 这样的进行标记后,选择目录,使用Go 按钮进行分析后,找到的修改后的文件会自动拷贝到 c:\working\labz\目录中。这样将会便于分发给需要者而不用进行全部文件的拷贝。如果拷贝过程中出现错误将会在下方的Memo中显示出来。

另外,我现在正在使用 梅捷 SY-D2700-U3M 的主板,固化了Intel D2700 Atom CPU。具有零噪音(无风扇),节能环保,扩展丰富等等特点。唯一的问题是:经常硬盘丢失。具体是在使用中忽然BSOD,然后自动重启之后在Setup中无法找到硬盘,重启无效,必须关机一次再开机。看起来不像是BIOS问题,并且我确定不是硬盘问题,有谁知道这个问题如何解决可以告诉我。谢谢!

gcs

gcs