Tag Archives: led

Ardublock 圖形化 Arduino – Blink LED 閃爍

http://lab.cavedu.com/ardublock_blink  <- ArduBlock 程式碼請由此下載
讓我們從 Arduino 的 Hello World -> Blink 範例程式開始。這個程式會讓 Arduino 的板載LED燈(標示為L)一秒亮一秒暗,您也可以在 D13 腳位上插入一個LED燈,兩者會進行相同的動作。ArduBlock 程式碼請於以上連結下載。

基本上 ArduBlock 的指令都相當淺顯易懂,請從 Control 區抓出 loop 迴圈,再新增以下兩組指令:
 
1. set digital pin -> 設定指定數位腳位為高/低電位  (在Control指令區中)
2. delay     -> 延遲時間(毫秒)       (在Pins指令區中)

 
當我們把set digital pin的參數設為 (13, HIGH)時,代表對D13腳位施加高電位,LED就會亮。反之LOW會使 LED熄滅。
delay(1000)則是延遲 delay指令之前的動作1000毫秒,就是一秒鐘。按照下圖擺好就可以了。
 
按下 [Upload to Arduino]時,您會在原本的 Arduino sketch 中看到,ArduBlock 把剛剛的圖形化指令先轉成普通的 sketch code 之後再燒錄到 Arduino。也就是說,您可以在此進一步修改程式之後再上傳。
 
用ArduBlock 快速打樁,有必要的話再回 Arduino IDE 來細修,就是這麼回事!
 

 

 

 

[LabVIEW for Arduino] 使用可變電阻控制LED漸明漸暗

http://lab.cavedu.com/l4a_potentio_led <- 範例程式在此下載。
本範例使用一個可變電阻控制LED漸明漸暗,軟體為 LabVIEW 2009以後的版本,並搭配Arduino控制板。本範例使用 LabVIEW 2012編寫。
 
資源:

Lesson_1 BlinkM三色LED閃爍
Lesson_2 改寫Arduino經典範例Blink

 
硬體:請將可變電阻兩側的腳,一邊接到5V,一邊接GND,中間請接在 Arduino 的 A0 類比輸入腳。
 
接著將 LED 長腳接在 Arduino D13腳位,短腳接 GND,如下圖:

軟體:本範例使用 LabVIEW for Arduino 中的 Analog Read Pin 範例修改而成。執行畫面如下,圖中的紅色指針會隨著您轉動可變電阻而左右移動。
 
請注意:只要 Arduino 接電之後,所有的類比輸入腳位都可量到約 1.5V的電壓,加裝可變電阻是讓您將電壓的變化情形看得更清楚。
 
 
程式邏輯:使用 Analog Read Pin指令取得 A0 腳位的電壓之後,乘以40。接著將計算結果送給 PWM Write Pin 指令對 D13 LED 進行寫入。
 
程式指令簡述:
左一:Init:初始化LabVIEW與 Arduino的 serial communication,Arduino型號為 Mega 2560,通訊方式為 USB,COM port為60。這些資訊都要正確否則無法通訊。
左二:Set Digital Pin Mode:設定 D13腳位為輸出,因為我們在這接了LED。
左三:Analog Read Pin:讀取類比腳位電壓,在此為 A0。
右二:PWM Write Pin:對指定腳位 D13 寫入 0~255的值。在此為了避免數值超過上限,我們只乘以40,因此最大值不會超過255。
右一: Close:關閉 LabVIEW與 Arduino的 serial communication


[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

本篇將簡單介紹如何用手機的 Slider 滑桿元件來控制Arduino上的LED燈漸明漸暗,當然就是用到 analogWrite的 PWM效果囉。

[雙A計畫] 常見問題整理

       [雙A計畫] 藍芽模組(HC05/06)常用指令教學

[雙A計劃] Part1:App Inventor 經由藍牙控制 Arduino LED 亮滅

[雙A計劃] Part2:App Inventor 經由藍牙控制 Arduino LED 漸明漸暗

[雙A計劃] Part3:Android 手機透過藍牙接收 Arduino 類比腳位狀態

[雙A計劃] Part4:App Inventor 藍牙遙控 Arduino 雙輪機器人

[雙A計劃] Part5:Paperduino 藍牙控制 LED 閃爍

[雙A計畫]Part6:Arduino 傳兩筆資料到 Android 手機

[雙A計劃] Part7:Arduino超音波感測距離回傳數值給Android手機

[雙A計劃] Part8:Android 手機對 Arduino 同時進行資料收發

範例程式請點我下載(App Inventor中文學習網檔案庫)  App Inventor 2檔名:SlideControlLED.aia

 

材料清單:

1 Android系統智慧型手機

2.Arduino相容開發板 (本文使用 Arduino MEGA2560)

3.藍牙收發接收器(本系列使用JY-MCU04 或 JY-MCU05)

4.麵包板

5.1個220歐姆色碼電阻

6.1顆LED

先由下圖將藍牙發射器及LED接上Arduino (藍牙RX – Arduino D10, 藍牙TX – Arduino D11腳位)

App Inventor 編寫簡易的藍牙訊息發送程式

畫面元件很簡單,點選 BT List 之後,會顯示藍牙配對裝置清單,點選您已經配對好的藍牙裝置之後,就可藉由畫面中間的滑桿元件(自定義數值範圍為0~80,您也可以偷懶直接就定義為0~255)。App Inventor 會每隔按鈕就可點選。反覆點選就會送出不同的字元給Arduino 來控制LED亮滅。

螢幕快照 2014-04-04 上午12.28.35

程式說明:

STEP1:在 ListPicker1.BeforePicking事件中,將 BluetoothClient.AddressAndNames指令為 ListPicker1內容,代表點選將其內容連結到手機的已配對藍牙裝置清單。
 
STEP2:在 ListPicker1.AfterPicking事件中,確認連線成功之後,設定相關按鈕為 enabled/ disabled。

螢幕快照 2014-04-04 上午12.29.00

STEP3:

本程式重點在於使用 CLock.Timer事件每 0.01 秒將 Slider 的當下數值透過 BluetoothClient元件的 SendText 指令送出。最後按下 Disconnect 斷線按鈕則中止藍牙連線,並將個畫面元件回復到初始狀態等候下一次連線。

ffff

STEP2:Arduino的CODE

#include <SoftwareSerial.h>
#include <Wire.h>//引用二個函式庫SoftwareSerial及Wire

SoftwareSerial I2CBT(10,11);//定義PIN10及PIN11分別為RX及TX腳位

byte cmmd[20];
int insize, a;

void setup() {

   Serial.begin(9600); //Arduino起始鮑率:9600

   I2CBT.begin(57600); //藍牙鮑率:57600(注意!鮑率每個藍牙晶片不一定相同,請務必確認

   pinMode(9, OUTPUT);  //請注意您使用的Arduino 該腳位是否支援 PWM (會有~符號),否則會看不到效果

}

void loop() {

while(1){

   //讀取藍牙訊息
   if ((insize=(I2CBT.available()))>0){
      Serial.print("input size = ");
      Serial.println(insize);
      for (int i=0; i<insize; i++){
          Serial.print(cmmd[i]=char(I2CBT.read()));
          Serial.print(" ");
      }//此段請參考上一篇解釋

   }

 if(insize==4){  
      a = (cmmd[0]-48)*10;
      a=a+(cmmd[1]-48);
 }
 if(insize==3){
      a=(cmmd[0]-48);
 }
 Serial.println(a);
 analogWrite(9,map(a,0,80,0,255));   //使用 a 變數控制 LED 亮度  
 } //while
}
App Inventor PWM LED

131116 機器人投籃賽@大里高中

1116 星期六下午, CAVE來到台中的國立大里高中來辦理機器人營隊, 有十多位國高中的同學一起共度一個有趣的下午, 許多同學是第一次接觸樂高機器人呢!4小時的活動, 我們規劃一個投籃賽, 在一分鐘之內投進最多球的機器人就是冠軍. 機器人需要從起跑線出發之後偵測到投籃線, 接著投籃. 感謝國立大里高中張主任的用心規劃, 相信同學們都是收穫滿行囊唷!

IMG_1338

製作過程中, 有許多需要考量的軟硬體設定, 包含手臂長度、揮動速度、感應器離地距離與角度還有出發位置等等,都會影響到機器人能否投進,可說是牽一髮動全身啊

IMG_1322 IMG_1328

孩子們上課的笑容就是我們的動力, 也謝謝有高鐵能讓 CAVE 到更多地方與大家見面.

IMG_1293 IMG_1298 IMG_1304 IMG_1306 IMG_1310 IMG_1311 IMG_1312 IMG_1318

 

IMG_1332 IMG_1333 IMG_1336 IMG_1346 IMG_1349

131114 Sensor Lamp 感應燈工作坊@FabCafe Taipei

兩次與FabCafe Taipei 合辦活動都是瞬間額滿,真的很感謝大家的支持,我們會一直研發新的主題與大家分享的~聽說下一次會在12月中,一樣是在星期四晚上,有興趣的朋友請不要錯過。

130912 FabCafe 一吹就亮互動燈照片請看我

IMG_1271

當天講師:CAVE皓云,聽說是一個非常喜歡初音未來的男人

IMG_1140 IMG_1196

外殼與遮光罩,遮光罩採用 3D列印,一個要印 7.5小時,真是費工哩!線路全部都可以藏在雷切完成的case中,完整度很高,還有三個可變電組可以隨時調整RGB LED燈的顏色

IMG_1194  IMG_1209

IMG_1173  IMG_1242

亮起來了!是不是很有質感呢?

IMG_1268  IMG_1241       IMG_1269

 

其它更多 FabCafe照片,歡迎大家到 FabCafe 走走

IMG_1154 IMG_1155

IMG_1243

11/14 FabCafe x CAVE Education 感應燈工作坊 歡迎報名

FabCafe x CAVE Education

感應燈工作坊 Sensor Lamp:Interactive Electronic Device Workshop Vol.2

即日起開放報名!名額有限,想要來玩的朋友得動作快囉!!

本次工作坊為 FabCafe Taipei 與CAVE團隊合作,以實作帶您認識電子元件(電阻、電容、電感等)及電路基本原理,親手剝線、接線,組裝出紅綠藍三色感應燈電路,外殼部分則會利用3D列印的技術製作,讓大家在學習電路之餘,也能全新體驗由平面到立體的3D列印的趣味~

時間:2013.11.14 (四) 19:00-21:00
地點:FabCafe Taipei 台北市八德路一段1號
名額:15人
額滿為止,火速來報名:http://taipei.fabcafe.com/event/11574#.UnZ82HBmh8E

[Android ADK + Arduino] Lesson2 控制LED漸明漸暗

[Android ADK + Arduino] Lesson1 控制LED亮滅

本範例是[Beginning Android ADK with Arduino]一書中的Project 2. 透過Android畫面上的SeekBar滑桿 來控制Arduino板上的LED燈漸明漸暗。

您需要的硬體有:

1. Arduino MEGA ADK or 其他相容ADK板

2. Android手機或平板(2.3.3 or 3.1以上).

3. LED(5V). 電阻(220歐姆) x1, 線材一批.

  
Android端程式(部分)

Android端程式的關鍵在於使用SeekBar物件的狀態監聽事件來 呼叫sendLedIntensityCommand()方法, 對TARGET_PIN_2 (LED正極腳位)寫入 params[0]). 我們將SeekBar分成256個等級來控制LED的明暗, 和上個範例是不一樣的效果唷.

OnSeekBarChangeListener ledIntensityChangeListener = new OnSeekBarChangeListener() {

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
ledIntensityTextView.setText(“LED intensity: ” + ledIntensitySeekBar.getProgress());
new AsyncTask () {

@Override
protected Void doInBackground(Byte… params) {
sendLedIntensityCommand(TARGET_PIN_2, params[0]);
return null;
}
}.execute((byte) progress);
}
//…其它省略

};

sendLedIntensityCommand()方法中則是使用mOutputStream.write()來控制LED漸明漸暗 .

public void sendLedIntensityCommand(byte target, byte value) {
byte[] buffer = new byte[3];
buffer[0] = COMMAND_LED;
buffer[1] = target;
buffer[2] = value;
if (mOutputStream != null) {
try {
mOutputStream.write(buffer);
} catch (IOException e) {
Log.e(TAG, “write failed”, e);
}
}
}

Arduino端程式 部分, 省略main 與Acc物件定義.

Arduino端程式與上一個範例 差別在於使用analogWrite方法來控制LED, 而非digitalWrite. 請注意您所使用的PIN腳位必須支援PWM才可以唷.

void loop() {
if (acc.isConnected()) {
//read the received data into the byte array
int len = acc.read(rcvmsg, sizeof(rcvmsg), 1);
if (len > 0) {
if (rcvmsg[0] == COMMAND_LED) {
if (rcvmsg[1] == TARGET_PIN_2){
//get the analog value
byte value = rcvmsg[2];
//set output pin to according analog value
          analogWrite(PIN, value);
}
}
}
}
}

[Android ADK + Arduino] Lesson1 控制LED亮滅

本範例是[Beginning Android ADK with Arduino]一書中的Project 1. 透過Android畫面上的toggle button 來控制Arduino板上的LED燈亮滅.

您需要的硬體有:

1. Arduino MEGA ADK or 其他相容ADK板

2. Android手機或平板(2.3.3 or 3.1以上).

3. LED. 電阻x1, 線材一批.

   

Android端程式(部分)

Android端程式的關鍵在於在toggleButton狀態改變時, 呼叫sendLedSwitchCommand()方法, 對TARGET_PIN_2 (LED正極腳位)寫入 params[0]). 使用togglebutton而非一般button的用意在於其機械性質的差異, button需持續壓按才算為pressed, togglebutton則是在點擊之後就會改變狀態, 直到下一次點擊為止, 不需要一直壓著.

OnCheckedChangeListener toggleButtonCheckedListener = new OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (buttonView.getId() == R.id.led_toggle_button) {
                new AsyncTask () {

                    @Override
                    protected Void doInBackground(Boolean… params) {
                        sendLedSwitchCommand(TARGET_PIN_2, params[0]);
                        return null;
                    }   
                }.execute(isChecked);
            }
        }
    };

在sendLedSwitchCommand()方法中則是使用mOutputStream.write()來控制LED的高低電位, 也就是亮滅.

public void sendLedSwitchCommand(byte target, boolean isSwitchedOn) {
        byte[] buffer = new byte[3];
        buffer[0] = COMMAND_LED;
        buffer[1] = target;
        if (isSwitchedOn) {
            buffer[2] = VALUE_ON;
        } else {
            buffer[2] = VALUE_OFF;
        }
        if (mOutputStream != null) {
            try {
                mOutputStream.write(buffer);
            } catch (IOException e) {
                Log.e(TAG, "write failed", e);
            }
        }
    }

Arduino端程式 部分, 省略main 與Acc物件定義.

Arduino端則是在loop()端終判斷接收到的value為何, 如果是VALUE_ON, 則digitalWrite(PIN, HIGH)來點亮LED. 反之則關閉.

#define COMMAND_LED 0x2
#define TARGET_PIN_2 0x2
#define VALUE_ON 0x1
#define VALUE_OFF 0x0

#define PIN 2

void loop() {
  if (acc.isConnected()) {
    //read the received data into the byte array
    int len = acc.read(rcvmsg, sizeof(rcvmsg), 1);
    if (len > 0) {
      if (rcvmsg[0] == COMMAND_LED) {
        if (rcvmsg[1] == TARGET_PIN_2){
          //get the switch state
      byte value = rcvmsg[2];
          //set output pin to according state
          if(value == VALUE_ON) {
            digitalWrite(PIN, HIGH);
          } else if(value == VALUE_OFF) {
            digitalWrite(PIN, LOW);
          }
        }
      }
    }
  }
}

[LabVIEW for Arduino] LED Blink by LabVIEW

首先我們必須要先放個Ini.vi,並且設定VISA跟板子型號,接著在程式執行一開始使用Set Digital Pin Mode.vi來設定此Pin腳是要輸出還是輸入,拉出一個for loop設定程式要回圈幾次,並且使用shift register來記錄high/low及time delay設定閃燈週期,獎high/low輸入至digital write pin,並且設定其pin 腳,最後再放個close.vi釋放控制權。

我們可以在fornt panel 放一個燈泡,來對照arduino pin13旁的LED與front panel的燈泡是否同步。