วันเสาร์ที่ 5 พฤศจิกายน พ.ศ. 2554

ทดสอบ Accerelometer MMA7331








วิดีโอสาธิตการใช้งานครับ




สำหรับการใช้งานก็จะต่อกับ MCU Atmega168 ที่ 3.3v เลยเพื่อให้ง่านต่อการใช้งานครับ



#include <stdio.h>
#include <avr/io.h>                  //define port
#include <compat/deprecated.h>       //call function sbi(port,bit),cbi(port,bit) = Set,Clear bit
#include <avr/pgmspace.h>            //for progrm data to Area Flash
#include <stdlib.h>

#define F_CPU 20000000UL             //CPU Clock Frequency (Hz)
#include <util/delay.h>              //call function delay


int Xdata,Ydata,Zdata,AngleAcc;





/***************************************************************
 **                 Function use For Printf(UART0)            **
 ***************************************************************/


//--------------------- Prototype function ---------------------

static int uart_putchar(char c,FILE *stream);
static FILE uart_str = FDEV_SETUP_STREAM(uart_putchar,NULL,_FDEV_SETUP_WRITE);
void Init_Serial(unsigned int baudrate);

#define BAUD 56700
#define UBRR F_CPU/16/BAUD-1

//----------------------- UART0 Putchar -------------------------

static int uart_putchar(char c,FILE *stream)
 {
   if(c=='\a')
     {
   fputs("*ring*\n",stderr);
   return 0;
     }
   
   if(c=='\n')
     uart_putchar('\r',stream);

   loop_until_bit_is_set(UCSR0A,UDRE0);

   UDR0 = c;

   return 0;
 }

//------------------- Initial UART0 -----------------------

static void UART0_Init(void)
{

 UCSR0B = 0x00;     //disable while setting baud rate
 UBRR0L = UBRR;     //Set Baud Rate

 UCSR0C = 0x06;     //Set Frame format : 8data,NoneParity,1stop bit
 UCSR0B = 0x98;     //Uart0 Control Enable Reciver and transmitter

 stdout = &uart_str;     //Set address uart_str to stdout

}


void InitPWM()
{

 TCCR0A = (1<<COM0A1) |
    (0<<COM0A0) |
    (1<<COM0B1) |
    (0<<COM0B0) |
    (1<<WGM01)  |
    (1<<WGM00);
 TCCR0B = (0<<WGM02)  |
    (0<<CS02)   |
    (1<<CS01)  |
    (1<<CS00);

 OCR0A = 0x00;
 OCR0B = 0x00;

 PORTD &= ~(1<<PD5)&~(1<<PD6);
 PORTB &= ~(1<<PB3)&~(1<<PB4);
 
 DDRD |= (1 << PORTD5) | (1 << PORTD6);
    DDRB |= (1 << PORTB3) | (1 << PORTB4);
}

void UpdatePWM(unsigned char LeftPwmVal,unsigned char LeftDirection,unsigned char RightPwmVal,unsigned char RightDirection)
{    
 if(LeftPwmVal>100)
 {
  LeftPwmVal=255;
 }
 else
 {
  LeftPwmVal=LeftPwmVal*(255/100);
 }
 if(RightPwmVal>100)
 {
  RightPwmVal=255;
 }
 else
 {
  RightPwmVal=RightPwmVal*(255/100);
 }

 if(LeftDirection>0)
 {
  OCR0B = 255-LeftPwmVal;
  PORTB |= (1<<PB3);
 }
 else
 {
  OCR0B = LeftPwmVal;   
  PORTB &= ~(1<<PB3);
 }

 if(RightDirection>0)
 {
  OCR0A = 255-RightPwmVal;
  PORTB |= (1<<PB4);   
 }
 else
 {
  OCR0A = RightPwmVal;
  PORTB &= ~(1<<PB4);
 }
}


/************************************************************************
 *      Function Read XOUT,YOUT,ZOUT Rang OF Acceleration #MMA7331L     *
 ************************************************************************/

//---------------------------------------------------------- 
//---------------- READ Value XOUT ADC1(PF1)-------------
//---------------------------------------------------------- 
 
int Read_XOUT(void)
{
 int xout ;


 ADMUX   = 0xC5;  // [REFS1..0]:11 = Set Internal Ref. 1.1V , [Mux4..0]:00001 =Select Input Channel ADC1  
 ADCSRA  = 0x83;  // [ADEN]:1= ADC Enable ,[ADATE]:0= Auto triger Diable , [ADPS2..0]:011= Xtal/8


 ADCSRA |= 0x40;  // [ADSC]:1= ADC Start Conversion

 while(!(ADCSRA & 0x10)){;}    // [ADIF]:0 = Wait Conversion Completes[ADIF=1]
 
 xout = ADCW ;  // Read ADC 10-bit 

 return(xout);
}


//--------------------------------------------------------
//---------------- READ Value YOUT ADC2(PF2)-------------
//-------------------------------------------------------- 
 
 int Read_YOUT(void)
 {
 int yout ;

  
 ADMUX   = 0xC4             ;  // [REFS1..0]:11 = Set Internal Ref. 1.1V , [Mux4..0]:00010 =Select Input Channel ADC2  
 ADCSRA  = 0x83             ;  // [ADEN]:1= ADC Enable ,[ADATE]:0= Auto triger Diable , [ADPS2..0]:011= Xtal/8


 ADCSRA |= 0x40             ;  // [ADSC]:1= ADC Start Conversion

 while(!(ADCSRA & 0x10)){;}    // [ADIF]:0 = Wait Conversion Completes[ADIF=1]
     
 yout = ADCW                ;  // Read ADC 10-bit 


 return(yout)             ;
 }

 

//----------------------------------------------------------
//---------------- READ Value ZOUT ADC3(PF3) ---------------
//---------------------------------------------------------- 
 

int Read_ZOUT(void)
{
 int zout ;

 ADMUX   = 0xC3             ;  // [REFS1..0]:11 = Set Internal Ref. 1.1V , [Mux4..0]:00011 =Select Input Channel ADC3  
 ADCSRA  = 0x83             ;  // [ADEN]:1= ADC Enable ,[ADATE]:0= Auto triger Diable , [ADPS2..0]:011= Xtal/8


 ADCSRA |= 0x40             ;  // [ADSC]:1= ADC Start Conversion

 while(!(ADCSRA & 0x10)){;}    // [ADIF]:0 = Wait Conversion Completes[ADIF=1]

 zout = ADCW                ;  // Read ADC 10-bit 

 return(zout)               ;
}


int arctan2(int y, int x) {  // http://www.dspguru.com/dsp/tricks/fixed-point-atan2-with-self-normalization
   int coeff_1 = 180/4;         // angle in Quids (1024 Quids=360?)
   int coeff_2 = 3*coeff_1;
   float abs_y = abs(y)+1e-10; // kludge to prevent 0/0 condition
   float r, angle;
  
   if (x >= 0) {
     r = (x - abs_y) / (x + abs_y);
     angle = coeff_1 - coeff_1 * r;
   }  else {
     r = (x + abs_y) / (abs_y - x);
     angle = coeff_2 - coeff_1 * r;
   }
   if (y < 0)   
    return (int)(-angle);
   else            
    return (int)(angle);
} 

int getAccAngle(int z, int x) {                      
  return arctan2(-z, -x);    // in Quid: 1024/(2*PI))
}

/* ################################################################
   ##                                                                                                         ##
   ##                        Main Program                                                             ##
   ##                                                                                                         ##
   ################################################################ */
 
int main(void)
{  
   
    UART0_Init();
 InitPWM();
 UpdatePWM(50,1,0,1);
 _delay_ms(200);

 //----------------- Read and Print Value Gx,Gy,Gz 10-bit  Rang 4G -----------------

 printf("\n\r******* MMA7331L 3-Axis Accelerometer 10-bit ADC 4-G *********");

 while(1)
 {    

  Xdata = Read_XOUT()                      ; //  Read Value Gx
  //Ydata = Read_YOUT()                      ; //  Read Value Gy
  Zdata = Read_ZOUT()                      ; //  Read Value Gz


  //printf("G_x = %d  ",Xdata-512);   //  Print Value Gx  
  //printf("G_y = %d  ",Ydata-512);   // Print Value Gy
  //printf("G_z = %d  ",Zdata-512);   //  Print Value Gz

  AngleAcc = getAccAngle(Zdata-512, Xdata-512); //512, ((3.3v/2)/3.3v*1024) offset Accelerometer @3.3v
  printf("Deg = %d  ", AngleAcc);


  printf("\n\r");        //  Line Feed

  _delay_ms(150);

 } 


    return 0 ;
}



วันศุกร์ที่ 7 ตุลาคม พ.ศ. 2554

ที่ดูดวันตะกั่วแบบ ezyyyy :D


ที่ดูดควันตะกั่วแบบ EziEzyyyy ครับ 

หลังจากที่ต้องทนสูดควันตะกั่วอันแสนจะเหม็นและก็บั่นทอนสุขภาพมานานในที่สุดก็อยากจะจับจอง หาที่ดูดควันตะกั่วดีๆ มาใช้สะที และวันดีคืนดีก็ไปเดินบ้านหม้อตะลอนๆ ไปเรื่อยๆ ครับว่าจะหาซื้อเครื่องดูดควันตะกั่ว ก็ไปถามร้านๆ นึง
ผม : พี่ครับมีเครื่องดูดควันตะกั่วขายมั้ยครับ
คนขาย
: ไม่มีน้อง แต่มีแบบนี้เอาป่ะล่ะ
แล้วแกก็พาไปดูเครื่องดูดควันของแก ลักษณะใช้ผัดลมดูดอากาศธรรมการวมกะ filter ปะการังแท้อย่างดีเค้าว่าอย่างนั้นนะไม่รู้จริงหรือเปล่าแล้ววันนี้ก็ได้
ก็ก็เลยจัดมันมาสะเลยครับ เอาเป็นว่ามาเริ่มกันเลยดีกว่าครับ


ก็ซื้อของก่อนเลยก็ได้ดังนี้ครับ



นี้ก็เป็นโฉมหน้าของอุปกรณ์ผมครับ





และนี่ก็เป็น video สาธิตการใช้งานนะครับ


มะครับขั้นตอนการประกอบก็งายแสนง่ายครับ
คือประกอบให้พัดลมเป่าควันเข้ากล่องซึ่งกล้องอีกด้านนึงเราจะเจาะรูให้อากาศออกได้แต่ก่อนอากาศจะสัมผัสอากาศ ข้างนอกเราก็ใส่ filter กรองควันไว้ก่อนครับ ง่ายๆ แค่นี้เองครับ



















ภาพหนึ่งภาพแทนคำบรรยายได้นับล้านคำนะครับ อิอิ : }
ก็เรียบร้อยครับผม : )

วันพุธที่ 13 กรกฎาคม พ.ศ. 2554

EzyV5 กับ Arduino Project :D






วันนี้ก็อยากจะมาแนะนำความสามารถอีกอย่างนึงของ EzyV5 ของเรานะครับ

ง่ายๆ เพียงแค่ไป ที่ Floder ของ Arduino IDE นะครับ เช่น


D:\_My Embeds\4_Arduino\arduino-0022\arduino-0022\hardware\arduino

จากนั้นก็แก้ไฟล์ boards.txt
โดยเพิ่ม
##############################################################

EzyV5.name=EzyV5 m168 20Mhz

EzyV5.upload.protocol=usbasp
EzyV5.upload.maximum_size=14336
EzyV5.upload.speed=19200

EzyV5.build.mcu=atmega168
EzyV5.build.f_cpu=20000000L
EzyV5.build.core=arduino

เข้าไปในส่วนเริ่มต้นของ ไฟล์ครับ


1.เปิดโปรแกรมเลยครับ

จากนั้นลอง code ง่ายๆ เลยครับ

void setup() {
pinMode(10, OUTPUT); //led Right
pinMode(16, OUTPUT); //Led Left
}

void loop() {
digitalWrite(10, HIGH); // set the LED on
digitalWrite(16, HIGH); // set the LED on
delay(100); // wait for a second
digitalWrite(10, LOW); // set the LED off
digitalWrite(16, LOW); // set the LED off
delay(100); // wait for a second
}
2. เสียสาบ USB แล้วเข้าโหมด Pprogram กดปุ่ม Reset 1 ครั้งครับ
3.แล้วกด Compile Upload เลยครับง่ายๆ แค่นี้เองครับ

เพียงแค่นี้ก็จะสามรถพัฒนาโปรแกรม กับ EzyV5 ด้วย Arduino project ได้แล้วครับ



ท่านใดสนใจหุ่นยนต์ EzyV5 ไปลองหัดเขียนโปรแกรมเล่นก็ลองเข้าไปดูได้ที่

วันอาทิตย์ที่ 10 กรกฎาคม พ.ศ. 2554

8x8 rgb LED matrix network

animation น่าสนใจครับนำ dot-matrix 8x8 จำนวนสามสีครับ
โปรเจคนี้เค้าทำได้นาสนใจเลย เพียงแค่นำ dot-matrix มาวางใกล้ๆ กันก็จะ เชื่อมโยงกันผ่าน IrDA transceiver

ส่วน algorithm ในการทำงานของเค้าก็น่าสนใจไม่ น้อยเลยครับ



ทำงานบน RTOS บน STM32
schematic, Software และรายละเอียดก็เข้าไปดูได้ครับที่
http://www.glip.fr/

วันศุกร์ที่ 3 มิถุนายน พ.ศ. 2554

ชุดหุ่นยนต์สำหรับเด็ก


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

หุ่นตัวนี้เหมาะสำหรับเด็กอายุ 4-12 ขวบ ส่วนสนนราคาก็ 1,800,000 เยนไม่รวมภาษีนะ เห็นตัวเลขแล้วไม่อยากตีค่าเป็นเงินไทยเลย ถ้าใครไม่อยากซื้อก็มีบริการให้เช่าด้วยล่ะ




หุ่น juggler ที่เก่งที่สุด


หุ่นยนต์ตัวนี้พัฒนาโดยแผนก Control Engineering แห่ง Czech Technical Institute เอาไว้สำหรับเล่น juggling หรือการโยนลูกบอลอย่างน้อย 3 ลูกในเวลาเดียวกันด้วยมือสองข้าง อย่างที่นักแสดงหน้าขาวชอบเล่นให้ดูกัน

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



วันอังคารที่ 31 พฤษภาคม พ.ศ. 2554

Ruby หุ่นยนต์แก้ Rubik ได้ใน 10.69 วินาที !!! (แต่ยังแพ้คนอยู่ดี)


ถ้าพูดถึงการแก้ Rubik ในเวลา 10 วินาที คงมีเพียงหุ่นยนต์ไม่กี่ตัวเท่านั้นที่มีความสามารถพอที่จะแก้ได้ แต่กลุ่มนักเรียนของ มหาวิทยาลัย Swinburne University of Technology คิดว่าพวกเขาสามารถทำหุ่นยนต์ที่แก้ Rubik ได้เร็วที่สุดในโลก โดยเจ้าหุ่นยนต์ตัวนี้มืชื่อว่า Ruby สามารถแก้ Rubik ได้ในเวลาเพียง 10.69 วินาที ที่รวมเวลาในวิเคราะห์ Rubik ด้วย ซึ่งใช้กล้องกล้องเว็บแคมสแกนสีของ Rubik และหาวิธีแก้ด้วย Software ซึ่งได้ทำลายสถิติเก่าที่หุ่นยนต์เคยทำไว้ 18.2 วินาที แต่ก็ยังคงไม่สามารถชนะเจ้าหนู Feliks Zemdegs อายุ 16 ปี ชาวออสเตเรีย ที่ทำสติไว้ที่ 6.24 วินาทีได้





Treebot หุ่นยนต์ปีนต้นไม้


Treebot เป็นหุ่นยนต์ปีนต้นไม้ ที่ถูกออกแบบและพัฒนาจากทีมของมหาวิทยาลัยจีนแห่งฮ่องกง (The Chinese University of Hong Kong) เพื่อปีนขึ้นต้นไม้ได้อย่างอัตโนมัติ หาเส้นทางที่ดีที่สุดในการปีนขึ้นต้นไม้ โดยใช้เซนเซอร์ที่อยู่ใต้ตัวหุ่นยนต์ ลำตัวของหุ่นยนต์ออกแบบมามีลักษณะคล้ายหนอน คือ เคลี่อนที่ด้วยการยืดและหดตัว เพื่อปีนขึ้นไปบนต้นไม้ โดยเจ้า Treebot สามารถรับน้ำหนักได้ถึง 3.7 ปอนด์ และปีนต้นไม้ได้หลากหลายประเภท หลากหลายขนาดด้วย


วันอาทิตย์ที่ 8 พฤษภาคม พ.ศ. 2554

EzybotและTESA ช่วยเหลือผู้ประสบภัยน้ำท่วมและดินถล่ม ต.เทพราช อ.สิชล จ.นครศรีธรรมราช

พวกเราและTESA

วันนี้ผมจะนำภาพบรรกาศที่พวกเรา EzyBot ร่วมกับ TESA (สมาคมสมองกลฝังตัวแห่งประเทศไทย) ได้ไปสำรวจและช่วยเหลือผู้ประสบภัยน้ำท่วมและดินถล่ม ณ หมู่ 15 ต.เทพราช อ.สิชล จ.นครศรีธรรมราช ณ วันที่ 30 พค. - 1 เม.ย 54 กันครับ ซึ่งครั้งนี้เราได้รับเกียรติจาก ผศ.อภิเนตร อูนากูล นายกสมาคมสมองกลฝังตัวแห่งประเทศไทย ร่วมมากับเราในครั้งนี้ด้วย


บรรยากาศรอบๆ ราบไปหมด...

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

ณ บ้านป้าพร

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

ภาพบรรยากาศเก่าๆ ก่อนประสบอุบัติภัยธรรมชาติ

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

จากการที่เราได้พูดคุยกับชาวบ้าน ทำให้เราได้รับได้ทราบถึงความเดือนร้อนของชาวบ้านของที่นี้เป็นอย่างมาก จึงอยากฝากเพื่อนๆทุกวันไว้ ณ ที่นี้ด้วยนะครับว่า ถ้าใครพวกจะช่วยเหลือได้ ก็ช่วยเหลือกันนะครับ ใครมีเงิน ลงเงิน ใครมีแรง ลงแรง...เราคนไทย รักกัน ไม่ทอดทิ้งกันนะครับ


***สำหรับผู้ที่ต้องการช่วยเหลือผู้ประสบภัยพิบัติ ยังสามารถบริจาคได้ >>ที่นี่<< เลยครับ***




แผนที่ ตำแหน่งที่เราไปสำรวจ โดยพี่หลี ครับ


ประชุมก่อนเริ่มงาน


พวกเราเอง


บ้านชาวบ้านที่เสียหายจากภัยพิบัติ (แต่ในรูปหลวงยังปลอดภัยดี)


ด้านล่างกลายเป็นทะเลโคลน


พี่ทิ้งผู้นำทีมสำรวจ ชี้สภาพที่เคยเป็นบ้านชาวบ้านมาก่อน


เส้นทางที่ถูกดินและหินถล่ม


บ้านพังทั้งหลัง


บ้านชาวบ้านที่เสียหาย


การเดินทางที่ต้องลัดไปตามไหล่เขา เพราะทางขาด

อ.อภิเนตร พักที่สำนักสงฆ์ หลังจากเดินทางมาไกล


สภาพน้ำตกเสียหายมาก

พวกเรามาสำรวจน้ำตกและพักผ่อน

ประกวด Hexapod Dance....

ช่วงนี้ มีโปรเจคอยากทำเจ้า Hexapod เล่นๆ เพื่อจะได้หัดให้ servo ให้มันคล่องๆ หน่อยๆ หาข้อมูลไปมา ก็อยากทำตัวนี้แหละครับ

มันเล็กๆ น่าร๊ากก ดี ที่สำคัญ servo ตัวเล็ก ประหยัดตังหน่อย อิอิ...ของแบบนี้มันต้องเศษฐกินพอเพียงครับ

แต่ดูไปเพลินๆ ไปเจอโคงการที่เค้าจับเจ้าพวก 6 ขาเนี่ยมาประกวดเต้นสะงั้นครับเห็นน่าร๊ากกก ดีครับเลยเอามาฝากกันหน่อย โปรเจคนี้เค้าก็จัดกันมาตั้งสองปีแระ 2009 กับ 2010 ไม่รู้ปีนี้จะจัดสะช่วงไหนเอาละใครมี ไอเดียเจ๋งๆ นี่น่าเข้าไปร่วมแจมนะครับ หึๆๆๆๆ




วันอังคารที่ 3 พฤษภาคม พ.ศ. 2554

การทำ PCB Library ในโปรแกรม Altium

สำหรับบทความนี้นะครับจะนำเสนอการทำ PCB Library นะครับ เผื่อใครออกแบบวงจร PCB โดยใช้ Altium แล้วเกิดอาการหาอุปกรณ์ นู่น นี่ นั่น ไม่เจอนะครับ แล้วอยากจะทำ PCB Library เพื่อเติมเองนะครับ ในที่นี้ได้อ้างอิงการทำงานโดยใช้โปรแกรม Altium Designer Summer 09 นะครับ เรามาเริ่มกันเลยครับ....

1. เมื่อเปิดโปรแกรมมาแล้วให้ไปที่ File -> New -> Library -> PCB Library ครับ คลิกเลยเพื่อสร้าง


2. ใน Workspace Panel (Projects) นั้นสังเกตว่าจะมีไฟล์ PcbLib1.PcbLib เกิดขึ้นมาภายใต้ Folder Libraries


3. ดับเบิ้ล-คลิกไฟล์ PcbLib1.PcbLib จะได้พื้นที่ทำงานหน้าตาเป็นตารางๆ (Grid) สีเทา


4. ทำการกำหนดค่า Grid และ Snap Grid เพื่อให้ง่ายต่อการออกแบบ โดยเราจะเปลี่ยนให้อยู่ในหน่วย มิลลิเตร เพื่อความคุ้นเคย โดยมีวิธีการดังนี้ คลิกขวาที่พื้นที่ว่าง เลือก Library Option จากนั้นกำหนดค่าตามรูป (Unit->Metric, Snap x-> 0.1mm, Snap y-> 0.1mm, Grid1->1mm, Grid2->10mm, Range->0.1mm) จากนั้นคลิกปุ่ม OK


5. สำรวจแถบเครื่องมือด้านบนเพื่อใช้สร้างอุปกรณ์ให้เรียบร้อย


6. ทำการวาดตัว PCB Library โดยมุมมองที่วาดจะเป็น Top View ให้วาดโดยมีขนาดให้เท่ากับอุปกรณ์ที่จะสร้าง โดยอ้างอิงขนาดจริงของจริง หรือเอกสารประกอบการใช้งาน(Mannual)


7. ทำการวาง Pad ในตำแหน่งที่จะเจาะรู หรือมีเหตุให้ต้องทำการลงตะกั่ว พร้อมทั้งตั้งค่า Pad ให้เหมาะสมและเรียบร้อย (คลิกขวาที่ Pad เลือก Property) และทำการเปลี่ยนชื่อ Pad ให้เรียบร้อยเพื่อให้ง่ายต่อการจดจำ


8. ที่ PCB Library ทางด้านซ้าย ให้ดับเบิ้ลคลิกที่ชื่อ เพื่อเปลี่ยนชื่ออุปกรณ์ตามต้องการ ในที่นี้ใช้ชื่อว่า PCB_SW


9. ทำการเซฟให้เรียบร้อย
10. ทำการสร้าง SCH Library โดยไปที่ File -> New -> Library -> Schematic Library


11. ทำการสร้าง SCH สำหรับอุปกรณ์ที่ต้องการ โดยจำนวนขาควรเท่ากับรูที่ได้ทำไว้ที่ PCB Library
12. ทำการวางขาอุปกรณ์ โดยไปที่เมนูดังรูป


13. ในที่นี้วางไว้ 4 ขา


14. ทำการกำหนดชื่อขา โดยดับเบิ้ลคลิกที่แต่ละขา


15. วางกรอบสี่เหลี่ยมเพื่อความสวยงาม


16. ให้กรอบสี่เหลี่ยมอยู่ด้านล่างขาให้คลิกที่กรอบสี่เหลี่ยม Edit -> Move -> Send To Back


17. ทำการเพิ่ม Footprint ลงใน SCH Library โดยไปที่ Panel SCH Library แล้วคลิกที่ Edit ในส่วนของ Component
18. ทำการกำหนดค่าต่างๆ โดย Default Designator คือชื่อนำหน้าอุปกรณ์เวลาวางอุปกรณ์ในงาน ส่วน Symbol Reference คือชื่อที่ใช้อ้างอิง จากนั้นกดปุ่ม Add เพื่อเพิ่ม Footprint จากนั้นเลือก Footprint แล้วกด OK


19. ในส่วน Footprint Model เลือก Browse… เลือก Footprint ที่เราได้สร้างไว้ จากนั้นคลิก OK


20. หากต้องการตั้งค่า ขา Pin กับ รู ที่ PCB ให้ตรงกันหรือเป็นไปตามที่ต้องการให้คลิก Pin Map … คลิก OK


21. เสร็จสิ้น
22. เมื่อนำไปใช้งานให้ Import ไฟล์ sch ที่ทำไว้ ก็จะมีอุปกรณ์ที่เราได้ทำไว้เพิ่มขึ้นมา


ไม่ยากใช่ไหมครับ (รึเปล่าฟะ) ถ้ามีอะไรสงสัยถามได้เลยนะครับ แล้วพบกันไหมครับ
By Sanaki