วันศุกร์ที่ 24 ธันวาคม พ.ศ. 2553

UDP socket Client on Android Phone


วันนี้ได้เขียน app เพื่อทดสอบ การส่งขอมูล ผ่าน UDP protocol ปรากฎว่าเอ๊....เป็นไรว้าาาส่งได้สักพักโปรแกรมมันปิดตัวเองไปดื้อๆๆ เลยที่แลกกะปล่อยเลยไปตามเลยแระ ปรากฎว่าลองเล่ๆ ดูแก้ได้ก็แก้
ก็เริ่มทดสอบเลย อ่าน ค่าจาก LogCat มันก็ขึ้น

ประมาณนี้


เลยลองไปดู code การส่งข้อมูลประมาณนี้
public void sendData(String bufStr) {

try{
serverAddr = InetAddress.getByName(SERVERIP);
socket = new DatagramSocket();

bufTx = bufStr.getBytes();
packet = new DatagramPacket(bufTx, bufTx.length, serverAddr, SERVERPORT);
socket.send(packet);
}catch(Exception e){
}
}

ก็เลยสังเกตเอ๊ DatagramPacket มัน new ตลอดทุกครั้งที่ส่งเลยแหะ
เลยจัดการเลยทุกครั้งที่ส่งเสร็ตให้ทำการปิดตัวเองทุกครั้งด้วย

socket.close();

โอ้วววว สุดยอดครับ คราวนนี้โปรแกรมไม่เคยหลุดอีกเลย หุๆๆๆ รอดตัวไปครังงานนี้

ลองเอาไปประยุคใช้ดูนะครับ สำหรับผู้ที่กำลังเขียน โปรแกรม ผ่าน socket บน android ครับผม :D


วันพุธที่ 15 ธันวาคม พ.ศ. 2553

Relay (รีเลย์) อุปกรณ์อิเล็กทรอนิกส์ขั้นเทพ

Relay (รีเลย์)
อ่า คงงงสินะครับ ว่าทำไมต้องเรียกมันว่าอุปกรณ์ขั้นเทพ เพราะว่าพี่เป็ดแก่ชอบอุปกรณ์ตัวนี้สุดๆ มันไม่เคยงอแง เสียก็หาได้โดยง่าย ไม่รวนเร สั่งปุ๊บทำปั๊บ แถมแค่มีรีเรย์ก็สามารถสร้างหุ่นอย่างง่ายได้แล้วนะครับ น้องๆบางคนเคยเล่นรถกระป๋องมาคงจะเคยใช้บ้าง ก็อีตัวเหลืองๆ ที่ตามร้านเข้าบอกว่าติดแล้วมันเป็นเทอร์โบ ไงละครับ น้องๆบางคนอาจจะถึงบ้างอ้อแล้ว แล้วที่ฮากว่านั้นคือ ราคามันไม่ใช่ตัวละ 80-150 อย่าที่ตามร้านแต่งรถกระป๋องบอกอีกด้วย มันถูกสุดๆ จนถ้าน้องรู้แล้วจะร้องจ๊ากกกกกก กันเลยทีเดียว แต่พี่ไม่บอกหรอกครับเดี๋ยวบางคนอาจจะเสียใจที่โดนต้ม จนช็อกตายแล้วพี่เป็ดจะติดคุก ฮ่าๆๆ เอาละเรามารู้จักหลักการทำงานของเจ้า รีเลย์ กันเลยดีกว่านะครับน้องๆ




รูปรีเลย์ และ สัญลักษณ์ของรีเลย์


การทำงานของรีเลย์ คือ เมื่อมีกระแสไฟฟ้าไหลผ่านขดลวด จะทำให้ขดลวดเกิดสนามแม่เหล็กไปดึง แผ่นหน้าสัมผัสให้ดึงลงมา แตะหน้าสัมผัสอีกอันทำให้มีกระแสไหลผ่านหน้าสัมผัสไปได้





รูปแสดงสภาวะการทำงานของรีเลย์







รูปด้านล่างของรีเลย์จะแสดงตำแนหน่งขา และ ด้านบนจะแสดงรายละเอียดการใช้งาน


ขาของรีเลย์จะประกอบไปด้วยตำแหน่งต่างๆดังนี้คือ
ขาจ่ายแรงดันใช้งาน ซึ่งจะมีอยู่ 2 ขา จากรูปจะเห็นสัญลักษณ์ขดลวดแสดงตำแหน่งขา coil หรือ ขาต่อแรงดันใช้งาน
ขา C หรือ COM หรือ ขาคอมมอน จะเป็นขาต่อระหว่าง NO และ NC
ขา NO (Normally opened หรือ ปกติเปิด) โดยปกติขานี้จะเปิดเอาไว้ จะทำงานเมื่อเราป้อนแรงดันให้รีเลย์
ขา NC (Normally closed หรือ ปกติปิด) โดยปกติขานี้จะต่อกับขา C ในกรณีที่เราไม่ได้จ่ายแรงดัน หน้าสัมผัาของ C และ NC จะต่อถึงกัน

ข้อคำถึงในการใช้งานรีเลย์ทั่วไป
1. แรงดันใช้งาน หรือแรงดันที่ทำให้รีเลย์ทำงานได้ หากเราดูที่ตัวรีเลย์จะระบุค่า แรงดันใช้งานไว้ (หากใช้ในงานอิเล็กทรอนิกส์ ส่วนมากจะใช้แรงดันกระแสตรงในการใช้งาน) เช่น 12 VDC คือต้องใช้แรงดันที่ 12 VDC เท่านั้นหากใช้มากกว่านี้ ขดลวดภายใน ตัวรีเลย์อาจจขาดได้ หรือหากใช้แรงดันต่ำกว่ามาก รีเลย์จะไม่ทำงาน ส่วนในการต่อวงจรนั้นสามารถต่อขั้วใดก็ได้ครับ เพราะตัวรีเลย์ จะไม่ระบุขั้วต่อไว้ (นอกจากชนิดพิเศษ)

2. การใช้งานกระแสผ่านหน้าสัมผัส ซึ่งที่ตัวรีเลย์จะระบุไว้ เช่น 10A 220AC คือ หน้าสัมผัสของรีเลย์นั้นสามาถทนกระแสได้ 10 แอมแปร์ที่ 220VAC ครับ แต่การใช้ก็ควรจะใช้งานที่ระดับกระแสต่ำกว่านี้จะเป็นการดีกว่าครับ เพราะถ้ากระแสมากหน้าสัมผัส ของรีเลย์จะละลายเสียหายได้

3. จำนานหน้าสัมผัสการใช้งาน ควรดูว่ารีเลย์นั้นมีหน้าสัมผัสให้ใช้งานกี่อัน และมีขั้วคอมมอนด้วยหรือเปล่า

จำนวนหน้าสัมผัสของรีเลย์
ปกติแล้วรีเลย์จะมีหน้าสัมผัสและการเรียกจำนวนหน้าสัมผัสดังนี้ครับ






การนำรีเลย์ไปกลับทางหมุนของมอเตอร์กระแสตรง(DC Motor)

ในการใช้ไอซีไมโครคอนโทรเลอร์เป็นตัวควบคุมการหมุน และทิศทางของมอเตอร์กระแสตรงนั้น เราจะต้องมีส่วนของวงจร ที่เรียกว่าวงจรขับมอเตอร์ (Driver) ในส่วนของวงจรกลับทิศทางของมอเตอร์นั้น สามารถที่จะใช้รีเลย์ต่อวงจร สวิตซ์เพื่อกลับทิศทางของขั้วไฟกระแสตรง หรืออาจใช้อุปกรณ์สารกึ่งตัวนำที่เป็นวงจรขับกำลังเช่น ทรานซิสเตอร์ มอสเฟต แล้วแต่วิธีที่เราจะเลือกใช้งาน
จากรูปเป็นการใช้รีเลย์ควบคุมการเปลี่ยนทิศทางการหมุนของมอเตอร์ โดยการควบคุมการปิด - เปิดที่รีเลย์ 2 ตัว ซึ่งจะทำหน้าที่กลับทิศทางของขั้วไฟที่ป้อนให้กับมอเตอร์ โดยการสลับการทำงานของรีเลย์ เช่นให้รีเลย์ตัวที่ 1 ทำงาน (ON) และรีเลย์ตัวที่ 2 หยุดทำงาน (OFF) จะทำให้มอเตอร์หมุนไปทางซ้าย และในทำนองเดียวกันถ้าหากรีเลย์ตัวที่ 1 หยุดทำงาน (OFF) และรีเลย์ตัวที่ 2 ทำงาน (ON) ก็จะทำให้มอเตอร์หมุนไปทางขวา
รูปแสดงการกลับทิศทางของมอเตอร์กระแสตรงโดยใช้รีเลย์
รูปแสดงการใช้ทรานซิสเตอร์เพื่อขับรีเลย์ให้ทำงาน

นอกจากนำรีเลย์มาใช้ขับมอเตอร์แล้วยังใช้ทรานซิสเตอร์กลับทางได้ได้วยนะครับ

จากรูปเป็นวงจรขับรีเลย์โดยใช้ทรานซิสเตอร์ทำหน้าที่ขยายกระแส ด้วยเหตุผลเพราะไม่สามารถจะใช้ขา เอาต์พุตของไมโครคอนโทรลเลอร์ป้อนกระแสไฟที่ขดลวดของรีเลย์โดยตรงได้ เนื่องจากว่ากระแสที่จ่ายออกมาจากขา เอาต์พุตของไมโครคอนโทรลเลอร์มีค่าน้อยเกินไป ดังนั้นเราจึงต้องมีส่วนของวงจรทรานซิสเตอร์เพื่อที่จะทำการขยายกระแสให้เพียงพอในการป้อนให้กับขดลวดของรีเลย์ ส่วนไดโอดนำมาต่อไว้สำหรับป้องกันแรงดันย้อนกลับที่เกิดจากการเหนี่ยวนำของสนามแม่เหล็กในขณะเกิดการยุบตัว ซึ่งอาจจะทำให้ทรานซิสเตอร์เสียหายได้

รูป แสดงการใช้ทรานซิสเตอร์เป็นวงจรขับและกำหนดทิศทางของมอเตอร์กระแสตรง
จากรูปเป็นวงจรลิเนียร์บริดจ์แอมป์ ซึ่งจะประกอบไปด้วยทรานซิสเตอร์กำลัง 4 ตัวที่ทำหน้าที่ขับ และควบคุมทิศทางการหมุนของมอเตอร์ ถ้าหากกำหนดให้ทรานซิสเตอร์ Q1 และ Q4 อยู่ในสภาวะทำงาน (Active) กระแสไฟฟ้าจะไหลผ่านทรานซิสเตอร์จากซ้ายไปขวา โดยผ่านมอเตอร์กระแสตรงทำให้มอเตอร์หมุนไปทางขวา ในทำนองเดียวกันถ้าหากเราทำให้ทรานซิสเตอร์ Q2 และ Q3 อยูในสภาวะทำงาน (Active) กระแสไฟฟ้าก็จะไหลจากทางขวาไปทางซ้ายซึ่งจะส่งผลให้มอเตอร์กลับทิศทางการ หมุนจากทางขวาไปทางซ้าย

รู้เรื่องรีเลย์แล้ว ใช้งานให้ถูกต้องด้วยนะครับ วันนี้ต้องขอลาไปก่อนนะครับ แล้วพี่เป็ดแก่จะเอาสาระดีๆมาสอนน้องๆทำหุ่นอีกนะครับพี่น้อง(รับรองได้เอารีเลย์ไปทำหุ่นแน่นอน พี่จะมาสอนเองเลยสัญญาด้วยเกียรติของลูกเสือ)

เครดิต http://www.saneengineer.com/index.php?lay=show&ac=article&Id=538961013&Ntype=66
http://www.adisak51.com/page21.html

อิเล็กทรอนิกส์เบื้องต้น

Electronic(อิเล็กทรอนิกส์)

สวัสดีครับน้องๆ พบกับพี่เป็ดแก่กันอีกครั้งนะครับ วันนี้พี่จะมาสอนน้องๆ ให้รุ้จักอุปกรณ์ที่เรียกว่า อิเล็กทรอนิกส์ แล้วไอ้ อิเล็กทรอนิกส์นี่มันสำคัญอย่างไร แน่นอนครับมันต้องเกี่ยวกับการสร้างหุ่นยนต์อย่างแน่นอน ไม่งั้นพี่ไม่นำมาฝากน้องๆกันแน่นอนครับผม

อย่างที่พี่เคยบอกไว้ว่าส่วนประกอบอันแสนสังคัง เอ้ย~สำคัญ ส่วนที่สองคือ พลังงานแล้วก็วงจรอิเล็กทรอนิกส์ ยังจำกันได้ไหมเอ่ย??? ใครไม่รู้กลับไปอ่านหัวข้อ มารู้จักหุ่นยนต์กันนะครับ เอาละ เข้าเรื่องกันเลยดีกว่า ดังนั้นแล้ว ก่อนเราจะออกแบบวงจรอิเล็กทรอนิกส์ไปใช้งานกะหุ่นยนต์ได้นั้น เรามารู้จักกะมันก่อนดีก่านะครับพี่น้องครับ




อุปกรณ์ตัวแรกๆที่น้องๆควรจะรู้จักเลยนะครับก็คือ ตัวต้านทาน ตัวเก็บประจุ ไดโอด LED ทรานซิสเตอร์ ที่จริงยังมีอีกเยอะ ไว้ค่อยทำความเข้าใจนะครับ แต่เหล่านี้คืออุปกรณ์พื้นฐานที่ขาดไม่ได้เลยทีเดียวครับ ถ้าพื้นๆเรายังไม่รู้จะไปรู้ลึกๆ ได้อย่างไรกัน แหม แอบคม ฮ่าๆๆ เอ้า!!! มาเริ่มกันเลยเถิด


ตัวต้านทาน(Resistor)


ตัวต้านทานเป็นอุปกรณ์อิเล็กทรอนิกส์ชนิดหนึ่งที่มีสมบัติในการ
ต้านการไหลของกระแสไฟฟ้า โดยทั่วไปแบ่งเป็น 3 ประเภท ได้แก่

1) ตัวต้านทานคงที่ ( Fixed Value Resistor ) เป็นตัวต้านทานที่มีค่าความต้านทานของการไหลของกระแสไฟฟ้าคงที่ มีสัญลักษณ์ที่ใช้ในวงจร คือ ซึ่งสามารถอ่านค่าความต้านทาน
ได้จากแถบสีที่คาดอยู่บนตัวความต้านทาน มีหน่วยเป็นโอห์ม ( Ω )
แถบสีที่อยู่บนตัวต้านทานโดยส่วนมากจะมี 4 แถบ และมีแถบสีที่ชิดกันอยู่ 3 สี อีกสีหนึ่งจะอยู่ห่างออกไปที่ปลายข้างหนึ่ง การอ่านค่าจะเริ่มจากแถบสีที่อยู่ชิดกันก่อน โดยแถบที่อยู่ด้านนอกสุดให้เป็น แถบสีที่ 1 และสีถัดไปเป็นสีที่ 2, 3 และ 4 ตามลำดับ สีแต่ละสีจะมีรหัสประจำแต่ละสี ดังตาราง

สี
แถบสีที่ 1
แถบสีที่ 2
แถบสีที่ 3
แถบสีที่ 4
ค่าตัวแรก
(หลักสิบ)
ค่าตัวแรก
(หลักหน่วย)
ตัวคูณ
% ความ
คลาดเคลื่อน
ดำ
0
0
1
-
น้ำตาล
1
1
10
-
แดง
2
2
100
± 2 %
ส้ม
3
3
1,000
-
เหลือง
4
4
10,000
-
เขียว
5
5
100,000
-
ฟ้า
6
6
1,000,000
-
ม่วง
7
7
10,000,000
-
เทา
8
8
100,000,000
-
ขาว
9
9
1,000,000,000
-
ทอง
-
-
0.1
± 5 %
เงิน
-
-
0.01
± 10 %
ไม่มีสี
-
-
-
± 20 %
2) ตัวต้านทานที่เปลี่ยนค่าได้ ( Variable Value Resistor ) เป็นตัวต้านทานที่เมื่อหมุนแกนของตัวต้านทาน แล้วค่าความต้านทานจะเปลี่ยนแปลงไป นิยมใช้ในการควบคุมค่าความต่างศักย์ไฟฟ้า ( Voltage ) ในวงจรอิเล็กทรอนิกส์ เช่น การเพิ่ม – ลดเสียงในวิทย์หรือโทรทัศน์ เป็นต้น สัญลักษณ์ที่ใช้ในวงจร คือ
3) ตัวต้านทานไวแสง หรือ แอลดีอาร์ ( LDR ) ย่อมาจาก Light Dependent Resistor เป็นตัวต้านทานปรับค่าได้ โดยค่าความต้านทานขึ้นอยู่กับปริมาณแสงที่ตกกระทบ ถ้าแสงที่ตกกระทบมีปริมาณมาก LDR จะมีค่าความต้านทานต่ำ ซึ่งสัญลักษณ์ที่ใช้ในวงจร คือ



ตัวเก็บประจุ (Capacitor)

ตัวเก็บประจุเป็นอุปกรณ์อิเล็กทรอนิกส์ชนิดหนึ่งที่ทำหน้าที่ สะสมประจุไฟฟ้าหรือคายประจุไฟฟ้าให้กับวงจรหรืออุปกรณ์อื่นๆ ตัวเก็บประจุบางชนิดจะมีขั้ว คือขั้วบวก และขั้วลบ ดังนั้นการต่อตัวเก็บประจุในวงจร ต้องต่อให้ถูกขั้ว และต้องทราบค่าของตัวเก็บประจุด้วยว่าเหมาะสมกับวงจรอิเล็กทรอนิกส์นั้นๆ หรือไม่ ซึ่งค่าความจุของตัวเก็บประจุจะมีหน่วยเป็นฟารัด ( Farad ) ใช้ตัวอักษรย่อคือ F แต่ตัวเก็บประจุที่ใช้กันทั่วไปมักมีหน่วยเป็นไมโครฟารัด ( µ F ) ซึ่ง 1 F มีค่าเท่ากับ 10 6 µ F ตัวเก็บประจุ มีด้วยกันหลายแบบหลายขนาด แต่ละแบบจะมีความเหมาะสมกับงานที่แตกต่างกัน ตัวเก็บประจุโดยทั่วไปแบ่งเป็น 2 แบบ ได้แก่

1) ตัวเก็บประจุชนิดค่าคงที่ ( Fixed Value Capacitor ) เป็นตัวเก็บประจุที่ได้รับการผลิตให้มีค่าคงที่ ไม่สามารถเปลี่ยนแปลงค่าความจุได้ แต่จะปรับค่าความจุให้เหมาะสมกับวงจรได้โดยนำตัวเก็บประจุหลายๆ ตัวมาต่อกันแบบขนานหรืออนุกรม สัญลักษณ์ของตัวเก็บประจุชนิดค่าคงที่
ในวงจรจะเป็น หรือ
2 ) ตัวเก็บประจุเปลี่ยนค่าได้ ( Variable Value Capacitor ) เป็นตัวเก็บประจุที่สามารถปรับค่าความจุได้ โดยทั่วไปมักใช้ในวงจรปรับแต่งสัญญาณ
ทางอิเล็กทรอนิกส์ หรือพบในเครื่องรับวิทยุซึ่งใช้เป็นตัวเลือกหาสถานีวิทยุ ตัวเก็บประจุ
ุชนิดนี้ส่วนมากเป็นตัวเก็บประจุชนิดใช้อากาศเป็นสาร ไดอิเล็กทริกและการปรับค่า
จะทำได้โดยการหมุนแกน ซึ่งมีโลหะหลายๆ แผ่นอยู่บนแกนนนั้น เมื่อหมุนแกน
แผ่นโลหะจะเลื่อนเข้าหากันทำให้ค่าประจุเปลี่ยนแปลง สัญลักษณ์ของตัวเก็บ
ประจุเปลี่ยนค่าได้ในวงจรจะเป็น หรือ

ไดโอด(Diode)

ไดโอดเป็นอุปกรณ์อิเล็กทรอนิกส์ที่ทำจากสารกึ่งตัวนำ ช่วยควบคุมให้กระแสไฟฟ้า
จากภายนอกไหลผ่านได้ทิศทางเดียว และป้องกันกระแสไฟฟ้าไหลย้อนกลับ จากอุปกรณ์
ประเภทขดลวดต่างๆ ไดโอดประกอบด้วยขั้ว 2 ขั้ว คือ แอโนด ( Anode : A )ต้องต่อ
กับถ่านไฟฉายขั้วบวก ( + ) และแคโทด ( Cathode : K ) ต้องต่อกับถ่าน
ไฟฉายขั้วลบ ( - )
การต่อไดโอเข้ากับวงจรต้องต่อให้ถูกขั้ว ถ้าต่อผิดขั้วไดโอดจะ
ไม่ยอมให้กระแสไฟฟ้าไหลผ่าน ทำให้เครื่องใช้ไฟฟ้าทำงานในวงจรไม่ได้ซึ่งสัญลักษณ์
ของไดโอดในวงจรไฟฟ้า เป็น

ไดโอดบางชนิดเมื่อมีกระแสไฟฟ้าไหลผ่านจะให้แสงสว่างออกมา เราเรียกว่า
ไดโอดเปล่งแสง หรือ แอลอีดี ( LED) ซึ่งย่อมาจาก Light Emitting Diode และมีสัญลักษณ์ในวงจรเป็น

จากภาพจะเห็นว่า LED มีขายื่นออกมาสองขา ขาที่สั้นกว่าคือ ขั้วแคโทด (ขั้วลบ) และขาที่ยาวกว่าคือ ขั้วแอโนด (ขั้วบวก) ไดโอดเปล่งแสงนี้มีลักษณะคล้ายๆหลอด
ไฟเล็กๆ กินไฟน้อย และนิยมนำมาใช้งานอย่างกว้างขวาง เช่น ไฟกะพริบตามเสียงเพลง ไฟหน้าปัดรถยนต์ ไฟเตือนในเครื่องใช้ไฟฟ้าต่างๆ ไฟที่ใช้ในการแสดงตัวเลขของ
เครื่องคิดเลข เป็นต้น

ทรานซิสเตอร์ (Transistor)


ทรานซิสเตอร์เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ทำจากสารกึ่งตัวนำ ทรานซิสเตอร์แต่ละชนิด
จะมี 3 ขา ได้แก่
ขาเบส ( Base : B )
ขาอิมิตเตอร์ ( Emitter : E )
ขาคอลเล็กเตอร์ ( Collector : C )
หากแบ่งประเภทของทรานซิสเตอร์ตามโครงสร้างของสารที่นำมาใช้ จะแบ่งได้ 2 แบบ คือ
1) ทรานซิสเตอร์ชนิด พีเอ็นพี ( PNP ) มีสัญลักษณ์ในวงจรเป็น
เป็นทรานซิสเตอร์ที่ จ่ายไฟเข้าที่ขาเบสให้มีความต่างศักย์ต่ำกว่าขาอิมิตเตอร์
2) ทรานซิสเตอร์ชนิด เอ็นพีเอ็น ( NPN ) มีสัญลักษณ์ในวงจรเป็น
เป็นทรานซิสเตอร์ที่ จ่ายไฟเข้าที่ขาเบสให้มีความต่างศักย์สูงกว่าขาอิมิตเตอร์
ทรานซิสเตอร์เป็นอุปกรณ์ซึ่งถูกควบคุมด้วยกระแสไฟฟ้าที่ผ่านขา B หรือเรียกว่า กระแสเบส นั่นคือ เมื่อกระแสเบสเปลี่ยนแปลงเพียงเล็กน้อยก็จะทำให้กระแสไฟฟ้าในขา E (กระแสอิมิตเตอร์) และกระแสไฟฟ้าในขา C (กระแสคอลเล็กเตอร์) เปลี่ยนแลงไปด้วย ซึ่งทำให้ทรานซิสเตอร์ทำหน้าที่เป็นสวิตช์ปิดหรือเปิดวงจร โดยถ้าไม่มีกระแสไฟฟ้าผ่านขา B ก็จะทำให้ไม่มีกระแสไฟฟ้าผ่านขา E และ C ด้วย ซึ่งเปรียบเสมือนปิดไฟ (วงจรเปิด) แต่ถ้าให้กระแสไฟฟ้าเพียงเล็กน้อยผ่านขา B จะสามารถควบคุมกระแสไฟฟ้าที่มากกว่า
ให้ผ่านทรานซิสเตอร์แล้วผ่านไปยังขา E และผ่านไปยังอุปกรณ์อื่นที่ต่อจากขา C

ที่จริงแล้วยังมีอุปกรณ์ อิเล็กทรอนิกส์ อีกหลายๆตัว เอาไว้พี่เป็ดแก่ จะเอามาสอนหลักการทำงานและวิธีนำไปใช้ในหุ่นยนต์ของเราด้วยนะครับ วันนี้ต้องลาไปก่อนนะครับ สวัสดีคร้าบ


เครดิต http://www.atom.rmutphysics.com/charud/oldnews/0/287/1/pic4/electronic/index-4.html

งาน Young Innovator 2011 @พระจอมเกล้า,ลาดกระบัง

สวัสดีครับ :D
. วันนี้มีงานการแข่งขันหุ่นยนต์ที่น่าสนใจมานำเสนอครับนั่นคืองาน Young Innovator 2011 นะครับในงานมีการแข่งขันหุ่นยนต์ต่างๆมากมายนะครับ จัดโดยคณะวิศกรรมศาสตร์ ของสถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบังครับ นอกจากนั้นยังมีการแนะแนวการศึกษาต่อ และกิจกรรมอื่นๆอีกมากมายเลยครับน่าสนใจมากๆ รายละเอีนดเพิ่มเติมได้ที่นี่เลยครับ

http://www.facebook.com/YoungInnovator2011

ปล.มันน่าสนใจก็ตรงนี้แหละ......อิอิ


. หากคราวหน้ามีกิจกรรมอะไรดีๆอย่างนี้อีก จะสรรหามาฝากอีกนะครับ สำหรับครั้งนี้แค่นี้ก่อนนะครับ ไปกันเยอะๆนะครับ บ๊าบ..บาย....... :D

วันอังคารที่ 14 ธันวาคม พ.ศ. 2553

การใช้งาน USB Joystick ด้วย C#

การใช้งาน USB Joystick ด้วย C#

สวัสดีครับ :D ในที่สุดก็ได้เริ่มงานเขียนกันสักทีหลังจากติดภารกิจมานาน สำหรับบทความนี้จะพาผู้อ่านไปใช้ USB Joystick โดยใช้ภาษา C# ร่วมกับ DirectX นะครับ จะเป็นตัวอย่างที่ง่ายมากครับ แล้วก็พื้นฐานที่สุดเพื่อให้โปรแกรมเบาและสามารถนำไปประยุกต์ใช้อย่างหลากหลายนะครับ เรามาเริ่มกันเลยครับ

System Requirement

  1. Windows7 อาจใช้ OS อื่นได้นะครับ แต่ตอนเขียนผมใช้ Windows7 ไม่รู้ว่า Version อื่นจะมีปัญหาอะไรรึเปล่าน่ะครับ
  2. Microsoft Visual C# 2010 Express โหลดฟรีสำหรับนักพัฒนาได้ที่นี่เลยครับ http://www.microsoft.com/express/Downloads/
  3. DirectX SDK โหลดได้ที่นี่เลยครับ http://www.microsoft.com/express/Downloads/ ในที่นี้ผมใช้ เวอร์ชั่น June 2010 DirectX SDK ซึ่งเวอร์ชั่นอื่นก็น่าจะได้เหมือนกันครับ

เริ่มต้นเขียน

1. สร้าง Project แบบ Window Application Form ขึ้นมาใหม่ ตั้งชื่อตามใจชอบ

2. เพิ่ม DirectX เข้าโปรเจ็ค โดยการ คลิกขวาที่ References -> Add Reference

3. เลือก Browse แล้วหาๆฟล์ Microsoft.DirectX.DirectInput โดยปกติจะอยู่ที่ C:\Windows\Microsoft.NET\DirectX for Managed Code\1.0.2902.0

4. คลิกขวาที่ From1.Designer.cs -> View Code เพื่อแทรก Code

5. ทำการเพิ่ม Code ตามรูป this.Load+=newSystem.EventHandler(this.iJoy_Load);



โดยที่ iJoy_Load เป็นชื่อของ metod



6. ใน Form1 เพิ่ม Code 2 ส่วน ได้แก่ เรียกใช้ namespace DirectX และ code เรียกใช้งาน USB Joystick โดยสามารถ Copy Code จากด้านล่างของบทความนี้

7. เพิ่ม Label แล้วเปลี่ยนชื่อเป็น lbJoystick เพื่อเตรียมตัวใช้แสดงผลการทำงาน


8. เพิ่ม Timer แล้วตั้งค่า Enabled จาก False เป็น True


9. ทำการเพิ่มโค้ดเรียกใช้เมดทอด UpdateJoystick ดังรูป โดยทำการ Double-Click ที่



10. จากนั้นทำการ Save ให้เรียบร้อย จากนั้น สั่ง Complied และ run จะได้โปรอกรมแสดงการทำงานของ USB Joystick

สำหรับการนำไปประยุกต์ก็ไล่โค้ดเอานะครับ เป็น C# ธรรมดาครับ หากมีอะไรสงสัยให้เมล์มาถามได้นะครับที่ ks_bomb@hotmail.com หวังว่าคงมีประโยชน์ต่อผู้อ่านนะครับ แล้วเจอกันใหม่บทความหน้านะครับ บ๊าย บาย …….. :D

+++++++++++++++++++++++++++++++++++++++

ในกรณีเกิด Error

ซึ่งอาจจะเกิดจากหลายสาเหตซึ่งมีวิธีแก้ที่ต่างกันดังนี้

Ø กรณียังไม่มี Application Configuration File สำหรับการใช้งาน CRT 4.0

วิธีแก้

1. เพิ่ม Application Configuration File โดย
คลิกขวาที่โปรเจ็ค
-> Add -> New Item…

2. เลือก Application Configuration File แล้วกด Add

3. ทำการเพิ่ม Code ต่อไปนี้ระหว่าง <configuration>..configuration> ได้แก่

<startup useLegacyV2RuntimeActivationPolicy="true">

<supportedRuntime version="v4.0"/>

</startup>


4. ทำการ Save แล้วลอง Run ใหม่

+++++++++++++++++++++++++++++++++++

Ø กรณีเกิดปัญหา LoaderLock หากมีปัญหาคล้ายดังรูป ให้แก้ดังนี้

วิธีแก้

1. ที่เมนู Debug เลือก Exception… จะมีหน้าต่างดังนี้ pop up ขึ้นมา

2. ทำการขายส่วน (กดเครื่องหมาย +) หน้า Managed Debugging Assistants


3. หาคำว่า แล้ว เอาเครื่องหมายถูก ใน Colum Thrown ออก

4. ทำการ Save แล้วลอง Run ใหม่

+___________________________+


Code ที่ต้องเพิ่มเติม

//iAdd Code for init Joystick
private Device joystick;
private void iJoy_Load(object sender, EventArgs e) //iAdd
{
this.InitDevices();
}
private void InitDevices()
{

//create joystick device.
foreach (
DeviceInstance di in
Manager.GetDevices(
DeviceClass.GameControl,
EnumDevicesFlags.AttachedOnly))
{
joystick = new Device(di.InstanceGuid);
break;
}

if (joystick == null)
{
//Throw exception if joystick not found.
throw new Exception("No joystick found.");
}

//Set joystick axis ranges.
foreach (DeviceObjectInstance doi in joystick.Objects)
{
if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)
{
joystick.Properties.SetRange(
ParameterHow.ById,
doi.ObjectId,
new InputRange(-5000, 5000));
}
}

//Set joystick axis mode absolute.
joystick.Properties.AxisModeAbsolute = true;

//set cooperative level.
joystick.SetCooperativeLevel(
this,
CooperativeLevelFlags.NonExclusive |
CooperativeLevelFlags.Background);
//Acquire devices for capturing.
joystick.Acquire();

}

private void UpdateJoystick()
{
string info = "Joystick: ";

//Get Mouse State.
JoystickState state = joystick.CurrentJoystickState;

//Capture Position.
info += "X:" + state.X + " ";
info += "Y:" + state.Y + " ";
info += "Z:" + state.Z + " ";

//Capture Buttons.
byte[] buttons = state.GetButtons();
for (int i = 0; i < buttons.Length; i++) { if (buttons[i] != 0) { info += "Button:" + i + " "; } } lbJoystick.Text = info; } private void timer1_Tick(object sender, EventArgs e) { UpdateJoystick(); }

+++++++++++++++++++++++++++++++++

เอกสารอ้างอิง

· ตัวอย่าง Code ทีนำมาใช้ http://msdn.microsoft.com/en-us/library/bb153252%28VS.85%29.aspx#dx_DirectInput_creating_device_objects

· แก้ปัญหา CLR http://social.msdn.microsoft.com/Forums/en/vcgeneral/thread/5d1186ec-ad55-4929-b1e4-8806cdc758af

· การเพิ่มไฟล์ Config file http://www.devasp.net/net/articles/display/679.html

· แก้ปัญหา LoaderLock http://www.pcreview.co.uk/forums/thread-3741011.php