วันศุกร์ที่ 30 พฤษภาคม พ.ศ. 2557

How to make this projec + Knowledge (โรงละครช้าง)

    ในบล็อคนี้ผมจะพูดถึงรายละเอียดของขั้นตอนการทำงานของ projec ที่ทำร่วมกับโรงละครช้าง นะครับ โดยจะนำเสนอรายละเอียดของอุปกรณ์ในการทำงาน การใช้โปรแกรมต่างๆ วิธีเซ็ตโปรแกรม และการต่อวงจรนะครับ โดยเนื้อหาทั้งหมดจะทำการแบ่งเป็นเรื่องๆเพื่อที่จะทำการอ่านได้ตามเรื่องที่สนใจ
    1.)รายละเอียดของไฟ LED ชนิดต่างๆที่ใช้ทำโปรเจ็ค
           -ws2812b
           -5050-60-RGB,5050-RGB
           -El Wire
           -มะรุม
    2.)Arduino
          -Atmega 1280
          -LilyPad
          -วิธีใช้ Arduinoขั้นพื้นฐาน(การต่อportและเขียนCode)
          -วิธีการทำเสา+piezo sensor (วัดแรงสั่นสะเทือน)+ws2812b
          -วิธีการส่งข้อมูลผ่านwireless network
          -Processing (User Interface)
   3.)วิธีการออกแบบวงจรและทำแผ่นPCB
             



ไฟLEDรูปแบบต่างๆที่ใช้ในโปรเจ็คนี้
1.1 ws2812b เป็นไฟLEDที่มีทั้งหมด3ขาคือขาเข้า3ขาคือ ขาไฟ+ ,ขากราว,และขาdata ซึ่งไฟLEDแต่ละดวงนี้จะมี controllerคอยควบคุมอยู่โดยจะเห็นได้ว่าในสายLEDนี้มีลูกศรที่ชี้อยู่หมายถึงการส่งdataไปในทิศทางเดียวเวลาเราจะส่งข้อมูลจะต้องส่งด้านที่อยู่ดวงแรกสุดแล้วcontrollerจะส่งข้อมูลต่อไปยังดวงถัดไป นั่นจึงเป็นเหตุผลในที่ไฟLEDจะดับทั้งสายหากดวงแรกดับในขณะทำโปรเจ็ค และไฟLEDชนิดนี้สามารถกำหนดสีแต่ละดวงได้ทุกสีและกำหนดการเปลี่ยนสีได้อย่างอิสระผ่าน codeเพราะมี controllerอยู่ข้างในทำให้สายไฟชนิดนี้ราคาสูงตามความสามารถของมัน
มีขา ไฟ ดาต้าและกราว

ws2812b 

1.2 5050-60-RGB,5050-RGB เป็นไฟRGBที่มีการต่อขาทั้งหมด4ขาคือคือขา RED GREEN BLUEซึ่งเป็นแม่สีที่จะนำมาผสมกันโดยสามารถกำหนดความเข้มอ่อนของแต่ละสีได้โดยใช้ขา analogจาก controller โดยที่การควบคุมนั้นจะแบ่งไฟแต่ละจุดเป็นกลุ่มละ3ดวง โดยแต่ละเส้นที่ทำการแสดงสีออกมานั้นจะแสดงได้เพียงเส้นละสีเท่านั้น
แบ่งไฟเป็นกลุ่มละ3จุด

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


ส่วนประกอบด้านในของEl Wire
El Wire

1.4 ไฟมะรุม เป็นไฟที่คล้ายๆไฟ LED ที่นำมาต่อขนานกันหลายๆดวงโดยสามารถบังคับได้แค่เปิดและปิดไฟ โดยมีแค่ขาบวกและลบ เลือกสีของไฟไม่ได้ มีจุดเด่นคือราคาถูก


2. Arduino  เป็นระบบที่ใช้ในการพัฒนาอุปกรณ์อิเล็กทรอนิกส์ต้นแบบ  ซึ่งออกแบบให้ใช้งานง่ายทั้งฮาร์ดแวร์ และซอฟแวร์   กลุ่มเป้าหมายผู้ใช้งานอาดูยโน่ ได้แก่ ศิลปิน  นักประดิษฐ์ นักออกแบบ  ใช้ในงานอดิเรก หรือ ใครๆก็ตามที่สนใจในการประดิษฐ์นวัตกรรม งานสร้างสรรค์
     ถึงปัจจุบัน Arduino มีบอร์ดหลายแบบให้เลือกใช้งานตามความถนัดและความเหมาะสมมากกว่า 20 รุ่น  แต่ละรุ่นก็มีขนาด ความจุ ความเร็ว จำนวนขาพอร์ตอินพุต เอาท์พุต แตกต่างกันออกไป  มีตั้งแต่ราคาหลักสองสามร้อยบาท ไปจนกระทั่งพันกว่าบาท  นอกจากนี้ยังมีอุปกรณ์ต่อพ่วง  (Shield) ให้อีกมากมาย  ราคาก็เป็นไปตาม concept เดิมครับ คือ สมเหตุสมผลสุดๆ  ทำให้เป็นที่นิยมมากขึ้นเรื่อยๆ 
     โดยในบทความนี้ผมจะพูดถึง Arduino รุ่นที่นำมาใช้ทำโปรเจ็คกลุ่มซึ่งมีอยู่ 2 ชนิดคือ Arduino Atmega 1280 และ LilyPad โดยการใช้งานพื้นฐานของทั้ง2  บอร์ดนี้ไม่ต่างกันเพียงแต่ LilyPad นั้นมีportที่น้อยกว่าเท่านั้นเอง 


ATMEGA1280

LilyPad


วิธีใช้ Arduinoในขั้นแรกต้องรู้จักPortต่างๆเสียก่อนครับโดยผมจะอธิบายแบบง่ายๆและคร่าวๆเพื่อให้เข้าใจหลักการทำงานครับ ซึ่งในความเป็นจริงแต่ละ portจะมีรายละเอียดที่ลึกซึ้งกว่านั้นโดยอาจต้องเปิดดูใน datasheetเอาแต่นั่นเป็นการใช้งานระดับยากครับ
      Portของarduino จะแบ่งportเป็น2ประเภทใหญ่ๆคือ
      1.)Port ที่เป็น Analog จะมีการรับค่า-ส่งค่าเป็น analog ทำงานได้หลายค่า
      2.)Port ที่เป็น Digital จะมีการรับค่า-ส่งค่าเป็น Digital ทำงานแค่2ค่าคือ 0และ1
โดยส่วนมากแล้ว Port Analogจะเป็น Port ที่ใช้รับค่ามาจาก Sonsorต่างๆ เพราะการอ่านค่าจาก Sensor นั้นจำเป็นจะต้องได้รับค่าที่หลายค่าที่ต่อเนื่องกันได้ และนำค่าที่วัดได้มาประมวลผลและแสดง output ผ่านPortที่เป็น Daigital เพราะจะทำการบังคับLEDหรืออุปกรณ์ๆว่าให้ทำงานหรือไม่ทำงาน แต่ในบางครั้งการรับค่าอาจใช้เป็นแบบDaigitalหรือการแสดง output เป็นแบบAnalogก็ได้
     อย่าลืมใช้หลักการต่อไฟและกราวเพื่อให้การทำงานของอุปกรณ์ครบวงจรด้วยนะครับ!!


ขั้นต่อไปเป็นการเขียน Code ขั้นพื้นฐานที่ใช้รับค่าจาก Analog Potและแสดงผลที่ Digital Port
Code ขั้นพื้นฐานในการรับค่าจากฆำืหนพแล้วแสดงผล
อธิบายcode
int sensorPin = A0 // หมายถึงการประกาศให้ตัวแปร sensorPin คือ port Analog 0
int ledPin = 13 // หมายถึงการประกาศให้ตัวแปร ledPin คือ port Digital 13

void Setup(){
pinMode(ledPin, OUTPUT);  // เป็นการประกาศให้port13 แสดงผลเป็น Output Port
}

void loop(){
sensorValue = analogRead(sensorPin);  //รับค่าเข้าตัวแปร sensorValue แบบanalog จาก port A0
digitalWrite(ledPin, HIGH); //แสดงผลแบบ Digital ออกจาก Port 13
}

ในงานโปรเจ็คกลุ่มตัวผมเองได้ทำการรับผิดชอบในส่วนของการเขียนโค้ด เสาและการส่งข้อมูลผ่าน wireless network ซึ่งผมจะอธิบายการต่อวงจรและการแก้โค้ดของทั้ง 2 งานนะครับ

1.วิธีการทำเสา+piezo sensor (วัดแรงสั่นสะเทือน)
      - วิธีต่อวงจรรับ sensor piezo เข้ากับ Arduino คือขา+ของpiezoจะต่อลงกราวและขา-ต่อเข้าport Analogของarduino
Piezo with Arduino
         - วิธีเขียนโค้ดเป็นการ import Library ที่ชื่อว่า Adafruit_NeoPixel.h มาลงในโปรแกรมก่อนแล้วทำการ include ก่อนเขียนโปรแกรม โดย Library Adafruit_NeoPixel.h นี้ใช้ควบคุมไฟLED ws2812b ซึ่งเสานี้ใช้ LEDชนิดนี้ครับ



อธิบายโค้ด
#include <Adafruit_NeoPixel.h> //เพิ่ม Libraryที่ควบคุมไฟLED ws2812bมาลองใช้งาน
ส่วนของloop()
Sensor = analogRead(7)/4  //เป็นการรับค่าanalogมาจาก piezo sensor เก็บไว้ที่ตัว analog
colorWipe() //เป็นฟังก์ชันที่รับค่าสีที่ต้องการ และจำนวนหลอดของLEDที่ต้องการให้ติดได้
เช่นcolorWipe(strip.Color(0, 0, 255), 0,30);
//พารามิเตอร์ 3 ตัวแรกเป็นการรับสี ซึ่ง0,0,255เป็นสีโทนฟ้า และพารามีเตอร์อีก 2 ตัวคือเริ่มที่หลอด0และจบที่หลอด 30
      colorWipe(strip.Color(0, 100, 200), 31,60);
//พารามิเตอร์ 3 ตัวแรกเป็นการรับสี ซึ่ง0,100,200เป็นสีโทนฟ้าอ่อน และพารามีเตอร์อีก 2 ตัวคือเริ่มที่หลอด31และจบที่หลอด 60



2.วิธีใช้การติดต่อสื่อสารผ่านทางไกล
  2.1)การติดต่อสื่อสารผ่านทางไกลที่เราได้ทดลองใช้คือ xbee และทำการติดต่อระหว่าง2ตัวโดยใช้
 X-CTUซึ่งไม่สำเร็จเพราะว่าไม่สามารถทำให้การส่งข้อมูลระหว่าง2ตัว สำเร็จได้
การตืดต่อXbeeโดยใช้ X-CTU

2.2สร้างWireless networkโดยใช้ NRF24l01 โดยรายละเอียดของการต่อวงจรคือ


ชื่อของขาต่างๆในNRF
การต่อNRFเข้ากับ Arduinoแต่ละรุ่น


โดยในขั้นทดลองเป็นการส่งสัญญาญระหว่าง Arduino กับArduino


arduino - arduino
วิธีการเขียนโค้ด

ตัวส่งสัญญาณ

อธิบายโค้ด
- ทำการimport library nRF24L01.h มาลงในโปรแกรม
- การ initial ค่าในตอนแรกจะทำการ include "nRF24L01.h"
- RF24 radio(9,53) // คือการเซ็ตset port9ให้เชื่อมต่อกับ port CE และset port53เข้ากับ portCSNของ NRF
- uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0x7365727631LL }//0xF0F0F0F0E1LLคือหมายเลขแอดเดรสของตัวส่งสัญญาณ และ 0x7365727631LL คือหมายเลขแอดเดรสของตัวรับสัญญาณ




-กำหนดค่า Dataที่ต้องการส่ง
ตัวรับข้อมูล


อธิบายโค้ด
- การ initial ค่าในตอนแรกจะทำการ include "nRF24L01.h"
- RF24 radio(9,53) // คือการเซ็ตset port9ให้เชื่อมต่อกับ port CE และset port53เข้ากับ portCSNของ NRF
- uint64_t pipes[6] = { 0x7365727631LL, 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL, 0xF0F0F0F0E5LL }//คือการประกาศแอดเดรสของตัวรับและตัวส่งที่สามารถรับได้ทั้งหมด


โดยจะเป็นการสื่อสารระหว่าง Arduino -Arduino เป็นเพียงการทดลองใช้ซึ่งจริงๆแล้วจะต้องเป็นการสื่อสารระหว่างArduino - LilyPad แบบ 1-many ซึ่งจะทำการแก้ที่การต่อวงจรของLilyPadเท่านั้นซึ่งเป็นไปตามรูปด้านล่างนี้

port ที่ใช้เชื่อมต่อกับ NRF

ซึ่งหลักการที่จะทำให้ตัวส่งเพียง 1 ตัวส่งไปยัง LilyPadหลายๆตัวพร้อมๆกันนั้นคือการประกาศให้ LilyPadทุกตัวมี Adressเดียวกันหมด จะมีปัญหาที่ว่าบางครั้งจะมีการ Loss ของการส่งข้อมูลบ้างเพราะเหมือนตัวส่งจะสลับการทำงานทีละตัว แต่ยังอยู่ในขั้นที่พอรับได้

โดยcode ของตัวรับสัญญาณนี้จะทำการรับค่าเหมือนๆกันทั้งหมด3ตัวเพียงแต่จะเขียนโค้ดเพิ่มในการดักเพื่อให้รู้ว่าต้องการส่งข้อมูลให้ตัวไหนเพื่อจะเป็นการควบคุมการติดของLEDถูกจุด
การเขียนโปรแกรมดักเพื่อให้รู้ว่าเป็นของLilyPadตัวไหน
การส่งข้อมูลแบบ 1-many
เมื่อการทำการสื่อสารสำเร็จแล้วขั้นต่อไปคือการทำ User Interfaceเพื่อใช้ในการควบคุมจากระยะไกลได้ซึ่งเราใช้ภาษา Processing ในการทำงานครับ



ขั้นตอนในการทำงานของProcessingคือ
1.ทำการเชื่อมต่อเข้ากับบอร์ด Arduino
2.สร้างUser Interface
3.กำหนดการการกดUser Interfaceส่งค่าที่แตกต่างกันเข้าไปยังArduinoโดยตรงเพื่อให้Arduinoสามารถรับค่าได้ขณะที่โปรแกรมรันอยู่ซึ่งจะทำให้สามารถควบคุม LEDตามจุดต่างๆสลับไปมาได้


ตัวอย่างโค้ดProcessing(1)

ตัวอย่างโค้ดProcessing(2)

Interfaceในเบื้องต้น

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


การออกแบบวงจร ควบคุมไฟจาก Proteus

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






ไม่มีความคิดเห็น:

แสดงความคิดเห็น