女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

如何使用Mu和CircuitPython上的光傳感器繪制光照水平

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-28 10:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

燈光

我們將使用CircuitPython,Mu和Circuit Playground Express上的光傳感器繪制光照水平。下面有一個簡單的九行代碼。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的傳感器數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:Project Zip 或 light.py | 在Github上查看

復制代碼

import time

import analogio

import board

light = analogio.AnalogIn(board.LIGHT)

while True:

print((light.value,))

time.sleep(0.1)

import time

import analogio

import board

light = analogio.AnalogIn(board.LIGHT)

while True:

print((light.value,))

time.sleep(0.1)

在我們導入的前幾行analogio,board和time,然后設置我們的光傳感器。在我們的while循環中,我們正在print()-照明水平。 time.sleep()是為了防止濫發結果-如果它們過快,將難以閱讀!

請注意,Mu繪圖儀會尋找元組值打印。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組的外觀應為(1.0, 3.14)。由于我們只有一個值,因此需要像(1.0,)那樣打印出來。請注意括號 中的數字,以及數字后的逗號。因此,print((light.value,))中的多余括號和逗號。

一旦一切設置完成并運行,請嘗試將手放在Circuit Playground Express上,觀察繪圖儀立即做出反應!當您阻止光線到達CPX時,繪圖儀繪圖線會下降。如果您將手電筒照亮以增加光線,繪圖儀就會升起!

這是一種非常簡單的方法,可以測試您的傳感器并了解CircuitPython中的模擬讀數!

請注意,在左側輸入REPL,然后將繪圖儀的大小調整為大而在右側,如上所示。這樣,您可以同時看到數字和圖形。繪圖儀將根據光線水平自動重新縮放。

溫度

我們將使用CircuitPython,Mu和Circuit Playground Express中內置的溫度傳感器繪制溫度變化圖。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的傳感器數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:Project Zip 或 temperature.py | 在Github上查看

復制代碼

import time

import adafruit_thermistor

import board

thermistor = adafruit_thermistor.Thermistor(

board.TEMPERATURE, 10000, 10000, 25, 3950)

while True:

print((thermistor.temperature,))

# print(((thermistor.temperature * 9 / 5 + 32),)) # Fahrenheit

time.sleep(0.25)

import time

import adafruit_thermistor

import board

thermistor = adafruit_thermistor.Thermistor(

board.TEMPERATURE, 10000, 10000, 25, 3950)

while True:

print((thermistor.temperature,))

# print(((thermistor.temperature * 9 / 5 + 32),)) # Fahrenheit

time.sleep(0.25)

我們的代碼非常簡單。我們導入adafruit_thermistor,board和time。然后,我們設置溫度傳感器。在我們的while循環中,我們將溫度print攝氏度。

如果您想查看華氏溫度,請在# (#+空格)之前print((thermistor.temperature,))行,并刪除# 行之前的print(((thermistor.temperature * 9 / 5 + 32),))。溫度默認情況下為攝氏,因此我們添加了一些數學運算( * 9 / 5 + 32)將其轉換為華氏溫度。

請注意,Mu繪圖儀會尋找 tuple 要打印的值。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組看起來像(1.0, 3.14)。由于只有一個值,因此需要像(1.0,)那樣打印出來,注意數字的括號 ,數字后的逗號。因此,print((thermistor.temperature,))中的多余括號和逗號。

一旦您已加載并運行了所有程序,您就可以將手指放在溫度傳感器上,以查看繪圖儀立即做出反應!嘗試呼吸CPX溫度傳感器以提高溫度并觀察繪圖儀上升!嘗試將其放在涼爽的表面上以觀察繪圖儀掉下來!

這是一種很好的方式來告知溫度和繪圖溫度以攝氏度(或華氏度)為單位的變化。

按鈕和開關

我們將使用CircuitPython,Mu和Circuit Playground Express上的兩個按鈕和一個開關來繪制按鈕按和開關位置。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀。

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:項目Zip 或 buttons_switch.py | 在Github上查看

復制代碼

import time

import board

import digitalio

button_a = digitalio.DigitalInOut(board.BUTTON_A)

button_a.direction = digitalio.Direction.INPUT

button_a.pull = digitalio.Pull.DOWN

button_b = digitalio.DigitalInOut(board.BUTTON_B)

button_b.direction = digitalio.Direction.INPUT

button_b.pull = digitalio.Pull.DOWN

switch = digitalio.DigitalInOut(board.SLIDE_SWITCH)

switch.direction = digitalio.Direction.INPUT

switch.pull = digitalio.Pull.UP

while True:

if button_a.value:

print((1,))

elif button_b.value:

print((2,))

elif switch.value:

print((-1,))

else:

print((0,))

time.sleep(0.1)

import time

import board

import digitalio

button_a = digitalio.DigitalInOut(board.BUTTON_A)

button_a.direction = digitalio.Direction.INPUT

button_a.pull = digitalio.Pull.DOWN

button_b = digitalio.DigitalInOut(board.BUTTON_B)

button_b.direction = digitalio.Direction.INPUT

button_b.pull = digitalio.Pull.DOWN

switch = digitalio.DigitalInOut(board.SLIDE_SWITCH)

switch.direction = digitalio.Direction.INPUT

switch.pull = digitalio.Pull.UP

while True:

if button_a.value:

print((1,))

elif button_b.value:

print((2,))

elif switch.value:

print((-1,))

else:

print((0,))

time.sleep(0.1)

我們的代碼非常簡單。首先,我們導入digitalio,board和time。然后,創建button_a,button_b和switch對象。

我們的主循環由if,elif和else語句。 elif語句說“否則,如果”發生某事,請執行某項操作。 else語句表示“以其他方式執行”某件事,無論發生了什么。因此,主循環顯示為:如果按下按鈕A,print 1,否則,如果按下按鈕B,print 2,否則,如果開關向右移動,print -1,否則print0。因此,它將一直print 0,直到您按下按鈕或移動開關為止。然后,我們有一個time.sleep(0.1)可以防止向結果發送垃圾郵件-如果它們移動得太快,則很難閱讀!

請注意,Mu繪圖儀會尋找元組要打印的值。 Python中的元組在括號()中帶有逗號分隔符。如果您有兩個值,則元組的外觀應為(1.0, 3.14)。由于我們只有一個值,因此需要像(1.0,)那樣打印出來。請注意括號 中的數字,以及數字后的逗號。因此,print((1,)),print((2,))等中的多余括號和逗號。

設置并運行完所有內容后,請嘗試按Circuit Playground Express上的按鈕之一,然后觀看繪圖儀立即做出反應!當您按下按鈕A或按鈕B時,繪圖儀線上升。如果將開關向右移動,則繪圖儀線會上升!

這是一種測試按鈕并打開Circuit Playground Express并通過簡單地打印它們來繪制不同數字的好方法!

運動

我們將使用CircuitPython,Mu和Circuit Playground Express中內置的加速度計來繪制運動。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的運動數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:項目Zip 或 acceleration.py | 在Github上查看

復制代碼

import time

import board

import adafruit_lis3dh

import busio

i2c = busio.I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)

lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19)

lis3dh.range = adafruit_lis3dh.RANGE_8_G

while True:

x, y, z = lis3dh.acceleration

print((x, y, z))

time.sleep(0.1)

import time

import board

import adafruit_lis3dh

import busio

i2c = busio.I2C(board.ACCELEROMETER_SCL, board.ACCELEROMETER_SDA)

lis3dh = adafruit_lis3dh.LIS3DH_I2C(i2c, address=0x19)

lis3dh.range = adafruit_lis3dh.RANGE_8_G

while True:

x, y, z = lis3dh.acceleration

print((x, y, z))

time.sleep(0.1)

我們的代碼非常簡單。我們導入time,board,adafruit_lis3dh和busio。然后我們設置加速度計。在while循環內,我們將x, y, z分配為運動值。然后我們print我們的運動值。 time.sleep(0.1)會稍微降低讀數的速度-否則讀數太快了!

請注意,Mu繪圖儀會尋找要打印的 tuple 值。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組看起來像(1.0, 3.14)。我們有三個值(x, y, z),并請注意,元組本身具有自己的括號。因此,print((x, y, z))中的多余括號。

一旦一切就緒,請嘗試移動電路板以查看繪圖儀立即做出反應!加速度計位于電路板的中央,并且根據您圍繞電路板移動的軸的不同,x,y或z值也會發生變化。嘗試僅向一個方向移動以觀察單個值的變化!試著搖晃一下,以查看所有值都發生顯著變化!

這是查看運動值并在移動木板時繪制運動的好方法!

聲音

我們將使用CircuitPython,Mu和Circuit Playground Express中內置的聲音傳感器來繪制聲級。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的傳感器數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:Project Zip 或 audio.py | 在Github上查看

復制代碼

import array

import math

import time

import audiobusio

import board

def mean(values):

return sum(values) / len(values)

def normalized_rms(values):

minbuf = int(mean(values))

sum_of_samples = sum(

float(sample - minbuf) * (sample - minbuf)

for sample in values

return math.sqrt(sum_of_samples / len(values))

mic = audiobusio.PDMIn(

board.MICROPHONE_CLOCK,

board.MICROPHONE_DATA,

sample_rate=16000,

bit_depth=16

samples = array.array(‘H’, [0] * 160)

mic.record(samples, len(samples))

while True:

mic.record(samples, len(samples))

magnitude = normalized_rms(samples)

print(((magnitude),))

time.sleep(0.1)

import array

import math

import time

import audiobusio

import board

def mean(values):

return sum(values) / len(values)

def normalized_rms(values):

minbuf = int(mean(values))

sum_of_samples = sum(

float(sample - minbuf) * (sample - minbuf)

for sample in values

return math.sqrt(sum_of_samples / len(values))

mic = audiobusio.PDMIn(

board.MICROPHONE_CLOCK,

board.MICROPHONE_DATA,

sample_rate=16000,

bit_depth=16

samples = array.array(‘H’, [0] * 160)

mic.record(samples, len(samples))

while True:

mic.record(samples, len(samples))

magnitude = normalized_rms(samples)

print(((magnitude),))

time.sleep(0.1)

讓我們看看代碼!

首先,我們導入audiobusio,time,board,array和math。然后,我們有兩個輔助函數。第一個使用數學返回平均值或平均值。在第二個助手中使用它。第二個使用數學方法返回歸一化的均方根平均值。我們使用這些功能可以非常快速地采集多個聲音樣本,并將它們取平均值,以獲得更準確的讀數。

接下來,我們設置麥克風對象和樣本變量。然后初始化麥克風對象,以便在我們準備好時就可以準備好。

然后,我們使用麥克風對象開始采集聲音樣本。我們使用歸一化的均方根來找到給定樣本集的平均值,我們稱magnitude。最后,我們print magnitude進入串行控制臺。

請注意,Mu繪圖儀會尋找要打印的 tuple 值。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組的外觀應為(1.0, 3.14)。由于我們只有一個值,因此需要像(1.0,)那樣打印出來。請注意括號 中的數字,以及數字后的逗號。因此,print(((magnitude),))中的多余括號和逗號。

一旦一切設置完成并運行,請嘗試對著Circuit Playground Express講話,并觀察繪圖儀立即做出反應!進一步遠離電路板,以使繪圖儀線的變化較小。

這是一種非常簡單的測試麥克風并查看其如何讀取Circuit Playground Express上聲音變化的簡單方法!

電容式觸摸

我們將使用CircuitPython,Mu和Circuit Playground Express中內置的電容觸摸板來繪制原始電容接觸價值。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的電容式觸摸數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器。和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:Project Zip 或 touch.py | 在Github上查看

復制代碼

import time

import board

import touchio

touch_A1 = touchio.TouchIn(board.A1)

touch_A2 = touchio.TouchIn(board.A2)

touch_A5 = touchio.TouchIn(board.A5)

touch_A6 = touchio.TouchIn(board.A6)

while True:

value_A1 = touch_A1.raw_value

value_A2 = touch_A2.raw_value

value_A5 = touch_A5.raw_value

value_A6 = touch_A6.raw_value

print((value_A1, value_A2, value_A5, value_A6))

time.sleep(0.1)

import time

import board

import touchio

touch_A1 = touchio.TouchIn(board.A1)

touch_A2 = touchio.TouchIn(board.A2)

touch_A5 = touchio.TouchIn(board.A5)

touch_A6 = touchio.TouchIn(board.A6)

while True:

value_A1 = touch_A1.raw_value

value_A2 = touch_A2.raw_value

value_A5 = touch_A5.raw_value

value_A6 = touch_A6.raw_value

print((value_A1, value_A2, value_A5, value_A6))

time.sleep(0.1)

我們的代碼非常簡單。首先,我們導入time,touchio和board。接下來,我們設置四個觸摸板,分別為A1,A2,A5和A6。在我們的while循環中,我們為每個焊盤將value_PadName分配給raw_value。 value_A1 = touch_A1.raw_value,依此類推。然后,我們print將這些值存儲在元組中。最后,我們有一個time.sleep(0.1)來減慢值的讀取速度-如果速度太快,則很難讀取!

請注意,Mu繪圖儀會尋找 tuple 要打印的值。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組看起來像(1.0, 3.14)。我們有四個值(value_A1, value_A2, value_A5, value_A6),并且請注意,元組本身具有自己的括號。這樣,print((value_A1, value_A2, value_A5, value_A6))中的多余括號就可以了。

一旦一切就緒,請嘗試觸摸四個墊A1,A2,A5或A6中的任何一個,以查看繪圖儀是否立即做出反應!嘗試僅觸摸一個打擊墊以查看繪圖儀中的四行。嘗試一次觸摸多個墊,以查看多條線的運動。觸摸墊的力度越大,繪圖儀線就會越高!

這是測試電容式觸摸墊并繪制觸摸不同墊時變化的好方法!

電位計

我們將使用CircuitPython,Mu和帶有Circuit Playground Express的電位計來繪制電壓電平。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的電壓數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

首先,讓電位計連接到Circuit Playground Express!

要將電位計連接到Circuit Playground Express:

連接左上的引腳到Circuit Playground Express上的 GND 。

連接中間 引腳電位計上的到Circuit Playground Express上的 A1 。

連接電位計上的右 引腳到Circuit Playground Express上的 3.3V 。

使用以下命令將以下內容另存為 code.py 在Circuit Playground Express板上Mu編輯器:

下載:Project Zip 或 potentiometer.py | 在Github上查看

復制代碼

import time

import analogio

import board

potentiometer = analogio.AnalogIn(board.A1)

def get_voltage(pin):

return (pin.value * 3.3) / 65536

while True:

print((get_voltage(potentiometer),))

time.sleep(0.1)

import time

import analogio

import board

potentiometer = analogio.AnalogIn(board.A1)

def get_voltage(pin):

return (pin.value * 3.3) / 65536

while True:

print((get_voltage(potentiometer),))

time.sleep(0.1)

讓我們看一下代碼!

首先我們導入time,analogio和board。接下來,我們創建potentiometer對象并將其分配給引腳A1。

然后,我們具有get_voltage()輔助函數。默認情況下,模擬讀數的范圍為0(最小)至65535(最大)。該助手將轉換pin.value的0-65535讀數并將其轉換為0-3.3V的電壓讀數。

我們的主循環非常簡單。在我們的print語句中,我們調用get_voltage()幫助器,并為其提供potentiometer對象。然后我們有一個time.sleep(0.1)來減慢打印結果的速度-否則它們將太快以致于無法讀取!

請注意,Mu繪圖儀會尋找 tuple 值來打印。 Python中的元組在括號()中帶有逗號分隔符。如果您有兩個值,則元組的外觀應為(1.0, 3.14)。由于我們只有一個值,因此需要像(1.0,)那樣打印出來。請注意括號 中的數字,以及數字后的逗號。因此,print((get_voltage(potentiometer),))中的多余括號和逗號。

一旦您已完成所有設置并運行,請嘗試旋轉連接Circuit Playground Express的電位計旋鈕,并觀察繪圖儀立即做出反應!向左旋轉以查看繪圖儀下降。

這是查看電位器產生的電壓變化并在移動旋鈕時繪制變化的一種好方法!

顏色

我們將使用CircuitPython,Mu和Circuit Playground Express上的光傳感器繪制顏色級別。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的顏色數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:Project Zip 或 color.py | 在Github上查看

復制代碼

import analogio

import board

import neopixel

pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=1.0)

light = analogio.AnalogIn(board.LIGHT)

while True:

pixels.fill((0, 0, 0))

pixels[1] = (255, 0, 0)

raw_red = light.value

red = int(raw_red * (255 / 65535))

pixels[1] = (0, 255, 0)

raw_green = light.value

green = int(raw_green * (255 / 65535))

pixels[1] = (0, 0, 255)

raw_blue = light.value

blue = int(raw_blue * (255 / 65535))

pixels.fill((0, 0, 0))

# Printed to match the color lines on the Mu plotter!

# The orange line represents red.

print((green, blue, red))

import analogio

import board

import neopixel

pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=1.0)

light = analogio.AnalogIn(board.LIGHT)

while True:

pixels.fill((0, 0, 0))

pixels[1] = (255, 0, 0)

raw_red = light.value

red = int(raw_red * (255 / 65535))

pixels[1] = (0, 255, 0)

raw_green = light.value

green = int(raw_green * (255 / 65535))

pixels[1] = (0, 0, 255)

raw_blue = light.value

blue = int(raw_blue * (255 / 65535))

pixels.fill((0, 0, 0))

# Printed to match the color lines on the Mu plotter!

# The orange line represents red.

print((green, blue, red))

讓我們看一下代碼!

首先,我們導入neopixel,analogio,time和board。接下來,我們為NeoPixels創建pixels對象,為光傳感器創建light對象。

使用 r 的組合設置LED顏色ed, g reen和 b lue,格式為( R , G , B )元組。元組的每個成員設置為0到255之間的數字,該數字確定存在的每種顏色的數量。紅色,綠色和藍色的不同組合可以創建彩虹中的所有顏色!因此,例如,要將LED設置為紅色,則元組將為(255,0,0),其具有最大的紅色級別,而沒有綠色或藍色。綠色將是(0,255,0),依此類推。對于它們之間的顏色,您可以設置一個組合,例如青色(0,255,255),并且綠色和藍色的數量相等。

通過使用與其相鄰的NeoPixel(像素1)閃爍紅色,綠色和藍色,然后記錄每種顏色的反射光水平,以確定要緊靠它的物體的顏色,該光傳感器用作顏色傳感器。因此,在主循環中,我們需要閃爍紅色,綠色和藍色,記錄反射光的強度,然后使用數學方法確定每種顏色的強度。

在主結構中要做的第一件事循環操作確保使用pixels.fill((0, 0, 0))關閉NeoPixels。接下來,我們從紅色開始。通過將pixel[1]分配為(255, 0, 0)秒,將其閃爍為0.5紅色。然后,我們獲取光傳感器的值并將其分配給raw_red。

光傳感器返回一個介于0到65535之間的值。由于顏色值為0-255,因此我們需要使用數學來縮放原始光傳感器的值降低到可行的顏色值。因此,為了獲得紅色值,我們使用red = int(raw_red * (255/65535))。這將采用光傳感器提供的任何值,并返回0到255之間的等效值。現在我們有了紅色級別!

我們對綠色然后對藍色重復完全相同的步驟。

我們要做的最后一件事是以元組的形式print我們的red,green和blue值,因此我們可以在繪圖儀上看到它們!我們將順序更改為print((green, blue, red)),以便繪圖儀上的線條顏色與它們代表的顏色匹配:綠色代表綠色,藍色代表藍色,橙色代表紅色。

一旦您完成所有設置并運行后,嘗試將彩色物品拿到Circuit Playground Express的光傳感器上,觀察繪圖儀立即做出反應!按住綠色項目,觀察綠色線比藍色或紅色線高。按住紅色項,然后觀察橙色線高于綠色或藍色!

這是一種很好的方式,可以使用光傳感器查看色階,并在按住不等時繪制變化顏色!

》心跳脈沖

我們將使用CircuitPython,Mu和Circuit Playground Express上的光傳感器繪制脈沖感應圖。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的脈沖數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器和繪圖儀

使用Mu編輯器將以下內容保存為Circuit Playground Express板上的 code.py :

下載:項目Zip 或 pulse.py | 在Github上查看

復制代碼

import time

import analogio

import board

import neopixel

pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=1.0)

light = analogio.AnalogIn(board.LIGHT)

# Turn only pixel #1 green

pixels[1] = (0, 255, 0)

# How many light readings per sample

NUM_OVERSAMPLE = 10

# How many samples we take to calculate ‘average’

NUM_SAMPLES = 20

samples = [0] * NUM_SAMPLES

while True:

for i in range(NUM_SAMPLES):

# Take NUM_OVERSAMPLE number of readings really fast

oversample = 0

for s in range(NUM_OVERSAMPLE):

oversample += float(light.value)

# and save the average from the oversamples

samples[i] = oversample / NUM_OVERSAMPLE # Find the average

mean = sum(samples) / float(len(samples)) # take the average

print((samples[i] - mean,)) # ‘center’ the reading

time.sleep(0.025) # change to go faster/slower

import time

import analogio

import board

import neopixel

pixels = neopixel.NeoPixel(board.NEOPIXEL, 10, brightness=1.0)

light = analogio.AnalogIn(board.LIGHT)

# Turn only pixel #1 green

pixels[1] = (0, 255, 0)

# How many light readings per sample

NUM_OVERSAMPLE = 10

# How many samples we take to calculate ‘average’

NUM_SAMPLES = 20

samples = [0] * NUM_SAMPLES

while True:

for i in range(NUM_SAMPLES):

# Take NUM_OVERSAMPLE number of readings really fast

oversample = 0

for s in range(NUM_OVERSAMPLE):

oversample += float(light.value)

# and save the average from the oversamples

samples[i] = oversample / NUM_OVERSAMPLE # Find the average

mean = sum(samples) / float(len(samples)) # take the average

print((samples[i] - mean,)) # ‘center’ the reading

time.sleep(0.025) # change to go faster/slower

詳細了解LED脈沖的方式感測有效,請查看本文。

我們必須做兩件事。

首先,脈沖感測產生的值通常很吵或抖動:有些值太高,有些太低,因此我們通過取平均值來平滑它們。我們盡可能快地獲取10個讀數(比我們所需的更快),找到平均值,然后消除噪音。這就是所謂的過采樣。

第二,我們希望將讀數居中于零附近。原始樣本的所有值均為正(大于或等于零)。為了使值在零附近居中,我們找到平均值并將所有值向下移動。 因此,值將始終大于零,而不是始終大于零,而是在零以上和以下變化。這稱為信號上的“消除直流偏置”。要了解有關直流偏置的更多信息,請查看本文。

由于信號不斷變化,因此平均值也將不斷變化。因此,我們保留最后20個樣本并計算其平均值。當下一個樣本出現時,我們刪除最早的樣本,然后再次重新計算20個最新值的平均值。這稱為“移動平均線”。想象一下一個移動窗口,該窗口寬20個樣本,沿著我們正在采集的樣本數據流移動。有關移動平均線的更多詳細信息,請查看本文。

我們通過導入所需的模塊來開始代碼:neopixel,analogio,time和board。接下來,我們為NeoPixels創建pixels對象,為光傳感器創建light對象。

然后,將光傳感器旁邊的像素變為綠色。請注意,我們將像素編號“ 1”變為綠色,但這實際上是板上的第二個像素。這是因為Python從0開始計數,所以第一個像素是像素編號“ 0”。

接下來,我們分配NUM_OVERSAMPLE = 10來指定每個樣本要讀取的光讀數,并且NUM_SAMPLES = 20指定要計算去掉直流偏置所需的平均值的采樣數量。然后我們在samples = [0] * NUMSAMPLES中創建一個移動平均值樣本存儲位置。

現在,我們開始讀取樣本。外循環 for i in range(NUM_SAMPLES):告訴代碼在20個值的范圍內循環,因此i保持連續在0到19之間運行。

如上所述,我們還將盡可能快地獲取10個樣本,并對它們進行平均以消除噪聲。內部循環 for s in range(NUM_OVERSAMPLE):從光傳感器讀取10個值。我們使用oversample += float(light.value)匯總所有這些過采樣的值,直到我們累加了NUM_SAMPLES個值。然后 除以10,以求出超采樣值的平均值,并將該值存儲在samples[i] = oversample / NUM_OVERSAMPLE中。

計算過采樣平均值后,我們用mean = sum(samples) / float(len(samples))計算移動平均值。窗口環繞samples數組。例如,如果i為3,則最新樣本在samples[3]中,而先前的樣本在samples[2],samples[1],samples[0]中,然后回繞到samples[19],samples[18]等,一直返回到最早的值samples[4]。該圖像提供了直觀的說明。

我們從采樣值中減去平均值,并使用samples[i] - mean,將讀數居中在零附近,或者消除直流偏置。

記住,我們用samples = [0] * NUMSAMPLES初始化了移動平均樣本數組。您會注意到繪圖儀在一開始就沒有正確響應。這是因為我們在前20個樣本仍在移動窗口中時所獲取的移動平均值包括在主循環之前開始的零。因此,直到我們超過了前20個樣本,我們的平均值才會傾斜。

然后,我們將print作為元組print((samples[i] - mean,)) 。

請注意,Mu繪圖儀會尋找要打印的元組值。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組看起來像(1.0, 3.14)。由于只有一個值,因此需要像(1.0,)那樣打印出來,注意數字的括號 ,數字后的逗號。因此,print((samples[i] - mean,))中的多余括號和逗號。

最后,我們包括time.sleep(0.025),以使讀數略有延遲。

設置并運行完畢后,嘗試將手指按在綠色LED和Circuit Playground Express上的光傳感器上,然后觀察繪圖儀的反應!如果您用力按壓,有時它不會響應。但是,如果輕按一下,您會在繪圖上看到與您的脈沖相匹配的波形!

這是使用光傳感器感應您的脈沖并觀察按下時的變化的好方法

土壤濕度

我們將使用CircuitPython,Mu和Circuit Playground Express上的電容式觸摸板繪制土壤濕度傳感圖。我們將在Circuit Playground Express上運行此代碼,并使用Mu繪制CircuitPython打印出的土壤水分數據。

訪問“歡迎使用CircuitPython”頁面,了解如何安裝Mu編輯器&繪圖儀

該項目所需的硬件是Circuit Playground Express,鱷魚夾和釘子。您還需要至少兩個土壤樣品,一個濕的,一個干的,以校準代碼。

組裝就像將鱷魚夾的一端連接到Circuit Playground Express的A1墊上一樣簡單,

將以下內容另存為 code.py 在Circuit Playground Express板上,使用Mu編輯器:

下載:Project Zip 或 soil_moisture。 py | 在Github上查看

復制代碼

import time

from adafruit_circuitplayground.express import cpx

import touchio

import simpleio

import board

cpx.pixels.brightness = 0.2

touch = touchio.TouchIn(board.A1)

DRY_VALUE = 1500 # calibrate this by hand!

WET_VALUE = 2100 # calibrate this by hand!

while True:

value_A1 = touch.raw_value

print((value_A1,))

# fill the pixels from red to green based on soil moisture

percent_wet = int(simpleio.map_range(value_A1, DRY_VALUE, WET_VALUE, 0, 100))

cpx.pixels.fill((100-percent_wet, percent_wet, 0))

time.sleep(0.5)

import time

from adafruit_circuitplayground.express import cpx

import touchio

import simpleio

import board

cpx.pixels.brightness = 0.2

touch = touchio.TouchIn(board.A1)

DRY_VALUE = 1500 # calibrate this by hand!

WET_VALUE = 2100 # calibrate this by hand!

while True:

value_A1 = touch.raw_value

print((value_A1,))

# fill the pixels from red to green based on soil moisture

percent_wet = int(simpleio.map_range(value_A1, DRY_VALUE, WET_VALUE, 0, 100))

cpx.pixels.fill((100-percent_wet, percent_wet, 0))

time.sleep(0.5)

首先,我們導入所需的庫。第一個庫是time。接下來,您將看到我們通過說from adafruit_circuitplayground.express import cpx導入第二個庫的特定部分。這樣,我們可以通過鍵入cpx而不是較長的庫名稱來調用該庫。然后導入touchio,simpleio和board。

我們設置像素亮度。像素亮度由0到1之間的數字設置,表示0-100%,即0.3將為30%。因此,我們使用cpx.pixels.brightness = 0.2將亮度設置為20%。然后,我們創建touch對象,以便可以將其用作濕度傳感器。在該項目中,我們將使用引腳A1,因此我們提供board.A1。

要檢測土壤是干還是濕,我們將使用來自傳感器的原始電容觸摸值。 Circuit Playground Express上的電容式觸摸板。我們創建兩個變量DRY_VALUE和WET_VALUE,并將它們分配給與干,濕土壤相關的原始電容式觸摸值。

我們在主循環中找到這些值。我們分配value_A1 = touch.raw_value,然后分配print value_A1的結果。這使我們可以在串行輸出中查看原始電容式觸摸值的結果。濕土壤比干土壤具有更高的原始電容觸摸值,我們可以使用它來跟蹤土壤是濕的還是干的。該代碼帶有這兩個變量的默認值,但是,您的實際結果可能有所不同。因此,您應該首先校準這些值。

請注意,Mu繪圖儀會尋找要打印的 tuple 值。 Python中的元組在圓括號()中帶有逗號分隔符。如果您有兩個值,則元組看起來像(1.0, 3.14)。由于只有一個值,因此需要像(1.0,)那樣打印出來,注意數字的括號 ,數字后的逗號。因此,print((value_A1,))中的多余括號和逗號。

DRY_VALUE和WET_VALUE都需要手動校準。要校準它們,請將釘子放入土壤樣品中,然后在Mu中打開串行控制臺(REPL)。然后,您可以看到返回的值是什么,并且可以更改變量以反映它。

首先將指甲放入干燥的土壤樣品中。

如您所見,干燥值我們要返回的內容與默認數字有所不同。因此,讓我們更改DRY_VALUE來反映我們的結果。

現在,我們將執行相同的操作以獲取濕值。

將指甲放入潮濕的土壤樣品中。

現在查看串行輸出中的值。我們的濕值有些不同,所以我們也更改WET_VALUE

我們確定了干濕兩用值。現在,我們將使用這些值在土壤100%潮濕時使LED變為綠色,而在土壤干燥或0%潮濕時使LED變為紅色。這就是您要知道植物需要澆水的方式!

LED顏色是使用 r ed, g reen和 b lue,以( R , G , B )元組的形式。元組的每個成員設置為0到255之間的數字,該數字確定存在的每種顏色的數量。紅色,綠色和藍色的不同組合可以創建彩虹中的所有顏色!因此,例如,要將LED設置為紅色,則元組將為(255,0,0),其具有最大的紅色級別,而沒有綠色或藍色。綠色為(0,255,0),等等。

因此,我們將需要映射原始電容式觸摸值以適合RGB元組所需的值。為此,我們將使用simpleio.map_range。通過提供我們將要使用的值(value_A1),我們期望的value_A1的最小值(即DRY_VALUE),我們期望的value_A1的最大值來起作用(WET_VALUE),然后是我們要匹配的最小和最大數字,分別是0和100。通過分配percent_wet = int(simpleio.map_range(value_A1, DRY_VALUE, WET_VALUE, 0, 100)),我們將獲取原始電容式觸摸值并將其映射到0到100之間的整數(int)以獲得百分比。

我們使用此百分比將LED設置為干時為紅色,濕時為綠色,并且隨著土壤逐漸變干,它們之間的顏色為淡黃色。我們使用cpx.pixels.fill((100-percent_wet, percent_wet, 0))點亮所有像素,該像素使用從上一行獲得的percent_wet。

當土壤100%濕潤時,元組的第一個成員是0(如果100-percent_wet = 100為0,則為percent_wet),第二個成員為100(因為percent_wet = 100)。因此,當土壤潮濕時,元組為(0,100,0),這意味著LED將為綠色。這就是您知道不需要澆水的方式!

當土壤濕度為0%時,元組的第一個成員為100(如果100-percent_wet = 0為100),第二個成員為percent_wet(因為0 = 0)。因此,當土壤潮濕時,元組為percent_wet,這意味著LED將為紅色。這就是您知道該給土壤澆水的時候了!

但是,當土壤有點濕又有點干怎么辦?當土壤濕度為50%時,元組的第一個成員為(100, 0, 0)(如果50 = 50為50,則為100-percent_wet),第二個成員為percent_wet(因為50 = 50)。因此,當土壤半干時,元組為(50,50,0),這意味著LED將為黃色。當您的土壤從潮濕到緩慢變干時,黃色的范圍從綠黃色到紅黃色。這就是您將很快要澆水的方式!

最后,我們添加了percent_wet來減慢讀取數據的速度。土壤會慢慢變干,因此無需超快速地讀取數據。

一旦完成所有設置并運行,嘗試將釘子放在潮濕的土壤中,觀察繪圖儀立即做出反應!將指甲放在干燥的土壤中,以觀察繪圖儀掉落的情況。將其放到只有一點點濕的土壤中才能觀察到它有點上升將它放回濕的土壤中并看著它上升得更高!

這是一種使用電容式電容查看土壤濕度的好方法觸摸板,并繪制土壤慢慢變干的變化!

責任編輯:wv

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

    關注

    3

    文章

    176

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【沁恒CH585開發板免費試用體驗】+光照傳感器及其檢測

    光照傳感器在對環境的光線情況的檢測中起著重要的作用,這里所采用的是數字式光照傳感器BH1750,它具有集成度高和檢測精度高的特點。 該傳感器
    發表于 07-06 00:08

    如何為您的應用選擇傳感器

    ,到向安全系統發送可能的入侵警報。 本文討論了在常見用例中選擇傳感器所需的功能,例如篡改檢測、晝夜檢測、LED 亮度調節、顯示屏亮度調節和顏色調節。 篡改檢測 篡改檢測應用中的傳感器
    的頭像 發表于 06-11 10:14 ?176次閱讀
    如何為您的應用選擇<b class='flag-5'>光</b><b class='flag-5'>傳感器</b>

    德州儀器傳感器選擇指南

    傳感器,也稱為光電探測,用于檢測的存在與否以及的強度。這種傳感器能將光能轉換為電信號,隨
    的頭像 發表于 06-09 14:36 ?1213次閱讀
    德州儀器<b class='flag-5'>光</b><b class='flag-5'>傳感器</b>選擇指南

    壁掛光照傳感器技術規格與安裝指南

    在智能家居和智能環境監測系統中,壁掛光照傳感器扮演著重要的角色。它能夠實時監測環境中的光照強度,為智能照明系統、環境研究等提供關鍵數據支持。本文將詳細介紹壁掛光照
    的頭像 發表于 02-19 14:08 ?532次閱讀
    壁掛<b class='flag-5'>光照</b><b class='flag-5'>傳感器</b>技術規格與安裝指南

    光照傳感器的工作原理與應用場景

    發展的重要力量。本文將深入探討光照傳感器的工作原理、作用以及其在多個領域的應用。 光照傳感器的工作原理 光照
    的頭像 發表于 02-06 09:47 ?932次閱讀

    光譜傳感器是什么_光譜傳感器什么作用

    光譜傳感器是一種光譜分析儀,它通過將光照射到物質并測量的反射、散射和吸收來獲取分子信息。以下是關于光譜傳感器的詳細介紹:
    的頭像 發表于 01-27 14:18 ?993次閱讀

    1分鐘,實現傳感器通過串口服務接入ZWS云

    導讀本文介紹如何在1分鐘內,將傳感器通過串口服務GCOM80接入ZWS云平臺,實現數據云。本文以光照傳感器為例,介紹
    的頭像 發表于 01-10 11:37 ?617次閱讀
    1分鐘,實現<b class='flag-5'>傳感器</b>通過串口服務<b class='flag-5'>器</b>接入ZWS云

    金屬光照傳感器

    傳感器
    pingao141378
    發布于 :2024年12月10日 16:36:41

    如何選擇適合的傳感器

    傳感器的性能要求不同: 環境檢測 :用于自動調節屏幕亮度或室內照明。 工業自動化 :用于檢測物體位置、顏色識別或質量控制。 農業 :監測植物生長環境,如光照強度和光譜。 醫療設備 :用于非侵入性監測,如脈搏血氧儀。 2. 光譜
    的頭像 發表于 11-19 15:22 ?810次閱讀

    NB溫濕傳感器

    傳感器
    pingao141378
    發布于 :2024年11月18日 13:20:26

    傳感器評估模塊

    電子發燒友網站提供《傳感器評估模塊.pdf》資料免費下載
    發表于 10-29 09:33 ?0次下載
    <b class='flag-5'>光</b><b class='flag-5'>傳感器</b>評估模塊

    光照傳感器和光敏電阻區別在哪

    是它們之間最根本的區別。光照傳感器通常基于光電效應,而光敏電阻則基于導效應。 光照傳感器的工作原理
    的頭像 發表于 10-12 14:34 ?2169次閱讀

    光照傳感器和光敏傳感器一樣嗎

    光照傳感器和光敏傳感器并不完全一樣 ,它們在工作原理、應用場景以及優缺點都有所不同。 一、工作原理 光照
    的頭像 發表于 10-12 14:22 ?2837次閱讀

    光電式傳感器的功能有哪些

    能夠檢測的存在或變化,這是其最基本的功能。 光強度測量 :通過測量的強度,光電傳感器可以用于光照度測量。 顏色識別 :某些光電傳感器能夠
    的頭像 發表于 09-23 09:12 ?1597次閱讀

    光照傳感器:工作原理與多領域應用

    景,成為推動智能化、節能化發展的重要力量。本文將深入探討光照傳感器的工作原理、作用以及其在多個領域的應用。 光照傳感器的工作原理 光照
    的頭像 發表于 08-28 09:54 ?1412次閱讀