你有沒有想過回家接受一次私人的歡迎?一個樹莓皮和一些簡單的組件,你可以!在這個簡單的項目中,我們將使用簧片開關在門打開時觸發主題曲。我們將使用樹莓Pi作為控制器在這裡,雖然你可以使用幾乎任何其他微控制器為這個項目使用相同的電路。這是一個演示。
你可能已經擁有了所有的零件,你需要做這個除了簧片開關,這是大約2-3美元,或者你可以得到一包5略高於8美元在這裡。
我們將使用樹莓皮播放一首歌曲時,房間是進入,並設計了一個電路與按鈕在我們的實驗板上啟動它的延遲,並停止程序。
這個項目,雖然主要是為了好玩,涵蓋了DIY家庭自動化和DIY家庭安全的許多應用的基礎知識
讓我們先做一個電路。確保Pi未通電,並按以下方式設置電路:
LED連接到pi上的引腳7。兩個按鈕開關連接到針腳11和13,簧片開關連接到針腳15。我們的電源連接到引腳1(3v3)和引腳6(Gnd)。
一定要檢查所有東西都在正確的地方。
當你在測試這個項目的時候,把簧片開關放在你面前可能會有幫助,這樣你就可以很容易地打開或關閉它。在這種情況下,簧片開關已經安裝在門的上方。一旦項目啟動並運行,您可以使用膠帶將開關臨時連接到門上,或者如果您更有信心,您可以更永久地連接它,以便在將來的項目中使用!
將您的Pi的3.5毫米插孔輸出連接到揚聲器系統。一旦把所有的東西放在一起,它應該是這樣的:
注意,這裡使用的麵包板的電源軌與上面的燒結圖相反。
現在打開Pi,並使用SSH訪問它,這樣我們就可以訪問終端了。如果您不確定如何做到這一點,本指南可以幫助您。如果您正在使用帶有顯示器、鼠標和鍵盤的Raspberry Pi,請跳過此步驟並打開終端。
在開始之前,值得檢查一下你是否是最新的。類型
sudo apt-get update進入終點站。
現在我們可以繼續讓Pi和電路對話了。
首先,讓我們用一個簡單的程序檢查電路。如果你確信你已經把所有的事情都安排好了,那麼你可以跳過這一步,儘管我建議你這樣做,因為這樣可以避免以後的頭痛。
如果您以前從未使用Python編程,並且感到有點膽怯,那麼有許多優秀的網站可以幫助您入門。
在終端中,創建一個新腳本:
nano test.py打開後,將此代碼添加到文件中,然後按Ctrl-C退出,出現“保存”對話框:
#This code was written for an article on www.makeuseof.com by Ian Buckley.import RPi.GPIO as GPIOimport timeGPIO.setwarnings(False)GPIO.setmode(GPIO.BOARD)GPIO.setup(7,GPIO.OUT)GPIO.setup(11,GPIO.IN)GPIO.setup(13,GPIO.IN)GPIO.setup(15,GPIO.IN)while True: GPIO.output(7,GPIO.HIGH) if (GPIO.input(11)==1): print("Button on GPIO 11") time.sleep(1) if (GPIO.input(13)==1): print("Button on GPIO 13") time.sleep(1) if (GPIO.input(15)==1): print("Button on GPIO 15") time.sleep(1)GPIO.cleanup()此代碼讀取按鈕的值,並在按鈕更改時打印到屏幕上。這兩個按鈕有下拉電阻,所以按下時會顯示高電平。簧片磁鐵開關在其伴隨的磁鐵閉合時報告高。
運行程序:
python test.py當您按下兩個按鈕並將磁鐵從簧片開關上拔下時,您應該會看到LED燈亮起,並向屏幕報告。如果你按下按鈕時沒有收到反饋,請再次檢查電路,確保一切正常連接。完成測試後,按CTRL-C停止程序。
現在我們可以編寫一個簡單的程序來設置、觸發和重置車門傳感器。我們將把代碼分成幾個部分,並簡要解釋每個部分的作用,不過如果您想看到完整的代碼,請向下滾動查看完整的代碼。
我們需要從導入一些模塊開始:
import Rpi.GPIO as GPIOimport pygame.mixerimport time我們將使用Pygame模塊來播放我們的音樂。它是Raspbian Jessie的標準配置,是**Python遊戲和許多其他令人驚歎的項目所需的一切的優秀庫。
我們將使用一個名為active的變量來決定系統是否處於活動狀態。讓我們定義兩個函數來為我們實現這一點:
def activeSetup(): global active active=0 print("Currently Not Active")def activeState(): global active if active==1: active=0 GPIO.output(7,GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0,10): GPIO.output(7,GPIO.HIGH) time.sleep(0.5) GPIO.output(7,GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7,GPIO.HIGH) print("Currently Active") else: return這裡的第一個函數創建一個名為active的變量,並將其設置為0。給活動狀態一個數字值意味著如果你計劃以後擴展你的程序來擁有不同的活動狀態,你可以相應地給它們編號。雖然它可能不是世界上最好的Python編程,但對於這個項目來說,它已經足夠了。
調用第二個函數時,檢查系統是否處於活動狀態(或活動==1)。如果是,它會將系統設置為非活動(活動==0),關閉LED,並打印到控制檯。如果不是,它會給你一個10秒的倒計時,讓你離開LED閃爍的房間,然後繼續亮著,表示系統處於活動狀態。
現在我們可以定義一個函數來監視簧片磁鐵開關:
def watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5)我們在這裡創建了另一個變量playing,這個變量的作用是在觸發開關時停止程序重複播放。
在while循環中,第一個if語句啟動音樂(我們還沒有任何if語句,但不用擔心,它會出現)。只有當系統處於活動狀態、簧片開關打開且尚未播放時,才允許啟動音樂。
第二個if語句用於退出按鈕。如果按下此按鈕,音樂停止,程序退出。
第三個if語句用於切換系統是否處於活動狀態。這個時間。睡眠這裡的功能是在按下按鈕時防止多個按鈕讀取。
現在是時候設置圓周率的引腳。
GPIO.setmode(GPIO.BOARD)GPIO.setup(7, GPIO.OUT,initial=GPIO.LOW)GPIO.setup(11,GPIO.IN)GPIO.setup(13,GPIO.IN)GPIO.setup(15,GPIO.IN)如果你在這之前做過Pi的任何實驗,你應該很熟悉。首字母=GPIO.低在引腳7的設置參數設置為低,一旦它是初始化。
現在我們可以調用函數,在程序啟動時將系統設置為不活動。
activeSetup()在這一點上,我們應該開始思考要演奏的音樂。你可以選擇任何你想要的音樂文件,但我們現在將選擇一些對每個人都可用的。如果你看YouTube,你可能已經熟悉凱文·麥克勞德的音樂了。讓我們下載一首他寫的美妙的曲子,叫做“獨眼大師”。這一點,連同他網站上的大部分音樂,都是在Creative Comm***下授權的,並且有很多很好的理由在你的項目中使用這些授權的內容。
回到我們的代碼中,我們需要啟動Pygame混合器並加載我們的調子。
pygame.mixer.init(44100,-16,2,1024)pygame.mixer.music.set_volume(1.0)name = "One-eyed Maestro.mp3"pygame.mixer.music.load(name)print("Loaded track - "+ str(name))此塊的第一行啟動Pygame混頻器。括號中的最後一個參數是緩衝區,它控制播放聲音的延遲。如果您在以後播放音樂時遇到斷斷續續的播放,請嘗試將此數字增加到4096。設置,因為他們是工作沒有問題的一個Pi 3。
如果您將音樂文件下載到您的門.py當您定義name變量時,您需要在括號內提供完整的路徑。
現在剩下要做的就是建立一個循環,等待我們激活或退出程序。
while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() breakGPIO.cleanup()此while循環等待來自任一按鈕的輸入,並相應地退出或將狀態更改為active。如果active的狀態變為1,那麼我們前面定義的watchDoor函數將被調用,下次門打開時,我們的曲調將播放。我們也叫GPIO.cleanup文件()在退出時重置引腳,這通常是Raspberry Pi上所有編程的良好實踐。
這就是我們需要做的一切,讓這個項目開始運行,下面是完整的代碼:
import RPi.GPIO as GPIOimport pygame.mixerimport timedef activeSetup(): global active active=0 print("Currently Not Active")def activeState(): global active if active==1: active=0 GPIO.output(7,GPIO.LOW) print("Currently Not Active") elif active==0: print ("Activating in 10 seconds") for x in range(0,10): GPIO.output(7,GPIO.HIGH) time.sleep(0.5) GPIO.output(7,GPIO.LOW) time.sleep(0.5) active=1 GPIO.output(7,GPIO.HIGH) print("Currently Active") else: returndef watchDoor(): global playing playing = False while True: if active==1 and GPIO.input(15)==1 and playing == False: playing=True pygame.mixer.music.play() if GPIO.input(13)==1: print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if GPIO.input(11)==1: activeState() time.sleep(0.5)GPIO.setmode(GPIO.BOARD)GPIO.setup(7, GPIO.OUT,initial=GPIO.LOW)GPIO.setup(11,GPIO.IN)GPIO.setup(13,GPIO.IN)GPIO.setup(15,GPIO.IN)activeSetup()pygame.mixer.init(44100,-16,2,1024)pygame.mixer.music.set_volume(1.0)name = "One-eyed Maestro.mp3"pygame.mixer.music.load(name)print("Loaded track - "+ str(name))while True: if(GPIO.input(13)==1): print("Stop button pressed: Exiting") pygame.mixer.music.stop() break if(GPIO.input(11)==1): activeState() time.sleep(0.5) if(active==1): watchDoor() breakGPIO.cleanup()如果你直接滾動到這裡獲取完整的代碼,記住你仍然需要下載音樂到你的Pi上才能工作!
現在你應該有一個功能歡迎回家主題曲!把簧片開關裝到門上,然後試一下。尷尬的舞蹈是可選的,但建議。
這個項目涵蓋了家庭監控,安全和自動化的許多形式的基礎知識,希望是有趣的!
既然你已經走了這麼遠,何必到此為止?你可以添加更多的曲目,讓程序從列表中隨機選擇一首。您可以添加一箇中繼,並在進入時觸發其他對象。如果你有家庭音樂系統,為什麼不為每個房間都放一首主題曲呢?
你會設計你自己的歡迎回家的信息嗎?你家裡的簧片開關在其他方面有沒有發明?如果是這樣的話,請在下面的評論部分對你正在計劃或已經做的事情發表評論!
...些非常類似的事情,當我們教你如何發揮自己的主題曲,當你進入房間。只需稍加修改,相框就可以完全Pi供電,當你看著別人按下按鈕時,你可以練習邪惡的笑容。 ...
你很高興用你的樹莓皮。也許是遊戲中心,或者是媒體中心。希望你已經嘗試了一些其他用途,這個難以置信的多功能的小電腦。但它安全嗎? ...
一看樹莓皮向你表明,微型化影響生活的方方面面-甚至復古遊戲!有了Raspberry Pi 3和4,幾乎所有復古遊戲平臺都可以模仿。 ...
... 當你可以創造自己的世嘉創世紀時,花錢買一個重新包裝的世嘉創世紀毫無意義! ...
... 當你可以用Kinect控制你的Windows PC,用Leap Motion控制你的Mac時,是什麼阻止了你揮手控制Pi音樂播放器?這種由手勢控制的“Wavepad”也非常容易構建和使用。 ...
... 這幾乎是一個反射動作:當你的Pi的作業系統安裝好後,你就把它連線到你的本地網路上。實際上,如果您已經使用NOOBS工具安裝了作業系統,那麼它甚至可能已經連線好了。 ...
... 可以說,Pi最常用的用途是作為媒體中心。當你花不到40美元就能得到你所需要的一切時,為什麼還要花錢買智慧電視呢? ...
... 有沒有想過你在咖啡館裡有多活躍?我決定帶著我信任的樹莓皮去當地的咖啡連鎖店,花些時間觀察顧客的行為。他們要喝多少茶和咖啡? ...