ผมสั่ง NRF24L01 PA LNA มาคู่นึง และ arduino atmega8 ทดสอบตามโค้ดที่ได้แนะนำในบทความแล้วทำงานได้ดีครับ (ขอบคุณสำหรับโค้ดตัวอย่างด้วยครับ) ผมอยากถามเพิ่มเติมดังนี้ครับ
- ไลบรารี่ที่ให้มาสามารถกำหนดความเร็วในการส่งได้มั้ยครับ เพราะจากข้อมูลในดาต้าชีตถ้าส่งที่ความเร็วตำสุดสามารถส่งได้ไกลสุดใช่มั้ยครับ
- สามารถรับและส่งข้อมูลพร้อมๆกันเลยได้มั้ยครับ เช่น A ส่งข้อมูลไป B ได้รับก็ตอบ ACK กลับมาเพื่อยืนยันข้อมูลและไม่ทราบว่ามันรับส่งกันแบบ half duplex หรือ full duplex ครับ พอจะมีข้อมูลมั้ยครับ
....ตัวนี้ผมจะทำเป็นตัวแปลงข้อมูล serial (uart) แล้วส่งแบบไร้สายไป อีกฝั่งก็รับแล้วส่งต่อออกไปเป็น serial uart อ่ะครับ
ขอบคุณครับ
ก่อนอื่นต้องออกตัวก่อนว่าผมพึ่ง จะหัดเล่น Arduino ได้สักสองสามเดือน ก่อนหน้านี้เคยเล่น PIC มาบ้างแต่ก็เอาดีไม่ได้ เลยโดดมาลอง Arduino ดูบ้าง ก็รู้สึกว่าจับต้องคล่องมือดีกว่าPIC แต่ก็คงเอาดีไม่ได้เหมือนกัน 555
เล่นเอามันเข้าไว้ กำไรอย่าถามถึง
เรื่องมีอยู่ว่า ผมได้สั่ง NRF24L01 มาลองต่อดูและทำตามตัวอย่างในนี้และใช้ Arduino UNO ส่วนอีกบอร์ดที่เป็นตัวส่งผมทำเองเป็น copy UNO ไม่ได้ถ่ายรูปมาให้ดู เดี๋ยวเอามาที่หลังแล้วกัน
พอต่อเสร็จโหลดเสร็จ ผมออกมามันไม่เป็นอย่างที่หวังไว้ เอาล่ะสี ต่อผิดตรงไหนล่ะนี่ พยายามค่อยๆไล่ที่ละจุด
ก็ถูกต้องทั้งหมด ลองต่อ C.0.1uf คล่อมแล้วก็แล้ว ก็เลยลองสลับบอร์ดตัวรับและส่งดู ก็ยังเหมือนเดิม
ทำไงดีล่ะทีนี้ ผมลองอีกหลายอย่างไม่ขอพูดถึงแล้วกันมันจะยาวเกินไป ขอสรุปปัญหาเส้นผมบังภูเขา(สำหรับผม)
1. สายจั๊มที่ใช้ต่อระหว่างโมดูลกับบอร์ดหลวมใน ไม่ใช่ขาดในนะครับ คือลักษณะต่อบ้างไม่ต่อบ้าง หรือรอยย้ำไม่แน่นประมาณนั้น ทำให้สัญญาณผิดเพี้ยนได้
2. ตัวโมดูล USB to TTL ผมใช้แบบที่ไม่มี ขา DTS (ดัดแปลงจากสายของโทรศัพท์ Sony) ต้องกดปุ่ม reset ตอนอัปโหลด ตัวนี้มีปัญหาสำหรับผมอัปโหลดตัวอื่นไม่มีปัญหา โหลดวงจรไฟกระพริบ ควบคุมรีเลย์ วัดอุณหภูมิได้ปกติไม่มีปัญหา แต่เอามาโหลดเจ้า NRF24L01 ไม่สามารถสื่อสารกันได้ หมายถึงอัปโหลดโปรแกรมได้แต่โมดูลไม่สามารถสื่อสารระหว่างกันได้ แต่ลองใช้ UNO อัปโหลด ใช้ได้ปกติครับ
กรณีนี้โมดูล NRF24L01 ไม่เสียครับ ถ้าเสียร้านนี้รับผิดชอบอยู่แล้ว แต่ขอให้ลองดูดีๆก่อน จะได้ไม่เสียค่าส่งของกันเปล่าๆ ตอนแรกผมจะส่งไปให้ร้านดู แต่ดูราคาของกับค่าส่งมันไม่คุ้มจริงๆ เลยพยายามหาข้อสรุปให้ได้ก่อน
ฝากไว้เป็นข้อมูลเผื่อช่วยแก้ปัญหาได้บ้างครับ และขอบคุณที่ทนอ่าน
อยากทราบว่า NRF24L01P ต่อใช้งานกับ Arduino DUE ยังไงครับ ต้องต่อที่ขาไหนบ้าง
ลองแล้วบอร์ดทำงาน แต่ไม่รู้ส่งข้อมูลออกไปที่ขาไหนครับ
ขอโทษนะครับ พอดีผมกำลังมองหาตัวโมดูลมาใช้ ผมมีข้อสงสัยอยู่ 2 ข้อ
1. ไม่ทราบว่าตัว NRF24L01 สามารถเป็นตัวรับที่เป็นตัวส่งด้วยและเป็นตัวส่งที่เป็นตัวรับด้วยได้ใช่รึปล่าวครับ !!
2. สามารถควบคุม servo ผ่านตัว NRF24L01 ที่เป็นตัวรับและตัวส่งได้รึปล่าวครับ !!
ขอบคุณครับ.
1. ไม่ทราบว่าตัว NRF24L01 สามารถเป็นตัวรับที่เป็นตัวส่งด้วยและเป็นตัวส่งที่เป็นตัวรับด้วยได้ใช่รึปล่าวครับ !!
- สามารถเป็นได้ทั้งตัวรับและตัวส่งครับ ตามตัวอย่างโคดในบทความ แต่ต้องเลือกเป็นทีละอย่าง
2. สามารถควบคุม servo ผ่านตัว NRF24L01 ที่เป็นตัวรับและตัวส่งได้รึปล่าวครับ !!
- ทำได้ครับ
อาจเป็นที่โคดเพราะบอกว่ารับได้แต่ส่งไม่ได้ชิฟตัวเดียวกัน ลองดูตัวอย่างจะมีโหมดส่งลองปรับจาก fast เป็น slow หรือลองใส่ตัวเก็บประจุค่า 0.1 uf เพื่อลดสัญญาณรบกวนมีบอกไว้ในบทความและกระทู้ลองหาดูครับ
ขอโค้ด ตัวส่ง1 ตัว ตัวรับหลาย ๆ ตัว หน่อยครับ ขอบคุณครับ
ผมใช้บอร์ด mega แล้วสัญญาณมันไม่ออกอะครับ ต่อแบบ mega ทั้ง 2 บอร์ด ควรแก้ยังไงครับ
ตามบทความนี้เลยครับ http://www.arduinoall.com/b/10 สังเกตขา spi ของ arduino mega กับ arduino uno คนละตำแหน่งกันครับ
แล้วเราจะเอาค่าที่ส่งมาไปใช้งานยังไงอ่ะครับ
ตัวรับ............................................
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int joystickx;
int joysticky;
void setup()
{
Serial.begin(9600);
delay(1000);
Serial.println("Nrf24L01 Receiver Starting");
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();;
}
void loop()
{
if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read( joystickx, sizeof(joysticky) );
Serial.print("X = ");
Serial.print(joystickx);
Serial.print(" Y = ");
Serial.println(joysticky);
}
}
else
{
Serial.println("No radio available");
}
}
ตัวส่ง........................................................................
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN 9
#define CSN_PIN 10
#define JOYSTICK_X A0
#define JOYSTICK_Y A1
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN, CSN_PIN);
int joystick[2];
void setup()
{
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
}
void loop()
{
joystick[0] = analogRead(JOYSTICK_X);
joystick[1] = analogRead(JOYSTICK_Y);
radio.write( joystick, sizeof(joystick) );
}