Tag Archives: python

[好朋友專題分享]自製Raspberry Pi 2 兩輪自平衡車

本篇文章感謝 CAVEDU 好朋友 Kevin 授權轉貼,好東西就是要讓更多人知道,也請大家點擊原文到 Kevin 的部落格留言發問喔!程式碼 Github 請點我

這台機器人 3/29 會出現在 CAVEDU Day喔,快點報名來看看吧~

0. 前言

本文將介紹如何利用Raspberry Pi自行製作一台兩輪自平衡車(segway)。先聲明一下, 這方面我只是初學者, 自動控制與工程數學理論都還給老師很久了,寫這篇純粹是為了拋磚引玉, 希望有經驗的高手們也能分享經驗.

1. 硬體需求

  • Raspberry Pi + 外殼 + WiFi網卡。我用的是Pi 2, 請自行先燒錄並安裝 Raspbian 作業系統來開機。WiFi網卡是edimax的, 安裝方法不另贅述
  • DC motors + 輪胎 + 車架 + 壓克力板 + 銅柱
    我從這裡買的,我當時買到的馬達規格是減速比1:34. 我想1:21應該更好。其它的馬達如果轉速夠快扭力夠大應該也可以用, 有經驗的朋友們請幫忙分享心得。
  • L293D IC 馬達驅動IC
    我從這裡買的
  • MPU6050六軸感測器
    我從這裡買的。順便也買到焊接針腳, 這樣就可以將感測器固定到麵包板上了.

2. 機構組裝

  • 上面是我買的那一包車體零件開箱照
  • 依照說明安裝車體, 包括L架, 馬達, 輪胎, 最後把壓克力板還有銅柱都裝上去。請參考這裡的組裝圖
  • 裝完以後的樣子

(其實拍完上面那一張照片,下一分鐘我的Pi就摔到地面, 透明壓克力盒就摔破了…)

這裡要說明一下, 車體零件內附的銅柱是 3cm的, 如果您的Pi外殼超過3cm 會塞不進去, 可以考慮換銅柱. 或是更換Pi的外殼。我是考量原廠外殼太重,卡榫又容易摔斷,所以後來換了一款薄型類似名片盒的外殼。又輕又耐摔。最上面那一片壓克力板是準備要來放麵包板的。

4. 安裝線路

開始插麵包板吧

這裡簡單說明一下電路,MPU6050模組是使用I2C介面,有四根線需要接上Raspberry Pi 的 GPIO腳位,分別是:

Vcc –> RPi GPIO header pin#1 (3.3V),
SDA –> RPi GPIO header pin#3 (SDA)
SCL –> RPI GPIO header pin#5 (SCL)
GND –> RPi GPIO header pin#6 (GND)

關於馬達的部分,我使用常見的L293D 驅動IC。
GPIO header pin#11, pin#13, pin#15 控制左輪, 接到L293D的pin#2, pin#7, pin#1
GPIO header pin#16, pin#18, pin#22 控制右輪, 接到L293D的pin#15, pin#10, pin#9
L293D的pin#3, pin#6 接左輪馬達
L293D的pin#14, pin#11 接右輪馬達
Vs 接 12V DC
Vss 接 5V DC
(Vs & Vss 這兩隻腳不要搞混)

還有就是 L293D 需要有夠高的電壓來源才能驅動馬達,我的做法是買一個 12V DC 1A 變壓器,再配一個轉接頭再接上麵包板,這樣才能供應 L293D 的 Vs (pin#8)。

還要注意一點就是,請把車體前後的接線整理固定好,因為後面做平衡調校測試的時候一定會摔車好多次,前後的線路就是首當其衝, 最好都用束線帶綁好。全部都固定完畢的樣子

IMAG0077

後面我們會講到用軟體測試上面的接線是否正確.

5. 軟體部份

這裡我們要搞定I2C, 並且使用wiringPi函式庫。它有基本GPIO功能又支援I2C 讀取MPU6050資料,還有SoftPWM 功能可以控制DC motors轉速,真是一舉數得呀!!

安裝步驟如下

先安裝i2c driver.

$ sudo apt-get install libi2c-dev

設定下次開機要啟動 i2c driver,

$ sudo vi /etc/modules

增加以下兩行到裡面, 儲存.
i2c-bcm2708
i2c-dev

有一個blacklist檔案要檢查
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf

確認裡面沒有以下兩行, 如果有出現, 請在前面都加上 #符號 (也就是把他comment掉), 儲存.

#blacklist spi-bcm2708
#blacklist i2c-bcm2708

然後Pi要重新開機
$ sudo bash; sync;sync;reboot

開機回來後, 要確認i2c driver kernel module 有正常啟動

$ lsmod |grep i2c
i2c_dev                 6027  0
i2c_bcm2708             4990  0

安裝 git
$ sudo apt-get install git-core

下載並安裝 wiringPi

$ cd
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ sudo ./build

6. 測試MPU6050

先安裝測試工具
$ sudo apt-get install i2c-tools

執行這個工具測試 i2c bus上是否有看到MPU6050.

$ sudo i2cdetect -y 0 (for a Revision 1 board)
or
$ sudo i2cdetect -y 1 (for a Revision 2 board)

如果看到以下輸出… 注意那個”68″, 就表示已經正常抓到MPU6050了.

0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          — — — — — — — — — — — — —
10: — — — — — — — — — — — — — — — —
20: — — — — — — — — — — — — — — — —
30: — — — — — — — — — — — — — — — —
40: — — — — — — — — — — — — — — — —
50: — — — — — — — — — — — — — — — —
60: — — — — — — — — 68 — — — — — — —
70: — — — — — — — —

再來我們要下載測試程式嘗試抓取加速度計(accelerometer) & 陀螺儀(gyroscope meter)數據.

下載測試程式, 並編譯

$ cd
$ git clone https://github.com/wennycooper/mpu6050_in_c.git
$ cd mpu6050_in_c
$ cat README.md

$ gcc -o mpu6050_accl ./mpu6050_accl.c  -lwiringPi -lpthread -lm
$ gcc -o mpu6050_gyro ./mpu6050_gyro.c  -lwiringPi -lpthread -lm

現在來看看加速度的數據, 請執行以下程式:

$ sudo ./mpu6050_accl

應該要看到X, Y, Z 加速度數據, 如下:
My acclX_scaled: 0.140625
My acclY_scaled: -0.031006
My acclZ_scaled: 0.994141
My X rotation: -1.768799
My Y rotation: -8.047429

其中 acclX, acclY, acclZ 是三軸加速度數據
(單位是g, 沒錯! 就是物理課本上面的重力加速度 g=9.8m/s^2)
My X/Y rotation 是換算出來的角度 (單位是 degree).

請試著將車體前傾或後仰, 看看數據的變化.
如果您安裝MPU6050 的方向正確的話, 車體前傾或後仰應該會看到 Y rotation 介於 -90度 ~ 90度.

再來看看陀螺儀的數據, 請執行以下程式:

$ sudo ./mpu6050_gyro

應該要看到X, Y, Z軸的角速度, 單位是 degree/s
My gyroZ_scaled: -1.954198
My gyroX_scaled: -4.312977
My gyroY_scaled: 0.458015
My gyroZ_scaled: 0.366412
My gyroX_scaled: -4.053435
My gyroY_scaled: 0.427481
My gyroZ_scaled: -0.160305

請嘗試著觀察轉動瞬間與數據的變化, 就會理解陀螺儀數據了。這裡說明一下,單純用上面那個加速度計不就可以推算出傾斜角度不是嗎? 為何需要用到陀螺儀數據呢?主要是因為加速度數據很容易浮動, 後來有人發明了使用陀螺儀數據再補上加速度數據的方法, 這樣就能算出比較穩定可靠的傾斜角度。這套方法叫做 “complementary filter”. 詳細說明請看文末的參考文件.

7. 測試DC motors

現在我們用 wiringPi 寫一個程式測試 DC motors.

$ cd
$ git clone https://github.com/wennycooper/dcMotor.git
$ cd dcMotor
$ cat README.md

$ gcc -o dcMotor0 dcMotor0.c -lwiringPi -lpthread

準備要讓馬達轉囉!! 請確認12V電源有正常插上, 並把車體用手拿起來, 執行程式!!

$ sudo ./dcMotor0

如何?? 正常的話兩個馬達應該正轉5秒鐘, 再反轉5秒鐘, 最後停止.
馬達如果沒有轉, 表示前面步驟執行有錯, 請回頭去檢查.
如果有轉, 請確認兩個馬達都有轉同樣方向, 如果反向, 請把一個馬達接腳兩根交換, 應該可以改善.

還要注意一點, 您的兩個馬達都有轉得很 “夠快” 嗎??
如果轉得很慢, 比方說每秒鐘大約才2轉, 很有可能是L293D 的部分接線有問題, 請回頭再確認!!

轉速太慢可能會造成車體傾斜時馬達來不及將車體導正, 這樣就無法平衡了.

8. 最後整合

令人興奮的時刻要來了!! 我們要把上面所有的努力全部整合到一起!!
請下載並編譯最後這套兩輪自平衡車控制程式.

$ cd
$ git clone https://github.com/wennycooper/mySegway.git
$ cd mySegway
$ gcc -o mySegway ./mySegway.c ./motors.c  -lwiringPi -lpthread -lm

這程式會根據測到的數據, 努力保持車體平衡.
如果傾斜角度過大(>60度), 會自動讓馬達停止.

9. 執行

由於每一台車體平衡角度不一樣, 本程式開始執行的時候是假設車體已平衡, 並取出當下角度作為基準點, 再努力透過馬達運作努力保持角度。這意思是說: “程式啟動瞬間請保持車體平衡

有一點點難度,我的做法是左手放車子到地面,扶著它盡量保持車體平衡,然後平衡瞬間右手敲鍵盤執行程式。以下是結果錄影

如果不成功, 可能原因如下:

1. 馬達驅動方向和感測器方向相反, 可能需要改一下motors.c speed 的方向
2. 如果馬達有往正確的方向轉, 但還是傾倒, 可能是角度太大, 馬達轉速不夠或扭力不夠.
3. 執行啟動的時候沒有保持平衡, 請再執行一次
4. 不一樣的車體, 高度, 重心都不一樣, 可能需要改 PID參數
5. 其他我也不知道的原因

最後祝福各位也能夠成功!!

參考文件

  • http://blog.bitify.co.uk/2013/11/interfacing-raspberry-pi-and-mpu-6050.html
  • http://blog.bitify.co.uk/2013/11/reading-data-from-mpu-6050-on-raspberry.html
  • https://projects.drogon.net/raspberry-pi/wiringpi/software-pwm-library/
  • http://robotrabbit.blogspot.tw/2012/07/pid.html
  • http://www.bajdi.com/building-a-self-balancing-bot/

[Raspberry Pi 2]樹莓派2效能測試,使用Chrome 瀏覽器與 openCV

RaspberryPi 2號稱CPU效能比過去快上六倍,快六倍究竟是什麼樣的感覺呢?這次使用Linux系統的Google Chrome與opecncv這兩個需要消耗較大CPU運算來做測試。剛拿到樹莓派2的朋友們,要讓過去系統可以相容於Pi 2請看這篇

這次使用top指令來觀察Pi2的系統執行能力,首先輸入:

$top

002

出現上圖的視窗,以灰色的一行作分類,上半部顯示的是Pi2的四核心運算率,分別是:CPU0、CPU1、CPU2、CPU3,如果沒有出現,按數字鍵[1]即可

下半部顯示的是正在執行的命令,如果出現的資料太多,按下鍵盤的[i]鍵就會切換顯示方式

  • USER:顯示執行命令的帳號
  • %CPU:顯示CPU的使用率
  • %MEN:顯示記憶體的使用率
  • COMMAND:執行的命令名稱

讓我們來看看在Pi B+執行 Google Chrome 的速度如何?

我們可以看到執行 Chrome需要使用CPU 高達 70%的運算,在整個系統上資源使用量是排第一名,右下角的圖形化CPU也是整片都滿滿的綠色,代表CPU全部的使用率達百分之百。Pi B+只有CPU0可以進行運算,系統跑起來會LAG,如果要執行其他程式需要等待約一到數分鐘才能打開。

接著來看看Pi2執行 Chrome 又是如何?

如圖所見,這個瀏覽器開了兩個分頁,但是CPU只使用了百分之30,而且在運算上會分擔給四個CPU,所以每個CPU執行的速度還是很快,由於我還開了其他的程式,例如截圖軟體,所以Chrome在使用整個系統的資源量是排第七第八名。

接著來看看Pi B+執行OPENCV佔的資源如何:

CPU使用率佔百分之七十,系統使用資源量排名第一,不用說整個CPU圖片為滿滿的綠色。

接著看Pi2執行opencv

CPU使用為 59%,我們看看右下角,CPU使用量顯示,綠色居然沒超過四分之一,小編實地測試,使用Pi2時,opencv只要畫素高,經過計算會照成圖片顯示DELAY,但是總CPU使用量不會超過四分之一,應該是Pi2作業系統(OS)的使用預設是不會讓單一程式佔走大部分的運算資源,在使用時,不會讓使用者感覺系統LAG,經過測試,Pi2在需要較高運算的程式上,的確比之前的Pi快上許多。

目前CAVEDU 已經開始供貨給玩家囉,Raspberry Pi2售價是台幣1500元,Raspberry Pi B+是900元,Raspberry Pi B 降價成500元!!歡迎到我們的FB粉絲頁商城訂購~~

[python] JSON 與 Facebook 取讚,可以直接執行在 Arduino Yun 的 Linux 中喔!

各個版本的 Facebook 取讚都玩過了,想不到用 python 居然只要… 不到10行啊…

螢幕截圖使用 Coding Ground (大推的線上程式編譯網站,超多程式可以玩),本份 code 可以直接執行在 Arduino Yun 的 Linux 中喔!

歡迎回顧一下我們 Arduino Yun 的相關文章 與 App Inventor 的 Web 元件教學1234

import urllib2
import json

req = urllib2.Request('http://graph.facebook.com/CAVEEducation')
response = urllib2.urlopen(req)             
html = response.read()                      

data = json.loads(str(html))
print('# of CAVEDU FB fanpage likes:',data['likes'])
python to retrieve FB fanpage # of likes

[python 與 EV3] 讀取 MindSensors LightSensorArray 光感測器模組的原始值

在樂高 EV3 上安裝 Debian 作業系統之後, 來讀取MindSensors LightSensorArray 光感測器模組的原始值。這是一個把八個光感測器整合在一起的模組,可說是循線利器。每個感測器都可以根據光量變化回傳 0~100 的數值。

10934431_10203429295989662_60478272_n

先來看影片,配音員聽說很帥

相關資訊:

python on EV3 機器人 – 整理好的 img 檔送給您!

python on EV3 機器人-基礎python撰寫

 

程式碼:

from ev3.ev3dev import Key,Msensor
import time

key=Key()
light=Msensor(port = 1)  #將感測器接在1號輸入端

while key.backspace != True:  #按下EV3 的灰色退出鍵就跳出程式
	val=[]
	val.append(light.value0)
	val.append(light.value1)
	val.append(light.value2)
	val.append(light.value3)
	val.append(light.value4)
	val.append(light.value5)
	val.append(light.value6)
	val.append(light.value7)
	for i in range(7):
		print val[i],
	print val[7]
	time.sleep(0.1)   #等候0.1秒
Get MindSensors LightSensor Array module's raw value

用 python 取得 Facebook 粉絲頁面讚數

本範例使用 python3 中的 httpclient 函式庫來取得 Facebook 粉絲頁的指定欄位(讚數!) 先來看看咱們相關的App Inventor 網路爬文教學。本文程式碼請拉到頁面最下方。

螢幕快照 2015-01-11 下午10.23.28

這樣後續可以做的事情可真不少,例如CAVEDU 設計首席小游的取讚轉盤

#!/usr/bin/env python3
import json
import http.client

if __name__ == '__main__':
    conn = http.client.HTTPConnection('graph.facebook.com', 80)
    conn.request('GET', '/CAVEEducation')
    response = conn.getresponse()

    if response.status != 200:
        print('failed')
        exit(1)

    response_body = response.read()
    data = json.loads(str(response_body, 'UTF-8'))
    print('# of likes:', data['likes'])
get Facebook fanpage # of likes

python on EV3 機器人-使用python控制EV3馬達

這次分享的是由ev3主機的python檔案,讓EV3的A、B兩個馬達持續轉動,

2_4_python

想用python控制EV3馬達,需要(1)先安裝dev-ev3的環境(python on EV3 機器人 – 整理好的 img 檔送給您!),

建議(2)先體驗dev-ev3環境下控制馬達(Python EV3 速記 – 控制馬達轉速與方向)

與(3)基本的python語法(python on EV3 機器人-基礎python撰寫)

這是這次分享的的程式碼,程式的內容由python on EV3 機器人-基礎python撰寫所改編,

不一樣的是這次加入python-ev3模組的內容,我們可以使用這個模組裡的語法。

執行此程式後,輸入”A”可以讓馬達A轉動,輸入”B”可以讓馬達B轉動,輸入”stop”可以讓所有馬達停止轉動,

2_1_python

以下皆為使用python-ev3模組的內容:

(1)將模組ev3.lego輸入至檔案中

(2)由LargeMottor決定控制哪一個馬達(A、B、C、D)

(3)使用reset重新設置馬達,重複宣告使用馬達時,需要重新將數值設置

(4)開啟regulation_mode模式(on、off),開啟會使你的馬達輸出比較穩定,比較不受剩餘電池電量的影響

(5)使用run_forever讓馬達持續運轉(-900~900)

(6)使用stop讓馬達停止

你可以在dev-ev3的環境下編寫python的檔案,也可以在你的電腦編寫好檔案之後再把檔案傳送到ev3,

小編我是在電腦寫好主要程式後再傳送,推薦這款好用的軟體cyberduck,支援Windows與Mac系統

2_3_python

選擇SFTP傳輸協定後,輸入EV3主機的ip並輸入帳號與密碼,你的電腦就可以與EV3進行檔案傳輸了

馬上來體看看吧~

python on EV3 機器人 – 整理好的 img 檔送給您!

本篇要介紹如何燒錄給樂高EV3 機器人開機用的SD卡,內含的作業系統是 Debian,並已經掛好版本相當新的 Python2 與 Python 3。本文是按照 ev3dev 網站來操作,歡迎您與我們一起來玩玩看喔!

先讓大家看看成功的畫面,讚啦!在這個 terminal 下面可以玩的事情實在是太多了。要做到以下畫面,您需要兩件事:

1. 下載 img 映像檔並燒錄到 micro SD 卡中,插入EV3的SD卡插槽即可開機(無需更改原本的作業系統)2. 完成 Ethernet over USB,讓這台EV3模擬成一個網路裝置。我們就是這樣透過 SSH 來登入它,它也能利用電腦的網路來上網更新套件等等。本文以 Windows 來示範(說真的在 Linux / MAC 上來處理簡單多了)

009

1. 請下載我們幫您包好的 img 檔,與官方的差別在於我們有幫大家把一些python 套件與官方開發的 EV3 library 整理得更好一點。這個解壓縮完會有 15G,所以您需要16G 的記憶卡喔。使用 Win32DiskImager 燒錄,燒錄完畢插入 EV3 的 micro SD slot 即可開機。開機完成畫面如下:

 

2. 請進入 USB 選單,啟動RNDIS(Remote Network Driver Interface Specification、遠端網路驅動程驅動規格… 好拗口)。接著回到上一層,進入 Networking 選單,啟動 Gadget 選項即可。

    

 

3. 接著請將您的 EV3 接上電腦,並開啟控制台 / 裝置管理員。在此由於 Windows 會自動安裝好 driver ,但這不是我們要的,所以在此要重新做一遍。請在網路介面卡下找到 Remote NDIS based Internet Sharing Device

004

4. 請對它點選右鍵來更新驅動程式,並選擇[從指定位置來安裝]。接著選擇網路介面卡,製造商選擇 Microsoft,並在右側找到 Remote NDIS Compatible Device。這時就會您是否確定要更新 driver,點選確定後即可,在此需要等一下(約1~2分鐘)。

5. 最後一步是把我們聯外的網路分享給 EV3 使用。請回到控制台 / 網路與共用中心,請點選畫面左側的[變更介面卡設定]。您在其中會看到一個 USB Ethernet/RNDIS Gadget,這就是 EV3 啦。

005

6. 請回到控制台/網路與網際網路/網路連線,找到您聯外的網路名稱(下圖為 ROBOTKINGDOM-WIRELESS),對它點右鍵,找到[共用]選項。

006

7. 請勾選其中的選項,這樣就能讓 EV3 藉由這個網路來聯外了。

 

008

 

8. 電腦設定完成了,請回到EV3 主畫面。Networking / Manage connections,會看到一個 Wired 選項,請點選它

在 IPv4 標籤下點選 Change…

選擇 Load Windows Defaults,藉此仔入我們之前辛辛苦苦做好的設定啊 QQ

這時還沒有連線,所以您會看到 State 顯示為離線(offline)。請切到 Conn. 標籤,點選 Connect automatically,這樣 EV3 就會在每次開機時試著去用這組設定去連上網路。

最後點選Connect,一切順利的話就可以在 IPv4 標籤下看到您的 EV3 取得的 IP了!下圖為 192.168.137.3,我們就是透過這個 IP 來登入 EV3。

 

9. 請用 putty 或其他類似功能的連線程式,使用 SSH 連到這個 IP。預設帳密為 root / r00tme <- 兩個 zero 不是O。登登登!登入之後的歡迎畫面如下:

009

 


 

 

 

 

登入之後就來玩看看,首先切換到  /sys/class 裡面看看有什麼,相關的硬體都有:gpio (EV3的按鈕好像是歸類在這,還要確認一下)、leds、tacho-motor 與 i2c 裝置等等。再進入 /tacho-motor 資料夾看看:有一個 motor0 ,這代表一個實體樂高EV3馬達。

請注意您必須真的接上一個馬達才會在 /tacho-motor 資料夾下看到 motor0

013

輸入 cat /sys/class/tacho-motor/motor0/position 即可讀取馬達角度感測器值,下圖讀了兩次:-33 與 239

011

要直接這樣子讓馬達轉起來也是可以的:請先 echo 50 > ~/duty_cycle_sp,代表設定馬達電力為 50%,接著再 echo 1 > ~/run。馬達就會轉動啦!延伸閱讀:Python EV3 速記 – 控制馬達轉速與方向

012

Python EV3 速記 – 控制馬達轉速與方向

EV3 改用 Linux 為核心之後,真是創意無限。只要燒錄好 SD 卡,就能讓 EV3 用不同的作業系統開機。繼 leJOS 之後,也可以用 Debian 開機了。既然是一台完整的作業系統,自然是寫什麼程式語言都可以,但 python 最近實在是太夯了,所以 ev3dev 這個網站就提供了全套的 python + EV3 教學。您只要燒錄好 SD 卡並設定好 Ethernet over USB 就可以了。(本文為速記,日後會補上完整的環境建置教學)

http://www.ev3dev.org/

先來看影片,下指令控制馬達轉動,停止還可以控制轉速

控制轉速:echo 50 > /sys/class/tach0-motor/motor0/duty_cycle_sp   (0為靜止,100為最高速)

轉動: echo 1 > /sys/class/tach0-motor/motor0/run

停止:echo 0 > /sys/class/tach0-motor/motor0/run

設定好 Ethernet over USB 之後,可以透過 Putty 小程式來 SSH 登入 EV3,下圖中的 192.168.137.3 就是 EV3 的 IP。登入後就能進行各種 linux command。

009

EV3 的各類硬體裝置(LED,發音器,馬達,感測器等等)是列在 /sys/class 中,馬達是位於 /tacho-motor 資料夾中

013

在 terminal 中輸入 cat /sys/class/tach0-motor/motor0/position 即可讀取指定馬達的角度感測器值。下圖共讀取兩次: -33 與 239

011

 

141211_RaspberryPi樹莓派研習營 使用openCV視覺函式庫@未來廠房

第四周未來廠房的樹莓派研習營,本週要介紹的是在樹莓派上運行opencv函式庫。opencv函式庫主要功能在於影像資料的處理,不僅能夠處理靜態影像(圖片、照片等…),也能即時處理動態影像(webcam傳送的即時影像),這次分享的是使用攝影機,讓攝影機能夠辨識眼前的綠色球體。

不過要把 openCV 在 Pi 上面的環境建好需要一點功夫,所以我們已經幫大家準備好了 SD 卡的映像檔,下載之後燒錄,開機就能開始玩 openCV了

[感謝祭,有下有推]Raspbian openCV img 檔下載 – 可用於 Raspberry Pi B、B+ 以及 Banana Pi

這次主要分為三個主題分享

1、讓Webcam連線至樹莓派,將影像串流成功傳到Python開啟的視窗

camera01

2、將影像影像平滑化,找出綠色的物件,將物件以外的影像變為黑色,物件變為白色

camrea02

3、找出綠色物件的邊界值,將物件用框架框起來

camera03

這次分享的內容主要是電腦再進行視覺辨識時,需要做的步驟,

比如透過(1)平滑化,將影像變模糊,減少綠色物件因為光造成顏色不同而產生的辨識錯誤

使用(2)RGB轉換HSV,降低光對顏色造成的影響

接下來(3)調整可以接受的顏色範圍。這樣我們就可以把指定的顏色以白色顯示,其他部分以黑色顯示。

camrea04

接著找出綠色的邊界值,找出辨識物件的對角線頂點,將物件以綠色的線框起來。

這樣就可以在樹莓派上面看到辨識出來的影像囉。

camrea05

這週大家也是全神貫注的聽~12月18日,第五週的課程會上GPIO,

除了上LED和按鈕控制之外,也會把樹莓派裝在車上控制直流馬達,敬請期待!!!

141118 電鈴工作坊@松山文創園區 台北數位藝術中心主辦

11/18 由台北數位藝術中心主辦的 Raspberry Pi 電鈴工作坊,在松山文創園區5號倉庫舉辦。原本主辦單位還擔心辦在週二白天會不會人不多,結果很快就客滿了。好的主題一定會有人支持,還有一家三口來參加呢,爸媽願意帶小朋友參加一些動手做的課程,真是太棒了。

2014-11-18-18_Fotor

本次的主題非常酷!是用 Raspberry Pi 來解析一個 Midi 音樂檔,音樂檔中用什麼節奏來播放音符,Raspberry Pi 就會用這個節奏去帶動電磁閥來敲打鐵琴。程式語言是用 Python,對這份程式有興趣的朋友請點我下載。本日教學投影片請見文末。

學員們早上是焊接並組裝電鈴,聽說隔天還會教大家怎麼設計電路板,太充實啦!下圖中學員是在焊接要接在 Raspberry Pi GPIO 腳位上的控制板

2014-11-18 17.19.01

2014-11-18 17.18.49

這就是我們的電鈴成品,電磁閥帶動木片去敲打鐵管,就可以發出五種不同的聲音。

2014-11-18 13.17.19

到了下午則開始進入 Raspberry Pi 教學。有幾位學員之前沒有玩過 Pi ,所以在燒錄作業系統上花了一點時間。阿吉老師很快教大家一些基礎的系統操作之後,就要開始[認識] 這隻 Python 程式了。簡單來說,程式會去把指定的 midi 檔解碼,並根據對應的時間透過 GPIO 來驅動電磁閥。這樣不論您怎麼寫歌,Raspberry Pi 都會彈出來喔!

這位同學,您為何眉頭深鎖呢?ccc

2014-11-18 17.10.08

2014-11-18 17.30.12

這是本日的教學投影片,是 CAVEDU 一年辦理20場以上的 Raspberry Pi 研習的精華喔,裡面整理了許多疑難雜症的解決方法。如果您還意猶未盡的話,可以參考葉難的專業教學部落格


 

Raspberry Pi 雙輪機器人與3D列印攝影機底座

來看看 Raspberry Pi 使用 L293D 馬達控制晶片控制兩個直流馬達,這是本周公民營教師研習[視覺辨識機器人] 的車身喔

三台機器人排排站,感覺就很蓄勢待發!

2014-07-24 18.06.02

每位老師整理線的方式各有不同,不過如果要讓機器人更好的話,還是要用永久性電路板或是自行銲接洞洞板比較好。不然接點容易鬆動

2014-07-24 18.05.55

基本單馬達 code (使用 RPi.GPIO 函式庫)


import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BOARD)

Motor1A = 16
Motor1B = 18
Motor1E = 22

GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)

GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1E,GPIO.HIGH)

sleep(2)

GPIO.output(Motor1E,GPIO.LOW)

GPIO.cleanup()
Rapsberry Pi 控制單顆馬達

 

各位客倌,請看看早上用 DesignSpark Mechanical 來畫攝影機底座,下午就可以3D列印出來了。科技實在是進步得很快啊

2014-07-24 11.03.13

 

兩個扣環直接,還有一個肋條來提高強度

2014-07-24 14.13.09

放上攝影機,燈燈燈~

2014-07-24 14.13.18

 

Raspberry Pi 機器人P控制循跡 – 使用BrickPi轉接板

這是一台使用Raspberry Pi 為核心的循跡機器人, 使用Dexter Industries 公司所生產的 BrickPi 轉接板來接上樂高NXT的感測器與馬達。請看影片中的機器人使用了比例控制方法,所以動作相當順暢:

[youtube=http://youtu.be/qdDGpQBW0YA]

這是我們1/24 25兩天研習時,現場demo機器人的照片。當然您可以直接從 Raspberry Pi 的 GPIO腳位來控制馬達與感測器,一樣可以做出機器人而無需使用 BrickPi 轉接板。之所以使用它當然是因為樂高零件的方便性囉,當然 Dexter Industries 的周邊感測器也都有現成的函式庫可以用,端看您如何選擇囉

2014-01-24 17.17.21

看完也想玩玩看嗎?   歡迎報名 14/02/23 Raspberry Pi 單板電腦整合機器人研習營

延伸閱讀:

[開箱文]BrickPI – 讓 Raspberry Pi 接上您的樂高機器人感測器與馬達

BrickPi_用RasberryPi操控NXT

以下為Python程式碼:

from BrickPi import *

BrickPiSetup()

BrickPi.MotorEnable[PORT_A] = 1
BrickPi.MotorEnable[PORT_B] = 1

BrickPi.SensorType[PORT_1] = TYPE_SENSOR_LIGHT_ON

BrickPiSetupSensors()

while True:

result = BrickPiUpdateValues()

if not result:
light = BrickPi.Sensor[PORT_1] print light

white = 476
black = 626
mid = (white + black)/2
last_power = 255*0.7 #70% of motor power
M = last_power/(black – white)

power_A = int((light – mid)*M + last_power)
power_B = int((light – mid)*(-1)*M + last_power)

if(power_A >= 255):
power_A = 255

elif(power_A <= -255):
power_A = -255

if(power_B >= 255):
power_B = 255

elif(power_B <= -255):
power_B = -255

print str(power_A) + “|” + str(power_B)

BrickPi.MotorSpeed[PORT_A] = power_A
BrickPi.MotorSpeed[PORT_B] = power_B

BrickPiUpdateValues()

 

 

131209 Raspberry Pi社群聚會 #2 @CLBC

12/9  星期一晚上是第二次的Raspberry Pi社群聚會,地點在捷運大安站旁的 CLBC。今天晚上的主題都偏硬體也就是 Pi 的 GPIO 應用,CAVE 也來分享一下心得,有demo 使用 Scratch 來控制 Raspberry Pi 雙馬達機器人(使用 BrickPi 擴充板)。

現場真的很熱鬧啊,大家心中對於要用 Raspberry Pi 來做些什麼都有了初步的想法,真好!期待第三次的聚會喲~   

主題1:深入淺出Raspberry Pi GPIO,sosorry(台灣樹莓派)

主題2:Raspberry GPIO機器人與XBMC家庭劇院(投影片請按我) ,薛皓云,曾吉弘(CAVE教育團隊)

主題3:為Raspberry Pi加入ADC,以MCP3008為範例,葉難(Raspberry Pi從入門到應用作者)

 

延伸閱讀資料:

1. LEGO MINDSTORMS Motors with Raspberry Pi (BrickPi 0.1) <- 使用鍵盤來控制Raspberry Pi機器人動作

2. Magpi 雜誌的 webiopi

3. CAVE 實驗室 Raspberry Pi 分部

  2013-12-09 20.19.14

現場有一位來賓參考了  BrickPi 的文件自己做出一台 Raspberry Pi 機器人,還有 Webcam。厲害厲害~ (照片中右邊是 CAVE 的 BrickPi 機器人)

2013-12-09 20.19.23

sosorry先生,抱歉站太遠照了,只有照到背影

2013-12-09 19.44.45

 

 

 

CAVE 皓云老師

2013-12-09 20.27.20

葉難先生

2013-12-09 21.21.02

接下來是機器人特寫

2013-12-09 21.59.03

把樂高NXT的六芯線剪開之後,藉由麵包板去接到 Raspberry Pi上對應的 GPIO 腳位就可以控制了。

您可以自己來也可以偷懶使用現成的 BrickPi,端看個人的需求囉。

2013-12-09 21.59.09

利用機器人肚子的空間來放行動電源,電池的重量對於機器人的性能真的有很大的影響哩。

2013-12-09 21.59.23

這張有遠望的感覺~

2013-12-09 21.59.55

[開箱文]BrickPI – 讓 Raspberry Pi 接上您的樂高機器人感測器與馬達

[BrickPi_用RasberryPi操控NXT]

BrickPi 是 Dexter 公司所生產的  Raspberry Pi 擴充板,可以讓 Raspberry Pi 可以同時接上4個馬達(最新的EV3馬達也可以唷!),以及5個感測器,算是相當豪華的應用。

先來看看 Dexter 提供的成品照片

BrickPi10 BrickPi08 BrickPi07 BrickPi for LEGO and Raspberry Pi BrickPi02 BrickPi01

 

BrickPi 共有兩種規格:BrickPi Basic Power(售價$2600) 與 BrickPi Advanced Power(售價$3200),Advanced Power 版本對於電源有比較好的保護。以下照片都是使用Advanced Power 來拍攝。至於控制的語言有 Python、C與 Scratch

請密切注意 CAVE 之後的 BrickPi 教學文章!

 

2013-12-04 11.20.09

 

Motor_Ports_Blue Sensor_Port_Layout_Yellow-copy

2013-12-04 11.20.24

好~   與 Raspberry Pi 組起來看看吧!指揮艇組合~   您可以看到尺寸剛剛好,在設計外殼以及線路配置上都很方便。

2013-12-04 11.22.02 2013-12-04 11.22.13 2013-12-04 11.22.22