树莓派和路由:将树莓派打造成一台路由器

如果你想要一个装在口袋里的网络分享设备,树莓派可以做成一个很不错的路由器.

本次制作所用到的设备要求:

  1. 本地网络
  2. 一台电脑
  3. 运行Raspbian的树莓派
  4. 无线USB路由器
  5. HDMI连接线(可选)
  6. 键盘(可选)
  7. 路由器(可选)
  8. 有HDMI输入的监视器(可选)

如果树莓派已经设置好可以独立运行了.你不需要屏幕键盘鼠标-就是另外一台可以用SSH通过网络远程登录的电脑

需要下载的

  1. Older hostapd (只有apt下不到驱动的时候)

需要的知识,技术,能力

1,可以熟练操作计算机系统

2,基本的计算机术语知识

3,敢于在终端里敲命令.如果有必要也要敢于调整他们适合自己的开发环境

4,熟悉网络核心概念

所用到资源

  1. http://magpi.techjeeper.com/The-MagPi-issue-11-en.pdf
  2. http://www.pi-point.co.uk/documentation/
  3. http://blog.sip2serve.com/post/48420162196/howto-setup-rtl8188cus-on-rpi-as-an-access-point
  4. https://docs.google.com/file/d/0B3nsVzbJuBHVOWRJRDJacVd0S2s/preview?pli=1
  5. http://sirlagz.net/2012/08/11/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-3/
  6. http://www.raspberrypi.org/phpBB3/viewtopic.php?t=39096&p=393810
  7. http://unix.stackexchange.com/questions/119209/hostapd-will-not-start-via-service-but-will-start-directly
  8. http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/

概念总览

  1. 用apt-get安装做需要的组件
  2. 验证无线软件狗收发功能
  3. 配置/etc/network/interfaces
  4. 给你想要设置的接入点创建配置文件/etc/hostapd/hostapd.conf
  5. 把hostapd指向步骤4所创建的配置文件/etc/hostapd/hostapd.conf
  6. 老版本替代/sbin/hostapd
  7. 配置DNS
  8. 配置IPv4转发,使其可以连接网络

准备树莓派

确定你的树莓派是最新版本的,可以安装所有最新的安装包

sudo apt-get update
sudo apt-get upgrade

安装所需要的组件

以下这些组件都是设置接入点做需要的:

  • rfkill: 一个无线工具
  • zd1211-firmware: 很多Wi-Fi收发器通用的固件
  • hostapd: 无线接入点的守护进程
  • hostap-utils: 补充工具
  • iw: 无线网络的配置工具
  • dnsmasq: DHCP 和 DNS 工具
  • bridge-utils:  用来将多个以太网设备连接到一起

用以下命令安装这些组件:

sudo apt-get install rfkill zd1211-firmware hostapd hostap-utils iw dnsmasq bridge-utils

 配置无线收发器

验证软件狗已经被树莓派识别

检查树莓派已经识别Wi-Fi软件狗:

lsusb

验证Wi-FI软件狗支持接入点模式

如果执行下面这条命令没有任何输出是关于AP mode,那么就是说你的软件狗不适合本项目。但是如果有东西的话那就继续进行下一步。

iwlist

倒霉的是我的软件狗坏了,而且还有产生了一个”

nl180211 not found

”的错误,不过还好了继续执行下面这条命令:

dmesg | grep rtl

如果结果是类似这样的

[    6.240292] usbcore: registered new interface driver rtl8192cu

可能这个还是能干活的,接下俩会修复这个问题的.

配置网络接口

先做一个

/etc/nework/interfaces

的备份,然后在文本编辑器里打开,

改成下面这个样子的:

# Automatically brings up interfaces with ifup -a
auto lo
auto br0

# Loopback
iface lo inet loopback

# Keep eth0 as dhcp so it can connect to an existing router
# (Optional--I used this since I was configuring via SSH)
iface eth0 inet dhcp

# Bridge interface
iface br0 inet dhcp
        bridge_fd 1
        bridge_hello 3
        bridge_maxage 10
        bridge_stp off
        bridge_ports eth0 wlan0

# Allow hotplug
allow-hotplug wlan0
allow-hotplug eth0
iface wlan0 inet manual
iface wlan0 inet manual

重启

wlan0

接口

ifdown wlan0
ifup wlan0

 配置hostapd

接下来,做一个

/etc/hostapd/hostap.conf

的备份然后在文本编辑器里打开做一些改动(如果这个文件不存在请忽略第一条命令)

sudo cp /etc/hostapd/hostap.conf /etc/hostapd/hostap.conf.orig
sudo vi /etc/hostapd/hostap.conf

修改这个文件使之包含以下内容,读者根据自己情况自行改动(比如国家代码,网络名等等)

如果

iwlist

命令执行结果有之前提到的

nl80211 not found

错误,创建一个内容如下的文件:

interface=wlan0
bridge=br0
driver=rtl871xdrv
country_code=US
ctrl_interface=wlan0
ctrl_interface_group=0
ssid=RPiAP
hw_mode=g
channel=1
wpa=3
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000000

如果

iw list

命令执行出错,文件

/etc/default/hostapd

也是需要备份的(如果此文件存在的话).

sudo cp /etc/default/hostapd /etc/default/hostapd.orig
sudo vi /etc/default/hostapd

然后添加如下内容(千万不要注释掉)

DAEMON_CONF=”/etc/hostapd/hostapd.conf”

安装一个不同版本的

/usr/sbin/hostapd

也是很有必要的,从这里下载, 根据以往经验最好在编辑之前做一个备份:

sudo cp /usr/sbin/hostapd /usr/sbin/hostapd.orig

删除原始文件, 因为接下来将会在下载章节将其替换掉.

cd /usr/sbin
sudo rm -f hostapd
sudo wget http://dl.dropbox.com/u/1663660/hostapd/hostapd

为新文件设置适当权限

sudo chown root:root hostapd
sudo chmod 755 hostapd

重启hostapd服务以激活设置

sudo service networking restart
sudo service hostapd restart

如果hostapd重启之后有问题就试一下如下命令查看结果看是否你是否能找出配置文件中的错误并将其修复.

sudo hostapd -d /etc/hostapd/hostapd.conf

如果你现在用另外一台设备扫描的话应该能够可以看到无线网络了.但是如果想要其他人连上的话还是需要一些设置的.特别是

dnsmasq

配置dnsmasq

老规矩,备份先,然后仔仔文本编辑器里打开

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vi /etc/dnsmasq.conf

将以下行的注释符去掉然后根据你自己的环境配置

domain-needed
interface=wlan0
dhcp-range=192.168.2.1,192.168.2.254,12h

重启

dnsmasq

使设置生效,

sudo service dnsmasq restart

用其他设备尝试连接本网络,但是还是不能连上因特网的.

设置因特网转发

设置IPv4转发

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

如果上述命令提示拒绝访问,试试下面这个:

sysctl -w net.ipv4.ip_forward=1

设置NAT

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

其他适配器和用法

我之所以选择Wi-Fi软件狗的主要原因是因为我可以连接我的cantenna,然后可以扩展我的信号到很远的距离.当然用一个无线适配器会非常的简单,但是现在我需要的是天线上的灵活性.

 

树莓派和路由:将树莓派打造成一台路由器,首发于极客范 – GeekFan.net

Adafruit的树莓派教程第十课:步进电机

概览

步进电机介于常规的直流电机(第九课)和伺服马达(第八课)之间。步进电机的优点在于它能够被精确定位,正向或反向一次性转动”一步”,并且也能够连续转动。

lesson10_1

这节课里,你将学到如何使用树莓派以及在第九课里已经用到的L239D马达控制芯片来控制一个步进电机。

这节课也将展示如何使用另外一种驱动芯片,ULN2803。

在这个项目里,你使用L239D或者ULN2803都是可以的。ULN2803更便宜一些,并且空余出来4个输出针脚你可以用来干点别的事,如果你两个芯片都没有,那还是选择ULN2803更好一些。

步进电机所需的电量很少并且所能承受的最大电流要小于直流电机和伺服马达。所以直接通过树莓派的5V输出并且保证电流是1A的情况下是可以直接驱动步进电机的。

你需要的:

5V步进电机

lesson10_2

L293D芯片

lesson10_3

ULN2803

lesson10_4

小块面包板

lesson10_5

树莓派

一把跳线

lesson10_6

硬件部分(L293D)

步进电机有5个引脚,所以L293D的两个半部都会用到。这意味着我们会在面包板上连接很多线。

步进电机的末端有5个接头。把跳线插入这些接头里这样就可以把电机连接在面包板上了。

lesson10_7

注意红色的引脚不连接任何线。

要通过引脚的颜色来区分而不是从它们伸出马达的位置。

<h4硬件部分(ULN2803)

如果你是用的是ULN2803,那步进电机的5个引脚都会被用到。

步进电机的末端有5个接头。把跳线插入这些接头里这样就可以把电机连接在面包板上了。

这个项目只适用于带有5个单级引脚的步进电机。

lesson10_8

尽管后面的代码里使用了GPIO的第18针,但只有在使用L293D芯片时才会用到它。

步进电机

步进电机使用锯齿状的转子和电磁配合推动转子一次转动”一步”。

lesson10_9

以正确的顺序给线圈通电,那么电机就会开始转动。转子的齿数与转动”一步”的角度精确对应。

我们现在使用的是8步步进电机,并且它有一个1:64的减速齿轮箱(reduction gearbox),所以它实际上转一圈需要 8*64=512步。

这节课里,我们不会使用红色的引脚。只有使用另外种类的不支持线圈电极反转的驱动芯片才会用到它。连接到两组线圈的中间意味着你就可以通过给左边或者右边的线圈通电来达到反转方向的目的而不用外接一个反转电流的电路。

因为我们使用的是支持电极反转的L293D芯片,所以我们就用不到红色的那个引脚了。可以通过这个芯片改变正负极来反转方向。

ULN2803

我们已经在第九课接触过了L293D芯片,而ULN2803也是一个非常有用的芯片。

lesson10_10

不像L293D有4个输出引脚可以反转电极,ULN2803有8个输出引脚可以把来自树莓派GPIO的输出信号放大转换成更大的电流。

与L293D不同的是,ULN2803只能输出一个方向的电流,所以这里我们要用到步进电机的红色引脚作为公用正极。并且每次只会用到线圈的一半,如粉色和橙色的部分,每次只有红色和粉色部分的线圈才会通电。

lesson10_11

软件部分

不过你用L293D还是ULN2803,软件部分都是一样的。

这个项目会用到Rpi.GPIO类库,如果你还没有装过,请参考第四课

要安装软件,你可以通过SSH连接到树莓派上然后通过下面的命令打开一个编辑器:

nano stepper.py

然后粘贴下面的代码,使用CTRL+X然后按一下Y保存。

lesson10_12

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

enable_pin = 18
coil_A_1_pin = 4
coil_A_2_pin = 17
coil_B_1_pin = 23
coil_B_2_pin = 24

GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)

GPIO.output(enable_pin, 1)

def forward(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(1, 0, 0, 1)
    time.sleep(delay)

def backwards(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 0, 1)
    time.sleep(delay)
    setStep(0, 1, 1, 0)
    time.sleep(delay)
    setStep(1, 0, 1, 0)
    time.sleep(delay)

def setStep(w1, w2, w3, w4):
  GPIO.output(coil_A_1_pin, w1)
  GPIO.output(coil_A_2_pin, w2)
  GPIO.output(coil_B_1_pin, w3)
  GPIO.output(coil_B_2_pin, w4)

while True:
  delay = raw_input("Delay between steps (milliseconds)?")
  steps = raw_input("How many steps forward? ")
  forward(int(delay) / 1000.0, int(steps))
  steps = raw_input("How many steps backwards? ")
  backwards(int(delay) / 1000.0, int(steps))

当步进电机不转动的时候,它也是处于激活状态的并且保持它的位置。这会耗电。如果你不需要步进电机保持它的位置,你可以调用setStep(0,0,0,0)来释放线圈。这样电机的转子就能自由转动并且不耗费电力了。

配置与测试

这个程序需要超级用户权限,所以要在ssh里受用下面的命令:

sudo python stepper.py

输入一个延时(5会是个合适的值)和转动的步数(512转一圈)。

lesson10_13

尝试减少延时来找到电机的最大速度吧。

Adafruit的树莓派教程第十课:步进电机,首发于极客范 – GeekFan.net

Adafruit的树莓派教程第九课:控制一个直流电机

概览

这节课我们来学习如何使用Python和L293D芯片控制直流电机的速度和转向。

lesson9_1

在第八课里,我们学习了如何使用小派产生脉冲来控制伺服马达的位置。这节课我们将使用脉冲和L293D马达控制芯片来控制一个直流电机的转速并交替变换它的旋转方向。

你需要的:

要完成这个项目,你需要下面一些东西。

1个树莓派
lesson9_2

1个树莓派扩展板
lesson9_3

一把公对公跳线
lesson9_4

1个小块面包板
lesson9_5

1个6V直流电机
lesson9_6

L293D马达控制芯片
lesson9_7

Adafruit Occidentalis 0.2及之后的操作系统
lesson9_8

4节5号或7号电池盒及电池
lesson8_8

PWM

PWM(Pulse Width Modulation,脉冲宽度调制)是一项用于控制电力的技术。在这里我们使用它来控制供给直流电机的电量及它的转速。

下面的图表展示了从树莓派的PWM针脚产生的脉冲信号。
lesson9_10

PWM针每1/500秒产生一次脉冲。脉冲的长度控制了直流电机所能获得的电量。没有脉冲电机就不会转动,一次短脉冲会使电机以很慢的速度转动。如果脉冲持续总长度一半的时间,那么它就会获得总电量一半的电量。

PWM核心模块

Adafruit与Sean Cross一起编写了一个核心模块被包含在了Occidentalis发行版里。更多的细节请参照这篇教程。如果你想在Raspbian或者其他发行版上使用这个模块,参考这里来把模块安装到你的环境里。

你已经在第八课里使用过了PWM与伺服马达核心模块,用于控制伺服马达。这一次,你将使用相同的模块来控制电机的转速。

这个模块使用文件类型的接口,你可以通过读写这些特定的文件来控制针脚输出进一步控制伺服电机的行为。这使得使用Python或者其他语言来编写该接口十分容易。

文件 – 描述
active – 1为激活,0为未激活。你可以通过读取它来查找输出针是否被激活,或者通过改写控制它的激活或未激活。
delayed – 如果设置为1,你对其他文件的改动不会起作用直到你使用上面的active来激活输出针。
mode – 改写文件来设置针脚是pwm,servo(伺服马达)还是audio(音频)。显然这里我们要设置为servo。注意这些针也会被小派的音频输出使用,所以你不能在使用声音的同时控制一个伺服马达。
frequency – 每秒产生的脉冲次数。
duty – 这个值应该介于0到100之间,代表了脉冲长度的百分比。数值越大,转速越快。

L293D

这是一个非常有用的芯片。它实际上可以独立控制两个电机。这节课我们将只使用芯片的一半针脚,在芯片右手边的大多数针脚用于控制第二个电机,但在树莓派上只有一个PWM输出针脚。

lesson9_11

L293D有两个+V的针脚(8和16)。+Vmotor(8)针为电机提供电力,+V(16)针作为芯片的逻辑针脚。我们将把第16针接到树莓派上然后把第8针接到电池盒上。

硬件部分

为什么我们要在这个项目里使用L293D芯片?有两个原因。第一个原因是小派似乎还没有强大到能够直接驱动一个电机并且这样做可能会损坏树莓派。

第二个原因是,在这篇教程里,我们即要控制电机的转速,也要控制电机的转向。要达到这一点,需要反转电机的电流方向,而L239D恰好就是被设计用来达到这一目的的,我们可以通过两个电机控制针脚实现。

lesson9_12

一小块面包板的大小很适合这篇教程。

软件部分

因为我们需要使用控制针脚(连接GPIO的第4针和第17针),所以我们也需要用到GPIO库。更多细节请参考第四课

有很多种方法能把下面的展示的代码弄到你的树莓派里。最简单的方法可能是使用SSH连接到小派上(参见第六课)然后使用下面的命令打开一个编辑器:

sudo nano motor.py

粘贴下面的代码,然后用Ctrl+X保存。

lesson9_13

代码在这:

import RPi.GPIO as io
io.setmode(io.BCM)

in1_pin = 4
in2_pin = 17

io.setup(in1_pin, io.OUT)
io.setup(in2_pin, io.OUT)

def set(property, value):
    try:
        f = open("/sys/class/rpi-pwm/pwm0/" + property, 'w')
        f.write(value)
        f.close()	
    except:
        print("Error writing to: " + property + " value: " + value)

set("delayed", "0")
set("mode", "pwm")
set("frequency", "500")
set("active", "1")

def clockwise():
    io.output(in1_pin, True)    
    io.output(in2_pin, False)

def counter_clockwise():
    io.output(in1_pin, False)
    io.output(in2_pin, True)

clockwise()

while True:
    cmd = raw_input("Command, f/r 0..9, E.g. f5 :")
    direction = cmd[0]
    if direction == "f":
        clockwise()
    else: 
        counter_clockwise()
    speed = int(cmd[1]) * 11
    set("duty", str(speed))

这个Python程序首先把两个GPIO针设置为输出针。然后定义了一个与第八课里面一样的为了使用方便的方法(“set”),用于写入PWM核心模块。后面我们将会用它设置PWM参数。

另外我们定义了两个方法,”clockwise”和”counter_clockwise”,它们通过控制输出针达到改变电机转向的目的。

如果两个输出针都置为高或者置为低,那么电机将会停止。如果一针为高一针为低那么电机将朝一个方向转动,如果两针的电平反转,那么电机的转向也将反转。程序循环等待用户输入一个字母(“f”或”r”)以及一个0到9之间的数字。字母设置了电机的转向数字设置了转速,数字将会乘以11然后变成一个0到99之间PWM库所期望的百分比值。

测试&配置

要运行这个程序,你需要超级用户权限,所以使用下面的命令吧:

sudo python motor.py

命令行将会提示你输入两个字符。试试下面的命令:

$sudo python motor.py
Command, f/r 0..9, E.g. f5 :f9
Command, f/r 0..9, E.g. f5 :r4
Command, f/r 0..9, E.g. f5 :

Adafruit的树莓派教程第九课:控制一个直流电机,首发于极客范 – GeekFan.net

Adafruit的树莓派教程第八课:使用伺服马达

概览

这节课我们来学习如何使用Python来控制一个伺服马达。

lesson8_1

伺服马达受不同长度的脉冲控制。这需要相当准确的定时。树莓派上有一针能通过硬件产生脉冲,而不需要依靠操作系统。Occidentalis系统有一个界面可以使用这一针来控制伺服马达。

你需要的:

  • 1个树莓派
    lesson8_2
  • 1个扩展板和1条26针的IDC电缆
    lesson8_3
  • 1把公对公的跳线
    lesson8_4
  • 1块小型面包板
    lesson8_5
  • 1个伺服马达
    lesson8_6
  • Adafruit Occidentalis 0.2或之后版本的操作系统发行版
    lesson8_7
  • 5号或7号电池座及4节电池
    lesson8_8

伺服马达

伺服马达的状态由脉冲的长度控制。伺服马达预期每20毫秒接受一次脉冲。如果脉冲的高电平持续1毫秒,那么伺服马达不会转动,如果是1.5毫秒,那它将会转过90度,如果高电平持续2毫秒,那它将会转动180度。

lesson8_9

伺服马达的终点位置可能不同,许多伺服马达只能转动大约170度。你也可以购买能”连续”旋转360度的伺服马达。

PWM与伺服马达核心模块(The PWM and Servo Kernel Module)

Adafruit与Sean Cross一起编写了一个核心模块被包含在了Occidentalis发行版里。更多的细节请参照这篇教程。如果你想在Raspbian或者其他发行版上使用这个模块,参考这里来把模块安装到你的环境里。

这个模块被称为PWM与伺服马达(PWM and Servo)因为在控制伺服马达的同时该模块可以产生PWM(Pulse Width Modulation,脉冲宽度调制)信号,(与额外电源配合)可被用于控制马达的功率或灯光亮度。这节课我们不会使用PWM。

PWM与伺服马达模块使用一种文件类型的接口,你可以通过读取和写入特殊的文件来控制输出针脚和伺服马达的行为。这使得使用Python或者其他语言来编写该接口十分容易。

用于驱动伺服马达的所涉及到的文件列在下方。所有文件可以在树莓派的/sys/class/rpi-pwm/pwm0/目录下找到。

文件 – 描述
active – 1为激活,0为未激活。你可以通过读取它来查找输出针是否被激活,或者通过改写控制它的激活或未激活。
delayed – 如果设置为1,你对其他文件的改动不会起作用直到你使用上面的active来激活输出针。
mode – 改写文件来设置针脚是pwm,servo(伺服马达)还是audio(音频)。显然这里我们要设置为servo。注意这些针也会被小派的音频输出使用,所以你不能在使用声音的同时控制一个伺服马达。
servo_max – 改写这个文件来设置伺服马达的最大角度。我们把它设置为180这样我们就可以很容易的把伺服马达置成0到180度之间的位置了。
servo – 改写这个文件将会设置伺服马达的脉冲长度到一个与servo_max有关的值。比如我们把它设置为90,servo_max的值为180,那伺服马达会保持在中间位置。

硬件

在小派上只有一个针脚能够产生这样的脉冲(GPIO 18针)。它将与伺服马达的控制针脚相连。伺服马达的电源由外接电池控制,因为使用小派的电源可能会在伺服马达开始转动的瞬间产生巨大的电流,导致小派崩溃。伺服马达需要4.8-6V的直流电来驱动马达,但是信号的逻辑电平(脉冲输出)可以是3.3V,所以可以直接把信号线直接连到GPIO的输出针上。

lesson8_10

小派扩展板用于连接树莓派和面包板,如果你之前没有使用过扩展板,你可以参考这个系列教程的第四节

伺服马达通常有一个三针的插座。红色和棕色用于供电(红色为正极)并且第三针黄色或橘黄色的用于控制信号。要把插座连接到面包板上,你需要使用公对公的跳线。

lesson8_11

软件

这个项目不需要安装任何Python库。

下面列出的程序使伺服马达前后摆动:

# Servo Control
import time
def set(property, value):
	try:
		f = open("/sys/class/rpi-pwm/pwm0/" + property, 'w')
		f.write(value)
		f.close()	
	except:
		print("Error writing to: " + property + " value: " + value)

def setServo(angle):
	set("servo", str(angle))

set("delayed", "0")
set("mode", "servo")
set("servo_max", "180")
set("active", "1")

delay_period = 0.01

while True:
	for angle in range(0, 180):
		setServo(angle)
		time.sleep(delay_period)
	for angle in range(0, 180):
		setServo(180 - angle)
		time.sleep(delay_period)

为了写文件方便,我写了一个工具方法叫做”set”。第一个参数是要被写入的文件名(属性名),第二个参数是要被写入的值。

在程序的开始部分写入了几个文件来关闭delay模式,设置mode为’servo’,设置伺服马达的最大角度为180度最后把输出针设置为激活状态。

一个叫做delay_period的变量用于存储伺服马达每一步的间隔秒数。

while循环会一直进行直到按下CTRL+C终止。在while循环中有两个相似的for循环,第一个从0到180度递增旋转角度,第二个刚好相反,从180到0度递减。

要安装个软件,使用SSH连接到小派上然后输入下面的命令:

nano servo.py

粘贴上面的代码然后使用CTRL+X然后按一下Y保存。

lesson8_12

然后在SSH窗口里输入下面的命令来使程序运行:

python servo.py

然后伺服马达就开始转动啦。

测试&配置

如果你想让马达转快一些,尝试改变delay_period到一个更小的值,例如0.001,如果想慢一些,把它增大到0.1.

如果你想控制多个伺服马达,像Adafruit I2C 16 channel servo / pwm controller里一样。你可以通过这篇教程来进行了解。

Adafruit的树莓派教程第八课:使用伺服马达,首发于极客范 – GeekFan.net

[转]无题

总有一天,会有一个人,看你写过的所有状态,读完写的所有微博,看你从小到大的所有照片,甚至去别的地方寻找关于你的信息,试着听你听的歌,走你走过的地方,看你喜欢看的书,品尝你总是大呼好吃的东西……只是想弥补上,他迟到的时光。

【科普】雾、霭和霾的区别[转载]

对于网上对霾的报道越来越多,觉得有必要了解一下

雾、霭和霾的区别 原文:http://amuseum.cdstm.cn/AMuseum/atmosphere/main/k1116.html
雾:大量微小 (通常在显微镜下才能分辨) 水滴悬浮于空气中的现象,它一般会使地面的水平能见度降低到1000米以下。
霭:悬浮在空气中的微小水滴或湿的吸湿性微粒,它能使地面的能见度降低。
霾:空气中悬浮着的极小的、干的微粒,这些微粒肉眼看不到,数量却非常多,足以使天空变得浑浊。
这三种现象都是由空气中悬浮的微粒所造成的,其结果都是使水平能见度下降或使天空变得浑浊。但在这三种现象中,悬浮的微粒是不一样的。雾是由悬浮的水滴形成;霾是由悬浮的干的微粒形成的;而霭是介于这二者之间,是由微小水滴或湿的吸湿性微粒所形成的,可以说是从霾到雾的过渡阶段。正是由于悬浮粒子的不同,造成它们来源、形成的过程及其物理化学特性都不同。
霾发生时相对湿度不大。霾的垂直厚度比较厚,可达1-3公里,一般霾的日变化不明显。雾与霾的区别在于发生霾时相对湿度不大,而雾中的相对湿度是饱和的(如有大量凝结核存在时,相对湿度不一定达到100%就可能出现饱和)。一般相对湿度小于80%时的大气混浊视野模糊导致的能见度恶化是霾造成的,相对湿度大于90%时的大气混浊视野模糊导致的能见度恶化是雾造成的,相对湿度介于80%~90%之间时的大气混浊视野模糊导致的能见度恶化是霾和雾的混合物共同造成的,但其主要成分是霾。

千万不能“不懂装懂”的英语大盘点

Sporting house 妓院(不是体育室)
Dead president 美钞(不是死了的总统)
Lover 情人(不是爱人)
Busboy 餐馆勤杂工(不是公汽售票员)
Busybody 爱管闲事的人(不是大忙人)
Dry goods 纺织品 谷物(不是干货)
Heart man 换心人(不是有心人)
Mad doctor精神病科医生(不是发疯的医生)
Eleventh hour最后时刻(不是十一点)
Blind date(由第三者安排的)男女初次见面(并非盲目的约会或者是瞎约会)
Personal remark人身攻击(并非个人评论)
Sweet water淡水(不是糖水或者甜水)
Confidence man骗子(不是信得过的人)
Criminal lawyer 刑事律师(不是犯罪的律师)
Service station加油站(不是服务站)
Rest room厕所(不是休息室)
Dressing room化妆室(不是试衣间或者更衣室)
Horse sense常识(不是马的感觉)
Capital idea 好主意(不是资本主义思想)
Familiar talk 庸俗的交谈(不是熟悉的谈话)
Black tea红茶
Black art 妖术(不是黑色艺术)
Black stranger 完全陌生的人(不是陌生的黑人)
White coal (作动力来源用的)水
White man忠实可靠的人(不是皮肤白色的人)
Yellow book黄皮书(法国政府报告书,以黄纸为封,不是黄色书籍)
Red tape 官僚习气(不是红色带子)
Green hand 新手
Blue stocking 女学者,女才子(不是蓝色长筒袜)
China policy 对华政策(不是中华政策)
Chinese dragon 麒麟(不是中国龙)
American beauty 一种玫瑰,名叫美丽动人(不是美国美女)
English disease 软骨病(不是英国病)
Indian summer 愉快宁静的晚年(不是印度的夏日)
Greek gift 害人的礼品(不是希腊的礼物)
Spanish athlete 吹牛的人(不是西班牙的运动员)
French chalk 滑石粉(不是法国粉笔)
Pull ones leg 开玩笑(不是拉后腿)
In ones birthday suit 赤身裸体(不是穿着生日礼服)
Eat ones words 收回前言(不是食言)
an apple of love西红柿(不是“爱情之果”)
American beauty一种玫瑰,名为“美国丽人”(不是“美国美女”)
be taken in受骗,上当(不是“被接纳”)
bring down the house博得全场喝彩(不是“推倒房子”)
black tea红茶(不是“黑茶”)
black art妖术(不是“黑色艺术”)
black stranger完全陌生的人(不是“陌生的黑人”)
busboy餐馆勤杂工(不是“公汽售票员”)
busybody爱管闲事的人(不是“大忙人”)
blue stocking女学者、女才子(不是“蓝色长统袜”)
blind date(由第三者安排的)男女初次会面(并非“盲目约会”或“瞎约会”)
capital idea好主意(不是“资本主义思想”)
China policy对华政策(不是“中国政策”)
Chinese dragon麒麟(不是“中国龙”)
confidence man骗子(不是“信得过的人”)
criminal lawyer刑事律师(不是“犯罪的律师”)
dead president美钞(上印有总统头像)(并非“死了的总统”)
dry goods(美)纺织品;(英)谷物(不是“干货”)
dressing room化妆室(不是“试衣室”或“更衣室”)
eat one&0#39;s words收回前言(不是“食言”)
English disease软骨病(不是“英国病”)
eleventh hour最后时刻(不是“十一点”)
familiar talk庸俗的交谈(不是“熟悉的谈话”)
French chalk滑石粉(不是“法国粉笔”)
Greek gift害人的礼品(不是“希腊礼物”)
green hand新手(不是“绿手”)
handwriting on the wall不祥之兆(不是“大字报”)
have a fit勃然大怒(不是“试穿”)
have the heart to do(用于否定句)忍心做……不是“有心做”或“有意做”)

喝水时间表

健康小贴士:《喝水时间表》

专家推荐了一个“喝水行程表”,提供给您以作参考。
※ 6:30经过一整夜的睡眠,身体开始缺水,起床之际先喝250cc的水,可帮助肾脏及肝脏解毒。
※ 8:30清晨从起床到办公室的过程,时间总是特别紧凑,情绪也较紧张,身体无形中会出现脱水现象,所以到了办公室后,先别急着泡咖啡,给自己一杯至少250cc的水!
※ 11:00在冷气房里工作一段时间后,一定得趁起身动动的时候,再给自己一天里的第三杯水,补充流失的水分,有助于放松紧张的工作情绪!
※ 12:50用完午餐半小时后,喝一些水,可以加强身体的消化功能。
※ 15:00以一杯健康矿泉水代替午茶与咖啡等提神饮料吧!能够提神醒脑。
※ 17:30下班离开办公室前,再喝一杯水,增加饱足感,待会吃晚餐时,自然不会暴饮暴食。
※ 22:00睡前1至半小时再喝上一杯水!今天已摄取2000cc水量了。不过别一口气喝太多,以免晚上上洗手间影响睡眠质量。

Comments

BOBO J – 4/11/2010 8:25:23 PM

原来你就是传说中的水仙花同学~~哈哈

我听的一是日语歌了,我只是在听日本MM喝英文歌哈~