raspberry pi - amazon web...
TRANSCRIPT
姓名標示 — 非商業性 — 相同方式分享
CC (Creative Commons)
姓名標示 — 你必須給予 適當表彰、提供指向本授權條款的連結,以及 指出(本作品的原始版本)是否已被變更。你可以任何合理方式為前述表彰,但不得以任何方式暗示授權人為你或你的使用方式背書。
非商業性 — 你不得將本素材進行商業目的之使用。
相同方式分享 — 若你重混、轉換本素材,或依本素材建立新素材,你必須依本素材的授權條款來散布你的貢獻物。
4
● element14 指定台灣地區 Raspberry Pi 個人用戶經銷商
about 台灣樹莓派
http://farnell.com/raspberrypi-consumer/approved-retailers.php?region=apac&MER=MER-LM-OB-RPICC-76315
● 專注於 Raspberry Pi 應用與推廣
● 舉辦社群聚會 / 工作坊 / 讀書會 / 黑客松
● Website :● https://www.raspberrypi.com.tw/
● Facebook : ● 搜尋 RaspberryPi.Taiwan● https://www.facebook.com/RaspberryPi.Taiwan
about 台灣樹莓派
6
● COSCUP, MakerConf, PyCon 講者
● 投影片
● http://www.slideshare.net/raspberrypi-tw/presentations● 程式碼
● https://github.com/raspberrypi-tw
分享 x 社群
7
● 發放材料 + 介紹 /15mins● 連線測試 /15mins● 小車組裝 + LAB1 /40mins● 馬達解釋 + LAB2 /30mins ● GPIO 控制 + LAB3 /30mins ● 轉向 /L298N 解釋 + LAB4 /30mins● Web+UI+ 控制 + LAB5 /40mims● 小車拆解 /15mins
今日時程
8
● 根據底下的編號 % 連線到 RPi-AP%● wpa-psk : 1234567890
● 筆電連線成功後 , 用 ssh 連線到 Pi● ip : 192.168.%.1
● 帳號 / 密碼: pi/raspberry
連線測試
9
● 使用 scp● 一個實做 SCP(Secure Copy Protocol) 的應用程式
● 透過 SSH(Secure Shell) 傳輸資料
● Windows 請安裝 WinSCP
● http://winscp.net/eng/download.php
● 從 Pi 複製檔案到 PC 上
● scp [email protected]:/home/pi/file.txt .● scp file.txt [email protected]:/home/pi
如何讓 Pi 和 PC 互傳檔案?
http://winscp.net/
23
● 直流馬達 (DC motors)● 伺服馬達 (Servo motors)● 步進馬達 (Stepper motors)
馬達種類
https://learn.adafruit.com/adafruit-motor-selection-guide
25
直流 ( 碳刷 ) 馬達
https://learn.adafruit.com/adafruit-motor-selection-guide
永久磁鐵定子
轉子和線圈
整流子
電源
Fleming's Left Hand Rule
28
● GPIO = General Purpose Input Output● GPIO is a flexible software-controlled digital signal● A generic pin on an IC
2. 透過 GPIO 控制馬達
http://raspberrypihobbyist.blogspot.tw/2012/09/so-many-inputs-so-few-gpio-pins.html
29
Raspberry Pi Model B 的 GPIO (P1)
http://elinux.org/RPi_Low-level_peripherals
SPI / I2C / UART / PWM
Pin1 Pin2
Pin25 Pin26
Pin3 Pin4ZZ字型的腳位編號
30
#!/usr/bin/python ●
● import RPi.GPIO as GPIO # 載入模組
● import time ●
● GPIO.setmode(GPIO.BOARD) # 選擇系統 ( 以實體腳位系統為例 )
● LED_PIN = 12
● GPIO.setup(LED_PIN, GPIO.OUT) # 定義腳位●
● print("LED is on")
● GPIO.output(LED_PIN, GPIO.HIGH) # 設定腳位狀態
● time.sleep(3)
●
● GPIO.cleanup() # 清理
一分鐘學會用 Python 控制 GPIO
32
MOTOR_PIN = 16
GPIO.setmode(GPIO.BOARD)
GPIO.setup(MOTOR_PIN, GPIO.OUT)
try:
while True:
print("Motor start ...")
GPIO.output(MOTOR_PIN, GPIO.HIGH)
time.sleep(2)
print("Motor stop !!!")
GPIO.output(MOTOR_PIN, GPIO.LOW)
time.sleep(2)
finally:
GPIO.cleanup()
轉 -停 - 轉 -停 -
35
● 一種可放大、開關、穩壓、信號調節的元件● 由於微處理器的輸出微弱,無法驅動大型負載● 但可透過電晶體放大訊號,控制外部裝置
3. 透過電晶體驅動馬達
https://learn.adafruit.com/adafruit-motor-selection-guidehttp://de.wikipedia.org/wiki/Transistor
常用符號
36
水管閥門功能
https://learn.adafruit.com/adafruit-motor-selection-guidehttp://commons.wikimedia.org/wiki/File:Transistor_animation.gif
E(射極 )射出電流
C(集極 )收集電流B(基極 ) 控制閥門
微小電流就可控制
允許大電流通過
推動大型負載
腳位意義 (依功能分 )
實際運作情形
37
控制電路
https://learn.adafruit.com/adafruit-motor-selection-guidehttps://ctheds.wordpress.com/2007/10/30/tip-120/
38
MOTOR_PIN = 16
GPIO.setmode(GPIO.BOARD)
GPIO.setup(MOTOR_PIN, GPIO.OUT)
try:
while True:
print("Motor start ...")
GPIO.output(MOTOR_PIN, GPIO.HIGH)
time.sleep(2)
print("Motor stop !!!")
GPIO.output(MOTOR_PIN, GPIO.LOW)
time.sleep(2)
finally:
GPIO.cleanup()
轉 -停 - 轉 -停 -
41
● C極外部電源提供馬達轉動
● B極發送控制訊號讓電晶體導通
● 一個電晶體電路可控制馬達轉動
回顧剛剛的電路圖
https://learn.adafruit.com/adafruit-motor-selection-guidehttp://www.robotoid.com/my-first-robot/rbb-bot-phase2-part1.htmlE(射極 )射出電流
C(集極 )收集電流
B(基極 ) 控制閥門
42
● 每一個節點都是電晶體控制電路
控制馬達轉向 - H橋式電路
https://learn.adafruit.com/adafruit-motor-selection-guidehttp://www.robotoid.com/my-first-robot/rbb-bot-phase2-part1.html
43
如何用程式控制?
https://learn.adafruit.com/adafruit-motor-selection-guide
連接 作用
Q1 和Q4 順時鐘轉動
Q3和Q2 逆時鐘轉動
Q1 和Q3 煞車
無 慣性自由轉動
Q1 和Q2 短路 !
Q3和Q4 短路 !
http://www.robotoid.com/my-first-robot/rbb-bot-phase2-part1.html
44
如何用程式控制?
https://learn.adafruit.com/adafruit-motor-selection-guide
連接 作用
Q1 和Q4 順時鐘轉動
Q3和Q2 逆時鐘轉動
Q1 和Q3 煞車
無 慣性自由轉動
Q1 和Q2 短路 !
Q3和Q4 短路 !
http://www.robotoid.com/my-first-robot/rbb-bot-phase2-part1.html
可是 ...
1.不小心給錯電就會把電晶體燒掉
2.一個馬達要搭配四個電晶體電路
3.我想要一次控制兩個馬達的轉動
45
L298N 馬達控制板
OUT1OUT2
OUT3OUT4
電源開關 馬達電源輸入
ENA : OUT1, OUT2生效 IN1 IN2 IN3 IN4
馬達控制接腳:
IN1-2 : OUT1-2IN3-4 : OUT3-4
ENB : OUT3, OUT4生效
5V電源輸出
PWM輸入輸出
46
單輪電路圖 (L298N要和 Pi共接地 )L298N RPiIN1(Green) Pin16(GPIO4)IN2(Yellow) Pin18(GPIO5)
馬達A
L298N MotorOUT1(Yellow) 馬達 A(Yellow)OUT2(Green) 馬達 A(Green)
47
Motor_R1_Pin = 16
● Motor_R2_Pin = 18
GPIO.setmode(GPIO.BOARD)
GPIO.setup(Motor_R1_Pin, GPIO.OUT)
GPIO.setup(Motor_R2_Pin, GPIO.OUT)
try:
GPIO.output(Motor_R1_Pin, True) # clockwise
time.sleep(3)
GPIO.output(Motor_R1_Pin, False)
● time.sleep(1) # protect motor
GPIO.output(Motor_R2_Pin, True) # counterclockwise
time.sleep(3)
GPIO.output(Motor_R2_Pin, False)
finally:
GPIO.cleanup()
控制單輪正反轉
51
雙輪電路圖L298N RPiIN1(Green) Pin16(GPIO4)IN2(Yellow) Pin18(GPIO5)IN3(Purple) Pin11(GPIO0)IN4(Orange) Pin13(GPIO1)
馬達A馬達B
L298N MotorOUT1(Yellow) 馬達 A(Yellow)OUT2(Green) 馬達 A(Green)OUT3(Purple) 馬達 B(Green)OUT4(Orange) 馬達 B(Yellow)
52
● def stop():
# stop all wheels
def forward():
GPIO.output(16, True)
GPIO.output(18, False)
GPIO.output(11, True)
GPIO.output(13, False)
time.sleep(1)
stop()
try:
ch = sys.argv[1]
if ch == 'w':
forward()
finally:
GPIO.cleanup()
控制小車移動
● 一個軟體● 回應從 80/8080 port 進來的 HTTP要求● 可透過 CGI 或 module 方式擴充
● 如 Apache, Nginx, Boa
網頁伺服器 (Web Server)
http://www.resultantsys.com/index.php/general/what-is-a-web-application-server/
$ nano bottle_hello.py
from bottle import *
@route('/')
def index():
return "Hello Bottle"
if __name__ == "__main__":
run(host='0.0.0.0', port=8080)
Hello Bottle
$ sudo python app-hello.py Bottle v0.12.8 server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.
192.168.1.101 - - [13/Aug/2015 20:08:32] "GET / HTTP/1.1" 200 12
192.168.1.101 - - [13/Aug/2015 20:08:32] "GET /favicon.ico HTTP/1.1" 404 746
執行