IOIO-PWM-CommonCathodeRGBLED

Page 1

   1

Application #5+    แอปพลิเคชั่นนีถู้ กสรางขึนเพื ้ อเป ่ นตัวอยางของการควบคุมการแสดงผลของ LED 3 สีแบบแคโทดรวม ทําใหขับ LED แสดงเปนสีตางๆไดดวยการใชสัญญาณ PWM

การตรวจสอบขาของ LED 3 สี 4 ขา (1) ตรวจสอบกอนวา LED 3 สีที่ใชเปนแบบแอโนดรวมหรือแคโทดรวม โดยตอขารวมหรือขาคอม มอน (common) ซึงเป ่ นขาทียาวสุ ่ ดเขากับไฟเลียง ้ +3V หรือ +3.3V หรือ +5V ตองตออนุกรมกับตัวตานทาน ประมาณ 150 ถึง 330W กอน เพื่อจํากัดกระแสไฟฟาไมใหไหล ผาน LED มากเกินไป รวมถึงปองกันในกรณี ที่ตอกลับขั้วดวย จากนั้นใหตอขาที่เหลือเขากับกราวดทีละขา ดังรูปที่ 1 (1.1) ถา LED ติดสวางในการตอทุกขา สรุปไดวา LED ตัวนันๆ ้ เปนแบบแอโนดรวม ใหตรวจสอบ ตอวาขาใดเปน ขาแคโทดของ LED สีใด (1.2) ถา LED ติดจากการตอคูใดคู  หนึ  ง่ อาจเปนเพราะตําแหนงขารวมผิด โดยขาทีต่ อเขากับกราวด แลว LED ติด อาจเปนขาแคโทดรวม (1.3) ถา LED ไมติดเลยในทุกกรณี ใหทําตอในขันตอนที ้ ่ (2)

รูปที่ 1 แสดงการทดสอบ LED 3 สี แบบแอโนดรวม รูปที่ 2 แสดงการทดสอบ LED 3 สี แบบแคโทดรวม


    2

รูปที่ 3 แสดงการจัดขาของ LED 3 สี 4 ขา ทังชนิ ้ ดแอโนดรวม (มี 2 รูปแบบ) และชนิดแคโทดรวม (2) ตอขารวมเขากับกราวดแทน สวนขาทีเหลื ่ อตอกับ +3V หรือ +3.3V หรือ +5V โดยตองตอผาน ตัวตานทานประมาณ 150 ถึง 330 เชนกันดังรูปที่ 2 ใหตอทีละขา เพือดู ่ วา LED ติดหรือไม (ติดเปนสีใดก็ได) (2.1) ถา LED ติดสวางในการตอทุกขา สรุปไดวา LED ตัวนันๆ ้ เปนแบบแคโทดรวม ใหตรวจ สอบตอวาขาใดเปนขาแอโนดของ LED สีใด (2.2) ถา LED ติดจากการตอคูใดคู  หนึงเท ่ านั้น (ติดกรณีเดียว) อาจเกิดจากตําแหนงขารวมผิด โดยขาที่ตอเขากับไฟเลียงแล ้ วทําให LED ติด อาจเปนขาแอโทดรวม (2.3) ถา LED ไมติดเลยในทุกกรณี ใหกลับไปทําในขันตอนที ้ ่ (1)ใหมอีกครัง้ หรืออาจสรุปไดวา LED ตัวนันๆ ้ เสียหายไปแลว จากการทดสอบวัดหาขาของ LED 3 สี พบวา มีการจัดขา 3 แบบจาก LED ทั้งชนิดแอโนดรวม (มี 2 รูปแบบ) และชนิดแคโทดรวมตามรูปที่ 3

การตอวงจรและการทํางาน แสดงในรูปที่ 4 ตอขาพอรต 46, 47 และ 48 ของ IOIO-Q เขากับ LED 3 สี โดยขา 46 ตอกับขาแอโนด ของ LED สีนําเงิ ้ น, ตอขา 47 กับขาแอโนดของ LED สีแดง และตอขา 48 กับขาแอโนดของ LED สีเขียว LED 3 สีที่ในการทดลองนี้มีโครงสรางเปนชนิดแคโทดรวม (ตอขาแคโทดของ LED แตละสีเขาดวย กัน) สัญญาณ PWM ที่สงมาขับหากมีดิวตี้ไซเกิล 100% จะทําให LED สวางมากที่สุด และที่ดิวตี้ไซเกิล 0% จะทําให LED ดับ การควบคุมให LED 3 สีแสดงสีตางๆ ออกมา จะขึนอยู ้ กั บสัญญาณ PWM ทีป่ อนใหขาแอโนดแตละขา จึงตองใชขาเอาตพุต PWM 3 ขาแยกกันอิสระ ดวยการจัดการใหความกวางของสัญญาณหรือดิวตีไซเกิ ้ ลทีต่ างกัน จะทําให LED แตละสีทํางานใหความสวางทีไม ่ เทากัน กอใหเกิดการผสมของแสงสี ไดเปนแสงสีตามทีต่ องการ


   3

<?xml version"1.0" encoding="utf-8" ?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:orientation="vertical" android:background=”#FFE57C” android:gravity="center"> <TextView android:id="@+id/txtRed" android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”Red 0 %” android:textColor=”#000000" android:textSize=”20dp” /> <SeekBar android:id=”@+id/seekBarRed” android:layout_width=”250dp” android:layout_height=”wrap_content” android:max=”100" android:layout_marginBottom=”20dp” /> <TextView android:id=”@+id/txtGreen” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”Green 0 %” android:textColor=”#000000" android:textSize=”20dp” /> <SeekBar android:id=”@+id/seekBarGreen” android:layout_width=”250dp” android:layout_height=”wrap_content” android:max=”100" android:layout_marginBottom=”20dp” /> <TextView android:id=”@+id/txtBlue” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”Blue 0 %” android:textColor=”#000000" android:textSize=”20dp” /> <SeekBar android:id=”@+id/seekBarBlue” android:layout_width=”250dp” android:layout_height=”wrap_content” android:max=”100" /> </LinearLayout>

โปรแกรมที่ 1 ซอรสโปรแกรม Layout ของแอปพลิเคชัน่ CommonCathodeRGBLED


    4

รูปที่ 4 วงจรทดลองขับ LED 3 สีชนิดแคโทดรวมดวยสัญญาณ PWM จากบอรด IOIO-Q ตัวอยาง หากปอนสัญญาณ PWM ที่มีคาดิวตี้ไซเกิลแตกตางกันตามคาตอไปนี้เขาที่ขาแอโนดของ LED 3 สีแต ละขา จะทําให LED 3 สีแสดงสีตางกัน Red = 100%, Green = 0%, Blue = 100% ไดเปนสีชมพู Red = 100%, Green = 50%, Blue = 25% ไดเปนสีสม Red = 0%, Green = 100%, Blue = 100% ไดเปนสีเขียว

โปรแกรมที่ใชงานจริง ดูไดจากโฟลเดอร IOIO-PWM-CommonCathodeRGBLED


   5

ขั้นตอน (1) เป ดโปรแกรม Eclipse เพื่อออกแบบหนาตาของแอปพลิเคชั่น โดยเขียนโปรแกรมที่ 1 ตั้งชื่อเปน CommonCathodeRGBLED (2) เขียนโปรแกรมหลักตามที่แสดงในโปรแกรมที่ 2 บันทึกลงในไฟล Main.java (3) เขียนโปรแกรมที่ 3 ใหแกไฟล AndroidManifest.xml เพือใช ่ กําหนดคาตางๆ ของแอปพลิเคชั่น (4) คอมไพลไฟลโปรเจ็กตทั้งหมด แลวทําการติดตั้งแอปพลิเคชั่นลงในอุปกรณแอนดรอยดตามขอกําหนดของ อุปกรณแอนดรอยดตัวนันๆ ้ (5) จายไฟใหกับวงจร จากนันรั ้ นแอปพลิเคชั่น ทําการเชื่อมตอ IOIO-Q เขากับอุปกรณแอนดรอยด (รองรับทั้ง แบบใชสายตอพอรต USB และเชือมต ่ อไรสายดวยบลูทูธ)

รูปแสดงหนาตางของแอปพลิเคชัน่ CommonCathodeRGBLED (6) ปรับแตงสีของ LED ใหไดสีตามทีต่ องการดวยการปรับคาทีหน ่ าจอของแอป พลิเคชันบนอุ ่ ปกรณแอนดรอยด (7) อยางไรก็ตาม จากการทดลองพบวา การผสมสีของแสงอาจไมไดใหผลทีถู่ กตอง เชน กําหนดใหสัญญาณ PWM ที่ปอนไปยังขาแคโทดทั้งสามขาของ LED มีคาดิวตี้ไซเกิล 0% (เพื่อให LED สวางสูงสุด) โดยปกติ LED ควรจะสวางเปนสีขาว แตในทางปฏิบัติ LED กลับสวางเปนสีขาวอมแดง นันหมายความว ่ า LED สีแดงใหแสง สวางมากกวาแสงสีอื่นๆ ที่แรงดันเทากัน จึงตองมีการลดความสวางของ LED ลง ดวยการเพิมค ่ าของตัวตาน ทานที่ตออนุกรมระหวางขาพอรตกับขาแอโนด จนกระทั่งไดแสงสีขาวตามตองการ


    6 /************************************************************************ * TITLE : RGB LED COMMON ANODE DRIVER * COMMENT : USE WITH COMMON ANODE RGB LED * CATAGORIES : PWM (PULSE-WIDTH MODULATION) * CREATED DATE : JUNE 11, 2012 * AUTHOR : INNOVATIVE EXPERIMENT CO., LTD. (INEX) * WEBSITE : HTTP://WWW.INEX.CO.TH ***********************************************************************/ package app.inex.ioio.pwm.commoncathodergbled; import import import import import import import import import import

ioio.lib.api.PwmOutput; ioio.lib.api.exception.ConnectionLostException; ioio.lib.util.BaseIOIOLooper; ioio.lib.util.IOIOLooper; ioio.lib.util.android.IOIOActivity; android.os.Bundle; android.widget.SeekBar; android.widget.TextView; android.widget.Toast; android.widget.SeekBar.OnSeekBarChangeListener;

public class Main extends IOIOActivity { // Declare text view instance TextView txtRed, txtGreen, txtBlue; // Declare seek bar instance SeekBar seekBarRed, seekBarGreen, seekBarBlue; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Assign text view with widget on layout txtRed = (TextView)findViewById(R.id.txtRed); txtGreen = (TextView)findViewById(R.id.txtGreen); txtBlue = (TextView)findViewById(R.id.txtBlue); // Assign seek bar with widget on layout seekBarRed = (SeekBar)findViewById(R.id.seekBarRed); seekBarRed.setThumbOffset(8); seekBarGreen = (SeekBar)findViewById(R.id.seekBarGreen); seekBarGreen.setThumbOffset(8); seekBarBlue = (SeekBar)findViewById(R.id.seekBarBlue); seekBarBlue.setThumbOffset(8); } class Looper extends BaseIOIOLooper { // Declare PWM output instance PwmOutput red, green, blue; protected void setup() throws ConnectionLostException { // Assign PWM output with port on IOIO board // at 100 Hz frequency red = ioio_.openPwmOutput(48, 100); green = ioio_.openPwmOutput(47, 100); blue = ioio_.openPwmOutput(46, 100); // Create listener for seek bar seekBarRed.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {

โปรแกรมที่ 2 ซอรสโปรแกรมหลักของแอปพลิเคชัน่ CommonCathodeRGBLED (มีตอ)


   7 try { // Set PWM duty cycle by read value // from thumb position in seek bar red.setDutyCycle((float)1 - (float)arg1/100); } catch (ConnectionLostException e) { e.printStackTrace(); } // Set text with duty cycle value txtRed.setText(“Red “ + String.valueOf(arg1) + “ %”); } public void onStartTrackingTouch(SeekBar arg0) { } public void onStopTrackingTouch(SeekBar arg0) { } }); seekBarGreen.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { try { green.setDutyCycle((float)1 - (float)arg1/100); } catch (ConnectionLostException e) { e.printStackTrace(); } txtGreen.setText(“Green “ + String.valueOf(arg1) + “ %”); } public void onStartTrackingTouch(SeekBar arg0) { } public void onStopTrackingTouch(SeekBar arg0) { } }); seekBarBlue.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { try { blue.setDutyCycle((float)1 - (float)arg1/100); } catch (ConnectionLostException e) { e.printStackTrace(); } txtBlue.setText(“Blue “ + String.valueOf(arg1) + “ %”); } public void onStartTrackingTouch(SeekBar arg0) { } public void onStopTrackingTouch(SeekBar arg0) { } }); runOnUiThread(new Runnable() { public void run() { // Toast message “Connect” // when android device connect with IOIO board Toast.makeText(getApplicationContext(), “Connected!”, Toast.LENGTH_SHORT).show(); } }); } public void loop() throws ConnectionLostException { } } protected IOIOLooper createIOIOLooper() { return new Looper(); } }

โปรแกรมที่ 2 ซอรสโปรแกรมหลักของแอปพลิเคชัน่ CommonCathodeRGBLED (จบ)


    8

<?xml version=”1.0" encoding=”utf-8"?> <manifest xmlns:android=”http://schemas.android.com/apk/res/android” package=”app.inex.ioio.pwm.commoncathodergbled” android:versionCode=”1" android:versionName=”1.0" > <uses-sdk android:minSdkVersion=”10" /> <uses-permission android:name=”android.permission.BLUETOOTH”/> <uses-permission android:name=”android.permission.INTERNET”/> <application android:icon=”@drawable/ic_launcher” android:label=”@string/app_name” > <activity android:name=”.Main” android:label=”@string/app_name” > <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> </application> </manifest>

โปรแกรมที่3 ซอรสโปรแกรมของไฟล AndroidManifest.xml สําหรับแอปพลิเคชัน่ CommonCathodeRGBLED


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.