Category :Rapsberry Pi Projects

Byamber

长夜漫漫,不再黑暗

Overview

光敏电阻是是利用光电导效应的一种特殊的电阻,它的电阻和光线的强弱有直接关系,光强度增加,则电阻减小;光强度减小,则电阻增大。利用这一特性可以做很多东西,比如照相机、草坪灯、声光控开关、路灯自动开关等。本项目我们在树莓派上用光敏电阻、继电器等器件完成路灯自动开关制作。当光照比较暗的时候继电器闭合点亮LED灯;光照变亮的时候,继电器断开,LED熄灭。

DSC_5460

Parts

LACC2006ADx3
光敏电阻 x1
PI
Pi3 x1
LACC2006AD-24
LED x1
BMP180
继电器 x1
LACC2006AD-26
10K电阻 x1
LACC2006AD-26
1K电阻 x1
LACC2006AD-31
跳线若干
LACC2006AD-12
面包板 x1
MCP3008
MCP2008 x1
(MCP3204 x1)

Hardware

Raspberry Pi是一个出色的微型计算机,你可以使用它来控制数字输入和输出。但是当你想用它来处理模拟信号,例如像热敏电阻、电位器等模拟传感器输出时候,Raspberry Pi就有些力不从心了,就需要借助模数转换芯片将模拟信号转换成数字信号。本项目中利用MCP3008(or MCP3204)把光敏电阻输出的电压信号转换成数字信号,Pi根据转换后的数值大小控制继电器通断,从而控制灯亮灭。MCP3008是一款8通道10位精度的模数转换芯片;MCP3204是一款4通道12位精度的模数装换芯片。一路继电器模块是高电平有效,即控制器(Pi)给继电器一个高电平,继电器导通,继电器模块上的LED指示灯亮起;低电平断开,继电器模块上的LED指示灯灯熄灭。

MCP3008接线图:

Untitled Sketch_MCP3008

MCP3204接线图:

Untitled Sketch_MCP32041

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)测试是否安装成功

图片4

通过上述几个步骤,已经安装好了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然后回车就可以保存退出了

2017-03-14-102304_1824x984_scrot

(5)运行程序,查看效果

pi@raspberrypi ~ $ sudo python ./raspi-adc-photo.py

2017-03-14-102441_1824x984_scrot用手遮住光敏电阻可以听到继电器闭合声,灯亮起;用光照着光敏电阻,也能听到继电器断开的声音,灯熄灭。

Bynora

Design a barometer through a raspberry pi board and BMP180 Sensor

1、实验目的:

BMP180是一款精度高、功耗低、体积小压力传感器,本实验我们利用Raspberry pi 驱动BMP180数字气压传感器模块,检测环境温度、气压、海拔等值,并通过arduino IDE的监控终端打印出来。

2、实验器材:
1 x raspberry pi
1 x BMP180
1 x 跳线若干

3、实验电路:
180bmp_bb

4、实验代码:
Software Installation:

1)download BMP Python Library by typing following command:

wget http://osoyoo.com/driver/Adafruit_Python_BMP.zip

unzip Adafruit_Python_BMP.zip

2)install BMP Python Library

cd Adafruit_Python_BMP

sudo python setup.py install

3) test BMP180 program

cd examples

sudo python simpletest.py

4) result

after running code, you will see result as per following picture:

resault

DSC_6787

Byamber

基于Raspberry Pi的简易安防系统

Overview

本文主要介绍如何用树莓派实现简易防人体入侵安防系统,树莓派周期性检测人体红外检测模块输出的高低电平,当有人入侵时候蜂鸣器报警.

DSC_5470

Experimental Parts

PI
Pi3 x1
Digital-Motion-Sensor
人体红外感性模块 x1
18
有源蜂鸣器 x1
19
杜邦线 x3

Circuit Graph
硬件连线很简单,如图。
Untitled Sketch_buzzer

在连接电路的时候特别注意不要把电源正负极接反,否则会烧毁Pi和传感器模块,上图中蜂鸣器模块引脚顺序可能跟实物引脚顺序不一样,在接线的时候需要对照实物连线。

其中蜂鸣器是低电平有效的。

下面给出人体红外检测模块、继电器模块的原理图。

Motion sensor Schematic

schematic

Motion sensor Interface Layout

The two potentiometer can adjust delay time and sensitivity, as the follow picture:

adjust

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 http://osoyoo.com/driver/motionsensor-test.py

3)运行脚本

sudo python ./motionsensor-test.py

屏幕上打印出了提示信息,检测到人体移动的时候,蜂鸣器响起。

2017-03-23-064257_1824x984_scrot

Byamber

用树莓派设计一个电压表

Overview

本文中将介绍如何用树莓派和电压传感器设计电压表,把测量到的读数实时打印在终端上。

DSC_5505

Parts

本项目将用到如下器件

PI
Pi3 x1
3
电压传感器模块 x1
MCP3008
模数转换器 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

电压传感器模块基于电阻分压原理所设计,能使端子接口输入的电压缩小5倍,由于树莓派GPIO工作电压一般是3.3V,所以模块输入电压最好低于3.3Vx5=16.5V),模块输出接口:”+”接3.3V, “-“接GND,”s”接ADC的AD输入端;DC输入接口:端子正极接VCC,负极接GND。如图
3

Raspberry Pi只能处理数字信号,需要处理的是电压传感器模块输出的电压信号,由于电压信号是模拟信号,所以需要使用ADC,本项目使用MCP3008作为ADC芯片,这是一片很常用的ADC芯片。

voltage_bb

Software

可以把pi直接接到显示器上,也可以通过SSH方式远程登录Pi。

1)编写代码

在/home/pi路径下用nano新建一个voltage.py(名字随意,你喜欢就好!)

sudo nano voltage.py

并往新建的文件中写入示例代码,代码可以通过执行下面的shell命令得到

sudo wget http://osoyoo.com/driver/voltage.py

2)执行python程序

sudo python ./voltage.py

3)测试

将模块的DC输入端子接到电压小于16.5V的电源上,屏幕会输出检测到的电压。例如将DC输出口接到3.3V电源上,屏幕会输出3.29V,会有一点的误差,毕竟是通过ADC后得到的电压值。

2017-04-05-032458_1824x984_scrot

Byamber

Design a flame detector through a raspberry pi board and flame sensor

Overview

本文介绍在树莓派如何使用火焰传感器设计火焰探测器。火焰传感器对波长在 760 纳米~1100 纳米范围内的光源,模块具有数字和模拟信号双路输出,当检测到有火焰时候数字输出口输出高电平,模拟输出口输出电压与火焰大小有关,火焰 越大电压越高。模块的灵敏度可通过可调电位器调节。

DSC_5501

Experimental Parts

为了完成设计需要用到一下器件

PI
Pi3 x1
EASM101600
火焰传感器模块 x1
MCP3008
模数转换器 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

火焰传感器模块 可以检测火焰或者波长在 760 纳米~1100 纳米范围内的光源, 打火机测试火焰距离为 80cm,对火焰越大,测试距离越远探测角度 60 度左右,对火焰光谱特别灵敏 。其灵敏度可以通过可调继电器调节,工作电压为3.3V-5V之间,本文用3.3V给火焰模块供电。与树莓派具体连接参考下图。


flame_bb

在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的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 http://osoyoo.com/driver/flame.py

2)执行python程序

sudo python ./flame.py

3)测试

程序运行起来后,用打火机对着模块打火,如果模块检测到火光,模块上的绿色LED指示灯会亮起来,同时屏幕上会打印出提示信息;如果没有打火机对着模块打火,绿色指示灯不亮,或者没有对着模打火绿色指示灯就已经亮起,可以通过调节可调电位器进行校正。正常情况下会输出如下信息。

2017-04-01-082444_1824x984_scrot

Byamber

用树莓派设计一个CO气体检测器

Overview

本项目将利用MQ-7CO传感器模块,在树莓派上设计CO气体检测器,可以检测环境中CO气体浓度。MQ-7气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2),传感器的电导率随空气中一氧化碳气体浓度增加而增大,模块可以将电导率的变化,转换为与该气体浓度相对应的输出信号。 MQ-7气体传感器对一氧化碳的灵敏度高,是一款适合多种应用的低成本传感器。

DSC_5498

Parts

本项目将用到如下器件

PI
Pi3 x1
6
MQ-7模块 x1
MCP3008
模数转换器 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

Raspberry Pi只能处理数字信号,但是本项目中要用到MQ-7模块输出的模拟信号,所以需要用到模数转换器。本项目中利用MCP3008把MQ-7模块输出的电压信号转换成数字信号,根据转换后电压的大小来判断环境中CO浓度。

其中MQ-7模块工作在5V电压下,具有模拟信号和数字信号双路输出,当模块检测到CO气体的时候,信号指示灯亮起,数字信号输出口输出低电平。模块上面有一个可调电阻,通过调节可调电阻能够调节模块的灵敏度。
模块之间与树莓派具体连接请参考下图
mq-7

在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的Pi和模块。模块的上的GND接Pi上的0V;模块上的VCC接5V。对于如何识别Pi的IO口请参考这篇文章: How to read Raspberry Pi i/o pin diagram (GPIO pin graph)

Software

可以把pi直接接到显示器上,也可以通过SSH方式远程登录Pi。

1)编写代码

在/home/pi路径下用nano新建一个mq-7.py(名字随意,你喜欢就好!)

sudo nano mq-7.py

并往新建的文件中写入示例代码,代码可以通过执行下面的shell命令得到

sudo wget http://osoyoo.com/driver/mq-7.py

2)执行python程序

sudo python ./mq-7.py

3)测试

程序让mq-7模块上电后先预热20s,待数据稳定后再输出,所以刚开始的20S没有数据输出。如果出现模块有细微发烫是正常的。打火机大火会生成部分CO气体,将打火机对着模块打火屏幕会打印出来”CO is detected”的字样,并且打印出当前传感器输出电压,信号指示灯亮起,如果没有上述现象,可通过顺时针调节可调电阻,直到出现上述现象为止。

2017-03-31-064234_1824x984_scrot

Byamber

烟雾检测器

Overview

本项目将利用MQ-2烟雾传感器模块,在树莓派上设计烟雾检测器。烟雾传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2),当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大,模块可以将将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2气体传感器对对液化石油气,丙烷,氢气敏感的灵敏度高。

DSC_5496

Parts

本项目将用到如下器件

PI
Pi3 x1
5
MQ-2模块 x1
MCP3008
模数转换器 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

Raspberry Pi只能处理数字信号,但是本项目中要用到MQ-2模块输出的模拟信号,所以需要用到模数转换器。本项目中利用MCP3008把MQ-2模块输出的电压信号转换成数字信号,根据转换后电压的大小来判断是否有烟雾。

其中MQ-2模块工作在2.5-5V电压下,在本项目中利用3.3V供电,模块具有模拟信号和数字信号双路输出,当模块检测到有烟雾的时候,信号指示灯亮起,数字信号输出口输出低电平。模块上面有一个可调电阻,通过调节可调电阻能够调节模块的灵敏度。
mq-2
模块之间与树莓派具体连接请参考下图

在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的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新建一个mq-2.py(名字随意,你喜欢就好!)

sudo nano mq-2.py

并往新建的文件中写入示例代码,代码可以通过执行下面的shell命令得到

sudo wget http://osoyoo.com/driver/mq-2.py

2)执行python程序

sudo python ./mq-2.py

3)测试

让mq-2模块预热20s左右,让数据稳定,如果出现模块有细微发烫是正常的。用打火机对着模块释放可燃气体,屏幕会打印出来”Gas lealage”的字样,并且打印出当前传感器输出电压,信号指示灯亮起,如果没有上述现象,可通过顺时针调节可调电阻,直到出现上述现象为止;在不向其释放可燃气体时候会输出”Gas not leak”字样。

2017-03-30-094819_1824x984_scrot

Byamber

基于树莓派的水位溢出检测器

Overview

水位溢出检测器计可以检测容器中水容量是否达到指定水位,该设备主要通过水位传感器模块进行相关数据的采集,然后通过树莓派将数据输出。
DSC_5493

Experimental Parts

为了完成设计需要用到一下器件

PI
Pi3 x1
2016000500
水位检测模块 x1
MCP3008
模数转换器 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

Raspberry Pi是一个出色的微型计算机,你可以使用它来控制数字输入和输出。但是当你想用它来处理模拟信号,例如像热敏电阻、电位器等模拟传感器输出时候,Raspberry Pi就有些力不从心了,就需要借助模数转换芯片将模拟信号转换成数字信号。本项目中利用MCP3008水位检测模块输出的电压信号转换成数字信号,MCP3008是一款8通道10位精度的模数转换芯片。

水位检测模块是一款简单易用、性价比较高的水位/水滴识别检测传感器,其是通过具有一系列的暴露的平行导线线迹测量其水滴/水量大小从而判断水位。轻松完成水量到模拟信号的转换。该模块工作在DC3-5V,在本项目中采用3.3V供电。与树莓派具体连接请参考下图。

waterlevel

在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的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新建一个waterlevel.py(名字随意,你喜欢就好!)

sudo nano waterlevel.py

并往新建的文件中写入代码,代码可以通过执行下面的shell命令得到:

sudo wget http://osoyoo.com/driver/waterlevel.py

2)执行python程序

sudo python ./waterlevel.py

3)测试

将水位检测模块由浅入深的插入水中,注意不要让水位淹没到模块上的电子元器件,会发现模块插入的越深屏幕上打印的数字越大;把模块放置在干燥处时候数字为0

2017-03-28-084637_1824x984_scrot

Byamber

基于树莓派的智能报警器设计

Overview

本文将介绍如何用树莓派、防震传感器模块和有源蜂鸣器模块设计智能报警器。当防震传感器模块检测有震动的时候,会输出高电平,没有震动输出低电平,利用这一特点,树莓派通过中断的方式查询防震传感器模块输出的电平信号,当检测到高电平(即有震动时候),蜂鸣器报警;否则不报警。可以将自己设计的防盗报警器安装在自己家的窗户上,如果有小偷破窗而入,就会报警。

DSC_5486

Experimental Parts

为了完成设计需要用到一下器件

PI
Pi3 x1
18
有源蜂鸣器模块 x1
2016004800
防震模块 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

本中只需要用到两个传感器模块,防震传感器模块和有源蜂鸣器模块。防震模块工作在3.3V-5V电压下,在本项目中采用3.3V供电。在不震动情况下呈常闭状态,输出低电平,开关信号指示灯被点亮;震动时候输出高电平,开关信号指示灯熄灭。其原理图和外形图分别如下图所示。

Vibration Sensor module

vibration

有源蜂蜜器模块,工作在3.3V-5V电压之间,本项目中同样采用3.3V供电。模块是低电平有效,即控制器给一个低电平,蜂鸣器响,给高电平不响。
与树莓派具体连线参考下图
Untitled Sketch_vibration

在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的Pi和模块。模块的上的GND接Pi上的0V;模块上的VCC接3.3V。将蜂鸣器接到20号引脚(BCM编号方式),防震模块接到21号引脚上(BCM编号方式)。关于如何识别Pi的IO口请参考这篇文章: How to read Raspberry Pi i/o pin diagram (GPIO pin graph)

Software

可以把pi直接接到显示器上,也可以通过SSH方式远程登录Pi。

1)编写代码

在/home/pi路径下用nano新建一个vibration.py(名字随意,你喜欢就好!)

sudo nano vibration.py

并往新建的文件中写入如下代码:

#!/usr/bin/env python
import RPi.GPIO as GPIO
import time

class Sw40(object):
    """docstring for Senal"""
    def __init__(self, pin , buzzer):
        self.buzzer = buzzer
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(self.buzzer,GPIO.OUT)
        self.pin = pin
        GPIO.setup(self.pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

        GPIO.add_event_detect(self.pin, GPIO.RISING, callback=self.callback, bouncetime=1)
        self.count = 0 

    def callback(self , pin):
        self.count += 1

    def BuzzerOn(self):
        GPIO.output(self.buzzer , 0)

    def BuzzerOff(self):
        GPIO.output(self.buzzer , 1)


def main():
    print"system initialition..."
    sensor = Sw40(21,20)
    print"ok!\n"
    try:
        while True:
            time.sleep(1)
            if sensor.count >=10:
                print"be careful!there are thieves!\n"
                sensor.BuzzerOn()
            else:
                print"it is safe!\n"
                sensor.BuzzerOff()
            sensor.count = 0        

    except KeyboardInterrupt:
        GPIO.cleanup()

if __name__ == '__main__':
    main()

上面的代码可以通过执行下面的shell命令得到

sudo wget http://osoyoo.com/driver/vibration.py

2)执行python脚本

sudo python ./vibration.py

2017-03-27-061856_1824x984_scrot

3)测试

将防震模块放置在水平桌面上,发现没有什么异样,但是,当你用手拍击桌面的时候,效果就不一样了,会听到蜂蜜器发出报警声,停止拍击蜂鸣器也停止发声。至此基于树莓派的智能报警器就设计好了,赶快安装到你家窗户上去防贼去吧!

Byamber

基于树莓派的触摸开关

Overview

本文介绍如何用树莓派设计数字触摸开关,并通过这个数字触摸开关控制继电器通断。程序启动树莓派不间断检测TTP223数字触摸传感器模块输出信号,当检测到有触摸动作发生时候,继电器闭合,并且在触摸时候蜂鸣器会响一声,代表被触摸。该模块是一个基于触摸检测ICTTP223B的电容式点动型触摸开关模块。常态下,模块输出低电平,模式为低功耗模式;当用手指触摸相应位置时,模块会输出高电平,模式切换为快速模式;当持续12秒没有触摸时,模式又切换为低功耗模式。

DSC_5484

Experimental Parts

为了完成设计需要用到一下器件

PI
Pi3 x1
18
有源蜂鸣器模块 x1
13
数字触摸开关TTP223 x1
17
2路继电器模块 x1
LACC2006AD-12
面包板 x1
LACC2006AD-31
公对公跳线 x若干
19
公对母跳线 x若干

Hardware

本文中用到了三个传感器,分别是数字触摸开关TTP223模块、有源蜂鸣器模块和2路继电器模块。数字触摸开关TTP223模块工作在DC2—5.5V,本文中采用3.3V供电,检测到有触摸动作时候输出高电平,否则输出低电平;有源蜂鸣器模块采用2TY三极管(S8550)驱动,工作在3.3V-5V之间,本文将其接到3.3V电压上,模块低电平触发;2路继电器模块低电平触发,同样用3.3V供电。

与树莓派具体连线参考下图

Untitled Sketch_touchsensor

在接线的时候请认清模块正负极,不要接反了,否则会烧坏你的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新建一个touchsensor.py(名字随意,你喜欢就好!)

sudo nano touchsensor.py

并往新建的文件中写入如下代码:

import RPi.GPIO as GPIO
import time
import os

#sensor pin define
buzzer = 14
touch = 26
relay_in1 = 13
relay_in2 = 19

#GPIO port init
def init():
         GPIO.setwarnings(False)
         GPIO.setmode(GPIO.BCM)
         GPIO.setup(buzzer,GPIO.OUT)
         GPIO.setup(relay_in1,GPIO.OUT)
         GPIO.setup(relay_in2,GPIO.OUT)
         GPIO.setup(touch,GPIO.IN,pull_up_down=GPIO.PUD_UP)
         pass

#turn on buzzer
def buzzer_on():
         GPIO.output(buzzer,GPIO.LOW)
         time.sleep(0.2)
         GPIO.output(buzzer,GPIO.HIGH)
         time.sleep(0.2)
         pass
#turn off buzzer
def buzzer_off():
         GPIO.output(buzzer,GPIO.HIGH)
         pass

#turn on relay
def relay_on():
         #open relay channal1 ana channal2
         GPIO.output(relay_in1,GPIO.LOW)
         GPIO.output(relay_in2,GPIO.LOW)

#turn off relay
def relay_off():
                  GPIO.output(relay_in1,GPIO.HIGH)
                  GPIO.output(relay_in2,GPIO.HIGH)


touchstatus = False
#read digital touch sensor
def read_touchsensor():
         global touchstatus
         if (GPIO.input(touch)==True):
                  touchstatus = not touchstatus
                  if touchstatus:
                           print"Turn on relay"
         print"\n"
                           buzzer_on()
                           relay_on()
                  
                  else:
                           print"Turn off relay"
         print"\n"
                           buzzer_on()
                           relay_off()
         pass
                  

#main loop
def main():
         print"...................................................................System initializing..."
         init()
         buzzer_off()
         relay_off()
         print"...................................................................Ok"
         print"...................................................................Please touch"
         print"\n"
         while True:
                  read_touchsensor()

if __name__ == '__main__':
         try:
                  main()
                  pass
         except KeyboardInterrupt:
                  pass
         pass
GPIO.cleanup()

上面的代码可以通过执行下面的shell命令得到

sudo wget http://osoyoo.com/driver/touchsensor.py

2)执行python脚本

sudo python ./touchsensor.py

2017-03-25-070337_1824x984_scrot

3)测试

用手指触摸数字触摸开关模块上同心圆位置,会听到滴答声,这是蜂鸣器吸合的声音,在触摸同时蜂鸣器会响一声。可以将一些其他设备接到继电器,就可以通过自己设计的触摸开关来控制了。