วันอังคารที่ 20 พฤศจิกายน พ.ศ. 2555

ขั้นตอนการแก้ปัญหา POP-BOT-XT และ Unicon สื่อสารไม่ได้


ขั้นตอนการแก้ปัญหา POP-BOT-XT และ Unicon สื่อสารไม่ได้

คัดลอกบทความมาจาก   http://www.uniconboard.com/2013/index.php/projects/8--pop-bot-xt-unicon-
ติดตั้งโปรแกรม UniconPOPXT_RecoverySetup.exe ในแผ่น DVDROM หรือดาวน์โหลดได้จากhttp://www.uniconboard.com/2013/index.php/download/file/17-uniconpopxtrecoverysetupexe จากนั้นติดตั้งโปรแกรมตามขั้นตอนดังนี้

1. ดับเบิ้ลคลิกที่ไฟล์ UniconPOPXT_RecoverySetup.exe จะพบหน้าต่างต้อนรับการติดตั้งโปรแกรม จากนั้นกด Next สู่ขั้นตอนต่อไป

2. โปรแกรมจะถามตำแหน่งที่ติดตั้งโปรแกรม ถ้าไม่ต้องการเปลี่ยนแปลงให้ กด Next สู่ขั้นตอนต่อไป
3. โปรแกรมจะถามถึงตำแหน่งใน Start Menu ให้กด Next สู่ขั้นตอนต่อไป
4. โปรแกรมจะแสดงรายละเอียดตำแหน่งการติดตั้งต่างๆ ให้กด Next
5. โปรแกรมใช้เวลาครู่หนึ่งในการติดตั้งจนกระทั่งการติดตั้งโปรแกรมเสร็จสิ้นให้กด Finish เพื่อจบขั้นตอนการติดตั้ง
6. จากนั้นไปที่หน้า Start Menu เปิดโปรแกรม Unicon POP-XT Recovery7. จะพบหน้าตาของโปรแกรม ดังแสดงในรูป
7. จะพบหน้าตาของโปรแกรม ดังแสดงในรูป
ขั้นตอนการกู้ข้อมูล
1. ทำการเชื่อมต่อสาย USB เข้ากับบอร์ด POP-BOT XT จากนั้นกดสวิตช์ OK ค้างไว้ แล้วจึงค่อยเลื่อนเปิดสวิตช์  POWER
2. โปรแกรมจะแสดงตำแหน่ง COMPORT ที่ตรวจพบที่บริเวณด้านล่างของหน้าจอ ดังรูป
3. ให้กดปุ่ม Master Clear สีแดงเพื่อเคลียร์ความผิดปกติของโปรแกรมทั้งหมด
4. หน้าจอของโปรแกรมจะแสดงข้อความดังรูป แสดงว่าเคลียร์ข้อมูลและโปรแกรมหน่วยความจำสำหรับ Boot Loader เข้าไปใหม่เสร็จสมบูรณ์
5.ให้กดปุ่ม Test Motor สีเหลือง เพื่อทดสอบการทำงาน หน้าต่างของโปรแกรมจะปรากฎข้อความดังรูป พร้อมทั้งปรากฎตำแหน่งของพอร์ตอนุกรมตำแหน่งใหม่ขึ้นมาอีก 1 ตำแหน่ง (ซึ่งต่อไปจะใช้ตำแหน่งนี้ในการดาวน์โหลดโปรแกรม)
6. ที่หน้าจอของ POP-BOT-XT จะมีข้อความดังรูป ให้กดปุ่ม OK เพื่อทดสอบการทำงานของมอเตอร์ จะเห็นไปแสดงสถานะของมอเตอร์ติดสลับกันไปมาเป็นอันเสร็จสิ้นขั้นตอนกู้ข้อมูลสามารถนำ POP-BOT-XT ไปใช้งานได้ตามปกติ

วันอังคารที่ 23 ตุลาคม พ.ศ. 2555

ZX- PSX + Unicon Board

การเชื่อมต่อจอยสติ้ก เข้ากับ Unicon Board
ก่อนอื่นทำความรู้จักกับสัญญาณต่างๆกันก่อน แล้ว ทำการเชื่อมเข้ากับบอร์ด ZX- PSX ที่เป็นตัวเชื่อมต่อสัญญาณขาต่างๆให้เข้ากับตัว Unicon ได้

PIN # USAGE
  1. DATA
  2. COMMAND
  3. N/C (9 Volts unused)
  4. GND
  5. VCC
  6. ATT
  7. CLOCK
  8. N/C
  9. ACK
DATA
Signal from Controller to PSX.
This signal is an 8 bit serial transmission synchronous to the falling edge of clock (That is both the incoming and outgoing signals change on a high to low transition of clock. All the reading of signals is done on the leading edge to allow settling time.)
COMMAND
Signal from PSX to Controller.
This signal is the counter part of DATA. It is again an 8 bit serial transmission on the falling edge of clock.
VCC
VCC can vary from 5V down to 3V and the official SONY Controllers will still operate. The controllers outlined here really want 5V.
The main board in the PSX also has a surface mount 750mA fuse that will blow if you try to draw to much current through the plug (750mA is for both left, right and memory cards).
ATT
ATT is used to get the attention of the controller.
This signal will go low for the duration of a transmission. I have also seen this pin called Select, DTR and Command.
CLOCK
Signal from PSX to Controller.
Used to keep units in sync.
ACK
Acknowledge signal from Controller to PSX.
This signal should go low for at least one clock period after each 8 bits are sent and ATT is still held low. If the ACK signal does not go low within about 60 us the PSX will then start interogating other devices.
It should also be noted that this is a bus of sorts. This means that the wires are all tied together (except select which is seperate for each device). For the CLK, ATT, and CMD pins this does not matter as the PSX is always the originator. The DATA and ACK pins however can be driven from any one of four devices. To avoid contentions on these lines they are open collectors and can only be driven low.

เนื้อหาจาก http://www.gamesx.com/controldata/psxcont/psxcont.htm


ZX - PSX 

ทดสอบการทำงาน ดังนี้คือ 

#include <Psx.h>          // Includes the Psx Library ดาวน์โหลดได้จากลิงค์ข้างล่าง
#define Din 19          //ขา Din  ของ zx psx
#define Dout 20          //Dout  ของ zx psx
#define CS 21           //CS ของ zx psx
#define CLK 22         //CLK ของ zx psx
#define LEDPin 13
Psx Psx;                   // Initializes the library

unsigned int data = 0;     // data stores the controller response

void setup()
{
  Psx.setupPins(Din, Dout, CS, CLK, 10);                
  pinMode(LEDPin, OUTPUT); 
}
void loop()
{
  data = Psx.read(); 
  if (data & psxR2) // ตรวจเช็คค่าที่ได้จากการกดปุ่ม ถ้าค่าที่ได้จากการกดมีค่าตามที่กำหนดไว้ในไลบารี Psx.h  
  {
    digitalWrite(LEDPin, HIGH); 
  }
  else
  {
    digitalWrite(LEDPin, LOW); 
  }
}






ดาวน์โหลด ไลบารี่ Psx.zip




วันพุธที่ 10 ตุลาคม พ.ศ. 2555

AppInventor+ UniconBoard + BlueStick

      ในบทความนี้จะเป็นตัวอย่างการเชื่อมต่อบลูทูธระหว่างโทรศัพท์มือถือระบบปฏิบัติการแอนดรอย์ที่พัฒนาด้วยโปรแกรม AppInventor ติดต่อสื่อสารข้อมูลแบบไร้สายบลูทูธโดยใช้โมดูลบลูทูธที่ชื่อว่า BlueStick ที่ทำการเชื่อมต่ออยู่กับบอร์ดทดลองไมโครคอนโทรลเลอร์ UniconBoard ที่ทำหน้าที่ประมวลผลข้อมูลต่างๆที่ถูกมาจากมือถือ 
      สร้างโปรเจ็คขึ้นมาใหม่ ตั้งชื่อตามใจชอบ  หลังจากนั้นออกแบบหน้าตาโปรแกรมดังภาพ ซึ่งประกอบด้วยคอมโพเน้นต่างๆดังนี้คือ    HorizontalArangement1,HorizontalArrangement2 , Button1,Button2 ,Notifier1,BluetoothClient1  เราสามารถปรับเปลี่ยนชื่อของคอมโพเน้นต่างๆได้ตามต้องการเพื่อให้ง่ายต่อการจำหรือการนำไปใช้งาน แล้วยังสามารถปรับแต่งปุ่มต่างด้วยรูปภาพได้ โดยแต่ละปุ่มของผมก็จะใช้สำหรับสื่อความหมายดังนี้คือ ปุ่มบลูทูธคอนเนคสำหรับเชื่อมต่อบลูทูธ  ปุ่มบลูทูธดิสคอนเนคสำหรับยกเลิกการเชื่อมต่อ  ปุ่่มหลอดไฟติด เมื่อกดแล้วไฟที่หลอด Led จะติด และหลอดไฟไม่ติด ใช้แทนการปิดไฟ หลอด Led ก็จะดับ


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



ที่บอร์ดไมโครคอนโทรลเลอร์ UniconBoard นั้น ให้เราทำการเชื่อมต่อชุดโมดูลสื่อสารไร้สายบลูทูธ ที่ชื่อว่า BlueStick เข้ากับตำแหน่งขาพอร์ตของ UniconBoard ดังนี้คือ



ขา  RX (0) ของ UniconBoard   ต่อเข้ากับขา  TX ของ BlueStick
ขา  TX (1) ของ UniconBoard   ต่อเข้ากับขา RX ของ BlueStick
เพื่อให้การเชื่อมต่อเป็นไปง่ายขึ้นสามารถเชื่อมต่อบลูทูธเข้ากับ ADX-Btstick ก่อนแล้วค่อยนำไปเชื่อมต่อกับ UniconBoard


BlueStick


เป็นอุปกรณ์บลูทูธที่ใช้โปรไฟล์พอร์ตอนุกรม (Serial port profile : SPP) ในการติดต่อเพื่อใช้งาน จึงเหมาะอย่างยิ่งสําหรับใชในสื่อสารขอมูลอนุกรมแบบไร้สายผานคลื่นวิทยุระบบบลูทูธ
คุณสมบัติทางเทคนิค
• ความไวในการทํางาน -80dBm
• กําลังส่งสูงสุด +4dBm
• เป็นอุปกรณ์ที่ เข้ากันได้ตามมาตรฐานบลูทูธ V2.0 + EDR (Enhanced Data Rate) ถ่ายทอดข้อมูลด้วยอัตราเร็ว 3 เมกะบิตต่อวินาที
• ความถี่ใช้งาน 2.4GHz
• เป็นอุปกรณ์บลูทูธที่ทํางานในโหมดสเลฟ และใช้โปรไฟล์พอร์ตอนุกรม (SPP)
• ระยะทําการสูงสุด 10 เมตร
• อัตราบอดตั้งต้น 9,600 บิตต่อวินาที โดยใช้รู ปแบบข้อมูล 8 บิต, บิตหยุด 1 บิต และไม่มีบิตตรวจสอบพาริตี้ หรือ 8N1
• ตั้งค่าอัตราบอดใหม่ได้ ประกอบด้วย 1200, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400 บิตต่อวินาที
• รหัสประจําตัวสําหรั บใช้ในการจั บคู่ ตั้งได้ ตั้งแต่ 0000 ถึง 9999 (4 หลัก) ค่าตั้งต้นคือ 1234
• ย่านไฟเลี้ยง +3.3 ถึง +5.5V
• มีวงจรสื่อสารข้อมูลอนุกรมหรือ UART ในตัว
• มีสายอากาศติดตั้งภายในตัว
• ขนาด 1.5 ซม. x 4.0 ซม.
ในชุดประกอบด้วย : โมดูล BlueStick, คอนเน็กเตอร์ IDC ตัวผู้ 4 ขาทั้งแบบขาตรงและขางอ


ADX-Btstick



บอร์ดใช้งานโมดูล BlueStick
มีจุดต่อ IDC ตัวเมียสำหรับติดตั้งโมดูล BlueStick
จุดเชื่อมต่อ TxD และ RxD สามารถเชื่อมต่อกับคอนเน็กเตอร์ JST ของ INEX ได้


Code ตัวอย่างการรับข้อมูลผ่าน SerialPort


void setup() {
  pinMode(30,OUTPUT);
  Serial.begin(9600);
  Serial1.begin(9600);
}
void loop() {
  
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.println(inByte, DEC);  
    if(inByte==1)
    {
      digitalWrite(30,HIGH);
    }
    else {
      digitalWrite(30,LOW);

    }

  }
}

วันเสาร์ที่ 6 ตุลาคม พ.ศ. 2555

HMC6352 + UniconBoard

โมดูลเข็มทิศขนาดเล็กเพียง 11.7x14.9x13.65 มม.

ดาวน์โหลดข้อมูล เอกสารการใช้งาน




 Unicon Board




ArduinoCode 

#include <Wire.h>

int HMC6352Address = 0x42; //address ของ HMC6352 ที่ทางโรงงานนั้นกำหนดมาคือ 0x42 
int slaveAddress;
int ledPin = 31;
boolean ledState = false;
byte headingData[2];
int i, headingValue;

void setup()
{
// Shift the device's documented slave address (0x42) 1 bit right
// This compensates for how the TWI library only wants the
// 7 most significant bits (with the high bit padded with 0)
slaveAddress = HMC6352Address >> 1;   // This results in 0x21 as the address to pass to TWI
Serial.begin(9600);
pinMode(ledPin, OUTPUT);      // Set the LED pin as output
Wire.begin();
}


void loop()
{
  // Flash the LED on pin 13 just to show that something is happening   //unicon pin 31
  // Also serves as an indication that we're not "stuck" waiting for TWI data
  ledState = !ledState;
  if (ledState) {
    digitalWrite(ledPin,HIGH);
  }
  else
  {
    digitalWrite(ledPin,LOW);
  }
  // Send a "A" command to the HMC6352
  // This requests the current heading data
  Wire.beginTransmission(slaveAddress);
  Wire.write("A");        // The "Get Data" command
  Wire.endTransmission();
  delay(10);             // The HMC6352 needs at least a 70us (microsecond) delay
  
  // หลังจากที่ได้ส่ง A ซึ่งเป็นคำสั่งให้โมดูลส่ง Output ออกมาเราจะก็จะทำการอ่านค่า Output โดยใช้ Heading Mode ของตัวไอซี
// ตัวอย่าง เราจะอ่านค่าออกมาเป็น 1345    ค่าองศาอซิมุสจะเท่ากับ   134.5 degrees

  Wire.requestFrom(slaveAddress, 2); // Request the 2 byte heading (MSB comes first)
  i = 0;
  while(Wire.available() && i < 2)
  { 
    headingData[i] = Wire.read();
    i++;
  }

  headingValue = headingData[0]*256 + headingData[1];  // Put the MSB and LSB together
  Serial.print("Current heading: ");
  Serial.print(int (headingValue / 10));  // The whole number part of the heading
  Serial.print(".");
  Serial.print(int (headingValue % 10));  // The fractional part of the heading
  Serial.println(" degrees");
  delay(100);
}







SHT 11 + Unicon Board

SHT 11
sensor อุณหภูมิ และ ความชื้นจาก Sensirion รุ่น SHT11 ให้สัญญาณ output เป็น digital 14 บิต ผ่านทาง I2C (เพียง 2 เส้น) ไม่ต้องต่ออุปกรณ์อื่น ๆ เพิ่มเติม สามารถต่อกับ MCU โดยตรงได้เลย



UNICON BOARD

ตัวอย่างโค้ดตัวอย่าง SHT 11  ทำงาน ร่วมกับ  UniconBoard
#include <SHT1x.h>
#define dataPin  2
#define clockPin 3
SHT1x sht1x(dataPin, clockPin);

void setup()
{
  Serial.begin(38400); // Open serial connection to report values to host
  Serial.println("Starting up");
}

void loop()
{
  float temp_c;
  float temp_f;
  float humidity;

  temp_c = sht1x.readTemperatureC();
  temp_f = sht1x.readTemperatureF();
  humidity = sht1x.readHumidity();

  Serial.print("Temperature: ");
  Serial.print(temp_c, DEC);
  Serial.print("C / ");
  Serial.print(temp_f, DEC);
  Serial.print("F. Humidity: ");
  Serial.print(humidity);
  Serial.println("%");

  delay(2000);
}


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

SRF04+UniconBoard

SRF-05



SRF-05
โมดูลตรวจจับและวัดระยะทาง ด้วยอัลตราโซนิก
เป็นแผงวงจรตรวจจับและ วัดระยะทางด้วยคลื่นอัลตร้าโซนิกที่มีความเทียงตรงสูง โดยสามารถวัดระยะได้ตั้งแต่ 1 เซนติเมตรจนถึง 4 เมตร โมดูล SRF-05 ออกแบบมาให้ต่อใช้งานกับไมโครคอนโทรลเลอร์ได้ง่าย โดยใช้สายสัญญาณเพียง 2 เส้น

คุณสมบัติ
  • • ใช้ตัวรับและส่ง คลื่นอัลตร้าโซนิก ทำงานที่ความถี่ 40 KHz
  • • ใช้ไฟเลี้ยง +5V. ต้องการกระแสไฟฟ้า 30 mA.
  • • วัดระยะทางในช่วง 1 cm จนถึง 4 M.
  • • ต้องใช้สัญญาณพัลส์ กระตุ้นการทำงานด้วยระยะเวลาอย่างน้อย 10 ไมโครวินาที
  • • ให้ผลลัพธ์เป็นค่าความ กว้างพัลส์แปรผันกับระยะทางที่ตรวจวัดได้
  • • สามารถนำไมโคร คอนโทรลเลอร์มาเชื่อมต่อ เพื่ออ่านค่าได้อย่างง่ายดาย
  • • มีขนาดเล็ก กว้าง x ยาว x สูง เพียง 43 มม. x 20 มม. x 17 มม.เท่านั้น
  • • สามารถใช้แทน SRF04 ได้


Unicon Board

คุณสมบัติทางเทคนิคที่สำคัญของบอร์ด 

• ใช้ไมโครคอนโทรลเลอร์ ATmega32U4 จาก Atmel มีหน่วยความจำแฟลช 32 กิโลไบต์ บรรจุบูตโหลดเดอร์ที่เข้ากันได้กับฮาร์ดแวร์ Arduino Leonardo
• ดาวน์โหลดและสื่อสารข้อมูลผ่านพอร์ต USB ได้โดยตรง โดยไม่ต้องใช้ชิปแปลงสัญญาณอย่าง FT232 หรือ MCP2200 แต่อย่างใด
• สัญญาณนาฬิกาความถี่ 16MHz จากเซรามิกเรโซเนเตอร์คุณภาพสูง
• มีจุดต่อพอร์ตสำหรับใช้งานที่ตรงกับชื่อขาพอร์ตของ Arduino Leonardo
• จุดต่อพอร์ตเป็นแบบ IDC 2.5 มม. ตัวเมีย และ JST 2.0 มม. ตัวผู้ 3 ขา มีการแบ่งแยกฟังก์ชั่นด้วยสีของคอนเน็กเตอร์อย่างชัดเจน
• ใช้ไฟเลี้ยงจากภายนอก +6 ถึง +12V บนบอร์ดมีวงจรควบคุมไฟเลี้ยงคงที่ +5V 1A ต่อผ่านแจ๊กอะแดปเตอร์และเทอร์มินอลบล็อก
• มีสวิตช์กดติดปล่อยดับและ LED สำหรับทดสอบการทำงานของพอร์ตและแสดงสถานะการทำงาน
• มีสวิตช์ RESET
• รองรับบอร์ดแสดงผลกราฟิก LCD สี (รุ่น GLCD-XT จำหน่ายแยก)
• ขนาดเพียง 2.5 x 4 นิ้ว
• พัฒนาโปรแกรมด้วย Arduino 1.0
• ข้อมูลเพิ่มเติมและดาวน์โหลดซอฟต์แวร์สำหรับการพัฒนาโปรแกรม ตัวอย่างโปรแกรม พร้อมทั้งเอกสารต่างๆ ได้ที่ www.uniconboard.com
หน้าตาของบอร์ด Unicon แสดงในรูปพร้อมกับแสดงจุดต่อต่างๆ จะเห็นได้ว่า บอร์ด Unicon สามารถรองรับการเชื่อมต่อกับอุปกรณ์ภายนอกได้หลากหลายและค่อนข้างอเนกประสงค์ ไม่ว่าจะต่อทดลองวงจรกับเบรดบอร์ดก็สามารถใช้จุดต่อแบบ IDC ตัวเมีย 2.54 มม. หรือจะต่อกับแผงวงจรตรวจจับและแผงวงจรเอาต์พุตของ INEX ที่ใช้คอนเน็กเตอร์แบบ JST 2.0 มม. ก็ได้

Code for Arduino Board

#define ECHOPIN 2       // Pin to receive echo pulse
#define TRIGPIN 3       // Pin to send trigger pulse

void setup(){
  Serial.begin(9600);
  pinMode(ECHOPIN, INPUT);
  pinMode(TRIGPIN, OUTPUT);
}

void loop(){
  digitalWrite(TRIGPIN, LOW);       // Set the trigger pin to low for 2uS
  delayMicroseconds(2);
  digitalWrite(TRIGPIN, HIGH);     // Send a 10uS high to trigger ranging
  delayMicroseconds(10);
  digitalWrite(TRIGPIN, LOW);      // Send pin low again
  int distance = pulseIn(ECHOPIN, HIGH); // Read in times pulse
  distance= distance/58;           // Calculate distance from time of pulse
  Serial.println(distance);                     
  delay(50);                       // Wait 50mS before next ranging
}
//---------------------------------------------------------------------------//




Code for Unicon Board


#include <popxt.h>
//ECHOPIN 2                            // Pin to receive echo pulse
//TRIGPIN 3                            // Pin to send trigger pulse

void setup(){
}
void loop(){
  out(3,0);                 // Set the trigger pin to low for 2uS
  sleep(2); 
  out(3,1);                 // Send a 10uS high to trigger ranging
  sleep(10);
  out(3,0);                    // Send pin low again
  int distance = pulseIn(2,1); // Read in times pulse
  distance = distance/58;   // Calculate distance from time of pulse
  glcd(1,1," %d ",distance);                    
  sleep(100);              // Wait 50mS before next ranging
}












Intro Unicon Board


Unicon Board




GLCD


RBX-POPBOTXT