Overview
光敏电阻是是利用光电导效应的一种特殊的电阻,它的电阻和光线的强弱有直接关系,光强度增加,则电阻减小;光强度减小,则电阻增大。利用这一特性可以做很多东西,比如照相机、草坪灯、声光控开关、路灯自动开关等。本项目我们在树莓派上用光敏电阻、继电器等器件完成路灯自动开关制作。当光照比较暗的时候继电器闭合点亮LED灯;光照变亮的时候,继电器断开,LED熄灭。
Parts
光敏电阻 x1
|
|
Pi3 x1
|
|
LED x1
|
|
继电器 x1
|
|
10K电阻 x1
|
|
1K电阻 x1
|
|
跳线若干
|
|
面包板 x1
|
|
MCP2008 x1
(MCP3204 x1)
|
Hardware
Raspberry Pi是一个出色的微型计算机,你可以使用它来控制数字输入和输出。但是当你想用它来处理模拟信号,例如像热敏电阻、电位器等模拟传感器输出时候,Raspberry Pi就有些力不从心了,就需要借助模数转换芯片将模拟信号转换成数字信号。本项目中利用MCP3008(or MCP3204)把光敏电阻输出的电压信号转换成数字信号,Pi根据转换后的数值大小控制继电器通断,从而控制灯亮灭。MCP3008是一款8通道10位精度的模数转换芯片;MCP3204是一款4通道12位精度的模数装换芯片。一路继电器模块是高电平有效,即控制器(Pi)给继电器一个高电平,继电器导通,继电器模块上的LED指示灯亮起;低电平断开,继电器模块上的LED指示灯灯熄灭。
MCP3008接线图:
MCP3204接线图:
Software
(1)在开始编写程序前需要对我们的树莓派Python库文件进行安装设置,此处要用到GPIO库,先安装GPIO库,打开终端,更新apt-get软件安装包列表(注意必须要在网络连接正常情况下),然后执行安装命令来安装raspberry-gpio-python包(如果已经安装请跳过此步),具体指令如下:
1)更新源
pi@raspberrypi ~ $ sudo apt-get update
2)安装python
pi@raspberrypi ~ $ sudo apt-get install python-dev
3)安装python-pip(python-pip是一个管理python软件包的工具)
pi@raspberrypi ~ $ sudo apt-get install python-pip
4)利用pip安装rpi.gpio
pi@raspberrypi ~ $ sudo pip install rpi.gpio
(2)测试是否安装成功
通过上述几个步骤,已经安装好了Python与树莓派外置硬件GPIO库文件,在接下来的程序里就可以直接调用代码了。
(3)编写代码
你可以将Pi接到一台显示器上编写代码,也可以通过SSH连接到你的Pi编写代码
1)在Pi中任一目录下(如/home/pi/)新建一个led.py文件
pi@raspberrypi ~ $ sudo touch raspi-adc-photo.py
2)打开raspi-adc-photo.py文件
pi@raspberrypi ~ $ sudo nano raspi-adc-photo.py
3)向raspi-adc-photo.py中写入如下代码
import time #importing the time module import os #importing the os module import RPi.GPIO as GPIO #importing the RPi.GPIO module GPIO.cleanup() #clean up at the end of your script GPIO.setmode(GPIO.BCM) #to specify whilch pin numbering system #read SPI data from MCP3008(or MCP3204) chip,8 possible adc's (0 thru 7) def readadc(adcnum, clockpin, mosipin, misopin, cspin): if ((adcnum > 7) or (adcnum < 0)): return -1 GPIO.output(cspin, True) GPIO.output(clockpin, False) # start clock low GPIO.output(cspin, False) # bring CS low commandout = adcnum commandout |= 0x18 # start bit + single-ended bit commandout <<= 3 # we only need to send 5 bits here for i in range(5): if (commandout & 0x80): GPIO.output(mosipin, True) else: GPIO.output(mosipin, False) commandout <<= 1 GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout = 0 # read in one empty bit, one null bit and 10 ADC bits for i in range(12): GPIO.output(clockpin, True) GPIO.output(clockpin, False) adcout <<= 1 if (GPIO.input(misopin)): adcout |= 0x1 GPIO.output(cspin, True) adcout >>= 1 # first bit is 'null' so drop it return adcout # change these as desired - they're the pins connected from the # SPI port on the ADC to the Cobbler SPICLK = 11 SPIMISO = 9 SPIMOSI = 10 SPICS = 8 # set up the SPI interface pins GPIO.setup(SPIMOSI, GPIO.OUT) GPIO.setup(SPIMISO, GPIO.IN) GPIO.setup(SPICLK, GPIO.OUT) GPIO.setup(SPICS, GPIO.OUT) #relay port to the cobbler Relay_pin = 26 #set up the relay port GPIO.setup(Relay_pin,GPIO.OUT) #disable the gpio warning information GPIO.setwarnings(False) # photoresistor connected to adc #0 photo_ch = 0; #last_read = 0 # this keeps track of the last potentiometer value #tolerance = 5 # to keep from being jittery we'll only change # volume when the pot has moved more than 5 'counts' print"______________________________________________________________________" while True: photo_value = readadc(photo_ch, SPICLK, SPIMOSI, SPIMISO, SPICS) if(photo_value<=300): print "It`s dark,turn on the light" GPIO.output(Relay_pin,True) else: print "dawn,turn off the light" GPIO.output(Relay_pin,False) print "photo_value=", photo_value time.sleep(0.5) #GPIO.cleanup()
也可以通过如下命令下载得到:
4)保存退出
编写完程序后,键盘输入”Ctrl X”,提示是否保存退出,键入Y然后回车就可以保存退出了
(5)运行程序,查看效果
pi@raspberrypi ~ $ sudo python ./raspi-adc-photo.py
Overview
本文主要介绍如何用树莓派实现简易防人体入侵安防系统,树莓派周期性检测人体红外检测模块输出的高低电平,当有人入侵时候蜂鸣器报警.
Experimental Parts
Pi3 x1
|
|
人体红外感性模块 x1
|
|
有源蜂鸣器 x1
|
|
杜邦线 x3
|
在连接电路的时候特别注意不要把电源正负极接反,否则会烧毁Pi和传感器模块,上图中蜂鸣器模块引脚顺序可能跟实物引脚顺序不一样,在接线的时候需要对照实物连线。
其中蜂鸣器是低电平有效的。
下面给出人体红外检测模块、继电器模块的原理图。
Motion sensor Schematic
Motion sensor Interface Layout
The two potentiometer can adjust delay time and sensitivity, as the follow picture:
Software
1)在/home/pi路径下用nano新建一个motionsensor-test.py文件
sudo nano motionsensor-test.py
2)向motionsensor-test.py中写入代码
import RPi.GPIO as GPIO import time M_pin = 18 #select the pin for motionsensor B_pin = 26 #select the pin for buzzer def init(): GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(M_pin,GPIO.IN) GPIO.setup(B_pin,GPIO.OUT) pass def buzzer(): while GPIO.input(M_pin): GPIO.output(B_pin,GPIO.LOW) time.sleep(0.5) GPIO.output(B_pin,GPIO.HIGH) time.sleep(0.5) def detct(): for i in range(101): if GPIO.input(M_pin): print "Someone is closing!" buzzer() else: GPIO.output(B_pin,GPIO.HIGH) print "Nobody!" time.sleep(2) time.sleep(5) init() detct() GPIO.cleanup()
写完代码后,键盘输入Ctrl X根据提示输入Y保存退出
示例代码可以通过下面命令下载得到
sudo wget --no-check-certificate http://osoyoo.com/driver/motionsensor-test.py
3)运行脚本
sudo python ./motionsensor-test.py
屏幕上打印出了提示信息,检测到人体移动的时候,蜂鸣器响起。
Overview
本文中将介绍如何用树莓派和电压传感器设计电压表,把测量到的读数实时打印在终端上。
Parts
本项目将用到如下器件
Pi3 x1
|
|
电压传感器模块 x1 | |
模数转换器 x1 | |
面包板 x1 | |
公对公跳线 x若干 | |
公对母跳线 x若干 |
Hardware
电压传感器模块基于电阻分压原理所设计,能使端子接口输入的电压缩小5倍,由于树莓派GPIO工作电压一般是3.3V,所以模块输入电压最好低于3.3Vx5=16.5V),模块输出接口:”+”接3.3V, “-“接GND,”s”接ADC的AD输入端;DC输入接口:端子正极接VCC,负极接GND。如图
Raspberry Pi只能处理数字信号,需要处理的是电压传感器模块输出的电压信号,由于电压信号是模拟信号,所以需要使用ADC,本项目使用MCP3008作为ADC芯片,这是一片很常用的ADC芯片。
Software
可以把pi直接接到显示器上,也可以通过SSH方式远程登录Pi。
1)编写代码
在/home/pi路径下用nano新建一个voltage.py(名字随意,你喜欢就好!)
sudo nano voltage.py
并往新建的文件中写入示例代码,代码可以通过执行下面的shell命令得到
sudo wget --no-check-certificate http://osoyoo.com/driver/voltage.py
2)执行python程序
sudo python ./voltage.py
3)测试
将模块的DC输入端子接到电压小于16.5V的电源上,屏幕会输出检测到的电压。例如将DC输出口接到3.3V电源上,屏幕会输出3.29V,会有一点的误差,毕竟是通过ADC后得到的电压值。
Overview
本文介绍在树莓派如何使用火焰传感器设计火焰探测器。火焰传感器对波长在 760 纳米~1100 纳米范围内的光源,模块具有数字和模拟信号双路输出,当检测到有火焰时候数字输出口输出高电平,模拟输出口输出电压与火焰大小有关,火焰 越大电压越高。模块的灵敏度可通过可调电位器调节。
Experimental Parts
为了完成设计需要用到一下器件
Pi3 x1
|
|
火焰传感器模块 x1 | |
模数转换器 x1 | |
面包板 x1 | |
公对公跳线 x若干 | |
公对母跳线 x若干 |
Hardware
火焰传感器模块 可以检测火焰或者波长在 760 纳米~1100 纳米范围内的光源, 打火机测试火焰距离为 80cm,对火焰越大,测试距离越远 , 探测角度 60 度左右,对火焰光谱特别灵敏 。其灵敏度可以通过可调继电器调节,工作电压为3.3V-5V之间,本文用3.3V给火焰模块供电。与树莓派具体连接参考下图。
在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的Pi和模块。模块的上的GND接Pi上的0V;模块上的VCC接3.3V。对于如何识别Pi的IO口请参考这篇文章: How to read Raspberry Pi i/o pin diagram (GPIO pin graph)
Software
可以把pi直接接到显示器上,也可以通过SSH方式远程登录Pi。
1)编写代码
在/home/pi路径下用nano新建一个flame.py(名字随意,你喜欢就好!)
sudo nano flame.py
并往新建的文件中写入示例代码,代码可以通过执行下面的shell命令得到
sudo wget --no-check-certificate http://osoyoo.com/driver/flame.py
2)执行python程序
sudo python ./flame.py
3)测试
程序运行起来后,用打火机对着模块打火,如果模块检测到火光,模块上的绿色LED指示灯会亮起来,同时屏幕上会打印出提示信息;如果没有打火机对着模块打火,绿色指示灯不亮,或者没有对着模打火绿色指示灯就已经亮起,可以通过调节可调电位器进行校正。正常情况下会输出如下信息。