ทดสอบระยะส่ง nRF24L01+ (PA) ครั้งที่สอง
ขออนุญาตท่านผู้นำนะคับ น่าจะมีประโยชน์กับคนที่อยากลองควบคุมอะไรบางอย่างจากระยะไกลแบบไร้สาย
ธงก้อนโฟมดุ๊กดิ๊ก
(http://image.free.in.th/v/2013/ia/140725021211.jpg) (http://pic.free.in.th/id/b404e2358d5079c97340e6baa1f6b651)
ธงก้อนโฟมดุ๊กดิ๊กต่อกับ servo
(http://image.free.in.th/v/2013/ig/140725021315.jpg) (http://pic.free.in.th/id/ca502b3006305f1e6e0c709d67e3c7db)
พร้อมแว้ว .... ^^
(http://image.free.in.th/v/2013/il/140725021404.jpg) (http://pic.free.in.th/id/8f34bfa2950e92a28ff0a11a5598c90d)
ถ้าเป็นตัวไม่มี PA ระยะแค่นี้ก็เดี้ยงแล้ว
(http://image.free.in.th/v/2013/ig/140725021513.jpg) (http://pic.free.in.th/id/3cfbf4788a07336c54a2ea49f041e841)
มันไกลจุงเบย ยังคุม servo ได้ปรกติ แต่เกือบมองไม่เห็นแล้ว เลยเลิก
(http://image.free.in.th/v/2013/in/140725021549.jpg) (http://pic.free.in.th/id/8c7965f136fee9d11669a23733e0ff15)
ภาครับ
// http://www.bajdi.com
// Nrf24L01 connected to Arduino Uno
// Nrf24L01 connection details http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
// Receives analog value from transmitter and maps it to a PWM range (0-255) to dim a led
#include <SPI.h>
#include <Servo.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int rate;
int val;
Servo myservo; // create servo object to control a servo
void setup(){
Mirf.cePin = 9; //ce pin on Mega 2560, REMOVE THIS LINE IF YOU ARE USING AN UNO
Mirf.csnPin = 10; //csn pin on Mega 2560, REMOVE THIS LINE IF YOU ARE USING AN UNO
myservo.attach(6); // attaches the servo on pin 9 to the servo object
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"serv1");
Mirf.payload = sizeof(rate);
Mirf.config();
}
void loop(){
while(!Mirf.dataReady()){
}
Mirf.getData((byte *) &rate);
val = map(rate, 0, 1023, 0, 179);
myservo.write(val);
delay(10);
}
ภาคส่ง
// http://www.bajdi.com
// Nrf24L01 connected to Mega 2560
// Nrf24L01 connection details http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
// Transmit analog value from pin A0 to the receiver
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
int rate;
void setup(){
Serial.begin(9600);
Mirf.cePin = 9; //ce pin on Mega 2560, REMOVE THIS LINE IF YOU ARE USING AN UNO
Mirf.csnPin = 10; //csn pin on Mega 2560, REMOVE THIS LINE IF YOU ARE USING AN UNO
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"clie1");
Mirf.payload = sizeof(rate);
Mirf.config();
}
void loop(){
rate = analogRead(A0);
Mirf.setTADDR((byte *)"serv1");
Mirf.send((byte *) &rate);
while(Mirf.isSending()){
}
}
สรุป
ระยะที่ module ทำได้จริงๆอาจได้ถึง 500 เมตรหรือไกลกว่านั้น ผมยังอึ้งๆอยู่แบบว่าราคากับคุณภาพมัน...ที่เหลืออธิบายด้วยภาพ
รายละเอียดต่างๆหาอ่านเพิ่มเติมได้จาก internet คับ
สุดยอดครับท่าน Jeng
นำแนวคิดใหม่ๆ มานำเสนออีกแล้ว
ขอถามต่อนิดนึงครับ
ว่า ถ้าควบคุมได้ไกลมากๆ แล้วจะทราบได้อย่างไร ว่ามันทำงานได้ถูกต้องทุกคำสั่ง อ่ะครับ
ใช้หลายค่าย สรุปค่าย TI ดีสุด ถ้า 2.4GHz ก็ CC2xxx ดีกว่า ครับ .. อย่าง CC2530 ที่ใช้ใช้เสาอากาศ Micro-strip ข้ามผนัง 4 ห้อง 20 เมตรที่ 99% คนล่ะเรื่องเลย ติด PA ไปได้ 1.5-3 กิโล กันเบย ปัญหาของ nRF24xx คือเรื่องของคุณภาพการสื่อสาร ครับ .. เจอเข้า .. ปวดหัวตั้บ!
แต่ เด่นเรื่องราคา ยังกับไล่แจก ..
Quote from: yupetch on July 25, 2014, 03:55:06 PM
สุดยอดครับท่าน Jeng
นำแนวคิดใหม่ๆ มานำเสนออีกแล้ว
ขอถามต่อนิดนึงครับ
ว่า ถ้าควบคุมได้ไกลมากๆ แล้วจะทราบได้อย่างไร ว่ามันทำงานได้ถูกต้องทุกคำสั่ง อ่ะครับ
ก็คงต้องแล้วแต่เราออกแบบคับ ว่าเราจะมีวิธี error checking แบบไหน เพราะมันรับส่งได้สองทางอยู่แล้ว
Quote from: yupetch on July 25, 2014, 03:55:06 PM
สุดยอดครับท่าน Jeng
นำแนวคิดใหม่ๆ มานำเสนออีกแล้ว
ขอถามต่อนิดนึงครับ
ว่า ถ้าควบคุมได้ไกลมากๆ แล้วจะทราบได้อย่างไร ว่ามันทำงานได้ถูกต้องทุกคำสั่ง อ่ะครับ
ตัว module สามารถทำให้รับส่งได้ 2ทิศทางโดยการกำหนดที่ config ว่าจะต้องการรับหรือส่งครับ
ทำเป็น two way remote น่าสนใจน่ะครับ เอามาแทน REMOTE รถยนต์ แบบ One way บ้านเรา ราคา TWO WAY Remote แพงมากๆ :) :)
PA คืออะไรครับ ?
ขออภัยที่ถาม ข้าพเจ้าไม่รู้จริงๆ และอยากรู้จริงๆ
ขอบคุณครับ
เต็มๆมันชื่อ 2.4-GHz RF Front End ครับ ในตัวมีทั้ง PA (Poweramplifier) , LNA Low-noise amplifier (LNA) แต่เรียกง่ายๆ PA ขยายสัญญาน RF
เป็น chip แยกต่างหาก เช่นภ้าของ CC ก็เป็นเบอร์ CC2591
Quote from: wlasoi on August 13, 2014, 10:14:25 AM
เต็มๆมันชื่อ 2.4-GHz RF Front End ครับ ในตัวมีทั้ง PA (Poweramplifier) , LNA Low-noise amplifier (LNA) แต่เรียกง่ายๆ PA ขยายสัญญาน RF
เป็น chip แยกต่างหาก เช่นภ้าของ CC ก็เป็นเบอร์ CC2591
ขอบคุณครับ :) :)
ถ้าใช้ nRF24L01 มากกว่า 2 ตัว
-สามารถติดต่อกันได้ทุกตัวหรือเปล่าครับ
-มีวิธีการแยกข้อมูลที่ส่งมาจากแต่ละตัวได้หรือเปล่าครับ
เคยลองเล่นมานานหลายปีแล้วตั้งแต่ ES เอามาขายแรกๆ เดี๋ยวนี้หาไม่เห็นมีเลย :'(
แต่ชอบที่ราคาถูกดี แล้วก็ยังสามารถรับข้อมูลได้พร้อมๆกันถึง 6 ตัว ;D
Quote from: jele99 on August 26, 2014, 05:08:12 PM
เคยลองเล่นมานานหลายปีแล้วตั้งแต่ ES เอามาขายแรกๆ เดี๋ยวนี้หาไม่เห็นมีเลย :'(
แต่ชอบที่ราคาถูกดี แล้วก็ยังสามารถรับข้อมูลได้พร้อมๆกันถึง 6 ตัว ;D
ขอบคุณท่าน jele99 มากครับสำหรับรูป ทำให้ผมไปค้นเจอรูปที่ท่านโพสใน datasheet ของ nRF24L01+
จากรูปสรุปว่า ตัว PRX(primary receiver) หนึ่งตัว สามารถติดต่อกับ PTX ได้ถึง 6 ตัวเลยใช่มั้ยครับ (1 master / 6 slave)
ถ้าใช้กับระบบที่มีถึง 7 node แบบในรูป ถือว่าลดต้นทุนได้มากเลยทีเดียว ถ้าเปรียบเทียบกับการใช้ wireless ชนิดอื่น (bluetooth หรือ zigbee)
ส่วนเรื่องการใช้พลังงาน และความแรงของสัญญาน(PA) ลองพิจารณาจากข้างล่างนี้ดูครับ
• Up to 2Mbps on air data rate
• Ultra low power operation
• 11.3mA TX at 0dBm output power
• 12.3mA RX at 2Mbps air data rate
• 900nA in power down
TX mode PA control has four programmable steps
SPI RF-SETUP | (RF_PWR) RF outputpower | DC current consumption |
11 | 0dBm | 11.3mA |
10 | -6dBm | 9.0mA |
01 | -12dBm | 7.5mA |
00 | -18dBm | 7.0mA |
อ้างอิงจาก: nRF24L01_Product_Specification_v2_0
TI มันออก PA รุ่นใหม่มา CC2592 แรงที่ +20 dBm และ sense อยู่ที่ -100dBm เดี่ยวสักพัก จีนทำออกขาย ครับ แรงโครตๆ .. ;D
• Up to 2Mbps on air data rate
• Ultra low power operation
• 11.3mA TX at 0dBm output power
• 12.3mA RX at 2Mbps air data rate
• 900nA in power down
SPI RF-SETUP (RF_PWR) RF outputpower DC current consumption
11 0dBm 11.3mA
10 -6dBm 9.0mA
01 -12dBm 7.5mA
00 -18dBm 7.0mA
Setting ที่ Low data rate 1MBps + 11 0dBm 11.3mA ก็จะทำให้ระยะรับส่งไกลขึ้นไปอีกครับ :)
เจ๋งเป้งเลยคับ
ตัว NRF24l01 เราสามารถset ให้เป็นทั้งรับและส่งในตัวเดียวกันได้ไหมครับ
เช่น ตัว A ส่งค่า 0x01 ไปยัง B เมื่อ B ได้รับแล้ว เช็คว่าค่าเป้น 0x01 จริง ให้ส่งกลับไปยัง A ว่า 0x02 ไรงี้อ่ะคับ
Quote from: S.poolpong93 on January 12, 2017, 09:29:28 AM
ตัว NRF24l01 เราสามารถset ให้เป็นทั้งรับและส่งในตัวเดียวกันได้ไหมครับ
เช่น ตัว A ส่งค่า 0x01 ไปยัง B เมื่อ B ได้รับแล้ว เช็คว่าค่าเป้น 0x01 จริง ให้ส่งกลับไปยัง A ว่า 0x02 ไรงี้อ่ะคับ
ได้ครับ มันเป็น Transceiver ลองดูดาต้าชีตครับ
https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf
ตัวหน้าตาแบบนี้ใช่ไหมครับ
https://www.9arduino.com/product/97/wireless-nrf24l01-2-4ghz-%E0%B9%81%E0%B8%9A%E0%B8%9A%E0%B8%A1%E0%B8%B5%E0%B9%80%E0%B8%AA%E0%B8%B2