Tag Archives: arduino

[課程紀錄] Arduino+樂高機器人研習@萬大國小

作者/攝影 曾吉弘
課程時間  2017 3/16
課程講師 曾吉弘
課程場地  台北市萬大國小

3/16 來到了CAVEDU旁邊的萬大國小,學生們想要參加今年台北市校際盃的公開賽(主機不可使用樂高原廠主機)。這樣一來多數人會改用Arduino作為控制主機。不過馬上就會遇到的問題就是機構問題,總是要組裝出一台機器人車身的嘛。自行設計機構零件的話,在組裝和修改上的彈性就比樂高弱了一點。樂高的積木式零件能讓學生可以馬上修正上次測試中不滿意的地方。

所以啦,MindSensors這家與HiTechnic齊名的電子周邊廠商早早在NXT時代就推出了NXShield-D/ M 可以搭配 Arduino Uno 與 Mega 2560,到了EV3也推出了 EVShield。讓Arduino Uno 可以使用樂高EV3的原廠感測器,當然MindSensors推出的周邊(例如本次研習用到的Lineleader 光感測器陣列)也可以用,回頭還能繼續擴充各種 Arduino 的擴充板,一舉多得呢。

EVShield購買連結請按我

(樂高強大的地方並非只有主機而已,應有盡有零件庫才是關鍵。說來很現實,但多數人離不開樂高的原因的確是如此。)

先來看一下EVShield的外觀,左右各有四個接頭,可以同時連接4顆感測器與4顆馬達,EVShield另一面還有6個 servo 的 3 pin 接頭,除非要做二足步行機器人,不然這樣的I/O數量應該很夠了。

真的不滿足的話… 還有馬達多工板NXT感測器擴充板可以用,舊款的NXT一樣不會浪費喔。

疊上一片小螢幕的樣子

接著說明一下 Lineleader,這是MindSensors 特別針對刁鑽的直角彎、髮夾彎甚至斷線等設計出的神兵利器:八個光感測器整合成一個陣列。每個可獨立回傳0~100的光值變化,並且已經有 PID 函式庫讓您直接修改相關參數就可以有很好的循跡效果,希望能讓小朋友過程中建立一些機器人控制所需的數學基礎。讓他們知道原來線性方程式以及三角函數真的有用,而不是一直解一些無聊的題目(很可惜,阿吉老師的學生時代就是這樣過的…,無法體會數學之美)。

來看看執行的影片吧 (偵測障礙物是使用 MindSensors SumoEye紅外線感測器,您當然可改用樂高EV3的超音波感測器)。

 

圖說:阿吉老師分享使用一般光感測器與 Lineleader 在過十字路口以及色卡紅綠燈的一些小小心得

最後請看上課照片,祝各位小朋友、家長與老師,在比賽的過程與結果都能有滿滿的收穫喔!

 

圖說:老師們特別調課來上研習,真的超有動力

圖說:老師們對於機構已經有一定的研究了

 

相關文章:

[3/29_C-Day有什麼?]系列之四:台北市校際盃機器人選拔賽(三)- 使用Arduino uno與NXShield

[ Arduino101 專題實作計畫] Arduino101二輪平衡小車DIY

作者/攝影 袁佑緣
時間
  • 3小時
成本
難度  * * * * * *
材料表
  • 厚度3mm壓克力板
  • Arduino101控制板
  • 減速馬達x2
  • 麵包板
  • 杜邦線
  • 排針
  • 電池盒
  • 防滑墊
  • 3.7v鋰電池(14500)
  • 鋰電池充電器
  • TA7279P馬達驅動晶片

1. 平衡車車體製作

本範例的平衡車車體主要是由雷切壓克力構成,壓克力的厚度是使用3mm的板材,再藉由螺絲螺帽組合而成,車子的馬達使用的是兩顆小型的5V減速馬達,輪子的部份也是由壓克力組成,胎皮則是貼上一層防滑墊,車子的底部則有兩個3號電池座,裡面各裝兩顆7V的鋰電池,一個用來驅動控制板,另一個則用來驅動馬達。
詳細的CAD檔可以參考筆者放在網路上的onsahpe專案,有興趣的讀者可以參考看看喔!

圖一、平衡車的模擬動畫

圖二、組裝爆炸圖

圖四六七八、車體的三視圖

圖八、平衡車實體圖

 

2.電路接線

本次範例使用的馬達驅動晶片是TA7279P,其腳位功能與編號如下圖(節錄自官方datasheet) ,請將5號及10號腳位接到鋰電池的電源上,並把A、B兩個channel的馬達訊號輸入腳位,也就是1、3、12、13接到Arduino 101上的3、5、6、9號腳位來當作控制板的訊號控制腳位,因為這些腳位才有辦法做PWM訊號的輸出,也因此才能控制馬達的轉速。
至於馬達的部份,請將下表output(輸出)的腳位各自接到兩顆馬達上即可,例如:A channel想控制左馬達,B channel想控制右馬達,那就把4、6號腳位接到左馬達上,9、11號腳位接到右馬達上。
另外也別忘記要給TA7279馬達驅動晶片供給工作電壓,只要在14號腳位供給5V的電力,7號腳位接地就行囉。

圖九、TA7279P腳位功能圖

圖十、TA7279P腳位編號圖

圖十一、完成車體與電線配置!

3. Arduino環境準備

請先準備好Arduino IDE,並請在Arduion IDE上的Boards Manager那邊搜尋關鍵字intel,並如下圖安裝Intel Cuire Board。至於驅動程式的部份,使用MacOS跟Linux的朋友不用擔心,直接使用就可以了,那如果是windows的使用者在第一次將控制板接到電腦上時,會挑出自動安裝驅動程式的視窗,請耐心等候電腦完成安裝就可以進行到下一步囉!

圖十二、Arduino IDE Boards Manager設定

4.程式設計

#include "CurieIMU.h" //引入Arduino 101 IMU的函式庫,用來偵測車體的            角速度與加速度方向

//宣告PID控制的各個參數,各個參數的最佳數值必須視車體情況而定,不同的車體會有所不同,電力的大小也會有影響
const float kp = 24; 
const float ki = 0.05;
const float kd = 15;

//宣告參數K作為complimentray filter的參數
const float K = 0.95;

//list number的大小會決定取平均的樣本數,越多則越準,但也會花掉更多計算時間
const int angle_list_number = 5;
const int error_list_number = 10;

//設定馬達初速為0
int speed = 0;

//定義馬達的驅動腳位
const int motor_A_1 = 3;
const int motor_A_2 = 5;
const int motor_B_1 = 6;
const int motor_B_2 = 9;

//宣告進行角度計算與PID控制會用到的一些參數
float time, time_pre, time_step;
float gyro_angle = 0;
float acce_angle = 0;
float angle_list[angle_list_number];
float pre_error = 0;
float error_list[error_list_number];
float diff_error = 0;
float offset = 0;

void setup()
{
	for(int i = 0; i < angle_list_number; i++)
		angle_list[i] = 0.0;
	for(int i = 0; i < error_list_number; i++)
		error_list[i] = 0.0;
	pinMode(motor_A_1, OUTPUT);
	pinMode(motor_A_2, OUTPUT);
	pinMode(motor_B_1, OUTPUT);
	pinMode(motor_B_2, OUTPUT);
	pinMode(13, OUTPUT);

	Serial.begin(9600);
	Serial.println("Start!!!");

//設定Arduino 101 的IMU感測器	
      CurieIMU.begin();
	CurieIMU.setAccelerometerRange(4);
	CurieIMU.setGyroRange(250);
	time = millis();
	for(int i = 0; i < 5; i++)
	{
		Serial.println("Ready...");
		delay(200);	
	}
	int time2 = millis();

//待機兩秒後,取得一個初始位置的角度,這個位置將會是平衡車目標的平衡位置
	while((millis()-time2) < 2000)
		offset = get_angle();
	digitalWrite(13, HIGH);
}

void loop()
{
//主迴圈會一直去讀取現在角度與目標角度的誤差,並透過PID控制來回傳修正動作給馬達
	float error = get_angle();
	float feedback = PID_feedback(error);
	if(abs(error) > 70)
//當傾斜角度過大時,會視為倒掉,此時將會停機並等待重啟
	{
		while(true)
		{
			analogWrite(motor_A_1, 0);
			digitalWrite(motor_A_2, LOW);
			analogWrite(motor_B_1, 0);
			digitalWrite(motor_B_2, LOW);
			Serial.println("Stop!!!");
		}
	}
	balance(feedback);
}

//平衡函式將會根據PID算出的回饋數值,呼叫馬達做出相對應的修正動作
void balance(float feedback)
{
	speed = int(feedback);
	if(speed < 0)
	{
		analogWrite(motor_A_1, abs(speed));
		analogWrite(motor_B_1, abs(speed));
		digitalWrite(motor_A_2, LOW);
		digitalWrite(motor_B_2, LOW);
	}
	else
	{
		digitalWrite(motor_A_1, LOW);
		digitalWrite(motor_B_1, LOW);
		analogWrite(motor_A_2, abs(speed));
		analogWrite(motor_B_2, abs(speed));
	}
}

//讀取角度的函式會透過計時器累加的部份,將IMU讀到的角速度離散積分成角度,同時會做平均取值並輔以complimentary filter的方式來將精確的角度數值計算出來
float get_angle()
{
	time_pre = time;
	time = millis();
	time_step = (time - time_pre)/1000;

	float ax, ay, az;
	float gx, gy, gz;
	CurieIMU.readAccelerometerScaled(ax, ay, az);
	CurieIMU.readGyroScaled(gx, gy, gz);

//將以下的註解取消掉的話可以從Arduino 101的Serial讀到此刻感應器的原始數值,記得baud rate要跟前面宣告的一樣設定成9600,另外要提醒一下如果開啟Serial輸出的功能的話,會消耗掉額外的計算資源,所以如果已經不需要再讀取數值時,最好把以下的程式碼註解掉
	//Serial.print(ax);
	//Serial.print("\t");
	//Serial.print(ay);
	//Serial.print("\t");
	//Serial.print(az);
	//Serial.print("\t");
	//Serial.print(gx);
	//Serial.print("\t");
	//Serial.print(gy);
	//Serial.print("\t");
	//Serial.print(gz);
	//Serial.println();
	
	gyro_angle += gy*time_step;
	acce_angle = (180/3.141593) * atan(ax/az);
	for(int i = 0; i < angle_list_number-1; i++)
		angle_list[i] = angle_list[i+1];
	angle_list[angle_list_number-1] = K * acce_angle + (1-K) * gyro_angle;
	float mean_angle;
	mean_angle = 0.0;
	for(int i = 0; i < angle_list_number; i++)
		mean_angle += angle_list[i];
	mean_angle /= 5;
	mean_angle -= offset;
	return mean_angle;

}

//PID回饋的函式會將錯誤進行一連串的計算,並根據開頭我們設定的三個係數來做出適當的回饋
float PID_feedback(float error)
{
	for(int i = 0; i < error_list_number-1; i++)
		error_list[i] = error_list[i+1];
	error_list[error_list_number-1] = error;

	float sum_error = 0;
	for(int i = 0; i < error_list_number; i++)
		sum_error += error_list[i];
	diff_error = error - pre_error;
	pre_error = error;
	float p_term = kp * error;
	float i_term = ki * sum_error;
	float d_term = kd * diff_error;
	float feedback = p_term + i_term + d_term;
	if(feedback >= 255)
		feedback = 255;
	else if(feedback <= -255)
		feedback = -255;

//跟前面一樣,把以下程式碼的註解拿掉的話可以從Serial讀出實際得出的回饋
	// Serial.print("P_term: ");
	// Serial.print(p_term);
	// Serial.print("\tI_term: ");
	// Serial.print(i_term);
	// Serial.print("\tD_term: ");
	// Serial.print(d_term);
	// Serial.print("\tError: ");
	// Serial.print(error);
	// Serial.print("\tFeedback: ");
	// Serial.println(feedback);
	return feedback;
}

 

5.實際操作

 

相關文章:

[課程紀錄]Arduino_AppInventor雙A計畫@高雄大港自造

作者/攝影 曾吉弘
課程時間  2017 3/18
課程講師 曾吉弘
課程場地  高雄大港自造

大港自造位於高雄西子灣駁二特區的自造空間,去年辦了大港自造節,開啟了不一定要掛 Maker Faire 牌的 Maker 活動,很多不一樣的發想就此展開。

言歸正傳,CAVEDU的專長是開課嘛,所以我們把招牌課程搬到大港囉。

我覺得Maker的能量就是從拿起工具的那一剎那開始,我真的覺得人人都會喜歡動手做些什麼,不管是鋼彈、小餅乾或是拿筆胡畫一通,總是對於指尖下的無限可能有著各類型的憧憬。

阿吉老師國高中就很喜歡工藝課,還記得當時要自己做一個書架,從切木板開始,到鑽孔、打磨拋光與上色都是新鮮的新鮮。為了讓木頭表面可以順利上漆,我還特別去五金行挑選各式各樣的砂紙,竟然發現了五金行老闆喜歡自己改造軍事模型–>因為工具應有盡有所以開五金行嗎?我不知道,但我看得出來他很快樂。自己做東西這件事也無所謂好不好,甚至”business model“(聽說大家最討厭被問到這句話,哈哈)。這個成品就代表了當下的自己,心境、技術等各方面的自己。

雖然說雙A計畫已經是老牌課程了,但是打底的工作還是很重要的。讓Android手機使用藍牙去與Arduino溝通之後,手機就能作為控制與顯示之用,Arduino也能藉由手機得到更多原本難以企及的功能,例如連接社群網路、拍照以及更好的計算能力等等。

來看上課照片(上課投影片於本文末)

 

 

小班教學,其實外面玻璃有很多有興趣的民眾在看呢

學員很認真地嘗試老師不同的題目

感謝大港的美麗攝影師把我拍得這麼滄桑…

最後來感受大港自造的熱鬧吧!

最後是本日上課投影片,歡迎多多分享喔


 

文章的結尾,來到了工商服務時間

未來Cavedu教育團隊也會不定期在大港自造舉辦課程~最近一期的課程在4/15的樹莓派課程喔!想要報名的朋友可直接在下方連結報名喔!

報名連結:http://www.accupass.com/event/register/1703240957416260981710

 

相關文章:

[技術教學分享] Processing、RaspberryPi 與 Arduino 於教學上的應用

本文要告訴您什麼是 Processing?為什麼要結合 Processing 與 Raspberry Pi?兩者可以做到那些事情?以及如何在 Raspberry Pi 上安裝 Processing 開發環境

作者/攝影  曾吉弘
時間  3小時
成本
難度  * *
材料表
  • 個人電腦 (作業系統可用 Windows, Mac OSX 與 Linux,本範例使用 Windows 7)
  • Raspberry Pi 3 單板電腦

Processing 與 Arduino 的淵源相當深,簡單來說 Arduino IDE 繼承了 Processing IDE 簡單易用,範例豐富等優點。CAVEDU 以往曾經開設過許多Processing 結合 Arduino、Kinect、openCV(以上 C3取2可以開三種課程呢!)的課程,也運用了 Processing 上的 Android mode 將 Processing 視為一種 Android 開發環境,總之就是有很多把戲可以變就對了啦!
安裝 Processing 非常簡單,只要到 Processing 官方網站按照您的作業系統下載對應的安裝黨就可以了。也請看看CAVEDU的相關 Pricessing教學文章

接著是本文的兩個重點:

為什麼要用 Processing 結合 Arduino呢?

Arduino沒有介面的概念,任何資料的呈現都只能透過 Serial Monitor,要實體顯示的話就接個 16 x 2  LCD模組(您該不會想要接七段顯示器吧…),再高級一點就是 OLED 模組囉,但不管怎樣都是要外接一個東西,且這個螢幕絕不會太大。如果可以在 Pi 上執行的話,1920 x 1080 Full HD 的螢幕、投影機(ASUS Tinker 可以支援 4K 顯示,好威啊!) 現在都不算太貴,可以作為中大型專題的視覺呈現方案。

為什麼麼 Rasberry pi 上可以執行 Processing 讓阿吉老師這麼感興趣呢?

先說結論:這樣就是一台可獨立執行的互動裝置了,以往要在 PC 端執行的事情,現在在 Pi 上就可以做到,程式碼還不用改,聽起來就很吸引人,不是嗎?

想一下這個情境:

執行在 Raspberry Pi 上的Processing 可透過 Serial port 去控制/讀取接在 USB port上 Arduino的狀態,藉此進行各種視覺化的呈現

 

  • 偵測到人臉,呼叫webcam 拍照
  • 觸碰螢幕上的m x n 的按鈕,點選之後去觸發 m x n 的 LED 矩陣(豪華一點就自己做燈磚)

一切都很美好,真的。原本一定要接一台電腦(桌上型很笨重不好攜帶,筆記型電腦又怕不見…) 才能做到的事情,只要一片 Pi 就搞定。別忘了,設定好 Pi 的遠端登入之後,您可以遠端桌面來控制Pi,這樣就可以省下一套鍵盤滑鼠與螢幕了。

Raspberry Pi 在上課時(尤其是第一堂課)難免會像這樣子弄得滿桌都是,老師們也要花相當大的功夫帶學生認識 Linux 的桌面系統與基礎的 command line 指令,但我想 Rpi 與許多周邊軟硬體的結合在教學上所呈現的豐富程度,是值得您這麼做的。

在Raspberry Pi 上安裝 Processing

請在您的 Raspberry Pi 終端機介面中輸入: (教學)
curl https://processing.org/download/install-arm.sh | sudo sh

安裝完畢之後就可以在選單的 Programming 下看到 Processing 了。點兩下開啟即可:

請由 File/Examples 中選一個喜歡的範例直接執行吧,這是 Input / Clock 範例

最後附上相當人氣的教學投影片: openCV 與 Raspberry Pi,歡迎您照著做做看喔!


 

相關文章:

[課程紀錄] CAVEDU的物聯網教學心路歷程

對於CAVEDU來說,將實用的科技以有趣的主題融入教學中一直是我們的核心價值,因此在辦理各式研習與講座中收集大家的意見與困難點就至關重要了。以下內容只代表CAVEDU這兩年多來在物聯網這個主題上的些許教學心得(可能還有一點機器人與Android app),如有偏頗還請大家不吝指正。

作者/攝影 曾吉弘
課程時間  8週 (週四 18:00-20:00)
課程講師 2015-持續努力中
課程場地 全台各地

概念很簡單:如果只是把感測器數值顯示在網頁上,這樣就真的無聊透了。相對地,如果Arduino這類型的入門 maker board 已經很普及的情況下,該如何改變學習這件事:讓小孩子覺得有趣,讓高中與大學生們學到真實可應用的第一線技術?

2015年11月2016年5月各舉辦了一場[物聯網教學應用發表會],邀請了許多朋友來參加,有趣的是在2015年參加以開發板製造商為主,到了2016年則以雲服務提供者為主。這與我們的想法相當接近,使用者對於物聯網的期待已從基礎的資料呈現與控制,進一步到希望有運算、智能服務以及串聯常用的網路服務等等。

針對物聯網教學這件事,我們大概歸納了幾個特性:

 

1. 重點在於網路品質:頻寬、連線數上的要求都會比傳統教室來得更高

  1. 以Raspberry Pi 或 7688課程來說,學員的電腦、開發板與手機都需要在同一個網段之下,這樣連線數就會是學員數的至少3倍。

2.網路端與開發板端的開發環境大不相同

  1. maker 開發板常見程式環境自然是以Arduino為主,網路端則五花八門,node.js、python或php都有。如果想要一個程式語言就打通關的話,可能會遇到某個感測器沒有python函式庫而無法讀取或是所有東西都用Arduino IDE硬幹而程式碼太長的狀況。

3.雲服務端常常改版,使用者只能被動接受

4.上課可能發生問題的地方更多,老師心臟要夠強

  1. 無法連上網路(帳號密碼錯誤)、無法連上server、意外斷線、腳位接錯、函式庫引用錯誤、呼叫次數太密集…  太多啦

5.承3.4.  教師需要花更多時間備課

而使用者對於雲服務的期待也大致整理如下:

1.免費,至少不要太貴

  1. 學校對於看不到的東西很難編列預算

2.希望可與熱門的網路服務結合,因此才會有像是IFTTTTemboo這類型的中介SDK provider 存在。

3.入門範例真的很重要,哪怕只是LED閃啊閃,對於很多人來說也是要花一段時間才能學會。

    1. 要用雲服務來進行LED hello world範例的話,代表您得做到這些事情:
      1. 讓開發板連上網路
      2. 讓開發板連上雲服務 (以上兩點需要使用者具備網路基本知識)
      3. 開發板可讀取來自雲服務的資訊
      4. 使用者可擴充,例如兩個控制頻道分別控制對應的腳位狀態,以及在雲服務上顯示開發板回傳的數值(數字、文字或布林)

真的不太簡單,對吧?

 

4.離線版或區域網路版

    1. local cloud 或 private cloud 對於網路品質不佳或是對於關注資料私密性的用戶來說相當重要,您可以參考QNAP與Arduino合作推出私有雲服務一文

對於學生來說,教學者得先建構一個情境來引起學生們的興趣,例如以下:

  • 可以自動發佈Facebook動態嗎?
  • 事件觸發後可以推播或寄郵件給我?
  • 可以結合 open data嗎?
  • 可以影音串流或影像辨識嗎?
  • 有圖形化介面可以用嗎?
  • 可以不用除錯嗎? <- 最好有這種事情

您可在App Inventor中文學習網上的範例教學頁面看到我們寫了許多讓app與各種網路服務結合,包含Goolgle map、Google 街景服務、微軟認知服務、LASS空汙地圖、政府提供的紫外線與空氣汙染open data等等。對於開發板的聯網應用,也從雲端控制家電、氣象站這類基礎應用,進一步到Facebook天氣播報機器人(IBM Bluemix + Facebook Messenger API)、7688聊天機器人(IBM Bluemix)以及串流影像中的臉孔與年齡辨識

針對大家又期待又怕受傷害的107課綱,由於[物聯網]已確定排入高職課程中,我們也接到許多學校詢問課程、師資與教室設備等等規劃上的問題,我們很樂意提供相關的建議喔!!

 

(展示用的物聯網屋,具備各種感測器、聯網開發板以及雲端控制介面)

不論是學校社團業界講師、公民營研習社群分享一般民眾課程,都很期待與您見面喔!

(2016公民營研習@彰化建國科大,彰師附工主辦)

(2016  Mobile Hero 通訊大賽物聯網教師研習研習@T客邦創客基地)

(2015 創客night分享 Raspberry Pi 影像辨識機器手臂@T客邦創客基地)

(一般民眾物聯網課程@T客邦創客基地)

 

有興趣的朋友可以參考阿吉老師在去年新北 mini Maker Faire 分享的內容:

[活動紀錄] 2016 新北Mini Maker Faire 物聯網好棒棒分享會

希望日後有機會再寫一篇關於程式教學的心得分享囉!!

[活動紀錄 ] Arduino/Genuino 101 教學課程分享in Clubhouse

CAVEDU教育團隊前進Intel Clubhouse!在8週的課程裡,進行Genuino 101的基礎教學,並且讓學員們完成一臺手機藍牙遙控車!

作者/攝影 洪卉君
課程時間  8週 (週四 18:00-20:00)
課程講師 徐豐智
課程場地 Clubhourse

感謝臺灣Intel的邀約,CAVEDU教育團隊從2016年10月至12月,在臺灣Intel Clubhouse(財團法人台北市基督教勵友中心)和學員、志工們一起進行了8週的Genuino 101教學課程

來看看8周的課程都做了什麼吧:

Week 1Week 2Week 3Week 4
Genuino 101 基本操作Genuino 101 功能應用—LED呼吸燈Genuino 101 功能應用—可變電阻遙控車組裝教學
Week 5Week 6Week 7Week 8
學員挑戰—遙控車改裝APP INVENTOR—APP製作程式教學學員挑戰—自己寫程式控制遙控車課程內容整合—遙控車呈現

臺灣Intel Clubhouse的學生、志工們完全沒有任何電子、電路基礎,因此在課程教學上除了教學中學員們常見的疑惑以外,天馬行空的問題也不少,不過這些天馬行空的問題很多是真的有辦法實現或解決的!也很佩服學生們能夠想到一些「意料之外」的方式呢!

首三週的程式教學,雖然是比較死板的安裝、啟動、寫程式碼等等內容,但是安排了LED燈和可變電阻這兩項簡單的元件,讓學生實際透過Genuino 101來操控。學生們對於可以依自己的想法控制這些電子元件都感到很興奮。

從第四週開始,就進入本次課程的重頭戲——遙控車製作與操控了。除了硬體上的Genuino 101加遙控車組裝,我們也加入了App Inventor的教學,讓學生可以寫出自己的手機程式並且用它來控制自己製作的遙控車。寫App得到了很好的迴響,我們先教學生入門款的依指令讓手機發出聲音、跳出圖片等等簡單的小動作。學生們在決定音效、圖片、甚至是呈現的方式,都很有自己的想法!看著學生們七嘴八舌地分享自己為手機做出了什麼酷炫的功能,總是會忍不住想要再多教一點啊!

最後學生們終於可以用手機控制自己的Genuino 101遙控車啦!立刻在教室外面的走廊舉辦了第一屆臺灣Intel Clubhouse盃賽車,還開了Facebook直播。看到同學們都可以做出一臺遙控車,並且結合自己的想法來執行藍牙操控的程式。覺得很開心!希望學生們可以利用我們留在臺灣Intel Clubhouse的材料組,結合這次課程的教學內容,試著實現腦海中的想法。

 

[101專題計畫分享] Arduino101(Genuino 101)&App Inventor – RGB LED控制

本文延伸自 App Inventor 中文學習網的[取得像素顏色]範例,將觸碰點的RGB值經由藍牙丟給Arduino 101 去點亮 RGB 燈,您可以擴充多顆RGB LED或其他彩色模組來達到更有趣的效果,可以說是極簡易版的 Philip HUE 照明系統喔!

本範例使用 Arduino 101,如果您是使用HC05 06 這類型的藍牙模組,則需使用 App Inventor 的 BluetoothClient元件,兩者不可混用。

程式碼請由此下載

 

作者/攝影  曾吉弘
時間  3~4小時
成本
  • Arduino 101 $1575 (購買連結)
  • RGB LED模組(本範例使用共陰) $30~50
  • 跳線  (一綑單芯線,$100左右,也可以買公公/公母杜邦線)
  • 400孔麵包板 ($80~100)
難度  * * * * *
材料表
  • 個人電腦 (作業系統可用 Windows, Mac OSX 與 Linux,本範例使用 Windows 7)
  • Arduino 101開發板
  • RGB LED模組(本範例使用共陰)

本文將介紹如何取得觸碰點的 RGB 參數之後透過 BLE 送給 Arduino 101 來點亮 RGB LED。

先來看影片吧

App Inventor

Designer

  • 使用 Canvas 來取得觸碰點座標。
  • 兩個連線斷線用的按鈕:Btn_Connect /  Btn_DisConnect
  • 三個用來呈現RGB值的 Slider (無法拖動)
  • BletoothLE:處理BLE通訊
  • Clock:定期要求 BluetoothLE 將資料(RGB參數)發送給 Arduino 101

Blocks

1.初始化

宣告相關變數,其中addr 代表您所要連線之Arduino 101 藍牙位址,印在板子背面。程式初始化時,要求BluetoothLE元件開始掃瞄。

2.連線與斷線

按下連線按鈕,BluetoothLE元件對指定位址裝置(Arduino 101)連線,並設定相關畫面元件是否可操作,並顯示”Connected”於螢幕狀態列。

斷線則剛好相反,斷開與Arduino 101之BLE連線之後將相關畫面元件恢復原狀,這樣才能重新操作。

 

3.滑動手指取得觸碰點RGB參數

使用 Ball.Dragged 事件,當拖動這個小球(代表您手指的位置)時,會執行以下動作:

  1. 清除畫面
  2. 將該觸碰點的GetPixelColor結果顯示在Canvas上,會是一個相當大的負整數後續使用select list item 去解出來之後就會是 0~255 的整數了。
  3. Ball 移動到觸碰點位置
  4. 使用select list item 搭配 split 指令去分別取得該點的紅色、綠色與藍色值,顯示於Label上即可。

接著在 Ball.Dragged 事件的下半,分別更新每一個 Slider 的指針位置(ThumbPosition)以及更新 r g b 三個變數的內容為該觸碰點的 r g b 顏色強度,準備要發送出去囉!
如果您覺得這裡的程式碼相當冗長的話,可以用一個副程式包起來讓主程式流程更簡潔易讀。

4.發送訊號

使用 Clock 元件每1秒鐘觸發一次 Clock.Timer事件,其中會使用 BluetoothLE.WriteIntValue 將 r g b 值的組合結果發送出去,例如 (128, 34, 255) 的組合結果就是 128034255,Arduino 收到之後再拆解即可。
Clock.Timer 事件的1秒鐘您可以自行修改為較小的數字,看看是否有比較好的操作體驗。

 

Arduino 101 code

重點在於 line 53~67 之間的if (LEDStatus.written())判斷式中,使用 incom = LEDStatus.value(); 來取得 App Inventor 送過來的整數值,並以 1000 為單位來拆開並顯示於 Serial Monitor,最後使用 analogWrite 指令去控制對應的 RGB LED 腳位就完成囉!

#include <CurieBLE.h>
#include <stdlib.h>
#define LEDr 6
#define LEDg 5
#define LEDb 3

BLEPeripheral blePeripheral;  // BLE Peripheral Device (the board you're programming)
BLEService ControlLED("19B10010-E8F2-537E-4F6C-D104768A1214"); // BLE AnalogRead Service

// BLE LED Switch Characteristic - custom 128-bit UUID, read and writable by central
BLEUnsignedIntCharacteristic LEDStatus("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite  );

int incom = 0;
int r, g, b ;

void setup() {
  Serial.begin(9600);
  // set Light pin to output mode
  // set advertised local name and service UUID:
  blePeripheral.setLocalName("ControlLED");
  blePeripheral.setAdvertisedServiceUuid(ControlLED.uuid());

  // add service and characteristic:
  blePeripheral.addAttribute(ControlLED);
  blePeripheral.addAttribute(LEDStatus);

  // begin advertising BLE Light service:
  blePeripheral.begin();

  Serial.println("BLE RGBLED control.");

  pinMode(LEDr, OUTPUT);
  pinMode(LEDg, OUTPUT);
  pinMode(LEDb, OUTPUT);

}

void loop() {
  // listen for BLE peripherals to connect:

  BLECentral central = blePeripheral.central();
  // if a central is connected to peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's MAC address:
    Serial.println(central.address());


    // while the central is still connected to peripheral:
    while (central.connected()) {
      //Serial.println(LEDStatus.written());
      if (LEDStatus.written())
      {
        incom = LEDStatus.value();//110225101
        r = incom / 1000000 ;//110
        g = (incom / 1000 - r * 1000) ; //110225-110000=225
        b = (incom - r * 1000000 - g * 1000) ; //110225101-110000000-2250000=101
        Serial.println(incom);
        Serial.println(r);
        Serial.println(g);
        Serial.println(b);
        analogWrite(LEDr, r);
        analogWrite(LEDg, g);
        analogWrite(LEDb, b);
        delay(10);
      }
    }
    digitalWrite(LEDr, LOW);
    digitalWrite(LEDg, LOW);
    digitalWrite(LEDb, LOW);
    delay(100);
  }

  // when the central disconnects, print it out:

  Serial.print(F("Disconnected from central: "));
  Serial.println(central.address());
}

 

相關文章:

161117 元智大學藝術設計期中展示

11/17 受邀到元智大學藝術設計系,互動科技裝置課程 (林楚卿老師) 的期中專題展示,同學各組都會使用 Android 手機來與裝置互動,會有一個公版的手機程式,所以同學專心在 Arduino 端就好。

評審委員會針對各組的故事性、技術強度以及整體性來做評分。有些組別在電子電路上可能不是那麼強,但是會從外型以及故事性上來下手,這是設計背景學生的強項。值得資訊與機械系的同學反思一下。很多時候不是code寫完就算了。另一方面,設計系的同學在3D建模上都有相當不錯的訓練,因此使用3DP, 雷射切割身自自行開模出所要的外殼不是太大的問題。這件事丟回去給電子系的同學可能就很頭痛囉

學生很常出現的兩個問題是

  1. 因為電線不夠長,所以LED只能拉到這邊… (不會買長一點的電線嗎?)
  2. 周邊功能比核心功能還搶眼,大家往下看就會知道很多專題都出現這樣的問題

註記:從下個星期我開始上課就不是這樣了,手機端程式都要自己寫,雖然是用App Inventor,但應該也是相當有挑戰

來看看大家的作品吧,先從我最喜歡的開始:

 

Continue reading

161204 LinkIt ONE 結合 AWS IoT 研習營

LinkIt ONE 是一片整合了完整通訊功能的 Arduino 相容板,具備 Wi-Fi、藍牙、GPRS 與 GPS 衛星定位等等,非常適合用來製作各種聯網專題。搭配本身的音效晶片,要打電話或變成mp3播放器也不成問題。

本次研習將告訴您如何讓 LinkIt ONE 連上 Amazon AWS IoT 這個超專業的企業級雲服務。您會知道AWS IoT 的基礎設定,並將 LinkIt ONE的感測器上傳到雲端後觸發 rule engine,還會贈送CAVEDU的『LinkIt ONE 物聯網實作入門(增訂版)』,以及電子實驗材料包,請別錯過本次課程喔。

線上報名請按我

主辦單位:CAVEDU 教育團隊、翰尼斯企業有限公司

時間 : 105年12月4日星期日,9:30~16:30

地點:翰尼斯企業有限公司(台北市中正區中華路2段165號1F)

請自行攜帶以下項目:

1. 筆記型電腦,作業系統須為 Windows 7 以上或 MAC OSX 10 以上
2. 建議自備LinkIt ONE開發板,如果沒有的話,可以跟我們借用,課後歸還。
3. 請先安裝 Arduino IDE 1.6.x 以上版本,LinkIT ONE SDK安裝說明:http://labs.mediatek.com/site/global/developer_tools/mediatek_linkit/sdk_intro/index.gsp
4. 請先註冊 Amazon AWS IoT 帳號:https://aws.amazon.com/tw/iot/

收費:$4000,名額有限,請儘早報名。請先繳費完成並收到我們寄出的確認信函才算報名成功喔!
贈送:
1.『LinkIt ONE 物聯網實作入門(增訂版)』 1本。
2. 本課程所需的『電子實驗材料包』一份。

付款方式:
1. 匯款:
銀行名稱 :華南商業銀行 雙園分行 / 戶名 :翰尼斯企業有限公司
銀行代號 :008 / 帳號 :122-10-015315-3

2. 來店付款:
翰尼斯企業有限公司 台北市中正區中華路二段165號1樓

3. 線上付款:
在機器人王國的線上商城付款也可以。連結如下
http://shop.robotkingdom.com.tw/–20/iot-mediatek-linkit-one.html

活動流程:

9:30 CAVEDU 教育團隊簡介

9:40 LinkIt ONE 硬體介紹
     LinkIt ONE SDK 安裝
    
10:30 基礎 I/O 控制,常用感測器與周邊
  
12:00 午餐

13:00 認識 AWS IoT
             建立thing、policy 與 rule

14:00 產生憑證並放置到 LinkIt ONE 中

15:00 上傳感測器資料

16:30 結語、賦歸

注意:主辦單位保留修改與解釋活動之所有權利。

聯絡我們:02-23062900 / service@cavedu.com

QNAP 將與 Arduino 為 IoT 開發者推出私有雲服務

QNAP 將與 Arduino 為 IoT 開發者推出私有雲服務,真是好消息。對CAVEDU這種常常去學校上課的單位來說,學校的網路由於安全性、學生積極搜尋資訊以及社群網路的需求,必須要做一些限制,有時候會造成教課時某些服務不可用或回應太慢,例如 7688 npm install module 時就會一直等等等…   造成上課節奏不順暢。更可怕的是,學校的網管可能當天請假或公差外出,想到就冷汗直流…

總之以 Qnap 專攻NAS的角度來說,如果能在NAS上放一些常用的服務,這樣就能在區域網路下運作,可以省掉很多網路的問題。

來源:http://www.iotconnectivitysolutions.com/news/2016/10/20/8439833.htm, IoT Tech Expo, Santa Clara, CA, Oct. 20, 2016 (GLOBE NEWSWIRE)

以下翻譯部分內容,完整內容請參考以上連結

QNAP 將與 Arduino 合作,針對 IoT 開發者使用相關產品服務來處理、存放本地端資料,並加強與 Arduino 相關硬體的連結性。QIoT Suite Lite software (container) 會在 2017 Q1 準備好支援 Arduino。

“Arduino 提供的低成本、開放微控制器技術,被愈來愈多 maker 採用來製作各種IoT裝置”YT, Lee QNAP VP表示 “我們會不斷提供資料存放與高端資料處理的服務,搭配易用的介面,讓顧客得以連結並視覺化其 IoT 專案所產生的資料。不管是IP攝影機、家庭音響系統、智能家電感測器、居家保全與各種聯網裝置都會產生許多資料,有些需要長時間保存,有些則只要數天。資料存放雖然是在背後的事情,但對於 IoT 來說卻至關重要

“這項合作可讓 IoT maker 們得以自製或下載可執行在 Qnap 私有雲上的第三方應用程式” Kathy Giori, Arduino VP of Operations表示。 “IoT 開發者們需要連接並存放多種類型的資料;但在生態系統上的標準仍不一,並害怕把所有東西丟上網路的擔憂,以上兩項顧慮催生了開放原始碼與本地端處理與存放資料的需求。除了 QNAP 的 Ethernet 與 USB 接口之外,開法者可透過 Arduino Yun 或 Tian 透過 Wi-Fi 與 Bluetooth Low Energy (BLE) 來連接 IoT 裝置。其他像是 LoRa 等通訊方式則需透過擴充板即可使用。… (後略)”

QIoT Suite Lite 具備多種通訊協定與儀表板,讓使用者能取得接在開發板上的各種感測器,並將像是 Node-RED 與 Freeboard 等應用程式發佈到QNAP NAS上。從感測器收到資料可透過多種通訊協定(MQTT, CoAP等) 回送到 QNAP NAS,使用者透過儀表板就能遠端監控所有東西。

Arduino Yun 與 Tian 支援 Wi-Fi 與 BLE,Qnap 目前則支援 Ethernet 與 USB。新款的Arduino Uno Wi-FiStar Otto 與 Primo 等開發板則可經由 Wi-Fi 與 Yun 與 Tian通訊,這樣開發者可更彈性運用這些開發板來開發所需的專案。

(阿吉老師補充:Arduino.cc 與 .org 分家之爭已落幕,但 Tian、Uno Wi-Fi、Star Otto 與 Primo 等經搜尋結果還歸在 Arduino.org 下)

 

[新書出版]Arduino從入門到雲端

翰吉第二本新書:【Arduino從入門到雲端 】出版囉!本書內容為CAVEDU教育團隊於諸多自造者空間所開之「Arduino習作工坊」課程中彙整而成。針對使用者最常用到的周邊依序介紹,分為入門、燈光、動力(馬達)、聲音、通訊、機器人以及雲端應用等七個章節。其中通訊就是 blog 的人氣文章[Arduino x App Inventor 雙A計畫] 萃取而成,歡迎買來讓您的Arduino 結合 Android 手機之後作出更多有趣的專題喔!

購書請點我

列印

同仁在印刷廠看稿的時候,心中真的是滿滿的感動呢 (多少血和淚~)

14650615_1169016236502582_6302310216387314373_n

內容簡介

  ●本書為CAVEDU之Arduino習作工坊課程彙整而成,濃縮了開放硬體所需的基礎知識,包含電子電路、C語言程式入門與電子互動專題。
●教您如何一步步使用麵包板來製作各類型的電子互動專題,並自己寫程式來調整各種變化效果。
●結合MIT App Inventor 圖形化手機開發介面,您也可以輕鬆用手機App來與機器人互動。
●常見的雙輪機器人與桌上型機器手臂,在本書一口氣全部介紹。
●本書適合對於開放硬體有興趣的大小朋友、有意願導入自造者相關課程的教學單位以及科學才藝教室。

本書之範例程式檔、套件包內容與更多資訊,請上CAVEDU系列叢書官方網站:www.cavedu.com/books。

本書特色

1. 由實作課程歸納成的最精華內容
本書內容為CAVEDU教育團隊於諸多自造者空間所開設之「Arduino習作工坊」課程中彙整而得。針對使者最常用到的周邊依序介紹,分成入門、燈光、動力(馬達)、聲音、通訊、機器人以及雲端應用等七個章節。讀者可根據個人需求選讀適合的章節。

2. 介紹Arduino可用的雲服務
Arduino.cc 所推出的Arduino Cloud雲服務,可在網頁上檢視Arduino所上傳的感測器狀態。另一方面,本書也介紹另一個常用的雲服務-Temboo,可用來連接許多實用的網路服務,例如將感測器資料上傳到Google試算表或是發布Facebook個人動態等等,都能使用Arduino結合Temboo就能做到,輕鬆又方便。

作者介紹

徐豐智

淡江大學電機工程系畢業,淡江大學機器人研究所碩士。

現為:CAVEDU教育團隊 編號no.2雜工、講師

專業領域:
物聯網系統設計、Raspberry Pi、Linux系統軟硬體整合、Arduino軟硬體整合、App手機程式開發設計、Scratch程式設計、樂高機器人設計。

周子鈺

清華大學生醫工程與環境科學系畢業,台灣大學醫學工程所碩士班。

現為:
來一課未來教室 共同創辦人
CAVEDU教育團隊 講師

專業領域:
兒童程式設計入門、arduino軟硬體整合、app inventor程式開發、scratch程式設計、S4A互動設計、樂高機器人、ozobot軟硬體應用、kodu 3D遊戲設計

Continue reading

161012 Arduino微處理機課程@海洋大學 七段顯示器與直流馬達

這是阿吉老師第三年到海洋大學機械系開課了,第一年用Arduino,第二年用 LinkIt ONE,第三年則是使用 Arduino 101 (感謝台灣Intel 公司贊助喔)

學期初當然是從基本的周邊控制開始,LED已經交得差不多了,這兩周的進度是直流馬達(L293D晶片) 與七段顯示器。

1476326732776

img20161012183739-1

 

馬達教學投影片如下,歡迎多多分享喔


 

 

 

Grove感測器轉接EV3/NXT模組:燈光閃爍

一個機器人或自動化系統的豐富性就在於可運用的週邊數量與種類。樂高EV3系列除了樂高原廠所推出的數種感測器之外,還可以轉接其他公司所生產的感測器,例如HiTechnic 與 MindSensors。另一方面,Seeed Stduio 原本用於 Arduino 平台的Grove感測器系列中,有許多EV3沒有的感測器,搭配Mindsensor 公司所推出的Grove感測器轉接EV3/NXT模組,就能讓EV3控制LED燈、紫外線感測器、光敏感測器等眾多感應器,大大增加了EV3專題的變化性,並且降低了Grove感應器的使用門檻。當然,您需要將 Mindsensor 的 Grove adapter block 匯入EV3軟體中,請參考本文說明即可。

目前EV3可透過轉接模組使用的 Grove 模組如下(我們都有賣,歡迎洽詢喔):

  • 數位式光感測器
  • 光感測器
  • 氣壓感測器
  • 氣體感測器
  • 溫度感測器
  • 紅外線接收器/發射器
  • 繼電器
  • 按鈕
  • 開關
  • XY搖桿
  • 水位感測器 
  • 酒精感測器
  • 電力感測器
  • 聲音感測器
  • 濕度感測器
  • PH 酸鹼值感測器
  • UV 紫外線感測器

gsawithsensorsw1024

gsawithsensorsw1024

註:Grove是 Seeed Studio公司所生產週邊之專用 4 pin 接頭

延伸閱讀:

如何匯入其它指令模組到EV3環境

機器人王國商城購買Grove Adapter for NXT/EV3連結

[youtube=”https://www.youtube.com/watch?v=g33aGs73BfE”]

感測器接法相當直覺,轉接模組一頭接上EV3訊號線,一頭接Grove感應器訊號線即可使用。

14274407_1186268728133976_2134908349_o

網站向下滑,點選EV3 Block下載,如果需官方提供的範例檔可以點選旁邊的EV3 Sample

3

下載之後打開EV3,選擇 Tool > Block import > Browse > 選擇剛剛下載的EV3 Block > import,完成後重新開啟EV3軟體即可。

2

重新開啟後即可以在黃色感應器類別中的最右邊發現GroveSensorAdapter的指令方塊

4

Continue reading

Arduino (Genuino) 101 與 ScratchX 環境建置

Arduino 101 是 Intel 與 Arduino.cc 合作推出的開發板,主要特色在於使用 Intel Curie 32bit 處理器,並且板子本身就有3軸加速度計與3軸陀螺儀,還有 BLE 藍牙通訊功能。

本文將告訴您如何使用 ScratchX 來控制 Arduino 101 開發板(開發者網頁),請跟著我們一起操作吧!請看實測影片

延伸閱讀:

[開箱文] Arduino 101 / Genuino 101 – Arduino.cc 與 Intel 合作,板載藍牙 BLE 與六軸加速度計/陀螺儀

Scratch 的 Arduino 101 指令說明

Continue reading

160929 Python & Arduino體驗之夜

Arduino 具備了開放原始碼硬體的優勢,可連接非常多種的電子周邊,另一方面,Python則是近年非常熱門的程式語言,除了是 Raspberry Pi 的指定開發語言之外,也可開發各種網路應用程式,並可結合許多雲服務來進行各種有趣的互動專題。

本次課程會有 Python+Arduino的物聯網應用專題展示,但上課內容不包含這內容。

報名連結請點我

主辦單位:CAVEDU 教育團隊、翰尼斯企業有限公司

時間 : 105年9月29日星期四 19:00~21:20

地點 : 翰尼斯企業有限公司 台北市中正區中華路二段165號1樓

請自行攜帶以下項目(沒帶的話,也可以在本公司購買):

1. 筆記型電腦,作業系統不限
2. 安裝Arduino 1.5.X以上的IDE (https://www.arduino.cc/en/Main/Software)
3. Python 2.7.x開發環境(https://www.python.org/downloads/),請注意不要安裝 Python 3
4. Arduino開發板與USB傳輸線(用來連接您的Arduino開發板與您的電腦)*

*本次課程會先在 Arduino 開發板上安裝 standardfirmata程式來回應Python的各種呼叫,因此須使用 Python 來編寫各種應用程式。

收費:

$700,自備Arduino UNO、筆電與傳輸線。
我們會提供包含上課所需電子周邊零件乙組,名額只有15名,請儘早報名。
請先繳費完成並收到我們寄出的確認信函才算報名成功喔!

付款方式:

1. 匯款:
銀行名稱 :華南商業銀行 雙園分行 / 戶名 :翰尼斯企業有限公司
銀行代號 :008 / 帳號 :122-10-015315-3

2. 來店付款:
翰尼斯企業有限公司 台北市中正區中華路二段165號1樓

3. 線上付款:
在機器人王國的線上商城付款也可以:請點我

活動流程:

19:00 CAVEDU 教育團隊簡介

19:10 安裝環境、基礎 Python 語法介紹

19:40 使用Firmata通訊協定與pySerial函式庫
說明Arduino如何與Python程式互動。

20:20 動作觸發LED – PIR sensor
根據偵測到的動作來控制不同LED的Python-Arduino專案。

20:50 Python GUI 圖形化介面 – TKinter – 為您的LED專案加上圖形化互動介面

21:20 結語、賦歸

注意:主辦單位保留修改與解釋活動之所有權利。

聯絡我們:02-23062900 / service@cavedu.com