基于树莓派、温度传感器dh11简单的风扇控制

在开始写文章之前,简单说一下作为一个小白该文明学习树莓派。刚开始对于树莓派一无所知,更不要提使用传感器了。但是尽管这样你还是要硬着头皮往下学,你要不停地百度,看别人的东西,慢慢的积累的多了你就会对树莓派有一定的了解。
在开始做这个实验实验之前,我建议你必须掌握下面软件的使用方法。winscp、putty会了这俩个软件,你不懂linux也没有关系。
接下来我们开始我们的实验
1、实验材料准备
温度传感器 DH11 一个
树莓派3B 一个
继电器 一个
小风扇 一个
2、对树莓派引脚你要有所了解
在树莓派输入pinout你就可以看到树莓派的引脚(如果树莓派自身引脚不够用,后期的你可以加面包板扩展你树莓派的引脚)效果如下图:
针脚的含义如图所示
3、对继电器要有所了解
简单画了下继电器的接法
4、所有物理器件物理连接
注意各自连接方式
这里使用的继电器5v的继电器,所以输入电压不要大于5v。这里我用了树莓派供电(可以但是最好不要这样做)。最好用变压器把220v转换为5v供电。其它连接方法自己慢慢研究,因为连接比较简单。
5、用winscp把代码烧进树莓派
左边win系统,右边linux系统
直接将写好的代码从左边拖拽到右边,就成功的将写好的代码烧进去了。
6、运行你的代码
pyhton wss.py

# -*- coding: utf-8 -*-
#!/usr/bin/python

import RPi.GPIO as GPIO  
import time  
while True:
	print("shuchu")
	channel = 21        #引脚号16 
	channel1 = 19
	data = []           #温湿度值  
	j = 0               #计数器  
	  
	GPIO.setmode(GPIO.BCM)      #以BCM编码格式  
	
	  
	time.sleep(1)           #时延一秒  
	  
	GPIO.setup(channel, GPIO.OUT)  
	GPIO.setup(channel1,GPIO.OUT)
	  
	GPIO.output(channel, GPIO.LOW)  
	time.sleep(0.02)        #给信号提示传感器开始工作  
	GPIO.output(channel, GPIO.HIGH)  
	  
	GPIO.setup(channel, GPIO.IN)  
	print("11112222")
	while GPIO.input(channel) == GPIO.LOW:  
		continue  
	  
	while GPIO.input(channel) == GPIO.HIGH:  
		continue  
	while j < 40:  
		k = 0  
		while GPIO.input(channel) == GPIO.LOW:  
			continue  
		  
		while GPIO.input(channel) == GPIO.HIGH:  
			k += 1  
			if k > 100:  
				break  
		  
		if k < 8:  
			data.append(0)  
		else:  
			data.append(1)  
	  
		j += 1  
	  
	print "sensor is working."  
	print data              #输出初始数据高低电平  
	  
	humidity_bit = data[0:8]        #分组  
	humidity_point_bit = data[8:16]  
	temperature_bit = data[16:24]  
	temperature_point_bit = data[24:32]  
	check_bit = data[32:40]  
	  
	humidity = 0  
	humidity_point = 0  
	temperature = 0  
	temperature_point = 0  
	check = 0  
	  
	for i in range(8):  
		humidity += humidity_bit[i] * 2 ** (7 - i)              #转换成十进制数据  
		humidity_point += humidity_point_bit[i] * 2 ** (7 - i)  
		temperature += temperature_bit[i] * 2 ** (7 - i)  
		temperature_point += temperature_point_bit[i] * 2 ** (7 - i)  
		check += check_bit[i] * 2 ** (7 - i)  
	  
	tmp = humidity + humidity_point + temperature + temperature_point      
	  
	if check == tmp:                                #数据校验,相等则输出  
		print "temperature : ", temperature, ", humidity : " , humidity  
		if temperature>=24:
			print("打开风扇")
			GPIO.output(channel1,GPIO.HIGH)
		else:
			print("关闭风扇")
			GPIO.output(channel1,GPIO.LOW)
	else:                                       #错误输出错误信息,和校验数据  
		print "wrong"  
		print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp  
	time.sleep(1)  
	#GPIO.cleanup()




7运行结果如下

温度已经传进来
8、写的不好不要喷,有不懂的可以留言。或者加微信:18847414978

发布了33 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/baidu_38978508/article/details/83931189
今日推荐