iT邦幫忙

2024 iThome 鐵人賽

DAY 22
1
Python

使用 WiFiBoy Python 玩學機來學物聯網應用 系列 第 22

22. 紅外線測距感測器

  • 分享至 

  • xImage
  •  

無人搬運車 AGV AMR

AGV(Automated Guided Vehicle,無人搬運車)是一種自動化運輸設備,通常在工廠、倉庫、醫院等場所用來搬運物品。

  1. 紅外線技術在 AGV 中的原理

    • 導航:AGV 可以使用紅外線反射標記來進行導航。在這種系統中,地面或牆面上放置反射標記,AGV 配備的紅外線發射器和接收器會發出紅外線,當紅外線碰到標記時會反射回來,AGV 透過接收到的信號來確定自己的位置和行進路徑。
    • 障礙物檢測:紅外線可以用來檢測 AGV 路徑上的障礙物。AGV 上的紅外線感測器會發出紅外線,如果有障礙物,紅外線會反射回來,AGV 會根據反射信號來判斷障礙物的距離並進行減速、停車或繞行。
    • 通訊:紅外線也可以用於 AGV 與其他設備之間的短距離通訊。例如,AGV 可以使用紅外線與充電站或控制系統交換資料。
  2. 紅外線技術應用實例

    • 工廠自動化:在製造工廠中,用來運輸原材料和成品。紅外線導航系統可以幫助 AGV 在工廠的複雜環境中準確地移動,避開其他移動的機械和工作人員。
    • 倉庫管理:在大型倉庫中,利用紅外線技術實現精確的物料搬運,減少人力並提高搬運效率。
  3. 紅外線技術的優勢

    • 精確度高:紅外線技術能夠提供高精度的導航和檢測,適合需要精確操作的環境。
    • 成本相對較低:紅外線元件成本相對較低,且易於實現,適合在大規模生產中應用。
    • 抗干擾能力強:在特定波長下,紅外線不易受到其他光線的干擾,使其在複雜環境中依然能穩定運作。
  4. 挑戰與限制

    • 遮擋問題:紅外線屬於直射光,一旦被障礙物遮擋,可能會影響信號傳輸和導航精度。
    • 環境依賴性:環境中的灰塵、煙霧或強烈的光線可能影響紅外線的傳播效果,導致導航失準。

在AGV無人搬運車的障礙偵測技術上,有相當長的應用歷史,且相對穩定許多。但是紅外線唯一的天敵就是深色表面,甚至是黑色表面的物體,由於黑色表面對於紅外線來說,會有「吸光」的效果,也就是打到黑色或深色表面的紅外線,能夠反射回到接受器的值趨近於零。

為什麼車子可以沿著黑線走?

參考 Web: Bit 循跡自走的教學介紹:

「循跡」這個功能,是透過 MoonCar 底盤前方的那兩個 IR 循線感測器來感應路面上的路線狀況。這兩個循線感應器,會根據路面狀況產生反應,並在 MoonCar 底盤上方相對應位置的 綠色 LED 反映出相對應的結果。

黑色會吸收紅外光線,其他顏色則會反射紅外光。因此,可用黑色筆或膠帶來畫(貼)出希望行走的軌跡。實作時,我們可以先用(套件附贈的)黑色膠帶,在地面或桌面貼出要讓 MoonCar 行走的路徑。

一定有讀者會問,為什麼不用影像辨識?影像辨識需要大量的 CPU 運算,成本太高。用三個紅外線循線感測器,不到 100 元台幣。

透過三個一組的組合,要來偵測黑色軌道,就可以輕鬆用實惠的方法解決。

我們可以參考 CAVEDU 教育團隊的 Jetbot 升級新技能 part 1:結合紅外線感測器來循跡!
解說,您會更清楚偵測判斷的方式。(但要注意的是,這篇文章用的是黑底白線的地圖,跟平常常見的例子比較不同,但原理還是一樣。)

程式實作

WiFiBoy 玩學機要怎麼接線呢?

  • GND --> GND(WBIO 2)
  • VCC --> USB(WBIO 1)
  • OUT --> IO2(WBIO 4)
from machine import Pin
from utime import sleep

# 初始化紅外線感測器的引腳
left_sensor = Pin(2, Pin.IN)    # 左側感測器連接到 GPIO 2
center_sensor = Pin(5, Pin.IN)  # 中間感測器連接到 GPIO 5
right_sensor = Pin(21, Pin.IN)   # 右側感測器連接到 GPIO 21

def read_sensors():
    left = left_sensor.value()
    center = center_sensor.value()
    right = right_sensor.value()
    return left, center, right

def check_track():
    left, center, right = read_sensors()
    if center == 1 and left == 0 and right == 0:
        print("AGV 運行正常")
    elif left == 1 and center == 0:
        print("AGV 偏離軌道: 要往右調整")
    elif right == 1 and center == 0:
        print("AGV 偏離軌道: 要往左調整")
    else:
        print("AGV 脫離軌道")

while True:
    check_track()
    sleep(0.1)

除了判斷軌道是否有偏離外,我們也可以利用距離太遠紅外線幾乎不反射的特性,來做一個防車輛掉落的偵測器。

當距離地面很近,回傳值為 0 代表沒有掉落的危險。如果回傳值為 1 則代表紅外線發散沒有收到回傳值,即很有機會會掉落,此時應該車輛停止甚至是要往後退。

from machine import Pin
from utime import sleep

while True:
    center = Pin(2, Pin.IN, Pin.PULL_DOWN)
    print(center.value())
    if center.value() == 1:
        wb.cls()
        wb.str("Dangerous!", 10, 20, 5)
    else:
        wb.cls()
    sleep(1)

參考資料

  1. 無人搬運車
  2. 電子組裝線無人搬運車
  3. MicroPython智慧自走車工作坊
  4. Web:Bit 循跡自走
  5. 86Duino EduCake 實作自走車
  6. Jetbot 升級新技能 part 1:結合紅外線感測器來循跡!

上一篇
21. 兩台玩學機互傳訊息
下一篇
23. 紅外線傳送與接收
系列文
使用 WiFiBoy Python 玩學機來學物聯網應用 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言