# 早鳥 EV3 ~ Python 學習手冊 (2) 責任編輯:Ryan 教練: 大叔 --- ## 課程清單 1. 發光二極體 (LED) 2. 使用 EV3 的螢幕 3. 按鈕 4. 使用馬達 5. 遠端控制 6. 使用感測器 7. 喇叭和語音 8. 使用超音波 --- ## 專題清單 1. Free Style 循紅線直行 (自由發揮) 2. 專業版循紅線直行 ## 準備工作 每個 Python 程序都應該有一些基本部分。使用此模板開始: ```python= #!/usr/bin/env python3 from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank from ev3dev2.sensor import INPUT_1 from ev3dev2.sensor.lego import TouchSensor from ev3dev2.led import Leds # TODO: 把程式碼加在這裡 ``` 第一行應該包含在為 ev3dev 編寫的每個 Python 程序中。它允許您從 Brickman 運行此程序,Brickman 是您在設備屏幕上看到的圖形菜單。其他行是 import 語句,使您可以訪問庫功能。如果要使用其他類型的設備或其他實用程序,則將所需類別加入即可。 ## 總課程:常用 "from" ```python= #Movetank 為雙輪同時控制, Movesteering 為進階, from ev3dev2.motor import MediumMotor, LargeMotor, MoveTank, Movesteering, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D # 陀螺儀感測器, 顏色、環境光感測器, 按鈕感測器, 超音波感測器, 紅外線感測器 (以上依序) from ev3dev2.sensor.lego import GyroSensor, ColorSensor, TouchSensor, UltrasonicSensor, InfraredSensor #可明確選擇你要的腳位(實例:雙顏色感測器) from ev3dev2.sensor import INPUT_1, INPUT_2, INPUT_3 INPUT_4 #聲音函式庫 from ev3dev2.sound import Sound # 按鈕函式庫 from ev3dev2.button import Button #EV3's LED 函式庫 from ev3dev2.led import Leds # 時間函式庫 # delay from time import sleep ``` ## 總課程:常用 "函式" ```python= # XX = tag #motor, 如欲使用movetank 請在()內加一個 speed (speed, speed2, ?) XX.on(speed), .on_for_seconds(speed, seconds) .on_for_rotations(speed, rotation), .on_for_degrees(speed, degrees) #sensor ``` ## 課程一:發光二極體 (LED) ```python= ts = TouchSensor() # 取用 Touch Sensor 資訊 leds = Leds() # 取用 LED 資訊 print("Press the touch sensor to change the LED color!") while True: # 無窮迴圈 if ts.is_pressed: # 如果 TouchSensor 被按下 leds.set_color("LEFT", "GREEN") # 設定左邊的 LED 為綠色 leds.set_color("RIGHT", "GREEN") # 設定右邊的 LED 為綠色 else: # 否則 leds.set_color("LEFT", "RED") # 設定左邊的 LED 為紅色 leds.set_color("RIGHT", "RED") # 設定右邊的 LED 為紅色 ``` ## 課程二:使用 EV3 的螢幕 ## 課程三:按鈕 ### 讓我們先看看 LEGO MINDSTORM 的做法 * ![](https://i.imgur.com/7IJpHZF.png) * 上圖是選擇要偵測哪個按鈕被觸發 * ![](https://i.imgur.com/yOXL05H.png) * 上圖是選擇偵測按鈕的觸發動作;0= 鬆開,1= 按壓,2= 碰撞 ### 再看看 EV3 Python 的做法 1. 加入 Button & Sound 的函式庫 2. 取得 Button & Sound 的狀態 3. 判斷那個按鈕被按下 4. 實驗1:按下任一 Button 嗶一聲 ```python= from ev3dev2.sound import Sound # 匯入 Sound 到模組 from ev3dev2.button import Button # 匯入 Button 到模組 sound = Sound() # 取得 Sound 的資訊 btn = Button() # 取得 Button 的資訊 print('Press any button') while True: if btn.any(): # 偵測是否按下任意按鈕 sound.play_tone(1500, 1) # 播放聲音 頻率1500 1秒 ``` 5. 實驗2: * 按下 Left button 嗶一聲 頻率1000 * 按下 Right button 嗶兩聲 頻率2000 * 按下 Up 或 Down button 嗶一聲 頻率3000 * 同時按下 上下左右 button 嗶三聲 頻率4000 ```python= from ev3dev2.sound import Sound # 匯入 Sound 到模組 from ev3dev2.button import Button # 匯入 Button 到模組 from time import sleep sound = Sound() # 取得 Sound 的資訊 btn = Button() # 取得 Button 的資訊 print('Press any button') while True: if btn.check_buttons(buttons=['left']): # 偵測是否按下左邊按鈕 sound.play_tone(1000, 1) # 播放聲音 頻率1000 1秒 if btn.check_buttons(buttons=['right']): # 偵測是否按下右邊按鈕 sound.play_tone(2000, 1) sound.play_tone(2000, 1) if btn.check_buttons(buttons=['up']) or btn.check_buttons(buttons=['down']): # 偵測是否按下上或下邊按鈕 sound.play_tone(3000, 1) if btn.check_buttons(buttons=['right','left','up','down']): # 偵測是否同時按下上下左右的按鈕 sound.play_tone(4000, 0.1) sound.play_tone(4000, 0.1) sound.play_tone(4000, 0.1) sleep(0.1) ``` ## 課程四:使用馬達 實驗1: 按一下 Touch Sensor 就啟動馬達 ```python= ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下 lmA.on(speed=70) # 馬達 A 開啟速度70 lmB.on(speed=70) # 馬達 B 開啟速度70 ``` 實驗2: 按一下 Touch Sensor 就啟動馬達,再按一下就停止馬達 ## 課程五:遠端控制 ## 課程六:使用感測器 實驗1: 按一下 Touch Sensor 就啟動馬達,直到紅線停止。(可重複啟動) ```python= from ev3dev2.sound import Sound # 匯入 Sound 到模組 from ev3dev2.button import Button # 匯入 Button 到模組 from time import sleep from ev3dev2.motor import LargeMotor,SpeedPercent,OUTPUT_A,OUTPUT_B from ev3dev2.sensor.lego import TouchSensor from ev3dev2.sensor.lego import ColorSensor ts = TouchSensor() lmA = LargeMotor(OUTPUT_A) # 取得 LargeMotor B 的資訊 lmB = LargeMotor(OUTPUT_B) # 取得 LargeMotor A 的資訊 sound = Sound() # 取得 Sound 的資訊 btn = Button() # 取得 Button 的資訊 print('Ready') color_sensor = ColorSensor() ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下 lmA.on(speed=70) # 馬達 A 開啟速度70 lmB.on(speed=70) # 馬達 B 開啟速度70 while True: text = color_sensor.color_name # 取得顏色的名稱 if text == 'Red': # 如果顏色是紅色 lmA.off() # 馬達 A 關閉 lmB.off() # 馬達 B 關閉 ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下 lmA.on(speed=70) # 馬達 A 開啟速度70 lmB.on(speed=70) # 馬達 B 開啟速度70 ``` 實驗2: 掃地機器人 * 環境:80cm * 80cm 紅色框框,Robot 在框框內掃地且不能超出紅色範圍 ```python= from ev3dev2.sound import Sound # 匯入 Sound 到模組 from ev3dev2.button import Button # 匯入 Button 到模組 from time import sleep from ev3dev2.motor import LargeMotor,SpeedPercent,OUTPUT_A,OUTPUT_B from ev3dev2.sensor.lego import TouchSensor from ev3dev2.sensor.lego import ColorSensor ts = TouchSensor() lmA = LargeMotor(OUTPUT_A) # 取得 LargeMotor B 的資訊 lmB = LargeMotor(OUTPUT_B) # 取得 LargeMotor A 的資訊 sound = Sound() # 取得 Sound 的資訊 btn = Button() # 取得 Button 的資訊 print('Ready') color_sensor = ColorSensor() ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下 lmA.on(speed=40) # 馬達 A 開啟速度70 lmB.on(speed=40) # 馬達 B 開啟速度70 while True: text = color_sensor.color_name # 取得顏色的名稱 if text == 'Red': # 如果顏色是紅色 lmA.off() # 馬達 A 關閉 sleep(1) # 等待一秒鐘 lmA.on(speed=40) # 馬達 A 開啟速度70 ``` ## 課程七: ## 專題製作 ### Free Style 循紅線直行 (自由發揮) ```python= from ev3dev2.sound import Sound # 匯入 Sound 到模組 from ev3dev2.button import Button # 匯入 Button 到模組 from time import sleep from ev3dev2.motor import LargeMotor,SpeedPercent,OUTPUT_A,OUTPUT_B from ev3dev2.sensor.lego import TouchSensor from ev3dev2.sensor.lego import ColorSensor ts = TouchSensor() lmA = LargeMotor(OUTPUT_A) # 取得 LargeMotor B 的資訊 lmB = LargeMotor(OUTPUT_B) # 取得 LargeMotor A 的資訊 sound = Sound() # 取得 Sound 的資訊 btn = Button() # 取得 Button 的資訊 print('Ready') color_sensor = ColorSensor() # 取得 ColorSensor ts.wait_for_pressed(timeout_ms=None, sleep_ms=10) # 等待 TouchSensor 按下 lmA.on(speed=40) # 馬達 A 開啟速度70 lmB.on(speed=40) # 馬達 B 開啟速度70 while True: text = color_sensor.color_name # 取得顏色的名稱 if text == 'Red': # 如果顏色是紅色 lmB.off() # 馬達 B 關閉 sleep(0.4) # 停止 0.4 秒 lmB.on(speed=50) # 馬達 B 開啟速度50 lmA.on(speed=20) # 馬達 A 開啟速度20 ``` ### 專業版循紅線直行 ## 課程八: ## 函式庫文件: https://python-ev3dev.readthedocs.io/en/ev3dev-stretch/