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

php 错误

Php运行的时候,提示下列错误

PHP Deprecated: Comments starting with ‘#’ are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0

后google解决,纯记录。

#注释已经去掉,换成分号就可以了

find /etc/php5/cli/conf.d/ -name “*.ini” -exec sed -i -re ‘s/^(\s*)#(.*)/\1;\2/g’ {} \;

偶得 – 开缄如见汝,读罢转愁予

得林茂之书并诗(明·冒愈昌)

五言律诗 押鱼韵
不谓三年别,能来一纸书。开缄如见汝,读罢转愁予。

淮水月常在,秋风柳易疏。更怜诗句好,吟望意何如。

 

群里有新人加入,10多年没见,见语如见人。

在信件还是主要沟通工具的时候,见字如晤是最常见的问候语,简单一句话,拉近了两个人之间的时间和空间距离。

当年我也是从写信开始的。从每月一封,到每周一封,甚至每周两封。

电话、网络的普及,方便了联系,同时也拉开了人之间的距离。科技的出现给人类带来了进步,也让人变得更加寂寞。

像愈昌一样,三年得到友人一笺,应该是悲喜交加吧。

[转]无题

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

heart bleeding 修复

前段时间,让整个互联网都震动的heart bleeding漏洞,一下子所有https加密网站都受到影响。

因为我的加密网站用的不多,所以没管它,今天想起来就来补这个漏洞了。

下载openssl包,编译,安装就可以了。

但是编译过程中出现了点问题,上网找了很久,用下面的方法就可以了

./config

make clean

make zlib

make

make install

然后which openssl

openssl version -a

看看最后的时间是不是2014年4月7号或者8号,如果是之前的版本就不对了。

通过这两个网址可以检测。

https://lastpass.com/heartbleed/                   <!–貌似这个内容更多。

https://filippo.io/Heartbleed/     <!–这个好像被墙了。

【转载】java 时间戳跟PHP时间戳的转换

java 时间戳和PHP时间戳 的转换

原文地址:http://www.myexception.cn/php/1032678.html
总结一下java 时间戳和PHP时间戳 的转换问题:
由于精度不同,导致长度不一致,直接转换错误。
JAVA时间戳长度是13位,如:1294890876859
PHP时间戳长度是10位, 如:1294890859

主要最后三位的不同,JAVA时间戳在PHP中使用,去掉后三位,如:1294890876859-> 1294890876 结果:2011-01-13 11:54:36
echo date(‘Y-m-d H:i:s’,’1294890876′);
PHP时间戳在JAVA中使用,最后加三位,用000补充,如:1294890859->1294890859000
结果:2011-01-13 11:54:19
SimpleDateFormat df = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String dateTime = df.format(1294890859000L);
System.out.println(df);

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

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

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

風の記憶

今天朋友推荐了熊木杏里的一首小清新的歌《风中的记忆》,循环听了一晚上,堪称治愈系的歌曲。

熊木 杏里(くまき あんり、1982年1月27日 – )は、日本のシンガーソングライター・作曲家。長野県更埴市(現・千曲市)出身。身長153cm。血液型B型。関東国際高等学校を経て目白学園女子短期大学卒。名前の由来は長野県更埴市(現・千曲市)の観光名所「あんずの里」より採られた。愛称は「あんりこ」。

熊木杏里
熊木杏里

風の記憶

風の記憶

熊木杏里(くまきあんり)

  • 歌手:熊木杏里
  • 作詞:熊木杏里
  • 作曲:熊木杏里

青い地球が 私の胸に
夜に浮かぶ 満月をくれた

大地の花が 私の胸に
沈まない 太陽をくれた

人と出会う横には いつかある
いつか分かれに変わる 夕凪が

風をくぐって 海を越えたら
君が 宝島になる

ひとかけらの夢は
群れを帯びてる 魚のように

よこぎってゆく季節
君と叶える奇跡

明日の上を鳥たちが飛ぶ
夜明けまでに、間に合うように

船の汽笛は 始まりの音
見えない矢印を 浮かべて

君と過ごした 短い記憶が
いつか長く伸びて 迎えに来る

風の頼りに 目を閉じた時
君が宝島になる

夢を飾りながら
珊瑚のように 波に揺られて

気がついてゆく 季節
一続きの この旅

中文歌词:引自  饮水 http://www.douban.com/group/topic/2582717/

蔚蓝的地球把夜晚隐现的满月悬在我的心中。
大地的花朵将永不落山的太阳挂在我的心中。
与人的邂逅总是伴随着不知何时就会到来的分别
如同傍晚平静的海面(不知何时就会消逝)
等我穿过风,渡过海
你却化身为(那神秘的)金银岛
(我有一个)小小的梦想
(希望)自己能像鱼群中的(一尾小)鱼那样
在那迁徙的季节
与你一起创造奇迹
仿佛为了追赶黎明似的
鸟儿们在明天的天空中飞翔
船上汽笛发出启航的鸣叫
仿佛在无形中指引着方向
与你一同度过的短暂记忆
不知在何时延展开来 迎向我
(当我)凭着风 闭上眼睛时
你就是我寻觅的金银岛
就像那点缀梦想的珊瑚那样
在波涛中摇摆
(我)在这缓慢体会的季节里
继续着这样的旅程