Tag Archives: arduino 101

App Inventor IoT 新元件 – Arduino 101 與 BBC Microbit

App Inventor 新元件測試版釋出!看來BLE是大勢所趨,並新增了兩個主要的平台:Arduino 101 與 BBC Microbit不用再透過BLE元件去收發 integer, char 這麼底層的指令,直接有對應的感測器元件可以使用,上課更方便啦!

本文將以介紹App Inventor 結合 Arduino 101 為主,請參考MIT目前提供的植物監控App教學請由以下載點來匯入各個 aix 檔:

BLE藍牙元件 aix 載點

Arduino 101元件 aix載點

BBC® Micro:bit元件 aix載點

請由App Inventor 主站建立一個新專案,並由 Designer 頁面左下方的 Extension -> Import extension 來匯入上述的 aix 即可使用。我們會依序寫完各個範例,敬請期待喔~

Arduino 101 元件 (MIT說明),Grove 是指 Seeed Studio 的 Grove 套件

  • 加速度計(本身)
  • 按鈕
  • 陀螺儀(本身)
  • 溫濕度(Grove)
  • LED(可指定腳位)
  • 光感測器(Grove)
  • 土壤濕度(Grove)
  • PWM馬達控制
  • 腳位控制
  • 接近度感測器(Grove)
  • RGB LCD(Grove)
  • Servo(一般servo)
  • 錄音機(Grove)

Continue reading

[ 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.實際操作

 

相關文章:

[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());
}

 

相關文章:

[課程成發]海洋機械Arduino課程期末專題展示

紀錄撰寫  曾吉弘紀錄攝影曾吉弘
課程講師  曾吉弘上課地點海洋大學
課程時間  2016 9月~ 2017 1月

阿吉老師在海洋大學的學期課程[Arduino微處理機課程(課程網站)] 順利結束了,感謝台灣英特爾公司贊助本學期所使用之Arduino 101開發板。2015年則是感謝聯發科技公司贊助的LinkIt ONE物聯網開發板(期末展示請點我)

一學期的課程中,同學要學會使用Arduino進行基礎I/O控制、App Inventor 藍牙控制這兩大主題,期末也要做一個專題出來。評分標準是這樣的:

  • 出席:10%,無故缺席每次扣學期總分2分,扣完為止。請務必親自請假,不接受代請。
  • 回家作業/課堂競賽:30% (5% x 6),取高分
  • 期中專案報告:20%,至少有一個完整的功能可運作
  • 期末專案展示:30%
  • 自評5%
  • 組員互評5%

我對於學生的要求很簡單:用心做,少找藉口。但即便這樣到了學期中還是退選了接近一半的人(10多位…),這件事總之就是教一個算一個囉,不經意找到Facebook回顧兩年前我對於學生期末專題的一些總括性意見,列於文末,想看的朋友請耐心看完吧。

專題製作列表:

  • 手持穩定架
  • 寵物自走餐車
  • Axi draw 寫作業機器人(但是要寫很久…)
  • 變形手機多功能座車
  • 遠端探險遙控車
  • 紅外線遙控自動避障掃地機器人
  • 無用盒子

 

手持穩定架

運用Arduino 101 上的加速度計與陀螺儀做出的手持穩定架,相當不錯

遠端影像遙控機器人

遙控功能使用 App Inventor BLE 控制 Arduino 101,影像串流則使用7688 Duo (學生自己去買的,願意自己去找資源這點還挺欣慰的

學生專題常見的狀況,電路板沒有固定,電線長度嚇死人…   除了容易脫落遭成機器人出問題之外,甚至有可能短路而失火

 

紅外線掃地機器人

壓克力自己切的,但您可以發現馬達安裝孔位太外面了,很容易讓壓克力裂開。另一方面,馬達轉速太高其實很難把灰塵掃起來

無用盒,按下搖頭開關會伸出一隻手(servo帶動) 來把按鈕推回去,可以無限次數一直推推推,適合有強迫症的人使用

Axi draw 學生自己畫圖3D列印出來的寫字機器人,可以把要寫的字轉成G code 之後寫出來,目標是可以幫忙寫作業,但是要寫非常久… (還是自己寫比較快…)

以下是demo照片,各組作品的文件與程式碼都會放在本課程專題頁面

demo 完就吃pizza(當天基隆狂風暴雨,辛苦去拿的同學了),阿吉老師的課就是有棍子也有胡蘿蔔,好好做老師不會虧待大家的啦~

 

阿吉老師2014年寫的感言

以下是我對於這學期某堂課,給同學的評語。我衷心期待每位同學都能在認真學習之後有所收獲。文長慎入…

=======================================

各位同學辛苦了,希望這學期大家都有學到東西。以下是我對於各位在本學期表現的講評:

遲到問題:如果您是習慣性遲到的人,這個特性應該多少也會反映在您的待人接物與專題品質上。

上課態度:這…不用我多說,您自己最知道自己上課是怎麼回事。老師不是媽媽,老師不需要也不應該去一再提醒上課要認真這件事。

專題製作:

基本上大家的文件除了第9組上算完整之外,其他各組的東西都有一定程度上的缺點。包括以下:

  1. 格式不一
  2. 沒有參考資料或說明不清楚(最好都不用查資料就會做)
  3. 甘特圖看不出進度規劃
  4. 組員分工不清楚
  5. 看不出學期專題等級和課堂作業等級的差異(到底有沒有好好檢查過啊!)

至於文件準備方面,我希望大家可以先看看這份投影片(http://www.slideshare.net/mwhan/99-29808114)。文件是讓大家對於專案的進度得以參考與回顧,不是拿來應付。機器人會拆掉,但文件卻能留下來。

有時候您專題做得很好,但文件不完備,這樣學弟妹要參考的時候才有承先啟後的價值。再者,日後您要推甄研究所時,我也希望這學期的東西可以派上用場。如果文件中錯字連篇或是格式不一,您很難去說服別人說這份文件是有認真過的。

我之所以要求一定要現場demo,原因很簡單。電機系的同學對於 presentation 的訓練是稍微缺乏的,這樣您才知道反覆演練,顧到每一個環節之後,才懂得珍惜在台上的每一秒鐘。例如,我明明就有說報告當天要將 word 檔「雙面列印」,幾乎沒有一組做到…當別人知道您卻不知道的時候,我想您需要更謹慎。

有時候,不一定都會有第二次機會。如果您今天去研究所口試,要demo的機器人不會動…

再者,您有好的內容,別人還不讓您有機會說,或是只有非常不足的時間。這時如何「講重點」就很重要。我都讓大家講完,從各位報告的內容當中,我就可大約得知各位在本學期中所付出的程度。

衷心各位在本學期課程中都能有所收穫。

吉弘 2014/01/14

 

 

相關文章:

[程式教學] Arduino 101結合 Processing 互動滾球遊戲

本文章要告訴您如何結合 Processing IDE 與 Arduino 101 開發板來設計一個滾球遊戲。藉由 Arduino 101 開發板上的加速度計與陀螺儀感測器來感測板子於空間中的傾斜、位移與轉動的狀態,藉此控制球在畫面上的四處移動,就好像零食乖乖附贈的小玩具一樣。

作者/攝影曾吉弘
時間  2小時
成本  ❊ Arduino101開發板  $1,575  (購買連結)
難度 * * * * * *
材料表❊個人電腦 (作業系統可用 Windows, Mac OSX 與 Linux,本範例使用 Windows 7)

❊Processing IDE  (2.0 or 3.0 皆可,本範例使用 2.2.1)

❊Arduino IDE 1.6.x 版以上

Arduino 101開發板

 

本範例是阿吉老師於海洋大學機械系學期課程的課堂小挑戰,修改 Arduino官網的範例來製作一個滾球遊戲,藉由搖擺 Arduino 101 開發板來控制 Processing 畫面上的球移動,這運用到了Arduino 101的加速度計與陀螺儀感測器,並理解如何透過序列通訊讓 Arduino 與 Processing (您的PC) 彼此溝通,後續要改成藍牙也是沒有問題的。

這類型的遊戲通稱為 labyrinth,玩法都差不多就是控制球走到終點,iOS 或 Android 都有非常多可以下載,您可以多載幾個來玩並把一些可怕的功能加入本範例中。

Continue reading

161219 Genuino 101 物聯網藍牙4.0操控實作@成電創客學園,台南成功大學

內容簡介

利用Genuino 101的藍牙4.0功能,建構並操控裝置。您會學到如何自行編寫 Android手機程式來與 Genuino 101溝通,日後就能自行製作很多有趣的互動專題喔!

免費報名請按我

課程時間

12/19(一) 13:00~17:00

課程地點

成電創客學園(台南市東區大學路1號<自強校區奇美樓1樓>)

課程內容

13:00 Arduino IDE環境建置,認識Genuino 101、簡易I/O操作(LED、RGB LED、電位計、繼電器等常用電子元件)
14:00 App Inventor圖形化Android開發環境、人機介面設計、如何安裝App到手機
15:30 BLE通訊機制、App Inventor 的BLE通訊元件
16:00 按鈕控制LED亮滅、語音控制繼電器
16:50 結語

注意事項

1. 請上課同學自備電腦。
2. 由於 Genuino 101 的套件包超過100MB,因此請務必請同學根據本頁說明(https://www.arduino.cc/en/Guide/Arduino101)先安裝 Arduino IDE (1.6.x)之後再安裝 Genuino 101 SDK。
3. 同學分組時,每一組至少需要有一位有Android手機。如果擔心BLE可否執行,可透過這個 app 來檢查。
4. 若上課時間充足,可加入讀取DHT11 溫濕度感測器值並顯示於手機畫面。

Arduino 101結合 App Inventor 控制@海洋大學與台北商業大學

學期到了中段,阿吉老師在海洋大學機械系與台北商業大學數位多媒體系的相關課程也進入了應用的階段。我的概念很簡單,同樣學一種,當然是採用變化多的方案,手機(App Inventor)搭配各種硬體平台都有很棒的應用,不管是作為控制器(手機根據某些條件觸發與否來通知開發板)或是顯示器(手機顯示開發板感測器狀態) 都可以喔!

本系列課程的 Arduino 101 開發板感謝台灣 Intel 公司贊助

14938270_1187934111277461_6879868924925435470_n

1478146067382

14900477_1187934257944113_3656068376457863047_n

 








 

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

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

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

1476326732776

img20161012183739-1

 

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