精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何為Raspberry Pi開發一個GUI?

科技觀察員 ? 來源:Kutluhan Aktar ? 作者:Kutluhan Aktar ? 2022-05-05 17:42 ? 次閱讀

我一直在從事一個項目,通過該項目我可以整理來自 MQ-135 空氣質量傳感器的空氣質量信息,以檢測我工作場所空氣質量惡化的情況。然而,MQ-135 空氣質量傳感器的位置在從傳感器收集原始信息時具有巨大的重要性。因此,我決定通過開發一個用戶友好的界面,通過選定的角度制作一個可移動的傳感器底座。為了實現這一目標并添加一些確鑿的功能(例如可調節背景光),我使用 Python 中的 guizero 模塊為我的 Raspberry Pi 開發了一個 GUI,名為 Air Quality Module。

pYYBAGJzmyqAdrXEAATZtmjC_Vg310.png

通過空氣質量模塊,您可以通過選擇給定角度之一 - 0、30、45、90、135、180 - 來控制連接到迷你云臺套件的兩個伺服電機,并以 RGB 格式調整背景光 - 255, 255, 255. 而且,最重要的是,您可以監控 MQ-135 傳感器生成的當前空氣質量范圍:如果空氣質量惡化,GUI 會通過警告消息通知您。

本項目中提到的一些產品和組件:

樹莓派 3 板殼 3B

樹莓派 4B/3B+ SD 卡 32GB

樹莓派 3B Micro-HDMI VGA 轉換器電纜

pYYBAGJzmy6AO97yAAa2XhveHc8033.png

補給品:

樹莓派 3 型號 B+× 1

DigitSpace Raspberry Pi 3 板殼× 1

SD 卡 32 GB× 1

DigitSpace Raspberry Pi 3B Micro-HDMI VGA 轉換線× 1

Adafruit MCP3008× 1

MQ-135 空氣質量傳感器× 1

Pimoroni Pan-Tilt 帽子× 1

SG90微型伺服電機 × 2

RGB擴散共陽極× 1

SparkFun 可焊接面包板 - 迷你× 2

電阻 220 歐姆 × 3

跳線(通用) × 1

在這個項目中,你將學到:

如何使用 Raspberry Pi 的角度控制伺服電機

如何使用 Raspberry Pi 調整 RGB LED 的顏色

如何使用 MCP3008 和 Raspberry Pi 讀取模擬傳感器

如何使用 guizero 模塊開發 GUI

如何編寫范圍函數來排列值,如 Arduino 中的 map 函數

第 1 步:使用 MCP3008 讀取模擬傳感器

與 Arduino 相比,Raspberry Pi 沒有內置的 ADC模數轉換器),我們可以通過它輕松地從模擬傳感器收集信息。因此,我們需要在我們的電路中實現一個外部 ADC,以整理來自模擬傳感器(如 MQ-135 空氣質量傳感器)的數據。我使用了 MCP3008 8 通道 ADC,因為它效率高且使用簡單。

我使用 Raspberry Pi 上的 Adafruit CircuitPython MCP3xxx 庫來讀取帶有 MCP3008 的模擬傳感器。

但是,您需要安裝在 Python 中提供 CircuitPython 支持的 Adafruit_Blinka 庫才能使用上述庫。

sudo pip3 install adafruit-blinka

pYYBAGJzmzSAIIqtAALPZgpDBp8632.png

如果需要,您必須在執行命令之前在 Raspberry Pi Configuration Settings 上啟用 SPI。

完成后,從命令行運行以下命令來安裝 Adafruit CircuitPython MCP3xxx 庫。

sudo pip3 install adafruit-circuitpython-mcp3xxx

然后,按如下方式進行引腳連接。盡管在項目原理圖和代碼中對引腳連接進行了很好的解釋,但除此之外,我將保留 MCP3008 的以下引腳連接原理圖。

MCP3008 CLK 轉 Pi SCLK

MCP3008 DOUT 轉 Pi MISO

MCP3008 DIN 轉 Pi MOSI

MCP3008 CS 轉 Pi D5

MCP3008 VDD 至 Pi 3.3V

MCP3008 VREF 至 Pi 3.3V

MCP3008 AGND 到 Pi GND

MCP3008 DGND 到 Pi GND

MCP3008 CH0 到模擬傳感器的信號引腳

CH0 指的是 MCP3008 上的第一個輸入引腳 - 從 0 到 7。

pYYBAGJzmzmAKhtxAAKGFI91Rmk257.png

第 2 步:開發 GUI(空氣質量模塊)和編程 Raspberry Pi

為了能夠在 Python 中創建 GUI,您需要在 Raspberry Pi 上安裝 guizero 模塊。然后,您可以使用模塊提供的所有小部件和事件。

從您的命令行運行以下命令來安裝 guizero 模塊。

sudo pip3 install guizero

pYYBAGJzmz-AfadGAAGSyKPXo_c027.png

導入所需的庫和模塊。

不要忘記包含所有 GUI 小部件 - App、Box、Text、TextBox、PushButton、ButtonGroup、MenuBar、info、yesno、warn。

創建 SPI 總線、cs(片選)和 mcp 對象。

創建連接到 MCP3008 輸入引腳的模擬輸入通道——我只使用了通道 0。

定義 GPIO 引腳設置 - GPIO.setmode(GPIO.BCM) 。

定義 RGB 引腳并設置 PWM 頻率 - 100。

在 100 - OFF 處啟動 RGB PWM 引腳。

定義伺服電機引腳并設置 PWM 頻率 - 50。

在 0 - OFF 處啟動伺服底座和臂銷。

定義菜單欄選項命令(功能):

在Tutorial()函數中,如果需要,打開一個 yesno 消息以轉到項目教程頁面。

在Components()函數中,打開一條信息消息以顯示組件。

在About()函數中,打開一條信息消息以顯示電梯間距。

定義小部件命令和功能:

在_range()函數中,復制 Arduino 映射函數以在 Python 中排列給定范圍內的值。

在evaluateSensorValue()函數中,從測試范圍內的 MQ-135 空氣質量中獲取空氣質量值 - 從 0-60000 到 0-1023。

測試您的模塊,然后在本例中定義 0 到 60000 之間的值范圍。

如果超過閾值 (300),則通過警告消息通知 - 空氣質量惡化 - 并將狀態更改為危險。

在adjust_color()函數中,通過使用ChangeDutyCycle()更改 PWM 頻率(在 0 到 100 之間)來調整 RGB LED 的顏色。將輸入的顏色值從 0-255 排列到 0-100。

在base_tilt_move()和arm_tilt_move()函數中,通過選擇的角度控制伺服電機 - 0, 30, 45, 90, 135, 180 - 運行ChangeDutyCycle(selected_angle) 。2 到 12 之間的循環值精確地適用于 0 到 180 之間的角度。

調整伺服電機位置后不要忘記執行以下行以關閉伺服 PWM 引腳。

改變工作周期(0)

創建名為 Air Quality Module 的 GUI 應用程序。

定義菜單欄選項 - 教程、組件、關于。

使用 box 小部件設計界面

RGB 顏色接口

使用布局網格對齊部件。

將相關命令(功能)分配給調整按鈕 - adjust_color。

空氣質量界面

定義傳感器和狀態文本變量。

使用repeat()函數每秒更新 MQ-135 空氣質量傳感器生成的傳感器值。

注意:在執行app.display()函數時,While 循環不起作用。

迷你云臺底座接口

在按鈕組小部件中定義角度 - 0、30、45、90、135、180。

分配相關命令(函數) - base_tilt_move。

迷你云臺臂接口

在按鈕組小部件中定義角度 - 0、30、45、90、135、180。

分配相關的命令(函數)——arm_tilt_move。

啟動循環 app.display() 。

poYBAGJzm0aAZW7JAAN2VT6HPBw782.png

pYYBAGJzm02ATzYIAAPcFW4mCpw827.png

poYBAGJzm1GAeU1OAAJDxqYk5pM190.png

特征

1) 改變儀器的背景顏色(RGB)。

poYBAGJzm1aAenYPAAasqvr5lN8600.png

2) 通過選擇中間角度 - 0、30、45、90、135、180 來調整迷你云臺套件上伺服電機的位置。

pYYBAGJzm12AQOVvAAcKvJgk1As540.png

3) 當傳感器 (MQ-135) 檢測到空氣質量惡化時收到通知 - 狀態:危險。

poYBAGJzm2GAQheeAAGvI9ZRiyo519.png

在菜單欄上:

4) 進入教程頁面。

poYBAGJzm2eABRaHAAPZVC4xIws777.png

5) 檢查組件。

pYYBAGJzm2yAF53WAAIbIQF08I0941.png

6) 顯示電梯間距。

poYBAGJzm3GALdHuAAI5U9bjONw986.png

連接

引腳連接在代碼和下面的項目示意圖中得到了很好的解釋。

將樹莓派連接到屏幕。

poYBAGJzm3eATDhAAAV8zFl4ehI108.png

將 MCP3008 和 RGB LED 連接到迷你面包板上。在將 MCP3008 連接到 Raspberry Pi 之前,我使用了一個電位器來測試值范圍。

pYYBAGJzm36ACqe_AAocmhAazGg608.png

poYBAGJzm4OABHxbAAVH0ep7SoI874.png

組裝迷你云臺套件并將 MQ-135 空氣質量傳感器粘在迷你云臺套件(臂)上。

poYBAGJzm4iAWcDUAAUtzg1lcaQ367.png

總結

完成所有步驟后,我將所有部件固定在一個舊塑料盒上,并將設備放在我的桌子上,以收集空氣質量數據并使用樹莓派上的空氣質量模塊 (GUI) 調整其背景顏色

poYBAGJzm5CAfH4lAAShIKaQ3v0501.png

示意圖

pYYBAGJzm5eARwT3AAG8M_ET1Uk695.png

代碼

# Raspberry Pi Adjustable Air Quality Detector Controlled via GUI
#
# Raspberry Pi 3B+
#
# By Kutluhan Aktar
#
# Learn how to develop a GUI, named Air Quality Module, to control a mini pan-tilt kit and get information from an MQ-135 Air Quality Sensor.
# Also, you can change the background light (RGB) via the GUI.
#
# Get more information on the project page:
# https://theamplituhedron.com/projects/Raspberry-Pi-Adjustable-Air-Quality-Detector-Controlled-via-GUI/


from guizero import App, Box, Text, TextBox, PushButton, ButtonGroup, MenuBar, info, yesno, warn
from time import sleep
from subprocess import call
import RPi.GPIO as GPIO
import busio
import digitalio
import board
import adafruit_mcp3xxx.mcp3008 as MCP
from adafruit_mcp3xxx.analog_in import AnalogIn


# Create the SPI bus
spi = busio.SPI(clock=board.SCK, MISO=board.MISO, MOSI=board.MOSI)

# Create the cs (chip select)
cs = digitalio.DigitalInOut(board.D5)

# Create the mcp object
mcp = MCP.MCP3008(spi, cs)

# Create analog inputs connected to the input pins on the MCP3008.
channel_0 = AnalogIn(mcp, MCP.P0)

# Define RGB pins settings and PWM frequencies
GPIO.setmode(GPIO.BCM)
red_pin = 2
green_pin = 3
blue_pin = 4
GPIO.setup(red_pin, GPIO.OUT)
GPIO.setup(green_pin, GPIO.OUT)
GPIO.setup(blue_pin, GPIO.OUT)
red_value = GPIO.PWM(red_pin, 100)
blue_value = GPIO.PWM(blue_pin, 100)
green_value = GPIO.PWM(green_pin, 100)
red_value.start(100)
blue_value.start(100)
green_value.start(100)

# Define servo motor pin settings and PWM frequencies
servo_base_pin = 20
servo_arm_pin = 21
GPIO.setup(servo_base_pin, GPIO.OUT)
GPIO.setup(servo_arm_pin, GPIO.OUT)
servo_base_value = GPIO.PWM(servo_base_pin, 50)
servo_arm_value = GPIO.PWM(servo_arm_pin, 50)
servo_base_value.start(0)
servo_arm_value.start(0)


# Define menu bar options' commands (functions).
def Tutorial():
# Open the project page if requested.
go_to_tutorial = yesno("Open Tutorial", "Get more information about the project!")
if go_to_tutorial == True:
command = "chromium-browser https://theamplituhedron.com/projects/"
call([command], shell=True)
print("Project Tutorial!")
else:
warn("Close", "Return to the application!")

def Components():
info("Components", "Raspberry Pi 3B+\nMQ-135 Sensor\nMini Pan-Tilt Kit\n2 x Servo Motor\nRGB LED\n2 x Mini Breadboard\nMCP3008")

def About():
info("About", "Develop a GUI, named Air Quality Module, to control a mini pan-tilt kit and get information from an MQ-135 Air Quality Sensor. Also, you can change the background light (RGB) on the GUI.")

# Define application commands and features:
def _range(x, in_min, in_max, out_min, out_max):
return int((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min)

def evaluateSensorValue():
# Test your module, then define the value range - in this case between 0 and 60000.
sensorValue = _range(channel_0.value, 0, 60000, 0, 1023)
sensor_value.value = sensorValue
# Threshold
if(sensorValue > 300):
status_text.value = "Status: DANGER"
status_text.text_color = "yellow"
warn("!!!DANGER!!!", "Air Quality Deteriorating!")
else:
status_text.value = "Status: OK"
status_text.text_color = "green"

def adjust_color():
red = _range(int(r_input.value), 0, 255, 1, 100)
green = _range(int(g_input.value), 0, 255, 1, 100)
blue = _range(int(b_input.value), 0, 255, 1, 100)
red_value.ChangeDutyCycle(101 - red)
blue_value.ChangeDutyCycle(101 - blue)
green_value.ChangeDutyCycle(101 - green)

def base_tilt_move():
# Cycle values between 2 and 12 are working precisely:
selected_angle = 2 + (int(base_angle.value) / 18)
servo_base_value.ChangeDutyCycle(selected_angle)
sleep(0.5)
servo_base_value.ChangeDutyCycle(0)

def arm_tilt_move():
selected_angle = 2 + (int(arm_angle.value) / 18)
servo_arm_value.ChangeDutyCycle(selected_angle)
sleep(0.5)
servo_arm_value.ChangeDutyCycle(0)

# Create the GUI application.
appWidth = 1200
appHeight = 500
app = App(title="Air Quality Module", bg="#eb2e00", width=appWidth, height=appHeight)
# Define menu bar options.
menubar = MenuBar(app, toplevel=["Tutorial", "Components", "About"],
options=[
[ ["View", Tutorial] ],
[ ["Inspect", Components ] ],
[ ["About", About] ]
])
# Design the interface using the box widget.
top = Box(app, width="fill", height=appHeight / 2, align="top")
bottom = Box(app, width="fill", height=appHeight / 2, align="bottom")
color_interface = Box(top, width=appWidth / 2, align="left", layout="grid", border=True)
quality_interface = Box(top, width=appWidth / 2, align="right")
base_interface = Box(bottom, width=appWidth / 2, align="left")
arm_interface = Box(bottom, width=appWidth / 2, align="right")

# RGB Color Interface
color_header = Text(color_interface, text="Adjust RGB Background Color", color="#002699", size=20, grid=[0,0])
r_label = Text(color_interface, text="R :", color="#1a53ff", size=15, grid=[0,1])
r_input = TextBox(color_interface, grid=[1,1])
r_input.bg = "#ff5c33"
r_input.text_color = "#1a53ff"
g_label = Text(color_interface, text="G :", color="#1a53ff", size=15, grid=[0,2])
g_input = TextBox(color_interface, grid=[1,2])
g_input.bg = "#ff5c33"
g_input.text_color = "#1a53ff"
b_label = Text(color_interface, text="B :", color="#1a53ff", size=15, grid=[0,3])
b_input = TextBox(color_interface, grid=[1,3])
b_input.bg = "#ff5c33"
b_input.text_color = "#1a53ff"
adjust_button = PushButton(color_interface, grid=[2,4], width="20", text="Adjust", command=adjust_color)
adjust_button.bg = "#002699"
adjust_button.text_color = "white"

# Air Quality Interface
quality_header = Text(quality_interface, text="Air Quality Sensor", color="#002699", size=20, align="top")
sensor_value = Text(quality_interface, text="TEST", color="#002699", size=120)
status_text = Text(quality_interface, text="Status: OK", color="green", size=15, align="bottom")
# Update the sensor value.
sensor_value.repeat(1000, evaluateSensorValue)

# Mini Pan-Tilt Base Interface
base_header = Text(base_interface, text="Pan-Tilt Base", color="#002699", size=20)
base_angle = ButtonGroup(base_interface, options=["0", "30", "45", "90", "135", "180"], selected="0", width=20, command=base_tilt_move)
base_angle.text_size = 15
base_angle.text_color = "white"

# Mini Pan-Tilt Arm Interface
arm_header = Text(arm_interface, text="Pan-Tilt Arm", color="#002699", size=20)
arm_angle = ButtonGroup(arm_interface, options=["0", "30", "45", "90", "135", "180"], selected="0", width=20, command=arm_tilt_move)
arm_angle.text_size = 15
arm_angle.text_color = "white"

# Start the loop.
app.display()

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 檢測器
    +關注

    關注

    1

    文章

    860

    瀏覽量

    47654
  • GUI
    GUI
    +關注

    關注

    3

    文章

    650

    瀏覽量

    39553
收藏 人收藏

    評論

    相關推薦

    如何使用Raspberry Pi 3進行快速開發

    Raspberry Pi 3 使用其四核處理器,并可提供比單核 Pi Zero 多倍的內存。對于需要較小設計封裝,但又對 Pi Zero
    的頭像 發表于 02-25 08:10 ?6637次閱讀
    如何使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 3進行快速<b class='flag-5'>開發</b>

    篇比較 BeagleBone 和 Raspberry Pi 方面配置的文章

    提供 DVI-D。 Raspberry Pi 還通過 3.5mm 插孔 提供音頻,此外 Pi 還有兩 USB 端口,而 BeagleBone 只有
    發表于 10-22 14:53

    Raspberry Pi 開發板優化設計

    Foundation 開發用于計算機教學的低成本平臺,現在已經演變成適合快速原型開發、功能強大且成本較低的平臺,而且越來越多地作為可嵌入的計算平臺。
    發表于 07-16 09:54

    黑科技!使用Raspberry Pi和Python GUI控制伺服電機(原理圖、源碼、項目教程)

    教程中,我們將介紹如何使用Raspberry Pi和Python TK GUI精確控制伺服。硬件組件:Raspberry Pi 3型號B.×
    發表于 10-16 16:49

    使用raspberry pi Pico的原因

    使用raspberry pi Pico的原因在硬件產品(單片機)的開發中我們往往需要借助些額外的儀器/設備進行產品的輔助測試, 假設我們需要
    發表于 02-07 09:16

    Raspberry Pi 4/3B的Pico開發

    描述適用于 Raspberry Pi 4 的 Raspberry Pi Pico 開發Raspberr
    發表于 07-26 07:14

    Raspberry Pi擴展板

    描述clumsyMIDI - 樹莓派擴展板 Raspberry Pi 擴展板,包含 MI
    發表于 07-29 06:12

    使用Raspberry Pi 3 快速開發(相較于稀缺的 Raspberry Pi Zero)

    無論開發人員是專業人士還是業余愛好者,Raspberry Pi 開發板在整個開發周期都對非常有用。盡管
    發表于 05-04 10:46 ?13次下載
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 3 快速<b class='flag-5'>開發</b>(相較于稀缺的 <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Zero)

    raspberry pi官網

    Raspberry Pi 宣布推出新的鏡像實用程序 Raspberry Pi Imager,以提供種更簡單的方法,將操作系統輕松鏡像到 m
    的頭像 發表于 03-07 10:16 ?5988次閱讀

    適用于Raspberry Pi 4的Raspberry Pi Pico開發

    電子發燒友網站提供《適用于Raspberry Pi 4的Raspberry Pi Pico開發板.zip》資料免費下載
    發表于 07-22 09:27 ?6次下載
    適用于<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> 4的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Pico<b class='flag-5'>開發</b>板

    使用Raspberry Pi構建OpenCV人群計數裝置

    在本教程中,我們將使用 Raspberry Pi 和 ThingSpeak 構建 OpenCV 人群計數。
    的頭像 發表于 08-12 17:24 ?2931次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>構建<b class='flag-5'>一</b><b class='flag-5'>個</b>OpenCV人群計數裝置

    使用Raspberry Pi構建智能車庫開門器

    在本教程中,我們將使用 Raspberry Pi 構建智能車庫開門器。這里將創建
    的頭像 發表于 09-07 15:54 ?2132次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>構建<b class='flag-5'>一</b><b class='flag-5'>個</b>智能車庫開門器

    使用帶有Raspberry Pi的超聲波測距模塊構建超聲波測距儀GUI

    電子發燒友網站提供《使用帶有Raspberry Pi的超聲波測距模塊構建超聲波測距儀GUI.zip》資料免費下載
    發表于 12-26 10:40 ?0次下載
    使用帶有<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的超聲波測距模塊構建超聲波測距儀<b class='flag-5'>GUI</b>

    尋找實用的Raspberry Pi項目? 制作智能傘架!

    本教程將分步指導您如何制作智能傘架。這是我最喜歡的Raspberry Pi 項目之。
    的頭像 發表于 02-24 17:22 ?954次閱讀
    尋找實用的<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>項目? 制作<b class='flag-5'>一</b><b class='flag-5'>個</b>智能傘架!

    使用Raspberry Pi Pico W和MicroPython開發物聯網應用

    當我們提及物聯網(IoT, Internet of Things)開發,可能首先想到的是Arduino或是ESP8266這樣的微控制器開發板。然而,Raspberry Pi的微控制器
    的頭像 發表于 07-21 09:36 ?2001次閱讀
    使用<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> Pico W和MicroPython<b class='flag-5'>開發</b>物聯網應用