วันพฤหัสบดีที่ 22 พฤษภาคม พ.ศ. 2557

ทำ Prototype ชุดการแสดงกันต่อคะ Part3


วันนี้ ตั้งใจจะมาทำเเต่เช้า แต่พอมาถึง ก็ต้องแอบเสียใจ
เมื่อเดินมาถึงหน้าประตูแล้วเข้าห้องesic ไม่ได้ เพราะวันนี้มี Workshop Hardward
ซึ่งพี่ esic ไปสอนน้องๆกันหมด เลยไปหาอย่างอื่นทำพลางๆฆ่าเวลา
และในที่สุดตอนพอเย็นๆ พี่ๆก็กลับเข้ามาา ทำให้ได้เข้ามาทำงานกันซักที

วันนี้งานหลักๆที่ทำก็คือ มาศึกษาเจ้าตัว rf24กันคะ หลังจากที่ก่อนหน้านี้ เรางมกับ x-bee มาเกือบห้าวัน ก็ยังไม่สามารถส่งข้อมูลข้ามได้สำเร็จซักที

งั้นขอกลับมาเล่าก่อนว่าทำไมเราต้องใช้ เจ้า rf24 นี้ และ rf24 มันคืออะไร ?
เนื่องจาก project ที่เราทำกับโรงละครช้าง คือ ชุดสำหรับนักเต้น นั้นแปลว่า เราจะมีสายระโยงระใย ไม่ได้
ดังนั้นเราต้องเก็บสายให้หมด เเละ control ไฟ ทุกอย่าง อย่างไร้สาย
อย่างตอนเเรกที่คิดกัน คือ เอา xbee มาใช้ เป็นอุปกรณ์ติดต่อสื่อสารแบบไร้สาย
แต่ปรากฏว่า มีปัญหาการใช้เยอะ อย่างแรกเลย เราไม่รุ้เลย ว่า xbee  เสียรึป่าวว ? 
เพราะตัวที่ได้มาเป็นตัวเก่าซึ่งใช้มานานเเล้วหลายปี
อย่างที่สอง การที่ xbee จะส่งข้อมูลได้ เราต้องทำการ จับคู่ ด้วยโปรแกรมเฉพาะของมันก่อน แต่ด้วย interface ของโปรแกรมเปลี่ยนใหม่ทั้งหมด แทบไม่เหลือเค้าเดิมเลย เเล้ว program version ใหม่นี้ ก็แทบไม่มีข้อมูลใน internet จึงทำให้เราต้องลองผิดลองถูกอยู่นานพอสมควร

และสุดท้ายเรา ก็เปลี่ยนมาใช้ rf24 แทน ด้วยคำแนะนำของอินดี้

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

งั้นขออธิบาย code ส่วนนี้ละกันนะคะ
หลักๆ คือ เราต้องติดตั้ง rf24 ไว้ที่ arduino สองตัว โดยตัวหนึ่งเป็นตัวรับ และ อีกตัวเป็นตัวส่ง
โดยที่ ตัวรับเเละตัวส่งจะรู้จักกันได้ ก็คือ ต้องกำหนด ชื่อ id ทั้งสองตัว  โดยตัวส่งจะส่งข้อมูลไปตาม id ผู้รับที่กำหนด
ในขณะที่ตัวรับ จะวนรอรับเรื่อยๆ ว่า มีข้อมูลอะไรส่งหามันหรือ ไม่ ?

การต่อ วงจรHardware ก็ตามเว็บไซด์นี้เลยคะ
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

ตัว Sender

// Set up nRF24L01 radio on SPI pin for CE, CSN
RF24 radio(9,53);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0x7365727631LL };

char receivePayload[32];
uint8_t counter=0;

void setup(void)
{
  radio.begin();

  // Enable this seems to work better
  radio.enableDynamicPayloads();

  radio.setDataRate(RF24_1MBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.setChannel(76);
  radio.setRetries(15,15);

  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1,pipes[1]);
  //radio.startListening();

  // Dump the configuration of the rf unit for debugging
  radio.printDetails();
  delay(1000);
}

void loop(void)
{
  // Get the last two Bytes as node-id
  uint16_t nodeID = pipes[0] & 0xff;

  // Use the last 2 pipes address as nodeID
   sprintf(nodeID,"%X",pipes[0]);
    sprintf(outBuffer,"%2X",nodeID);  
    strcat(outBuffer,",");
    strcat(outBuffer,data);

   // Stop listening and write to radio
    radio.stopListening();

    // Send to hub
    if ( radio.write( outBuffer, strlen(outBuffer)) ) {
       printf("Send successful\n\r");
    }
}


ตัว receiver

RF24 radio(8,9);
const uint64_t pipes[6] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL, 0xF0F0F0F0E5LL };

void setup(void)
 {
 radio.begin();

  radio.setDataRate(RF24_1MBPS);
  radio.setPALevel(RF24_PA_MAX);
  radio.setChannel(76);
  radio.enableDynamicPayloads();
  radio.setRetries(15,15);
  radio.setCRCLength(RF24_CRC_16);
  radio.openWritingPipe(pipes[0]);
  radio.openReadingPipe(1,pipes[1]);
  radio.openReadingPipe(2,pipes[2]);
  radio.openReadingPipe(3,pipes[3]);
  radio.openReadingPipe(4,pipes[4]);
  radio.openReadingPipe(5,pipes[5]);

  radio.startListening();
  radio.printDetails();

  delay(1000);
}
void loop(void)
{
     while (!done)
      {
        len = radio.getDynamicPayloadSize();
        done = radio.read( &receivePayload,len );
       
        radio.stopListening();
        radio.write(receivePayload,len);
        receivePayload[len] = 0;
        printf("Got payload: %s len:%i pipe:%i\n\r",receivePayload,len,pipe);
      }
}

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

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

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