一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用Raspberry Pi和傳感器制作“可自動(dòng)營(yíng)造舒適空間的裝置” 第三部分

山中老虎 ? 來源:羅姆 ? 作者:羅姆 ? 2023-02-24 10:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是吉田!
我們這次要?jiǎng)?chuàng)作一款讓家中更舒適、讓在家辦公更高效的設(shè)備,本文是第三部分。
在第二部分中,我們用BLE連接了羅姆SensorMedal并測(cè)量了各種數(shù)據(jù)。在第三部分,我希望通過安裝人體傳感器等器件,實(shí)現(xiàn)檢查主人是否久坐不動(dòng)或過度工作的功能!
pYYBAGPzGsOARb7TAAOuAwphA1Y168.jpg

本部分所需部件

Raspberry Pi 3 B+ 或 Raspberry Pi 4 Model B

poYBAGPzGsaAP1GPAACgjfKDWVg250.jpg

Raspberry Pi 3 B+

poYBAGPzGsmAPwNLAACvO9u33bY417.jpg

Raspberry Pi 4 Model B

羅姆SensorMedal(SensorMedal-EVK-002)

poYBAGPzGsyAZvoKAAB6V-XqblY393.jpg

熱釋電紅外線傳感器 (SB412A)

pYYBAGPzGpOAGUeFAAEoTKKM1CM773.jpg

Raspberry Pi用液晶顯示器

pYYBAGPzGomATcCzAAFYik0A-9Q075.jpg

本部分的流程

給Raspberry Pi連接人體傳感器

添加液晶顯示器

總結(jié)

1. 給Raspberry Pi連接人體傳感器

第二部分中,我們通過羅姆SensorMedal測(cè)量了亮度,并根據(jù)亮度值成功控制了USB燈。在第二部分的基礎(chǔ)上,還可以檢測(cè)溫度和濕度,當(dāng)檢測(cè)到室溫過高時(shí),可以通過同樣的方法讓風(fēng)扇轉(zhuǎn)起來。

但是,僅僅這樣的功能可能還不夠,我還希望它只在裝有這款Raspberry Pi設(shè)備的工作臺(tái)周圍有人時(shí)才工作!

另外,正如我在第一部分中提到的,我還希望它能起到防止主人在家辦公期間因久坐不動(dòng)而過于疲勞的作用。

編號(hào) 檢測(cè)功能 檢測(cè)后希望具備的功能
5 檢測(cè)坐在椅子上的時(shí)間 檢測(cè)到坐的時(shí)間太久(久坐不動(dòng)),督促主人站起來活動(dòng)活動(dòng)

所以,這次我們來實(shí)現(xiàn)上述功能,這也是第一部分中列舉的“要是有這樣的功能就好了”的項(xiàng)目之一。具體來講,需要添加一個(gè)能夠讓Raspberry Pi知道是否有人的傳感器,以便確認(rèn)工作臺(tái)周圍的活動(dòng)狀態(tài)。為此,我們將在Raspberry Pi上安裝下面這種熱釋電紅外線傳感器。

poYBAGPzGtmAOkGgAADmme5olx4698.jpg

傳感器側(cè)(從照片左邊開始) Raspberry Pi側(cè)
+(黃色) 5V
OUT(紅色) GPIO13
ー(黑色) GND

與Raspberry Pi的連接如表中所示。實(shí)際安裝的照片如下所示:

pYYBAGPzGtyACCHQAAGonCx6UTE000.jpg

在這里,需要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的程序human.py,來確認(rèn)人體傳感器是否正常發(fā)揮作用,在運(yùn)行該程序時(shí),如果周圍有人,將顯示為“1”,否則顯示為“0”。

[human.py]

import RPi.GPIO as GPIO
from time import sleep

human_pin = 13
GPIO.setmode(GPIO.BCM)
GPIO.setup(human_pin, GPIO.IN)

try:
    while True:
        human = GPIO.input(human_pin)
        print(human)
        sleep(1)

except KeyboardInterrupt:
    pass

GPIO.cleanup()

運(yùn)行human.py。僅當(dāng)您坐在Raspberry Pi前面或?qū)⑹挚拷鼤r(shí)才會(huì)顯示“1”。

pYYBAGPzGt6AJ4drAAA6hlqB3Us500.png

poYBAGPzGuGAMmFyAAE1dfAGGOA792.jpg

2. 添加液晶顯示器

現(xiàn)在,我們來給Raspberry Pi加一個(gè)液晶顯示器,使之能夠顯示前面添加的SensorMedal和人體傳感器的值。

市場(chǎng)上有很多種液晶顯示器,我選用的是只需將其插入Raspberry Pi的GPIO引腳即可使用的DISPLAYOTRON HAT,它也有一個(gè)可以連接人體傳感器的GPIO引腳。

pYYBAGPzGomATcCzAAFYik0A-9Q075.jpg

如照片所示,將顯示器插入Raspberry Pi的 GPIO引腳。

poYBAGPzGueAF5a9AAFQEBsisOQ621.jpg

這個(gè)顯示器的庫(kù)來自 Adafruit,所以可以參考其Github頁(yè)面:
https://github.com/pimoroni/displayotron

運(yùn)行頁(yè)面中的安裝腳本。這樣將會(huì)在Home下創(chuàng)建一個(gè)名為“pimoroni”的目錄,并在其中的下述位置保存示例程序。

Dot3000和DotHat都有類似的功能,但是這次我使用的是DotHat,所以我們會(huì)使用DotHat對(duì)應(yīng)的庫(kù)。這里有一些示例程序,您可以嘗試運(yùn)行一下。

$ curl -sS get.pimoroni.com/displayotron | bash
$ cd /home/pi/Pimoroni/displayotron/dothat
$ python3 basic/hello_world.py
$ python3 basic/backlight.py 

下面,讓我們修改一下連接SensorMedal和Raspberry Pi的程序,以實(shí)現(xiàn)在這個(gè)液晶顯示器上顯示測(cè)量值。下面的第4行、第22?27行、第45?50行和第91?115行是對(duì)第二部分中ble程序的補(bǔ)充。

[ble_lcd.py]

#!/usr/bin/env python3
# coding: utf-8

import dothat.lcd as lcd

from datetime import datetime
from bluepy import btle
from sys import argv
import getpass
from time import sleep

def payval(num, bytes=1, sign=False):
    global val
    a = 0
    for i in range(0, bytes):
        a += (256 ** i) * int(val[(num - 2 + i) * 2 : (num - 1 + i) * 2],16)
    if sign:
        if a >= 2 ** (bytes * 8 - 1):
            a -= 2 ** (bytes * 8)
    return a

import RPi.GPIO as GPIO
human_pin = 13
GPIO.setmode(GPIO.BCM)
GPIO.setup(human_pin, GPIO.IN)
human_count = 0
human_check = 3

interval = 10 # 工作間隔
scanner = btle.Scanner()

while True:
  
    now = datetime.now()
    d = '{0:0>4d}/{1:0>2d}/{2:0>2d}({3})'.format(now.year, now.month, now.day, now.strftime('%a'))
    t = '{0:0>2d}:{1:0>2d}:{2:0>2d}'.format(now.hour, now.minute, now.second)
    lcd.clear()
    lcd.set_cursor_position(0, 0)
    lcd.write('PiRemote')
    lcd.set_cursor_position(0, 1)
    lcd.write('{}'.format(d))
    lcd.set_cursor_position(2, 2)
    lcd.write('{}'.format(t))

    human = GPIO.input(human_pin)
    print(human)
    if human == 1:
      human_count+=1
    else:
      human_count=0
    
    try:
        devices = scanner.scan(interval)
    except Exception as e:
        print("ERROR",e)
        if getpass.getuser() != 'root':
            print('使用方法: sudo', argv[0])
            exit()
        sleep(interval)
        continue

    for dev in devices:
        print("nDevice %s (%s), RSSI=%d dB" % (dev.addr, dev.addrType, dev.rssi))
        isRohmMedal = False
        sensors = dict()
        for (adtype, desc, val) in dev.getScanData():
            print("  %s = %s" % (desc, val))
            if desc == 'Short Local Name' and val[0:10] == 'ROHMMedal2':
                isRohmMedal = True
            if isRohmMedal and desc == 'Manufacturer':

                sensors['ID'] = hex(payval(2,2))
                sensors['Temperature'] = -45 + 175 * payval(4,2) / 65536
                sensors['Humidity'] = 100 * payval(6,2) / 65536
                sensors['Illuminance'] = payval(25,2) / 1.2
                sensors['Battery Level'] = payval(30)
                sensors['RSSI'] = dev.rssi

                print('    ID            =',sensors['ID'])
                print('    Temperature   =',round(sensors['Temperature'],2),'℃')
                print('    Humidity      =',round(sensors['Humidity'],2),'%')
                print('    Illuminance   =',round(sensors['Illuminance'],1),'lx')
                print('    Battery Level =',sensors['Battery Level'],'%')
                print('    RSSI          =',sensors['RSSI'],'dB')

                '''
                for key, value in sorted(sensors.items(), key=lambda x:x[0]):
                    print('    ',key,'=',value)
                '''

                temp  = sensors['Temperature']
                humid = sensors['Humidity']
                if temp > 26 or humid > 60:
                    temp_msg = "Hot!"
                else:
                    temp_msg = "Not bad"

                illum = sensors['Illuminance']
                if illum < 200:
                    illum_msg = "Dark!"
                else:
                    illum_msg = "Bright"

                if human_count > human_check:
                    human_msg = "Take Rest"
                else:
                    human_msg = "Work Hard!"

                lcd.clear()
                lcd.set_cursor_position(0, 0)
                lcd.write('Temp: {0:1.0f}C {1:1.0f}% {2}'.format(temp, humid, temp_msg))
                lcd.set_cursor_position(0, 1)
                lcd.write('Illum: {0:1.0f}Lx {1}'.format(illum,illum_msg))
                lcd.set_cursor_position(0, 2)
                lcd.write('{0:1.0f} Cnt {1}'.format(human_count, human_msg))

                sleep(interval)

如果您像“sudo python3 ble_lcd.py”一樣運(yùn)行這個(gè)程序,那么將會(huì)首先獲取并顯示當(dāng)前的日期和時(shí)間等信息。

pYYBAGPzGuqAS0CTAAEnwLO1CGs213.jpg

一段時(shí)間后,即可通過BLE獲得SensorMedal的測(cè)量值。然后將會(huì)顯示溫度、濕度和亮度等信息。通過人體傳感器,您還可以查看人在那里呆了多少秒。

poYBAGPzGu2AeE1WAAEpkXS24ls611.jpg

如果室溫高于26℃、濕度高于 60%,它會(huì)發(fā)出警告。另外,在亮度為200Lx以下時(shí),顯示消息也會(huì)發(fā)生變化。
而當(dāng)人體傳感器檢測(cè)到人在那里的停留時(shí)間超過一定時(shí)間時(shí)(為便于測(cè)試,這里設(shè)置為30秒左右),顯示信息就會(huì)變?yōu)椤霸撔菹⒘?!?/p>

您可以根據(jù)房間情況和工作情況嘗試更改每種傳感器的閾值。根據(jù)番茄工作法,采用工作25分鐘休息5分鐘的時(shí)間安排,工作效率會(huì)比較好,您也可以根據(jù)這類方法來設(shè)置數(shù)值。

3. 總結(jié)

這次我們?cè)赟ensorMedal基礎(chǔ)上又添加了一個(gè)人體傳感器,這樣就可以檢測(cè)桌子周圍是否有人了。在我們?cè)诩肄k公過程中,很容易坐的時(shí)間過長(zhǎng),擁有一個(gè)能夠在這種情況下關(guān)心我們、提醒我們的設(shè)備,真是一個(gè)不錯(cuò)的選擇。

另外,我們還添加了一個(gè)液晶顯示器,用來顯示來自傳感器的值。如果是HAT型顯示器,您可以使用現(xiàn)有的庫(kù)文件輕松實(shí)現(xiàn)數(shù)據(jù)顯示。當(dāng)然,您也可以自己連接液晶顯示器并自己嘗試使用。

在第四部分,我們將會(huì)嘗試實(shí)現(xiàn)能夠從互聯(lián)網(wǎng)獲取信息、并通過各種數(shù)值提醒主人行動(dòng)的機(jī)制,并最終完成整個(gè)舒適環(huán)境營(yíng)造設(shè)備。
敬請(qǐng)期待!

審核編輯黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2565

    文章

    52915

    瀏覽量

    766603
  • Raspberry Pi
    +關(guān)注

    關(guān)注

    2

    文章

    620

    瀏覽量

    23102
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    LabVIEW開發(fā)者必備技巧寶典第三部分

    LabVIEW開發(fā)者必備技巧寶典第三部分分享給大家,請(qǐng)叫我雷鋒。
    發(fā)表于 12-05 11:40

    找不到任何基于PSoC4或Pro的第三部分模塊

    大家好,我似乎找不到任何基于PSoC4或Pro的第三部分模塊。例如,對(duì)話框的DA14580來自松下的PAN1740模塊。塞浦路斯IC有第三方供應(yīng)商嗎?提前感謝!克里斯托弗
    發(fā)表于 09-17 14:18

    接收機(jī)晶體變換設(shè)計(jì)及制作第三部分

    接收機(jī)晶體變換設(shè)計(jì)及制作第三部分 晶體變換的印刷電路基板的制作與調(diào)整 圖26晶體變換
    發(fā)表于 05-15 10:58 ?1123次閱讀
    接收機(jī)<b class='flag-5'>用</b>晶體變換<b class='flag-5'>器</b>設(shè)計(jì)及<b class='flag-5'>制作</b><b class='flag-5'>第三部分</b>

    開關(guān)電源設(shè)計(jì)(第3版)第三部分

    電子發(fā)燒友網(wǎng)站提供《開關(guān)電源設(shè)計(jì)(第3版)第三部分.txt》資料免費(fèi)下載
    發(fā)表于 09-12 15:04 ?0次下載

    2012年P(guān)SoC數(shù)?;旌显O(shè)計(jì)培訓(xùn)_第三部分

    2012年P(guān)SoC數(shù)模混合設(shè)計(jì)培訓(xùn)_第三部分
    發(fā)表于 10-27 09:30 ?8次下載
    2012年P(guān)SoC數(shù)?;旌显O(shè)計(jì)培訓(xùn)_<b class='flag-5'>第三部分</b>

    LTC2387驅(qū)動(dòng)程序第三部分

    LTC2387驅(qū)動(dòng)程序第三部分
    發(fā)表于 05-16 15:23 ?5次下載
    LTC2387驅(qū)動(dòng)程序<b class='flag-5'>第三部分</b>

    用于激活設(shè)備的可編程定時(shí)-第三部分

    電子發(fā)燒友網(wǎng)站提供《用于激活設(shè)備的可編程定時(shí)-第三部分.zip》資料免費(fèi)下載
    發(fā)表于 12-16 10:28 ?0次下載
    用于激活設(shè)備的可編程定時(shí)<b class='flag-5'>器</b>-<b class='flag-5'>第三部分</b>

    Raspberry Pi和SensorMedal制作IoT跳繩設(shè)備 第四部分:在設(shè)備上安裝顯示以增加動(dòng)力

    第一部分跳繩測(cè)試儀解決運(yùn)動(dòng)不足問題!第二部分SensorMedal檢測(cè)跳躍次數(shù)并在顯示上顯示
    的頭像 發(fā)表于 03-23 15:18 ?1155次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>和SensorMedal<b class='flag-5'>制作</b>IoT跳繩設(shè)備 第四<b class='flag-5'>部分</b>:在設(shè)備上安裝顯示<b class='flag-5'>器</b>以增加動(dòng)力

    一款Raspberry Pi傳感器制作的可穿戴式小型健康管理設(shè)備!第四部分?劇終篇

    第1部分Raspberry Pi Zero和羅姆SensorMedal制作健康管理設(shè)備!第2部分
    的頭像 發(fā)表于 02-24 10:06 ?2508次閱讀
    一款<b class='flag-5'>用</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>和<b class='flag-5'>傳感器</b><b class='flag-5'>制作</b>的可穿戴式小型健康管理設(shè)備!第四<b class='flag-5'>部分</b>?劇終篇

    Raspberry Pi傳感器制作自動(dòng)營(yíng)造舒適空間裝置” 第四部分?劇終篇

    第1回:Raspberry Pi傳感器制作自動(dòng)
    的頭像 發(fā)表于 02-24 10:17 ?1047次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>和<b class='flag-5'>傳感器</b><b class='flag-5'>制作</b>“<b class='flag-5'>可</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>營(yíng)造</b><b class='flag-5'>舒適</b><b class='flag-5'>空間</b>的<b class='flag-5'>裝置</b>” 第四<b class='flag-5'>部分</b>?劇終篇

    Raspberry Pi傳感器制作自動(dòng)營(yíng)造舒適空間裝置” 第二部分

    大家好,我是吉田!我們這次要?jiǎng)?chuàng)作一款讓家中更舒適、讓在家辦公更高效的設(shè)備,本文是第二部分。第一部分介紹了制作綱要和所需部件。這次我們將實(shí)際連接Bluetooth
    的頭像 發(fā)表于 03-01 11:15 ?792次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>和<b class='flag-5'>傳感器</b><b class='flag-5'>制作</b>“<b class='flag-5'>可</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>營(yíng)造</b><b class='flag-5'>舒適</b><b class='flag-5'>空間</b>的<b class='flag-5'>裝置</b>” 第二<b class='flag-5'>部分</b>

    硬件即代碼第三部分空間與時(shí)間

    電子發(fā)燒友網(wǎng)站提供《硬件即代碼第三部分空間與時(shí)間.zip》資料免費(fèi)下載
    發(fā)表于 06-14 15:12 ?0次下載
    硬件即代碼<b class='flag-5'>第三部分</b>:<b class='flag-5'>空間</b>與時(shí)間

    SensorTile.box第三部分:編程模式(Pro mode)介紹

    電子發(fā)燒友網(wǎng)站提供《SensorTile.box第三部分:編程模式(Pro mode)介紹.pdf》資料免費(fèi)下載
    發(fā)表于 07-29 16:19 ?0次下載
    SensorTile.box<b class='flag-5'>第三部分</b>:編程模式(Pro mode)介紹

    用于高頻接收和發(fā)射的鎖相環(huán)——第三部分

    電子發(fā)燒友網(wǎng)站提供《用于高頻接收和發(fā)射的鎖相環(huán)——第三部分.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 10:18 ?0次下載
    用于高頻接收<b class='flag-5'>器</b>和發(fā)射<b class='flag-5'>器</b>的鎖相環(huán)——<b class='flag-5'>第三部分</b>

    松下MPS媒體制作平臺(tái)第八篇:視頻混合插件(第三部分)

    ? 歡迎?????大家觀看松下操作教程 MPS媒體制作平臺(tái)????? 第八篇:視頻混合插件(第三部分) 視頻混合(Video Mixer)插件可以輕松進(jìn)行主體鍵控,不受拍攝地點(diǎn)的局
    的頭像 發(fā)表于 01-08 10:10 ?479次閱讀
    松下MPS媒體<b class='flag-5'>制作</b>平臺(tái)第八篇:視頻混合<b class='flag-5'>器</b>插件(<b class='flag-5'>第三部分</b>)