分类 硬件折腾 下的文章

由于想把Raspberry Pi改造成无线中继,所以插了两个USB网卡上去。后来发现系统启动后,无线网卡的名称每次都不一定相同,以致启动桥接服务的shell脚本出错。但笔记本上的Lubuntu 12.10却是无线网卡每次的名称都不变。同样是基于Debian,Raspbian也应该可以实现无线网卡名称固定(其实就是跟MAC绑定网络接口名称)。翻查了资料,还是Debian的Wiki比较靠谱。见:http://wiki.debian.org/udev

最后还是比较懒,从Lubuntu 12.10上复制文件 /etc/udev/rules.d/70-persistent-net.rules 到Raspbian上,再改改来用就可以了。该文件修改如下:

## begin the file /etc/udev/rules.d/70-persistent-net.rules #################
# USB Ethernet (usb)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# USB device 0x0cf3:0x1006 (Mercury MW54U)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

# USB device 0x0bda:0x8171 (Netcore NW338)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="aa:bb:cc:dd:ee:ff", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1"
## end the file /etc/udev/rules.d/70-persistent-net.rules #################

其中aa:bb:cc:dd:ee:ff要替换成网卡对应的MAC码。

入手Raspberry Pi Model B (512MB) 已经一段时间了。装上官方的Raspbian,感觉跟手头上的AO522没区别。同样是基于Debian,同样是LXDE桌面。也试了下Xbian (XMBC + Raspbian),感觉非常棒,只是菜单操作有点卡。可惜手上的SD卡空间不够大,否则,还可以玩玩Android。

玩过后,正是按计划进行。首先是作为无线路由来使用。其实就跟Lubuntu共享WiFi一样,测试过程中,还改良了一下以前写的sharewifi脚本(以前的版本:http://www.foxail.org/blog/?p=490)。但是还有一个问题,执行该脚本的stop操作后,系统不会把建立的mon.wlan0接口关闭,需要重启系统,wifi才能从共享模式变成正常的接收模式。

1)sharewifi脚本,设置共享wifi,我放在/opt下,内容如下:(首先要安装hostapd和dnsmasq,执行sudo apt-get install hostapd dnsmasq即可)

### begin the file /opt/sharewifi #########################################
#!/bin/sh

# Setup wireless AP, share the Internet from interface0 to interface1
# USAGE: sharewifi [ start | stop ] interface0 interface1
# EXAMPLE: sharewifi start wlan1 wlan0

help( )
{
    cat << HELP
    Setup wireless AP, share the Internet from interface0 to interface1
    USAGE: sharewifi [ help | start | stop ] interface0 interface1
    EXAMPLE: sharewifi start wlan1 wlan0

    List clients:
    cat /var/lib/misc/dnsmasq.leases
    HELP
    exit 0
}

start( )
{
    echo Starting share wifi ......
    echo Share Internet $port_in to $port_out

    # Configure iptable rules
    iptables -F
    iptables -t nat -A POSTROUTING -s $ip_prefix.0/24 -o $port_in -j MASQUERADE
    iptables -A FORWARD -s $ip_prefix.0/24 -o $port_in -j ACCEPT
    iptables -A FORWARD -d $ip_prefix.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i $port_in -j ACCEPT

    # Log the message of route
    #iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

    # Save iptable rules
    sh -c "iptables-save > /etc/iptables.rules"

    # Configure hostapd
    hostapd_conf=/etc/hostapd/hostapd.conf
    [ -f $hostapd_conf ] && rm $hostapd_conf
    echo >> $hostapd_conf interface=$port_out
    echo >> $hostapd_conf driver=nl80211
    echo >> $hostapd_conf ssid=foxrpi-ap
    echo >> $hostapd_conf channel=1
    echo >> $hostapd_conf hw_mode=g
    echo >> $hostapd_conf auth_algs=1
    echo >> $hostapd_conf wpa=3
    echo >> $hostapd_conf wpa_passphrase=1234567890
    echo >> $hostapd_conf wpa_key_mgmt=WPA-PSK
    echo >> $hostapd_conf wpa_pairwise=TKIP CCMP
    echo >> $hostapd_conf rsn_pairwise=CCMP
    chmod 755 $hostapd_conf

    # Configure /etc/dnsmasq.conf
    dnsmasq_conf=/etc/dnsmasq.conf
    [ -f $dnsmasq_conf ] && rm $dnsmasq_conf
    echo >> $dnsmasq_conf interface=$port_out
    echo >> $dnsmasq_conf bind-interfaces #这个是只监听wlan0,没有之会检测所有卡
    echo >> $dnsmasq_conf except-interface=lo
    echo >> $dnsmasq_conf dhcp-range=$ip_prefix.10,$ip_prefix.110,6h #设置dhcp地址范
    chmod 755 $dnsmasq_conf

    # Enable routing
    sysctl net.ipv4.ip_forward=1

    #killall named
    /etc/init.d/hostapd stop
    ifconfig $port_out $ip_prefix.1
    hostapd -B $hostapd_conf
    /etc/init.d/dnsmasq restart

    echo Sucess share wifi

    exit 0
}

stop( )
{
    echo Stopping share wifi ......
    echo Stop share Internet $port_in to $port_out

    # Configure iptable rules
    iptables -F

    # Log the message of route
    #iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

    # Save iptable rules
    sh -c "iptables-save > /etc/iptables.rules"

    # Configure hostapd
    hostapd_conf=/etc/hostapd/hostapd.conf
    [ -f $hostapd_conf ] && rm $hostapd_conf

    # Configure /etc/dnsmasq.conf
    dnsmasq_conf=/etc/dnsmasq.conf
    [ -f $dnsmasq_conf ] && rm $dnsmasq_conf

    # Enable routing
    sysctl net.ipv4.ip_forward=0

    #killall named
    /etc/init.d/hostapd stop
    /etc/init.d/dnsmasq stop
    ifconfig $port_out down
    ifconfig $port_out del $ip_prefix.1
    ifconfig $port_out up

    echo Sucess stop share wifi

    exit 0
}

ip_prefix=192.168.23 #wifi路由所用网段

#port_in is the network interface which connected to Internet, and default wlan1.
port_in=wlan1

#port_out is the network interface which will be setup AP, and default wlan0.
port_out=wlan0

if [ -n "$2" ]; then
    port_in=$2

    if [ -n "$3" ]; then
        port_out=$3
    fi
fi

case "$1" in
"help" )
    help ;;
"start" )
    start ;;
"stop" )
    stop ;;
*)
    help ;;
esac
### end the file /opt/sharewifi #########################################

2)设置开机自动启动,先编写开机启动的脚本。在/etc/init.d下建立文件sharewifi,文件内容如下:

### begin the file /etc/init.d/sharewifi ######################################### 
#!/bin/sh 
### BEGIN INIT INFO # Provides: sharewifi 
# Required-Start: $syslog 
# Required-Stop: $syslog 
# Default-Start: 2 3 4 5 
# Default-Stop: 0 1 6 
# Short-Description: starts the Wireless AP server 
# Description: starts the Wireless AP using start-stop-daemon 
### END INIT INFO
sharewifi=/opt/sharewifi
NAME=sharewifi
DESC=sharewifi

# Include nginx defaults if available
if [ ! -f $sharewifi ]; then
    echo "Can't find the file $sharewifi"
    exit 1
fi

case "$1" in
start)
    echo -n "Starting $DESC: "
    sh $sharewifi start eth0 wlan0
    echo "$NAME."
    ;;

stop)
    echo -n "Stopping $DESC: "
    sh $sharewifi stop eth0 wlan0
    echo "$NAME."
    ;;

restart)
    echo -n "Restarting $DESC: "
    sh $sharewifi stop eth0 wlan0
    sleep 1
    sh $sharewifi start eth0 wlan0
    echo "$NAME."
    ;;

*)
    echo "Usage: $NAME {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0
### end the file /etc/init.d/sharewifi #########################################

3)执行以下命令,即可设置开机启动:

sudo update-rc.d /etc/init.d/sharewifi defaults

经过昨天的实践,终于搞定Ubuntu共享WiFi功能,而且不是Ad-hoc模式。从此“二奶”可以作为无线中继使用(这里指的是在Ubuntu系统下)。参考教程:
Ubuntu共享WiFi(AP)给Android/更新方法二 http://weibin.me/538

首先很重要的是,要确定无线网卡驱动是否支持master mode。如果不支持,就别想了。然后就可以按照教程安装并设置hostapd和dnsmasq。根据教程,写了个脚本,方便启动或关闭该功能。第一次写比较长的Shell脚本,所以该脚本还是不太完善,但基本可用。要注意,/etc/dnsmasq.conf还是要手动修改。脚本如下:

#!/bin/sh
# begin file: sharewifi

# Setup wireless AP, share the Internet from interface0 to interface1
# USAGE: sharewifi [ start | stop ] interface0 interface1
# EXAMPLE: sharewifi start wlan1 wlan0

help( )
{
cat << HELP
Setup wireless AP, share the Internet from interface0 to interface1
USAGE: sharewifi [ help | start | stop ] interface0 interface1
EXAMPLE: sharewifi start wlan1 wlan0
HELP
exit 0
}

start( )
{
echo Starting share wifi ......
echo Share Internet $port_in to $port_out

# Configure iptable rules
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o $port_in -j MASQUERADE
iptables -A FORWARD -s 192.168.7.0/24 -o $port_in -j ACCEPT
iptables -A FORWARD -d 192.168.7.0/24 -m conntrack --ctstate ESTABLISHED,RELATED -i $port_in -j ACCEPT

# Log the message of route
#iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

# Save iptable rules
sh -c "iptables-save > /etc/iptables.rules"

# Configure hostapd
hostapd_conf=/etc/hostapd/hostapd.conf
[ -f $hostapd_conf ] && rm $hostapd_conf
echo >> $hostapd_conf interface=$port_out
echo >> $hostapd_conf driver=nl80211
echo >> $hostapd_conf ssid=AO522-Tether
echo >> $hostapd_conf channel=1
echo >> $hostapd_conf hw_mode=g
echo >> $hostapd_conf auth_algs=1
echo >> $hostapd_conf wpa=3
echo >> $hostapd_conf wpa_passphrase=1234567890
echo >> $hostapd_conf wpa_key_mgmt=WPA-PSK
echo >> $hostapd_conf wpa_pairwise=TKIP CCMP
echo >> $hostapd_conf rsn_pairwise=CCMP
chmod 755 $hostapd_conf

# Configure /etc/dnsmasq.conf
#interface=wlan0
#bind-interfaces #这个是只监听wlan0,没有之会检测所有卡
#except-interface=lo
#dhcp-range=10.1.1.10,10.1.1.110,6h #设置dhcp地址范

killall named
killall hostapd
ifconfig $port_out 192.168.7.1
hostapd -B $hostapd_conf
/etc/init.d/dnsmasq restart

echo Sucess share wifi

exit 0
}

stop( )
{
echo Stopping share wifi ......
echo Stop share Internet $port_in to $port_out

# Configure iptable rules
iptables -F

# Log the message of route
#iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

# Save iptable rules
sh -c "iptables-save > /etc/iptables.rules"

# Configure hostapd
hostapd_conf=/etc/hostapd/hostapd.conf
[ -f $hostapd_conf ] && rm $hostapd_conf

# Configure /etc/dnsmasq.conf

killall named
killall hostapd
ifconfig $port_out down
ifconfig $port_out del 192.168.7.1
ifconfig $port_out up

echo Sucess stop share wifi

exit 0
}
#port_in is the network interface which connected to Internet, and default wlan1.
port_in=wlan1

#port_out is the network interface which will be setup AP, and default wlan0.
port_out=wlan0

if [ -n "$2" ]; then
port_in=$2

if [ -n "$3" ]; then
port_out=$3
fi
fi

case "$1" in
"help" )
help ;;
"start" )
start ;;
"stop" )
stop ;;
*)
help ;;
esac

# end file: sharewifi

PS. “二奶”升级到Lubuntu 12.04 LTS,感觉更好用了~

上个月终于入手Acer AO522-C6Ckk(以下简称AO522),看重APU C60的高性能集成显卡与低功耗,还有轻薄便携。系统选择方面,Windows 7是必须的,网银支付、玩游戏,都得用它。重点是Linux方面,Ubuntu都习惯了,当然是首选。但是Unity太不给力了,于是根据经验(在SA1F00上装过Ubuntu 11.10 + LXDE,比Unity流畅多了),选择了衍生版Lubuntu。由于Lubuntu本身还有很多不完善,所以又开始了新一轮折腾之旅…

第一,系统安装
现在的Linux分发版都很方便,可以通过光盘、U盘、硬盘、网络等方式安装,还可以做成Live CD,不安装就可以运行。对于AO522,还是建议制作启动U盘进行安装,很方便。本人手头没有U盘,只能通过硬盘安装。

不管通过哪个方式安装,都要注意:必须先进BIOS设置 Main -> Network Boot 为Enabled。否则会遭遇死机,以致无法进入安装环境,或安装后不能进入系统。

安装步骤总结如下:
1)安装Grub(或者可以直接使用带Grub的、可启动 的U盘)。

2)下载lubuntu-11.10-desktop-amd64.iso,放到该机器硬盘上某分区的根目录下(我就放在第一个分区 下,一般为Windows的C盘)。并把iso文件里casper文件夹下的vmlinuz和 initrd.lz两个文件解压,并与iso文件放在一起。

3)启动电脑,进入grub的启动界面,按c键进入命 令编辑界面,输入以下命令:

grub > set root="(hd0,1)"
grub > linux /vmlinuz boot=casper iso-scan/filename=/lubuntu-11.10-desktop-amd64.iso ro quiet splash locale=zh_CN.UTF-8
grub > initrd /initrd.lz
grub > boot

4)进入lubuntu系统后,打开终端,运行以下命令:

sudo umount -l /isodevice

5)运行安装程序。由于是全中文,所以安装过程略过。

第二,显卡驱动
由于AMD自家的闭源驱动不给力,所以用默认的就可以了。就是不用再瞎折腾了。

第三,声卡设置
由于系统默认的声卡是HDMI输出,所以播音乐没声音。进入/etc,新增文件asound.conf,其文件内容如下:

defaults.ctl.card 1
defaults.pcm.card 1

记得设置文件权限,如下:

sudo chown 755 /etc/asound.conf

第四,主菜单维护
Lubuntu的不完善马上体现出来,想修改主菜单,没有对应的软件。详细参考:http://wiki.lxde.org/zh/%E4%B8%BB%E8%8F%9C%E5%8D%95 该文档提到安装LXMED软件,来修改主菜单。

第五,Flash插件
进入 http://get.adobe.com/cn/flashplayer/ 下载对应系统的.tag.gz文件,例如我的是AMD64。解压出libflashplayer.so文件,复制到 /usr/lib/chromium-browser/plugins/ 目录(用FireFox的,复制到 /usr/lib/firefox-X/plugins/ 目录)。记得设置其权限:

sudo chown 755 /usr/lib/chromium-browser/plugins/libflashplayer.so

第六,RAR插件
进入 http://www.rarlab.com/download.htm 下载对应的RAR版本,解压后,进入rar目录,然后执行:

sudo make install

第七,屏幕亮度
系统启动后总是以最大亮度显示,每次都要重新设置其亮度,很麻烦。修改/etc/rc.local文件,在文件最后,exit 0之前,加入如下代码:

echo 0 > /sys/class/backlight/acpi_video0/brightness

其中0代表最暗,这个可以根据需要设置。

第八,拼音输入法
默认没有安装输入法,输入以下命令安装:

sudo apt-get install ibus-pinyin

可以根据需要或喜好,选择fcitx、scim等。

第九,其它
参考Ubuntu的AO522帮助文档:https://help.ubuntu.com/community/AspireOne522

今晚(2012-01-13)终于把KOHJINSHA SA1F00卖掉了。一时感慨万千,写个悼念文以表怀念之情。

2010年9月份吧,在“太平洋”的二手论坛上看上这货。小巧、旋屏、触屏、低价…具备一切迷人的特点,或者说,只是迷倒我的特点。多次沟通及砍价后,终于在2010年10月3日(好像是10月2日,反正是国庆假期)广州芳村客运站当面与机主交易成功。而故事,也从那时开始。

系统安装

由于是用的硬件都不常见,装系统是个麻烦事,特别是Ubuntu Linux(主要是驱动问题)。例如要外接显示器才能用图形界面进行安装,内置无线网卡的Linux驱动超烂,切换分辨率的功能键需要通过写脚本实现等等。最后升级到Ubuntu 11.10,还得换上LXDE桌面才能比较流畅地跑起来。折腾的过程很痛苦,但是用起来还是挺高兴的。安装过程的经验,记录到本blog,也分享到论坛: http://forum.ubuntu.org.cn/viewtopic.php?f=126&t=298473

移动办公

只是由于SA1F00很小巧,方便携带,所以表哥结婚去广西时,带上了。然后利用HTC G1共享上网,登录公司的RTX,跟公司的人沟通,解决工作上的问题。当时有同事对这个很感兴趣。还有一次,找了个有WiFi的小店,补填当月的工作日志。

休闲娱乐

由于性能不佳,最大的娱乐也只是上上网。例如拿着去Starbucks坐一下午。对了,记得有次(2010-10-30)从珠海坐大巴去广州,路上就是用它来开通了新浪微博,并发出第一条微博。还有,环中国之旅带着它,非常方便!

蹭网与路由

第一次用它来玩aircrack-ng,并成功搞定一个WEP加密的密码。只是后来WPA/WPA2都普及了,就没成功过了。然后主要成为无线路由,在信号好的地方接收WiFi,并共享给台式机。

挂机下载

此功能用得最多,主要是比台式机省电多了。同时也是充分利用闲置的网络资源(例如深夜时分,宽带闲着)。

最后还是通过“太平洋”的“二手论坛”,转让给别人了。本来交易时还好好的,就让买家随便测。只是那买家跑着XP时合上屏幕,系统就再也进不去了。于是被买家砍了一刀,只能卖个380rmb。然后微博上发了如下感言:

@胡骊Fox:SA1F00(2010-10-03~2012-01-13)的相关记录 http://t.cn/z0gvj01 原来偶的微博是用SA1F00申请的,第一条微博也是用它发的!

@胡骊Fox: 再见了,SA1F00,偶亲爱的ex-“二奶”!曾经协助Linux/Ubuntu学习,协助蹭网学习,陪伴环中国之旅, 陪伴星巴克悠闲下午,通宵挂机下载,协助装B…[可怜]短短的一年多,经历许多许多,非常感谢!希望在新的岗位继续发热发亮~噢…偶哽咽了…止不住的伤心与汹涌的泪水…[泪]

再三纠结后,终于在上个月中 (2011-6-12)入手了Google Nexus S(SAMSUNG i9020)。虽然是二手,且花了2400RMB,但买到了Super AMOLED版,感觉还是值了。

机子没什么挑剔了,强大的性能、几乎最全面的功能、轻薄的身段……只是机子太强大了,导致用着用着变颓废了。主流3D游戏全部可玩,不再失望与无奈,这样花在游戏上的时间更多了;内存512MB,不用考虑APP to EXT、APK的ODEX化、压缩内存以增大使用空间或挂载swap分区等等,感觉拿着它没事可干了;内置16GB闪存,但是不能分个EXT分区,想chroot个Debian也变得麻烦了;Android 2.3.4什么都集成了,又不用装其它软件了……这一切的改变,使得该机子更接近于手机加掌上娱乐,感觉没G1好玩了。

即将要失业了,得赶紧做下计划。希望能依靠Nexus S与G1,在Android上能有所收获吧。

G1用了两年后,刷上2.3.4,虽然还基本满足日常需要,但仍感不足。内存过小从来都是被骂的硬伤,加上IO效率低下,然后是CPU速度不高(相比很多新的机器),于是再升上去绝对是勉强了。看着N多机器降价,口水直流,于是想到了换新机器。

候选佳丽1号,HTC Desire Z。去年年末一看到发布就迷上这货了,而且有着另一个名字——T-Mobile G2,G1的真正继承者啊!最重要的是,带QWERTY键盘!但是,有个硬伤——非常耗电。别人的评测中,开WiFi浏览网页只有3个小时左右,开3G的话更费电!杯具了~再想想,主频连1G都没有,键盘不如G1的(只有4行,G1有5行),没有前置摄像头,没有NFC……犹豫了。

候选佳丽2号,Google Nexus S (SAMSUNG i9020)。作为与HTC Desire Z同价格等级的选择机型,也作为Google的第2个亲生儿子,具备Android 2.3.4所需的一切硬件条件。前置摄像头、NFC芯片、1G CPU、强劲的显示芯片、Super AMOLED屏幕……而且最大的好处是,对Android新版本有更好的支持,不愁升级的问题。但是必须牺牲偶一直向往的键盘,而且不能插TF (Micro SD) 卡(还好内置16GB Flash)。另外,由于Super AMOLED产能有限,SAMSUNG推出了采用Super Clear SLCD屏幕的机型i9023,此屏幕缺点是黑屏漏光,重量增加。所以想买到i9020还有一定的困难。

场外佳丽,Nikon D5100。很久前就想买个单反了,从D3000开始观望,到D3100出来还是不敢下手(其中日本东海的大地震也间接把价格推高,导致下不了手),现在被D5100迷住了。本来“五一”假期就可以入手D5100了,可是这假期挥霍了,加上预算中的第一季度奖金居然只有想象中的一半……不给力啊!!!于是购买计划又暂停了,而且不知道要拖到什么时候。总是在想,单反这么贵,也只能拍照,值么?然而去拍照时,又感触,怎么就不买个单反呢?

其实,问题的根源还是没钱。有钱的话,都可以实现了。-_-///

本来Windows上装个驱动,按[Fn]+[ESC]就可以把SA1F00的屏幕分辨率切换为1024x600或800x480。但是Ubuntu上没有该软件,只好自己实现了这个屏幕分辨率一键切换功能。

1)新建shell脚本文件/usr/local/bin/changeView。该文件内容如下:
---------代码开始---------
#!/bin/sh
PATH="/usr/bin:$PATH"; export PATH
low_size="800x480"
high_size="1024x768"
is_low_size=`xrandr | grep -c "current 800 x 480"`

if [ "$is_low_size" -eq "0" ]; then
xrandr -s $low_size
else
xrandr -s $high_size
fi
exit 0
---------代码结束---------

编辑完成并保存后,记得修改该文件的权限:
chmod 755 /usr/local/changeView

2)设置快捷键,在“系统”->“首选项”->“键盘快捷键”。

点“添加”,然后“名称”随便输,“命令”输入以下内容:
/usr/local/changeView

按“应用”后,选中刚新增的,按[Fn]+[ESC],就设置好了。

说明:由于还没找到让屏幕支持1024x600的方法,所以这里用1024x768来代替。由于SA1F00的屏幕只有7寸,这个切换分辨率的快捷键还是挺实用的。

说起来是某天逛珠海这边的电子城(就是二十几家电子元件店铺聚合的地方),经过个一小摊位时,一个自动打招呼的小装置吸引了我(就是那种当有人经过时,播放“欢迎光临”的装置)。店主MM走过来,我仔细研究了一下,问:“光敏电阻?”MM笑了一下,说:“是的,光敏电阻。”顿时明白了这东西的原理——当有人经过时,内置的光敏电阻感应到光的变化(应该是变暗了),然后播放声音。于是想回去后自己也弄一个。

然后到了昨天才想起那件事情,但还是今天晚上才有空做出来。拿出满是灰尘的Arduino盒子,按照网上的电路图接上电路,再写个小程序来读取光敏电阻的数据并作出反应(用个LED闪两下来,代替播放声音的功能)。

电路图如下:
读取光敏电阻(From Arduino台湾使用者社群 http://arduino.tw
http://arduino.tw/allarticlesindex/2009-09-06-18-37-08/50-%E8%AE%80%E5%8F%96%E5%85%89%E6%95%8F%E9%9B%BB%E9%98%BB.html

该控制程序的代码如下:

//---------begin---------------------
int inPin = 2;    //set input pin
int outPin = 13;   //set output pin
int val = 0;   //the current data from LDR (light dependent resistor)
int pre = 0;   //the previous data

void setup() {
  //Serial.begin(9600);
  pinMode(outPin, OUTPUT);
  val = analogRead(inPin);   //read the data from LDR
  pre = val;   //init the previous data
}

void loop() {
  val = analogRead(inPin);
  if(pre - val &gt;= 5) {   //compare the light change, if it turns darker
    //Serial.print(pre - val);
    //Serial.print("\n");
    blinkLED(outPin);
    pre = val;
  } else if(val - pre &gt;= 5) {  //if it turns brighter
    pre = val;
  }
}

//make the LED blinks
void blinkLED(int pin){
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
delay(200);
digitalWrite(pin, HIGH);
delay(200);
digitalWrite(pin, LOW);
}
//---------end---------------------

总结一下吧。对电路方面还是有很多不熟悉的地方,虽然高中物理的电路理论几乎都能用上,但都忘了很多。唉~~更不用说大学时还学过的“大学物理”、“数字电路”、“模拟电路”……对了,该装置可以在很多情况下代替红外线感应的,而且成本上可以节省一大笔(例如开头提到的“欢迎光临”装置)。对于我来说,或者可以用来抓蟑螂。

这个月初入手一台二手的Kohjinsha(工人舍) SA1F00WKR(白色韩国版)。装上Windows XP后,该机器无论作为上网本还是下载机,都很给力,只是作为MP4就有点力不从心了(播放RMVB会卡)。为了进一部挖掘其应用及性能,决定装个Ubuntu 10.10 Desktop上去。经过一番的折腾,下面分享一下安装过程:
第一,硬盘安装系统。
1)为什么是Desktop而不是Netbook,纯粹个人喜欢。安装系统后,也可以通过软件管理器安装Netbook、Lubuntu等。
2)机器没有光驱,于是用硬盘安装。也可以外接USB光驱来装的,只是偶没有该设备。
3)由于Ubuntu的安装程序图形界面在该机器上一片漆黑,所以外接了个显示器来安装。没有显示器的话,只能装Alternative版了。
安装过程参考以下文章:
[url]http://www.maoegg.com/archives/926.html[/url]
安装步骤总结如下:
1)安装Grub(或者可以直接使用带Grub的、可启动的U盘)。
2)下载ubuntu-10.10-desktop-i386.iso,放到该机器硬盘上某分区的根目录下(我就放在第一个分区下)。并把iso文件里casper文件夹下的vmlinuz和initrd.lz两个文件解压,并与iso文件放在一起。
3)启动电脑,进入grub的启动界面,按c键进入命令编辑界面,输入以下命令:
[code]
root (hd0,1)
kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-10.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8
initrd /initrd.lz
boot
[/code]
4)进入ubuntu系统后,打开终端,输入以下命令:
[code]
sudo umount -l /isodevice
[/code]
5)运行安装程序。由于是全中文,所以安装过程略过。由于安装过程非常漫长,建议在睡觉前进行,第二天醒来就装好了。
第二,配置显卡及显示屏。
这个比较麻烦,经过相当长的时间查资料及验证,才总结出来。目前可以显示800x480分辨率,但1024x600还不能显示,其它可用分辨率包括:1024x768、800x600、600x480。
配置显卡及显示屏,把以下代码保存为xorg.conf文件,并存放到/etc/X11目录下。
[code]
Section "InputDevice"
Identifier  "Keyboard0"
Driver      "kbd"
EndSection
Section "InputDevice"
Identifier  "Mouse0"
Driver      "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
Option "Emulate3Buttons" "yes"
EndSection
Section "Monitor"
Identifier   "Monitor0"
VendorName   "Generic Vendor"
ModelName    "Generic Monitor"
Option       "DPMS"
HorizSync    28-50
VertRefresh  43-73
EndSection
Section "Device"
Identifier  "Geode"
VendorName  "Videocard vendor"
BoardName   "AMD Geode LX Video"
Driver "geode"
BusID       "PCI:0:1:1"
Option      "AccelMethod" "EXA"
Option      "EXANoComposite"
# Specify panel size for GeodeLX, corresponds ModeLine above:
Option      "PanelMode" "36940  800 832 912 1024  480 481 484 501"
EndSection
Section "Screen"
Identifier  "Screen0"
Device      "Geode"
Monitor     "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport  0 0
Depth     24
Modes     "1024x768" "1024x600" "800x600" "800x480" "640x480"
EndSubSection
SubSection "Display"
Viewport  0 0
Depth     16
Modes     "1024x768" "1024x600" "800x600" "800x480" "640x480"
EndSubSection
SubSection "Display"
Viewport  0 0
Depth     8
Modes     "1024x768" "1024x600" "800x600" "800x480" "640x480"
EndSubSection
EndSection
Section "ServerLayout"
Identifier     "X.org Configured"
Screen         "Screen0" 0 0
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
EndSection
[/code]
该文件可以从这里下载:
[attachment=0]xorg.conf.txt[/attachment]
第三,配置无线网卡。
新内核已经可以识别该机器的无线网卡了,但是还不能搜索到无线网络。但插上USB无线网卡后,却能马上找到无线网络。这个问题还没时间去搞,希望高手指教。
第四,配置声卡。
登录系统后是有登录声音的,只是播放MP3时没声音。这个问题还没找资料,也希望高手指教。
第五,其它问题。
(暂无)

这个月初入手一台二手的Kohjinsha(工人舍) SA1F00WKR(白色韩国版)。装上Windows XP后,该机器无论作为上网本还是下载机,都很给力,只是作为MP4就有点力不从心了(播放RMVB会卡)。为了进一部挖掘其应用及性能,决定装个Ubuntu 10.10 Desktop上去。经过一番的折腾,记录一下安装过程:

第一,硬盘安装系统。
1)为什么是Desktop而不是Netbook?因为Netbook版体现不出什么优势(跟Android比差远了),反而Desktop版更方便。安装系统后,也可以通过软件管理器安装Netbook、Lubuntu等。
2)机器没有光驱,于是用硬盘安装。也可以外接USB光驱来装的,只是我没有该设备。
3)由于Ubuntu的安装程序图形界面在该机器上一片漆黑,所以外接了个显示器来安装。没有显示器的话,只能装Alternative版了。曾装了个10.04的Alternative版,也折腾了很久,而且软件装了一大堆,不知道哪些跟哪些。看到10.10出来了,顺便更新。

安装过程参考以下文章:
http://www.maoegg.com/archives/926.html

安装步骤总结如下:
1)安装Grub(或者可以直接使用带Grub的、可启动的U盘)。
2)下载ubuntu-10.10-desktop-i386.iso,放到该机器硬盘上某分区的根目录下(我就放在第一个分区下)。并把iso文件里casper文件夹下的vmlinuz和initrd.lz两个文件解压,并与iso文件放在一起。
3)启动电脑,进入grub的启动界面,按c键进入命令编辑界面,输入以下命令:

grub > root (hd0,1)
grub > kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-10.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8
grub > initrd /initrd.lz
grub > boot

4)进入ubuntu系统后,打开终端,输入以下命令:

sudo umount -l /isodevice

5)运行安装程序。由于是全中文,所以安装过程略过。由于安装过程非常漫长,建议在睡觉前进行,第二天醒来就装好了。

第二,配置显卡及显示屏。

这个比较麻烦,经过相当长的时间查资料及验证,才总结出来。也因为内核的驱动不断在更新,所以老版本的Ubuntu跟10.10上的配置不同。目前可以完美显示800x480分辨率,但1024x600还不能显示,其它可用分辨率包括:1024x768、800x600、600x480。

配置显卡及显示屏,把以下代码保存为xorg.conf文件,并存放到/etc/X11目录下。

Section "InputDevice"
Identifier  "Keyboard0"
Driver      "kbd"
EndSection

Section "InputDevice"
Identifier  "Mouse0"
Driver      "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
Option "Emulate3Buttons" "yes"
EndSection

Section "Monitor"
Identifier   "Monitor0"
VendorName   "Generic Vendor"
ModelName    "Generic Monitor"
Option       "DPMS"
HorizSync    28-50
VertRefresh  43-73
EndSection

Section "Device"
Identifier  "Geode"
VendorName  "Videocard vendor"
BoardName   "AMD Geode LX Video"
Driver "geode"
BusID       "PCI:0:1:1"
Option      "AccelMethod" "EXA"
Option      "EXANoComposite"
# Specify panel size for GeodeLX, corresponds ModeLine above:
Option      "PanelMode" "36940  800 832 912 1024  480 481 484 501"
EndSection

Section "Screen"
Identifier  "Screen0"
Device      "Geode"
Monitor     "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport  0 0
Depth     24
Modes     "1024x768" "1024x600" "800x600" "800x480" "640x480"
EndSubSection
SubSection "Display"
Viewport  0 0
Depth     16
Modes     "1024x768" "1024x600" "800x600" "800x480" "640x480"
EndSubSection
SubSection "Display"
Viewport  0 0
Depth     8
Modes     "1024x768" "1024x600" "800x600" "800x480" "640x480"
EndSubSection
EndSection

Section "ServerLayout"
Identifier     "X.org Configured"
Screen         "Screen0" 0 0
InputDevice    "Mouse0" "CorePointer"
InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

目前还存在的问题:
1)无线网卡。
新内核已经可以识别该机器的无线网卡了,但是还不能搜索到无线网络。但插上USB无线网卡后,却能马上找到无线网络。这个问题还没时间去搞。

2)声卡。
登录系统后是有登录声音的,只是播放MP3时没声音。这个问题还没找资料。