หน้าแรก

วันพุธที่ 23 ธันวาคม พ.ศ. 2558

โครงงานหุ่นยนต์สำรวจใต้น้ำ


โครงงานหุ่นยนต์สำรวจใต้น้ำ (เรือดำน้ำสำรวจระบบนิเวศขนาดเล็ก)
หุ่นยนต์ดำน้ำ

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

การรับค่า จาก serial port ด้วย delphi มาแสดงผลบนคอมพิวเตอร์ อย่างง่าย

การรับค่า จาก serial port ด้วย delphi มาแสดงผลบนคอมพิวเตอร์ อย่างง่าย





โค๊ด

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, CPort;

type
  TForm1 = class(TForm)
    ComPort1: TComPort;
    Panel1: TPanel;
    procedure FormCreate(Sender: TObject);
    procedure ComPort1RxChar(Sender: TObject; Count: Integer);
  private
    receivestr:string;   //กำหนดตัวแปรที่จะรับค่ามาแสดงผล
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
begin
      comport1.ReadStr(receivestr,count); //อ่านค่าจาก comport เก็บไว้ใน receivestr
      panel1.Caption:=receivestr; //แสดงผล

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
      comport1.Open; //เชื่อมต่อ comport 
end;

end.

วันจันทร์ที่ 13 เมษายน พ.ศ. 2558

ไฟแจ้งเตือนระดับแรงดัน (ประยุกต์ใช้กับเซนเซอร์)


อุปกรณ์

- arduino บอร์ด
- LED
- ตัวตานทาน 220 โอห์ม
- โฟโตบอร์ด
- ตัวตานทาน ปรับค่าได้ 10 กิโลโอห์ม

วงจร



โค๊ด



const int analogInPin = A0;  
const int analogOutPin = 9; 
int led1=2;
int led2=3;
int led3=4;
int led4=5;
int led5=6;


int sensorValue = 0;        
int outputValue = 0;        
void setup() {
  
  Serial.begin(9600); 
  pinMode(led2, OUTPUT);   
  pinMode(led3, OUTPUT);   
  pinMode(led4, OUTPUT);   
  pinMode(led5, OUTPUT);   
  pinMode(led1, OUTPUT);   
}

void loop() {

  sensorValue = analogRead(analogInPin);            
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
  if(outputValue<=5)
  {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);   
  }else if(outputValue<=49) 
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  } else if(outputValue<=99)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  
  }else if(outputValue<=149)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  
  }else if(outputValue<=199)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, LOW);
  
  }  else 
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
  
  }
                 
}


แสดงผล







วันจันทร์ที่ 6 เมษายน พ.ศ. 2558

หรี่ไฟ(Fading)

อุปกรณ์

- arduino บอร์ด
- LED
- ตัวตานทาน 220 โอห์ม
- โฟโตบอร์ด

วงจร

โค๊ด

int led = 9;           
int brightness = 0;    
int fadeAmount = 5;    


void setup()  { 

  pinMode(led, OUTPUT);
} 

void loop()  { 

  analogWrite(led, brightness);    


  brightness = brightness + fadeAmount;


  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ; 
  }     

  delay(30);                            
}


วันพฤหัสบดีที่ 2 เมษายน พ.ศ. 2558

อ่านค่าดิจิตอลออก Serial



อุปกรณ์

- arduino บอร์ด
- สวิตช์
- ตัวตานทาน 10 K
- โฟโตบอร์ด

วงจร


โค๊ด

int pushButton = 2;  // กำหนด pushButton = พอร์ต D2


void setup() {
  
  Serial.begin(9600);    //เชื่อมต่อ serial 

  pinMode(pushButton, INPUT); // pushButton เป็นอินพุต
}

void loop() {

  int buttonState = digitalRead(pushButton); // อ่านค่า

  Serial.println(buttonState); //ส่งออก serial 

  delay(1);        
}

แสดงผล






วันพุธที่ 1 เมษายน พ.ศ. 2558

ไฟกระพริบ

 อุปกรณ์ 

  • - บอร์ด อาดูโน่
  • - LED 
  • - ตัวต้านทาน 220 โอห์ม ถึง1K โอห์ม
  • ต่อดังรูปวงจร


  • Code

    int led = 13;             // พอร์ต D13 เท่ากับ LED

    void setup() {                

      pinMode(led, OUTPUT);   // กำหนดให้ led เป็น output      

    }

    void loop() {
      digitalWrite(led, HIGH);   // สั่งให้ LED ติด
      delay(1000);               // หน่วงเวลา 1000ms
      digitalWrite(led, LOW);    // สั่งให้ LED ดับ
      delay(1000);               // หน่วงเวลา 1000ms
    }

    แสดงผล







Arduino คืออะไร

 Arduino อ่านว่า (อา-ดู-อิ-โน่ หรือ อาดุยโน่) เป็นบอร์ดไมโครคอนโทรเลอร์ตระกูล AVR ที่มีการพัฒนาแบบ Open Source คือมีการเปิดเผยข้อมูลทั้งด้าน Hardware และ Software ตัว บอร์ด Arduino ถูกออกแบบมาให้ใช้งานได้ง่าย ดังนั้นจึงเหมาะสำหรับผู้เริ่มต้นศึกษา ทั้งนี้ผู้ใช้งานยังสามารถดัดแปลง เพิ่มเติม พัฒนาต่อยอดทั้งตัวบอร์ด หรือโปรแกรมต่อได้อีกด้วย
         ความง่ายของบอร์ด Arduino ในการต่ออุปกรณ์เสริมต่างๆ คือผู้ใช้งานสามารถต่อวงจรอิเล็กทรอนิคส์จากภายนอกแล้วเชื่อมต่อเข้ามาที่ขา I/O ของบอร์ด (ดูตัวอย่างรูปที่ 1) หรือเพื่อความสะดวกสามารถเลือกต่อกับบอร์ดเสริม (Arduino Shield)ประเภทต่างๆ (ดูตัวอย่างรูปที่ 2) เช่น Arduino XBee ShieldArduino Music ShieldArduino Relay ShieldArduino Wireless ShieldArduino GPRS Shield เป็นต้น มาเสียบกับบอร์ดบนบอร์ด Arduino แล้วเขียนโปรแกรมพัฒนาต่อได้เลย

Arduino with XBee Shield


รูปแบบการเขียนโปรแกรมบน Arduino

3

1. เขียนโปรแกรมบนคอมพิวเตอร์ ผ่านทางโปรแกรม ArduinoIDE ซึ่งสามารถดาวน์โหลดได้จาก Arduino.cc/en/main/software
2. หลังจากที่เขียนโค้ดโปรแกรมเรียบร้อยแล้ว ให้ผู้ใช้งานเลือกรุ่นบอร์ด Arduino ที่ใช้และหมายเลข Com port 


4

รูปที่ เลือกรุ่นบอร์ด Arduino ที่ต้องการ upload

5
รูปที่ เลือกหมายเลข Comport ของบอร์ด

3. กดปุ่ม Verify เพื่อตรวจสอบความถูกต้องและ Compile โค้ดโปรแกรม จากนั้นกดปุ่ม Upload โค้ด โปรแกรมไปยังบอร์ด Arduino ผ่านทางสาย USB เมื่ออับโหลดเรียบร้อยแล้ว จะแสดงข้อความแถบข้างล่าง “Done uploading”และบอร์ดจะเริ่มทำงานตามที่เขียนโปรแกรมไว้ได้ทันที

6

Layout & Pin out Arduino Board (Model: Arduino UNO R3) 


7


1.USBPort: ใช้สำหรับต่อกับ Computer เพื่ออับโหลดโปรแกรมเข้า MCU และจ่ายไฟให้กับบอร์ด
2.Reset Button: เป็นปุ่ม Reset ใช้กดเมื่อต้องการให้ MCU เริ่มการทำงานใหม่
3.ICSP Port ของ Atmega16U2 เป็นพอร์ตที่ใช้โปรแกรม Visual Com port บน Atmega16U2
4. I/OPort:Digital I/O ตั้งแต่ขา D0 ถึง D13 นอกจากนี้ บาง Pin จะทำหน้าที่อื่นๆ เพิ่มเติมด้วย เช่น Pin0,1 เป็นขา Tx,Rx Serial, Pin3,5,6,9,10 และ 11 เป็นขา PWM  
5.ICSP Port: Atmega328 เป็นพอร์ตที่ใช้โปรแกรม Bootloader
6. MCU: Atmega328 เป็น MCU ที่ใช้บนบอร์ด Arduino
7. I/OPort: นอกจากจะเป็น Digital I/O แล้ว ยังเปลี่ยนเป็น ช่องรับสัญญาณอนาล็อก ตั้งแต่ขา A0-A5
8.Power Port: ไฟเลี้ยงของบอร์ดเมื่อต้องการจ่ายไฟให้กับวงจรภายนอก ประกอบด้วยขาไฟเลี้ยง +3.3 V, +5V, GND, Vin
9. Power Jack: รับไฟจาก Adapter โดยที่แรงดันอยู่ระหว่าง 7-12 V 
10. MCU ของ Atmega16U2 เป็น MCU ที่ทำหน้าที่เป็น USB to Serial โดย Atmega328 จะติดต่อกับ Computer ผ่าน Atmega16U2

Arduino's Boards Buying Guide



 แนะนำการเลือกใช้บอร์ดชนิดต่างๆของ Arduino 
   ผมคิดว่าสำหรับมือใหม่ คงมีปัญหาเหมือนกับผมตอนเริ่มรู้จักกับ Arduino ครับ  คือไม่รู้จะใช้บอร์ดแบบไหนดี มีให้เลือกมากมายเหลือเกิน  เอาเป็นว่าใช้ตามแบบเพื่อนๆดีกว่า จริงรึเปล่าครับ  ผมจะบอกให้อีกนิดนะครับ  สำหรับบอร์ดที่นิยมใช้งานมากที่สุดของ Arduino ในขณะที่เขียนบทความนี้คือ Arduino UNO R3 ครับ  เนื่องจาก ราคาย่อมเยาว์ และได้ Port input/output จำนวนพอใช้งานกับงานสำหรับนักประดิษฐ์ หรือ นักเรียน นิสิต นักศึกษาทั่วไปได้ครับ
   ข้อแตกต่างของบอร์ดแต่ละชนิดที่ผู้ใช้ต้องพิจารณาก็มีคร่าวๆ ดังนี้ครับ 
  • จำนวน Input / Output port
  • ระดับแรงดันทำงาน 3.3 หรือ 5 V
  • ชนิดของ microcontroller
  • ความเร็วของ Clock
  •  Flash Memory
  • วิธีการโปรแกรม
  • ขนาด สีสรรค์ และรูปร่างหน้าตาของบอร์ด
  • ฟังก์ชั่นการทำงานที่มาพร้อมบอร์ด เช่น การติดต่อกับ Android device การติดต่อกับ Ethernet การติดตั้ง SD card มาให้ในตัว จำนวนขา PWM
    ที่ผมจะเขียนให้อ่านในวันนี้จะอธิบายให้เห็นจุดเด่น และ spec ที่สำคัญ ไล่เรียงไปแต่ละบอร์ดที่ได้รับความนิยมและหาซื้อได้ทั่วไปในประเทศนะครับ  เรามาเริ่มกับ บอร์ด ยอดฮิตอย่าง Arduino UNO R3 ก่อนครับ
  อย่างที่กล่าวไปแล้วครับ บอร์ดนี้นิยมใช้งานมากที่สุดในบรรดาบอร์ดของ Arduiono  สาเหตุพอจะสรุปได้ดังนี้ครับ
  • ราคาที่เทียบกับบอร์ดอื่นแล้วถูกและคุ้ม  แถมขายกันทั่วไปบนเว็บ
  • มีคนใช้มากทำให้มี Tutorial ต่างๆบนเว็บไซต์ทั้งในและต่างประเทศมากมาย เช่น Quick Start for Arduino   แถมส่วนใหญ่ หนังสือที่เขียนเกี่ยวกับ Arduino ก็สาธิตการทำงานด้วยบอร์ด UNO R3 เป็นหลักครับ
  • ในกรณีที่ใช้งานแล้วมีปัญหา คือ Atmel 328 เสีย ก็เปลี่ยนเองได้แบบง่ายๆ โดยไปสั่งซื้อ Atmel 328  มาใหม่แล้วทำการ Boot loader ซะหน่อยก็ใช้งานได้ต่อ
  • ที่สำคัญคือ Library ที่มีแจกกันบน Github.com  โดยมากก็ใช้กับ UNO ได้เลยโดยไม่ต้องมีการดัดแปลง
  • จำนวนขา Analog Input  6 ช่อง  Digital Input 14 ช่อง  Flash memory 32 kB ใช้กับ USB ได้ทันทีทั้งไฟเลี้ยงและการโปรแกรม
  • Shield ส่วนใหญ่ออกแบบให้มีขนาดเท่ากับ UNO R3 ทำให้สามารถต่อทับไปบนตัว UNO ได้พอดีไม่ขาดไม่เกิน
  • ระดับแรงดันทำงานของ port 5 V 
  บอร์ดชนิดนี้มีขนาดใหญ่กว่า UNO ครับ แต่การทำงานส่วนใหญ่คล้ายกัน จะมีความต่างๆในรายละเอียดเล็กนัอยดังนี้ครับ
  • มีจำนวน Analog Input port 16 ช่อง  Digital Input 54 ช่อง  PWM 4 ช่อง Flash memory 256 kB 
  •  ไมโครคอนโทรลเลอร์ที่ใช้คือ ATmega2560  Clock 16 MHz
  • ระดับแรงดันทำงานของ port 5 V 
  • Shield ส่วนใหญ่พอใช้กันได้ แต่อาจจะมีขนาดไม่เท่ากัน แต่ถ้าเสียบลงแล้ว Pin ขั้นต้นที่มีให้จะเรียงตัวเหมือนกันกับ UNO ทำให้พอใช้งานกันได้ แต่อาจจะต้องปรับ Sketch ที่เขียนด้วยให้มี Pin ตรงกับบอร์ด MEGA นี้ครับ
โดยสรุปนะครับ บอร์ดนี้ความเร็วเท่าก้บ UNO R3 จำนวน Port มากกว่าเยอะ Flash memory ก็มากกว่า ทำให้ใส่ Sketch ขนาดใหญ่กว่าได้ แต่ระดับแรงดันทำงานเท่ากัน ทำให้ Sensor ต่างๆ ใช้งานด้วยกันกับ UNO ได้ครับ  เหมาะกับการใช้งานในโปรเจคที่มีขนาดใหญ่ขึ้นกว่า UNO
บอร์ดนี้เหมือนกับ Arduino MEGA 2560 R3 ทุกอย่างครับ มีเพิ่มมาคือ Port ที่มีไว้ติดต่อกับ Android device โดยมาพร้อมกับ IC ประเภทที่ทำให้บอร์ดนี้สามารถต่อสายมาที่บอร์ดและใช้สั่งการผ่าน Android phone หรือ Android Tablet ได้โดยตรง โดยไม่ต้องผ่าน Internet
 บอร์ดนี้ออกวางจำหน่ายหลังจาก Arduino UNO R3 ครับ  ข้อแตกต่างที่สำคัญเมื่อเทียบกับ UNO R3 มีดังนี้ครับ
  • ความเร็วในการประมวลผลเร็วกว่า 6 เท่า เนื่องจากใช้ Clock 84 MHz
  • จำนวนขา Analog Input  12 ช่อง  Digital Input 54 ช่อง  Flash memory 512 kB ใช้กับ USB ได้ทันทีทั้งไฟเลี้ยงและการโปรแกรม
  • ระดับแรงดันทำงาน 3.3 V (ข้อนี้ทำให้ต้องระวังอย่างมากนะครับ อย่าใช้อุปกรณ์ปนกับ UNO หรือ บอร์ดอื่นๆ โดยไม่ดูให้ดี จะพาเอาบอร์ดพังได้ ซ่อมก็ไม่คุ้มนะครับ)
  • ราคาสูงกว่า UNO อยู่มากพอสมควร
  • ต้องใช้งานกับ Arduino IDE 1.5 ขึ้นไป
  • Sketch ที่ใช้่งานต้องเขียนขึ้นมา หรือ ดัดแปลงให้เข้ากับ Port ของ Arduino Due นี้ซึ่งอาจจะต่างจาก UNO R3 พอสมควร
สรุปคือ หากต้องการใช้บอร์ดประมวลผลที่เร็วกว่า UNO บอร์ดตัวนี้ก็เป็นบอร์ดที่ต้องเอามาพิจารณาครับ  ตัวอย่างเช่น หากต้องการใช้งานเป็น Data logger แต่ UNO เก็บให้เร็วไม่พอ  คงต้องหันมาใช้ DUE ครับ
  บอร์ดตัวนี้ผมเคยได้ยินเพื่อนๆบางคนบอกว่าคุ้มยิ่งกว่า UNO R3 เพราะราคาเท่ากัน (ในเว็บ www.arduitronics.com)  แต่ได้จำนวนขา Input / Output มากกว่า ก็จริงอย่างนั้นครับ 
  • ความเร็วในการประมวลผลเท่ากับ UNO R3 คือ 16 MHz
  • จำนวนขา Analog Input  12 ช่อง  Digital Input 20 ช่อง  Flash memory 32 kB ใช้กับ USB ได้ทันทีทั้งไฟเลี้ยงและการโปรแกรม
  • ระดับแรงดันทำงาน 5 V เหมือน UNO R3 ทำให้ใช้งาน Sensor ด้วยกันได้
 สรุปคือ ความเร็วเท่ากับ UNO R3 แต่ให้จำนวน input/ output port มากกว่าครับ
  บอร์ดตัวนี้ชื่อก็คงจะสือความหมายแล้วครับ  คือมีขนาดเล็กกว่าบอร์ดชนิดอื่นๆ  แต่ก็ต้องแลกมาด้วยจำนวน Port ที่น้อย และใช้งานกับ Shield ทั่วไปได้ยาก  มีให้เลือก 2 แบบคือ แบบที่ใช้ Atmel 168 กับ Atmel 328 ครับ
  • ใช้ไมโครคอนโทรลเลอร์ตัวเล็กกว่า UNO R3 คือ Atmel 168  หรือ เหมือนกัน UNO R3 คือ Atmel 328  ความเร็ว Clock 16 MHz
  • ระดับแรงดันทำงานคือ  5 V เหมือนกัน UNO
  • จำนวนขา Analog Input  8 ช่อง  Digital Input 14 ช่อง  Flash memory 1-2 kB ใช้กับ USB ได้ทันทีทั้งไฟเลี้ยงและการโปรแกรม
  • ขนาด 0.73 x 1.70 นิ่ว
สรุปคือ หากต้องการใช้งานบอร์ดขนาดเล็ก และไม่ต้องการใช้ร่วมกับ Shield มาตรฐาน ก็อันนี้เลยครับ จะว่าไปความสามารถก็คล้ายกับ UNO R3 เพราะใช้ไม่โครคอนโทรลเลอร์เดียวกัน แต่ memory น้อยกว่า Pin น้อยกว่า


ตัวนี้มีขนาดเล็กที่สุดในบรรดา board ของ Arduino แล้วครับ  แต่เล็กอย่างนี้ใช้ CPU ตัวเดียวกับรุ่น Arduino UNO R3  ทำให้ มี Pin input/output ไม่น้อยเลยครับ
  • Analog input 6 Digital in/out 14 แถมด้วยความเร็วที่ 16 MHz
  • ใช้ ATmega328 running at 16MHz  (มีรุ่นที่ใช้ Atmega 168 ด้วยนะครับ เวลาซื้อเลือกให้ดี)
  • ขนาดเล็กจิ๋ว 0.7x1.3" (18x33mm)
  • เวลาจะ upload ต้องใช้ USB to TTL converter แยก (ซื้อต่างหากครับ แต่ราคาไม่แพงครับ ไม่เหมือนตัว Programmer ของไมโครคอนโทรลเลอร์ยี่ห้ออื่นๆ)
  • RAM kB เท่ากับ UNO ครับ
สรุปคือว่า ถ้าใช้ UNO ได้  ตัวนี้ก็เอาอยู่ แต่ลำบากนิดหน่อนเวลา upload sketch ที่ต้องต่อสายนิดหน่อยครับ

Board Arduino กับ Android ADK
  ขอแถมอีกนิดครับ สำหรับคนที่ต้องการใช้ Arduino ไปพัฒนาร่วม หรือ ใช้กับ Application บน Android devices นะครับ  บอร์ดที่นิยมใช้งานมี 2 แบบ ครับ คือรุ่นที่ทำโดย Arduino โดยตรง ผลิตโดยความร่วมมือกับ Google คือ Arduino MEGA 2560 ADK  และ IOIO Borad (อ่านว่าโยโย่บอร์ด) นะครับ
  หลักๆ ที่ต่างกันของสองบอร์ดนี้เลย คือ  Arduino MEGA 2560 ADK จะเป็นไมโครคอนโทรลเลอร์แบบที่ใช้งานกันโดยทั่วไป ตามที่กล่าวข้างบน  มีความสามารถในการประมวลผล เขียนโปรแกรมลงไปบนตัวบอร์ดได้ แต่เพิ่มความสามารถในการติดต่อกับ Android Devices "ผ่านสาย USB"  ย้ำนะครับ ผ่านสาย USB  Arduino MEGA ADK เป็นไม่โครคอนโทรลเลอรทำงานได้ด้วยตัวเอง  การติดต่อกับ Android device เป็นทางเลือกที่เพิ่มมา
  ส่วน IOIO Board เป็นบอร์ดที่ผลิตโดยบริษัทอื่น  ใช้ ไม่โครคอนโทรเลอร์ตระกูล DsPic ของ Microchip มีขนาดเล็กกว่า Arduino MEGA ADK แต่ที่สำคัญคือ 
  • สามารถติดต่อกับ Android device ผ่านสาย USB หรือ Bluetooth ก็ได้ (ต้องซื้อ Dongle เพิ่ม)
  • ที่ผมอยากจะย้ำคือ "ไม่สามารถในการประมวลผล เขียนโปรแกรมลงไปบนตัวบอร์ดได้"  เป็นเพียงตัวรับและส่งออกคำส่งจาก Android device นะครับ   ไม่ใช่ว่าเป็นข้อเสียนะครับ  แต่เป็นความแตกต่างที่ผู้ผลิตออกแบบมา  การทำแบบนี้ทำให้ผู้เขียนโปรแกรม Android Device ไม่ต้องมาเรียนรู้การใช้งาน Arduino IDE เลย  ทุกอย่างสั่งงานบน Android Device 
  • สำคัญอีกข้อคือ ตัว IOIO Board จะทำงานอะไรไม่ได้เลยถ้าไม่ต่อเชื่อม ไม่ว่าจะแบบสาย หรือ Bluetooth กับ Android Device นะครับ ไม่เหมือนกับ Arduino MEGA ADK ที่เป็นไม่โครคอนโทรลเลอรทำงานได้ด้วยตัวเอง  การติดต่อกับ Android device เป็นทางเลือกที่เพิ่มมา
เครดิต: www.arduitronics.com