百科:树莓派传感器模组SenseHat

树莓派传感器模组sensehat

Introduction

今天给大家带来的是树莓派家族的另一成员—-SenseHat。
作为Astropi https://astro-pi.org/ 任务的一个基本组成部分,也作为树莓派上的一个插件,它将让你的树莓派感知周围的世界。
image

animated_sense_hat
它可以用来读取:

  • 方向(加速计,3D陀螺仪, 磁力计)
  • 压力
  • 温度(0-65°摄氏度,2°的准确度)
  • 相对湿度(20-80%,4.5%的准确度)

image (1)

  • [Image: https://easytester.quip.com/-/blob/MIbAAAJ1qID/wOUpgIYxQHyWNqmEqFjmPA]

8*8LED点阵可以用来显示从各种传感器中传来的数据。

What you will make

这次实验,我们将使用sense hat 和树莓派来:

  • 使用Python跟sense hat 通讯
  • 访问sense hat 的输出输入端口
  • 同过sense hat 库显示图像和信息
  • 储存传感器数据

What you will do

跟以往一样,首先,更新树莓派的操作系统:

sudo apt-get update
sudo apt-get upgrade

安装sense hat:

sudo apt-get install sense-hat

显示文本

在Sensehat的LED上显示你想要出现的字符:

from sense_hat import SenseHat
sense = SenseHat()
sense.show_message("Teddy")

你也可以改变LED的颜色:

from sense_hat import SenseHat

sense = SenseHat()

r = 255
g = 255
b = 255

sense.clear((r, g, b))

使用一个While来循环显示:

from sense_hat import SenseHat sense = SenseHat() blue = (0, 0, 255) yellow = (255, 255, 0) while True:            sense.show_message("Astro Pi is awesome!", text_colour=yellow, back_colour=blue, scroll_speed=0.05)

设置方向

sensehat 允许你设置它的LED矩阵方向,下面举个列子说明:

from sense_hat import SenseHat

from time import sleep

 

sense = SenseHat()

 

w = (150, 150, 150)

b = (0, 0, 255)

e = (0, 0, 0)

 

image = [

e,e,e,e,e,e,e,e,

e,e,e,e,e,e,e,e,

w,w,w,e,e,w,w,w,

w,w,b,e,e,w,w,b,

w,w,w,e,e,w,w,w,

e,e,e,e,e,e,e,e,

e,e,e,e,e,e,e,e,

e,e,e,e,e,e,e,e

]

 

sense.set_pixels(image)

 

while True:

  sleep(1)

  sense.flip_h()

我们将每个LED做成一个像素点,w,b,e作为三种颜色,每隔1s循环显示像素点。

感知环境

sensehat 具有一组感知环境的传感器,我们通常用来测量温度,湿度和气压。
我们引入一个小程序来说明sensehat库的用法,结果是采集三组温度,湿度和气压数据并在LED上显示出来,:

from sense_hat import SenseHat

sense = SenseHat()

 

while True:

 

t = sense.get_temperature()

p = sense.get_pressure()

h = sense.get_humidity()

 

t = round(t, 1)

p = round(p, 1)

h = round(h, 1)

 

message = "Temperature: " + str(t) + " Pressure: " + str(p) + " Humidity: " + str(h)

 

sense.show_message(message, scroll_speed=0.05)

我们也可以拓展一下,用一个条件来判断温度高低并使用LED报警:

red = (255, 0, 0)
green = (0, 255, 0)
if t > 18.3 and t < 26.7:
    bg = green
  else:
    bg = red
  sense.show_message(message, scroll_speed=0.05,back_colour=bg)

感知运动

Sense帽有一个IMU((Inertial Measurement Unit惯性测量单元)芯片,其中包括一组检测运动的传感器:

  • 一个陀螺仪(用来检测板上的方向)
  • 加速度计(用于检测运动)
  • 磁力仪(用于探测磁场)

我们都知道地球绕着南北两极之间的一个轴旋转。我们也可以将sensehat增加三个轴,这些都是:

  • 俯仰pitch
  • 滚动roll
  • 偏航yaw

image (2)

我们在编程时,也需要使用这三个轴来定位:

get_accelerometer_raw()作为SenseHat的一个方法用于访问三轴的坐标,告诉你在每个轴上的重力作用(x,y,z)。如果任意轴为+1G,那么你就知道这个轴是向下的,反之则向上。

from sense_hat import SenseHat

sense = SenseHat()

red = (255, 0, 0)
while True:
    acceleration = sense.get_accelerometer_raw()
    x = acceleration['x']
    y = acceleration['y']
    z = acceleration['z']

    x = abs(x)
    y = abs(y)
    z = abs(z)

    if x > 1 or y > 1 or z > 1:
        sense.show_letter("!", red)
    else:
        sense.clear()

使用操纵杆

sensehat具有一个可操作的方向按键,可以五个不同的方向释放:上,下,左,右,中。
我们可以使用一个事件来反馈用户操作:

 sense.stick.direction_up = pushed_up
 def pushed_up(event):
      print(event)

读到到这里,我们已经探索了sensehat的大部分特性,下一期,我们将用它们组合起来创建一个项目,敬请期待。

参考文档

有关跟多SenseHat 函数及方法可以参考:
https://pythonhosted.org/sense-hat/

发表评论