30 เมษายน 2555

1 พฤษภาคม 2555(Communication ใน Chipkit)

Chipkit จะติดต่อสื่่อสารกับภายนอกด้วยBus และ Serial ได้หลายทาง ได้แก่ Serial จำนวน4port 1 SPI 1 I2C และยังมี SoftwareSerial ให้ใช้งานได้อีกวันนี้จะขอแนะนำเรื่องการเซต jumper เพื่อใช้ในการสื่อสาร

Max 32


บอร์ดMax32 นี้จะมี Jumper ให้เซตเกี่ยวกับ Communication แค่คู่เดียวคือ JP3 JP4 โดยเป็นการเซตในโหมดของ SPI ซึ่งจะมีสองโหมดด้วยกันคือ Master กับ Slave ซึ่งสามารถดูได้เลยว่าเป็นโหมดไหนเพราะมีเขียนกำกับเอาไว้ตามรูปส่วนJ13เป็น port เอาไว้ต่อเข้ากับระบบ SPI Bus



ส่วน I2Cสามรถใช้ได้ที่ขา20 SDA 21 SCLได้เลย


Uno 32
บอร์ดUno32 นี้จะมี Jumper เพิ่มมาอีกจากของMax 32เพราะต้องเลือกโหมดของขา Analog 4 และ 5 ให้เป็นขา Analog หรือ I2C โดย Jumperที่ไว้เลือกคือ JP6 JP8 โดยถ้าเลือก Jumper ไปที่ A4 A5 จะเป็นโหมด Analog Input แต่ถ้าเลือกอีกโหมดนึงจะทำให้ขา A4 เป็น SDA A5 เป็น SCL


ส่วนเซตSPI ก็เซตเหมือนกับMax 32แต่เปลี่ยนไปเซ็ตที่ JP5 JP7 ดังรูป








29 เมษายน 2555

30 เมษายน 2555(Chip Kit Max32)

Chip Kit Max32เป็นคอนโทรเลอร์ที่ได้แนวคิดมาจากตระกูล ATMEGA ที่มีการนำ Arduino มาช่วยให้พัฒนาโปรแกรมที่รันบนบอร์ด โดยChip Kit นี้ใช้ PIC32MX เป็นหลักโดยการเขียนโปรแกรมใช้โปรแกรมmpideซึ่งพัฒนาต่อจาก Arduino0022 ซึ่งใช้งานได้ไม่ยากนักรวมกับ PIC32MX ซึ่งทำงานเร็วพอสมควรจึงเป็นบอร์ดที่น่าสนใจเหมาะในงานที่ต้องใช้ความเร็ว ซึ่งบอร์ดตัวนี้พี่สอง(รุ่นพี่ป เอกในFIBO)จะนำมาใช้ควบคุมแขนกลแทน บอร์ด arduino ที่ทำงานช้ากว่ารายละเอียดอื่นๆค่อยว่ากันนะครับช่วงนี้ผมขอศึกษาก่อน
รายละเอียดhttp://www.digilentinc.com/Products/Detail.cfm?Prod=CHIPKIT-MAX32
โปรแกรม mpide(มีหลายแพลตฟอร์มให้ใช้) https://github.com/chipKIT32/chipKIT32-MAX/downloads

23-26 เมษายน 2555(การแข่งขันหุ่น สสทชิงแชมป์แห่งประเทศไทย)

เนื่องจากสัปดาห์ที่แล้ววันที่23-26เมษายน มีการจัดการแข่งขันหุ่นของสสท. ผมได้มีโอกาสไปช่วยในการจัดการแข่งขันด้วยโดยจัดการแข่งขันขึ้นที่โรงยิมของมหาวิทยาลัยพระจอมเกล้าธนบุรี โดยมีหัวข้อแข่งขันเกี่ยวกับการแข่งกันเก็บซาลาเปาใส่ตะกร้า โดยผู้เข้าแข่งขันจะแข่งขันพร้อมกันสองทีมเป็นฝ่ายสีแดงกับน้ำเงินใครทำคะแนนได้มากกว่าเป็นผู้ชนะ แต่ตอนที่ผมช่วยจัดแข่งนั้นเป็นรอบคัดเลือกจึงยังไม่ค่อยมีทีมใดเก็บซาลาเปาได้กัน โดยกติกาอย่างละเอียดดูได้ที่http://www.tpa.or.th/robot/
ผู้เข้ารอบจะได้ไปแข่งที่ฮ่องกง



11 เมษายน 2555

แนะนำผลงานเกมของเพื่อนผมหน่อยแล้วกันครับ


  • วันนี้ผมมาแนะนำเกมของเพื่อนผมซึ่งได่ลงใน appstore เรียบร้อยแล้วเมื่อคืนนี้ เจ้าของผลงานคือ ภาณุวัชร และ กมลวิชย์ ทีม "3Eras: ศึกสามยุค บุกพิทักษ์ อนุรักษ์ธรรมชาติ" นักศึกษาภาควิชา วิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยสงขลานครินทร์ 
    เข้าร่วมการแข่งขัน NSC2012 และ "Open House for Young Talent " จัดโดย SIPA จากหมวดโปรแกรมเพื่อความบันเทิง ลักษณะเป็นเกมสองมิติแบ่งเป็นสองฝ่าย วางตัวละครลงบนพื้นที่แล้วผลัดกันยิงอีกฝ่ายหนึ่ง

ดูข้อมูลเพิ่มเติมได้ที่ http://itunes.apple.com/th/app/3eras1.0/id516824103?mt=8ดูเพิ่มเติม

11 เมษายน 2555 (Presentation รถ Bluetooth)

หลังจากที่ได้ทำรถBluetoothมานานพอสมควรผมจึงทำวีดีโอนำเสนอรถดังนี้ครับ






ดูข้อมูลของรถได้ที่  http://kritsitti.blogspot.com/2012/04/4-2555-code-bluetooth.html

10 เมษายน 2555

5 เมษายน 2555 (การตั้งค่าbluetoothใช้กับรถbluetooth)

การตั้งค่าbluetoothในโมดุลESD200นี้จะต้องใช้dongleZX-BT232 ของ INEX ช่วยในการตั้งค่าโดยเราจะตั้งค่าให้Bluetoothยอมรับการติดต่อกับอุปกรณ์ที่เราควบคุม
เริ่มจากนำESD200ต่อกับZX-BT232โดยดูแนวการวางขาที่บอร์ดได้เลย
บอร์ดZX-BT232



เมื่อนำ ESD200 ต่อกับ ZX-BT232 แล้วก็นำ ZX-BT232 ต่อเข้ากับคอมพิวเตอร์ใช้โปรแกรม ParaniWin ในการตั้งค่า
DOWNLOADได้ที่    http://www.sena.com/support/downloads/

หลังจากลง ParaniWin แล้วก็รันโปรแกรมขึ้นมา
เลือก port โดยดูจาก device manager ว่า ZX-BT232 ต่ออยู่ Port ไหน


แล้วเลือกdevice settingเพื่อเลือก mode โดยเราเลือกmode3เพื่อรับการติดต่อจากภายนอก ส่วนอื่นๆจะตั้งค่าก็ได้แต่ไม่จะเป็นเช่น

-ชื่อ module
-รหัสที่ใช้ในการต่อ
-Baud rate ควรตั้ง9600
-parity None
-stopbit 1

เมื่อตั้งค่าเสร็จก็ apply ดู



4 เมษายน 2555 (code รถ bluetooth)

ส่วนของรถ bluetooth ที่ผมทำนั้นไม่ได้ต่างจากรถที่ถูกควบคุมด้วยserial port โดยผมใช้คำสั่งรับค่าจาก serialport ซึ่งผมใช้ bluetooth ESD200ในการติดต่อกับอุปกรณ์ที่จะมาควบคุมโดยจะต่อตามข้างล่างนี้

ESD200         ATMEGA1280
GND    --->   GND
3V        --->  3v3
RXD     --->  TX
TXD     --->  RX

โดยหากยังไม่อยากใช้ bluetooth ก็สามารถใช้สายUSBต่อกับบอร์ดแล้วต่อเข้าคอมพิวเตอร์ก่อนก็ได้โดยจะลองสั่งงานผ่านterminalดูก็ได้

ข้อมูลเพิ่มเติม
ใช้ kinect ควบคุม http://kritsitti.blogspot.com/2012/03/29-2555-kinect.html
การทำงาน           http://kritsitti.blogspot.com/2012/03/28-2555-bluetooth.html
ภาพรวมของระบบ http://kritsitti.blogspot.com/2012/03/27-2555-bluetooth.html
ตั้งค่าBluetooth     http://kritsitti.blogspot.com/2012/04/5-2555-bluetoothbluetooth.html
Serial port            http://kritsitti.blogspot.com/2012/03/26-2555-serialport-in-arduno.html
PWM                  http://kritsitti.blogspot.com/2012/03/23-2555pwm-arduno.html


ส่วนของโค๊ตก็ลองทดสอบดูไม่แนะนำให้ลอกนะครับเพราะจะเป็นการปิดกั้นความสามารถของตนเอง
//ฝั่ง arduno


//BluetoothCar Project
//author krit
//Date 11/4/2012


int pwm1=9;       int pwm2=8;
int m1D1=22;      int m1D2=23;
int m2D1=32;      int m2D2=33;
int in;
int total=0;
char state=0;

void countSec();
void go(int speedM);
void back(int speedM);
void tLeft(int speedM);
void tRight(int speedM);
void stopM();

void setup()
{
  pinMode(m1D1,OUTPUT);
  pinMode(m1D2,OUTPUT);
  pinMode(m2D1,OUTPUT);
  pinMode(m2D2,OUTPUT);
  Serial.begin(9600);
  Serial.print("Start\n");
}
void loop()
{
  total=0;
  state=0;
  if(Serial.available()>0){
    state=Serial.read();
    while(Serial.available()==0 && state!='s');
    if(Serial.available()>0 && state!='s'){
      total=(Serial.read());
      //total=(total-66)*10;
    }
  }
  if(state!=0){
    switch(state){
      case 'G':  go(total);    break;
      case 'B':  back(total);  break;
      case 'L':  tLeft(total); break;
      case 'R':  tRight(total);break;
      case 'S':  stopM();    break;
      default:  stopM();
    }  
  }
}

void go(int speedM){
  Serial.print("Go!\t");
  Serial.print(speedM);
  Serial.print("\n");
  analogWrite(pwm1, speedM);
  digitalWrite(m1D1,HIGH);
  digitalWrite(m1D2,LOW);
  analogWrite(pwm2, speedM);
  digitalWrite(m2D1,HIGH);
  digitalWrite(m2D2,LOW);
}

void back(int speedM){
  Serial.print("Back!\t");
  Serial.print(speedM);
  Serial.print("\n");
  analogWrite(pwm1, speedM);
  digitalWrite(m1D2,HIGH);
  digitalWrite(m1D1,LOW);
  analogWrite(pwm2, speedM);
  digitalWrite(m2D2,HIGH);
  digitalWrite(m2D1,LOW);
}

void tLeft(int speedM){
  Serial.print("turnLeft!\t");
  Serial.print(speedM);
  Serial.print("\n");
  analogWrite(pwm1, speedM);
  digitalWrite(m1D2,HIGH);
  digitalWrite(m1D1,LOW);
  analogWrite(pwm2, speedM);
  digitalWrite(m2D2,LOW);
  digitalWrite(m2D1,HIGH);
}

void tRight(int speedM){
  Serial.print("turnRight!\t");
  Serial.print(speedM);
  Serial.print("\n");
  analogWrite(pwm1, speedM);
  digitalWrite(m1D2,LOW);
  digitalWrite(m1D1,HIGH);
  analogWrite(pwm2, speedM);
  digitalWrite(m2D2,HIGH);
  digitalWrite(m2D1,LOW);
}

void stopM(){
  Serial.print("Stop!\n");
  digitalWrite(pwm2, HIGH);
  digitalWrite(pwm1, HIGH);
  digitalWrite(m1D2,HIGH);
  digitalWrite(m1D1,HIGH);
  digitalWrite(m2D2,HIGH);
  digitalWrite(m2D1,HIGH);
}

4 เมษายน 2555

3 เมษายน 2555 (kernelคืออะไร)

หลังจากกลับมาจากสร้างห้องสมุดบ้านดินที่โรงเรียนวัดวังกระสวยก็เหนื่อยมากเลยหาอะไรอ่านในช่วง
ฝึกงานแล้วนำมาฝากวันนี้นั่นคือkernel ซึงหาเราจะควบคุมhardwareโดยใช้osเราก็จำเป็นต้องใช้มันในบทความนี้ผมจะให้รู้จักกับkernelของlinuxอย่างย่อแล้วกันนะครับ
สิ่งที่จำเป็นจะต้องรู้ก่อนคือOSคืออะไรและทำไมเราควบคุมhardwareในระบบOSโดยตรงไม่ได้
Operating System คือระบบที่ทำให้hardwareทำงานร่วมกับอย่างมีประสิทธิภาพและปลอดภัยโดยสาเหตุก็เพราะว่าเมื่อเราออกแบบhardwareซับซ้อนยิ่งขึ้นเราก็ยิ่งลำบากในการใช้hardwareนั้นจึงต้องการตัวช่วยบริหารนั้นคือOS โดยOSจะจัดการhardwareโดยแบ่งออกเป็นสองส่วนคือส่วนของuserซึ่งเราสามkรถทำอะไรก็ได้และส่วนของkernelเป็นส่วนhardwareซึ่งOSเป็นตัวจัดการโดยเราสามารถเรียกใช้งานได้โดยการเรียกใช้ฟังก์ชันในไลบรารีหรือSystem callคือการเรียกการทำงานภายในkernelจึงทำให้เราไม่สามารถควบคุมhardwareได้ดั่งที่ใจต้องการจึงทำให้เราต้องเขียนในส่วนkernelขึ้นมาเพื่อเรียกใช้ได้ดังใจที่เราต้องการโดยlinuxนี้จะมีจุดที่น่าสนใจคือkenelจะแบ่งออกเป็นส่วนย่อยๆได้แก่
Process management บริหารงานที่ทำอยู่ในเวลาหนึ่ง
Memory management บริหารหน่วยความจำ
Filesystems บริหารไฟล์จัดการรูปแบบไฟล์
Device control ควบคุมhardware
Networking ดูแลด้านการสื่อสาร
ส่วนที่เราเน้นหนักก็คือส่วนของDevice controlเพราะสามารถนำไปควบคุมhardwareได้โดยข้อดีนี้ทำให้เราไม่จำเป็นต้องสร้างkernelขึ้นมาทั้งหมดแค่เราเขียนแยกเป็นส่วนแล้วทำการลงไปในเครื่องก็ได้

รูปของการทำงานของคอมพิวเตอร์