А самое интересное- что ни где и не кто не показал работу в скетче обмена NRF24L01+ между собой не команд ни информации именно между 2х блоков-(обмена). Я не прав? Только прием и передачу.
А самое интересное- что ни где и не кто не показал работу в скетче обмена NRF24L01+ между собой не команд ни информации именно между 2х блоков-(обмена).
Что вы называете "обменом" ? Передающий выплюнул пакет в эфир. Принимающий его принял и выслал обратно подтверждение. Это подтверждение увидел передающий и отрапортовал в статусе, что передача завершена успешно. Вот и весь обмен. Чего тут нужно показывать? Так будут работать любые исправные модули в режиме "с подтверждением". Еще есть режим, когда к подтерждению подцепляется дополнительный блок данных. Так можно организовать почти что полудуплекс.
Цитата:
Кто- запускал трансиверы на NRF24L01+?
Нет, блин. Их столько лет уже выпускают, но никто так и не смог запустить ни один. Вы о чем вообще спрашиваете?
smesharik,ваши примеры должно быть рабочие,только вот данные летят как с пулемета,такой подход нигде в проекте вы не внедрите,порпробуйте,например,передавать данные раз в секунду...у вас там в передатчике даже закоментированно delay(1000); раскоментируйте..ну как,работает?)))
2pastry777, это бессмысленно, коллега. он/она/оно думать не хочет. проще не реагировать
если человек не хочет инвестировать свое время в изучение вопроса, а чего-то ждет и огрызается, то это, увы, не лечится, нехай дальше ищет тех кто будет за него делать его работу. удачи.
Я некого не хотел, обидел. Эта страница для чего - библиотека или для конкретной помощи. Если вы все знаете, разбираетесь в этом и не хотите помочь, поделится с такими как я. Для чего все это?
2pastry777, это бессмысленно, коллега. он/она/оно думать не хочет. проще не реагировать
если человек не хочет инвестировать свое время в изучение вопроса, а чего-то ждет и огрызается, то это, увы, не лечится, нехай дальше ищет тех кто будет за него делать его работу. удачи.
Так и хочется спросить. Уважаемый Вы на каком авто ездите?
Добрый вечер, сопрягаю две ардуинки с помощью Этого вай фай модуля, когда заливаю скетч в "передатчик" - все хорошо, но когда загружаю на "приемник", выдает ошибку на этой строке: http://joxi.ru/krDlpGps0B5yYr . Пробовал брать скетч из разных источников - всегда одинаковая ошибка. В чем причина? Заранее благодарен)
А там нет наличия связи. Передатчик работает только непосредственно в момент остылки данных. Если приемник принял пакет полностью и в неискаженном виде, то он об этом отрапортует в статусе. Если пакет пришел битый, то можно и совсем не узнать, что он был.
А как... кажеться спать пора (мозги уже не фурычат)
Я передаю шим на двигатель но если связь теряется двигатель продолжает крутить на последнем принятом значении, хотелось бы при потере связи хотя бы заглушить двигатель.
а как это по умному сделать... в голову приходит только раз в секунду запоминать значение и через секунду сравнить с нынешним (но кажеться это тупая идея)
Я передаю шим на двигатель но если связь теряется двигатель продолжает крутить на последнем принятом значении, хотелось бы при потере связи хотя бы заглушить двигатель.
Шлите значение шима периодически. Считайте время, прошедшее с момента прихода последнего. Если времени прошло много, а больше никаких значений не пришло, значит связь потеряна.
#include*<SPI.h>
#include*"nRF24L01.h"
#include*"RF24.h"
#include*"printf.h"
//
//*Hardware*configuration
//
//*Set*up*nRF24L01*radio*on*SPI* bus*plus*pins*9*&*10*
RF24*radio(9,10);
//
//*Topology
//
//*Radio*pipe*addresses*for*the* 2*nodes*to*communicate.
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
//
int msg[1];
//
//*Role*management
//
//*Set*up*role.**This*sketch*use s*the*same*software*for*all*th e*nodes
//*in*this*system.**Doing*so*gre atly*simplifies*testing.**
//
//*The*various*roles*supported*b y*this*sketch
typedef*enum*{*role_ping_out*= *1,*role_pong_back*}*role_e;
//*The*debug-friendly*names*of*those*roles
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
//*The*role*of*the*current*runni ng*sketch
role_e*role*=*role_pong_back;
void setup(void)
{
**
**pinMode(SW1, INPUT);//
**// Print preamble
**//
**Serial.begin(57600);
**printf_begin();
**printf("\n\rRF24/examples/GettingStarted/\n\r");
**printf("ROLE: %s\n\r",role_friendly_name[role]);
**printf("*** PRESS 'T' to begin transmitting to the other node\n\r");
**//
**// Setup and configure rf radio
**//
**radio.begin();
**// optionally, increase the delay between retries & # of retries
**radio.setRetries(15,15);
**// optionally, reduce the payload size. seems to
**// improve reliability
**//radio.setPayloadSize(8);
**//
**// Open pipes to other nodes for communication
**//
**// This simple sketch opens two pipes for these two nodes to communicate
**// back and forth.
**// Open 'our' pipe for writing
**// Open the 'other' pipe for reading, in position #1 (we can have up to 5 pipes open for reading)
**//if ( role == role_ping_out )
**{
****//radio.openWritingPipe(pipes[0]);
****radio.openReadingPipe(1,pi pes[1]);
**}
**//else
**{
****//radio.openWritingPipe(pipes[1]);
****//radio.openReadingPipe(1,pipes[0]);
**}
**//
**// Start listening
**//
**radio.startListening();
**//
**// Dump the configuration of the rf unit for debugging
**//
**radio.printDetails();
}
void loop(void)
{
**//
**// Ping out role. Repeatedly send the current time
**//
**if (role == role_ping_out)
**{
****// First, stop listening so we can talk.
****radio.stopListening();
****// Take the time, and send it. This will block until complete
****unsigned long time = millis();
****printf("Now sending %lu...",time);
****msg[0]*=*111;
****bool*ok*=*radio.write(msg, 1);
****
****if (ok)
******printf("ok...");
****else
******printf("failed.\n\r");
****// Now, continue listening
****radio.startListening();
****// Wait here until we get a response, or timeout (250ms)
****unsigned long started_waiting_at = millis();
****bool*timeout*=*false;
****while ( ! radio.available() && ! timeout )
******if (millis() - started_waiting_at > 200 )
********timeout*=*true;
****// Describe the results
****if ( timeout )
****{
******printf("Failed, response timed out.\n\r");
****}
****else
****{
******// Grab the response, compare, and send to debugging spew
******unsigned long got_time;
******radio.read( &got_time, sizeof(unsigned long) );
******// Spew it
******printf("Got response %lu, round-trip delay: %lu\n\r",got_time,millis()-got_time);
****}
****// Try again 1s later
****delay(1000);
**}
**//
**// Pong back role. Receive each packet, dump it out, and send it back
**//
**if ( role == role_pong_back )
**{
****// if there is data ready
****if ( radio.available() )
****{
******// Dump the payloads until we've gotten everything
******unsigned long got_time;
******bool*done*=*false;
******while (!done)
******{
********// Fetch the payload, and see if this was the last one.
********done*=*radio.read( &got_time, sizeof(unsigned long) );
********// Spew it
********printf("Got payload %lu...",got_time);
// Delay just a little bit to let the other unit
// make the transition to receiver
delay(20);
******}
******// First, stop listening so we can talk
******radio.stopListening();
******// Send the final one back.
******radio.write( &got_time, sizeof(unsigned long) );
******printf("Sent response.\n\r");
******// Now, resume listening so we catch the next packets.
******radio.startListening();
****}
**}
**//
**// Change roles
**//
**if ( Serial.available() )
**{
****char c = toupper(Serial.read());
****if ( c == 'T' && role == role_pong_back )
****{
******printf("*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK\n\r");
******// Become the primary transmitter (ping out)
******role*=*role_ping_out;
******radio.openWritingPipe(pi pes[0]);
******radio.openReadingPipe(1, pipes[1]);
****}
****else if ( c == 'R' && role == role_ping_out )
****{
******printf("*** CHANGING TO RECEIVE ROLE -- PRESS 'T' TO SWITCH BACK\n\r");
******
******// Become the primary receiver (pong back)
******role*=*role_pong_back;
******radio.openWritingPipe(pi pes[1]);
******radio.openReadingPipe(1, pipes[0]);
****}
**}
}
//*vim:cin:ai:sts=2*sw=2*ft=cpp
Столкнулся с такой интересной проблемой, радиомодули Nrf24l01 которые с внешней антенной и усилителем. (С внешней антенной на передатчике, с печатной антенной на приемнике.)
Сильно капризничают по питанию (я уже поставил ams1117 и обвешал их кондерами)
Суть в том что теряется очень много пакетов, причем это зависит от положения антенны, когда антенна согнута под 90 градусов (на штатной антенке имеется поворотная головка) я добился приемлемой передачи за счет навешивания кучу кондеров (керамика на выходе питания + керамика и электролиты на входе и выходе ams1117 + керамика на самих ножках модуля).
Но вот когда антенна прямая много пакетов все равно теряется.
Разъем антенны целый, питание импульсное (дс-дс преобразователь + литиевый акк)
Собственно вопрос - почему такая большая разница прямой и согнутой антенны?
(антенна штатная)
и как победить что бы и при прямой антенне все было норм?
Проблема в DC-DC преобразователе. У них есть один недостаток, который я заметил - чем меньше "падение напряжения" на них, тем хуже по характеристикам на выходе "напруга" (простите за колхозный язык ). Кондёры плохо помогают в этом случае! Для проверки попробуйте запитать dc-dc преобразователь большим напряжением, либо исключите из схемы его.
P.S. Хотя, если запитывали от usb проблем не должно было быть, тогда возможно проблема в самом nrf
Со статическими пакетами наблюдаются изменения в положительную сторону,
кстати еще оказывается макетная плата немного мешала
ams1117 рапаян на макетной плате и на нее же установлен радиомодуль
и часть макетки заходила под радиомодуль (по высверливал неиспользуемые металлизированные отверстия и связь немного улучшилась)
Там в роди еще по стандарту установлена длина пакета 32 байта (библиотека RF24.h)
Если уменьшить пакет меньше пакетов будет теряться? Какой функцией устанавливается длина пакета?
P.S. Сейчас собрал светодиодную портативную шкалу из 10ти светодиодов по которой наглядно видно качество сигнала.
Оказывается множество нюансов накладываются (в том числе и некачественное питание от DC преобразователе) и в финале жуткие потери пакетов.
Зантоки, прошу Вашей помощи... Задача в следующем - сделать машинку на модулях Nrf24l01 с двусторонней связью, камерой(отдельно от ардуины). На машинке будет стоять два датчика - расстояние до объекта, датчик температуры и влажности. На пульте - экранчик на который выводятся данные с датчиков на машинке, джойстик, кнопки включения и выключения лампочек на машине и тд., экран камеры (отдельно от ардуины).
На данный момент получилось следующее - две меги, модули работают исправно. Моторы через мотор шилд на машинке (в скетче для них пока ничего не прописано). На одной меге(пульт) - джойстик, два потенциометра, экран. Джойстиком управляются серва на машинке (поворотная каретка) и моторы, одним из потенциометров крутится серва с камерой (беспроводной) на машинке, вторым потенциометром необходимо запустить процесс приема данных с датчиков на машинке (кнопки все сломались, что нашел запилил).
Проблема в двусторонней передаче... Все, кроме старта передачи данных с датчиков на машинке - работает как часы. Но как только начинаю процесс передачи данных с датчиков - нихрена не работает. Происходит след. образом - при значении потенциометра равном Х посылается запрос на мегу машинки; та его принимает, закрывает прием и открывает трубу на передачу. Мега пульта соответственно после отправки запроса данных переключается в режим приема.
Прошу помочь в решении этой задачи.. Пробовал уже и массивами трубы открывать разные, и открывать оба канала сразу в setup-е и переключаться в void-ах - ничего не помогает =(
Скетчи ниже-
Мега пульт
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> // https://github.com/maniacbug/RF24
#include <dht11.h>
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
dht11 sensor;
RF24 radio(8, 53); // CE, CSN
int Button = A6;
int buttonState = 0;
int msg[4];
int data[3];
int potpin_1 = A5;
int val_1;
int potpin_2 = A4;
int val_2;
int analogPin = 0;
long int x;
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void setup(){
Serial.begin(9600);
pinMode(potpin_1,INPUT);
pinMode(Button, INPUT);
pinMode(potpin_2, INPUT);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
radio.setDataRate(RF24_1MBPS);
radio.setPALevel(RF24_PA_HIGH);
radio.startListening();
radio.openReadingPipe(1,pipe);
delay(1000);
}
void loop()
{
x = analogRead(analogPin) / 5;
buttonState = analogRead(Button);
buttonState = map(buttonState, 0, 1023, 0, 10);
//движение//
val_2 = analogRead(potpin_2);
val_2 = map(val_2, 0, 1023, 128, 250);
val_1 = analogRead(potpin_1);
val_1 = map(val_1, 0, 1023, 0, 127);
msg[0] = val_1;
radio.stopListening();
radio.openWritingPipe(pipe);
radio.write(msg, sizeof(msg));
msg[0] = val_2;
radio.write(msg, sizeof(msg));
radio.startListening();
//поворот камеры//
if (x>1){
msg[1] = x;
radio.stopListening();
radio.openWritingPipe(pipe);
radio.write(msg, sizeof(msg));
Serial.println("Cam rotate");
Serial.println(msg[1]);
radio.startListening();
}
//передача данных по дальности до объекта//
if (buttonState == 5 ){
msg[2]=999;
radio.stopListening();
radio.write(msg, sizeof(msg));
radio.startListening();
getSignal();
}
else{
msg[2]=500;
radio.stopListening();
radio.write(msg, sizeof(msg));
radio.startListening();
}
}
void getSignal()
{
if (radio.available()) {
radio.stopListening();
bool done = false;
while (!done){
done = radio.read(msg, sizeof(msg));
Serial.println("Signal got");
Serial.println(msg[3]);
radio.startListening();
}
}
}
Мега машинка
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h> // https://github.com/maniacbug/RF24
#include <Servo.h>
#include <AFMotor.h>
#include "Ultrasonic.h"
#define Trig 4
#define Echo 5
Servo servo1;
Servo servo2;
const uint64_t pipe = 0xF0F1F2F3F4LL; // индитификатор передачи, "труба"
RF24 radio(8, 53); // CE, CSN
int msg[4];
int data[2];
int pos;
int posit;
AF_DCMotor motor1(1, 64);
Ultrasonic ultrasonic(4, 5);
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void setup(){
Serial.begin(9600);
servo1.attach(10);
servo2.attach(9);
Serial.println("Robot active");
motor1.setSpeed(255);
motor1.run(RELEASE);
radio.begin();
delay(2);
radio.setChannel(9); // канал (0-127)
// скорость, RF24_250KBPS, RF24_1MBPS или RF24_2MBPS
// RF24_250KBPS на nRF24L01 (без +) неработает.
// меньше скорость, выше чувствительность приемника.
radio.setDataRate(RF24_1MBPS);
// мощьность передатчика RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM,
radio.setPALevel(RF24_PA_HIGH);
radio.startListening();
radio.openReadingPipe(1,pipe); // открываем первую трубу с индитификатором "pipe"
// включаем приемник, начинаем слушать трубу
// radio.stopListening(); // останавливает приём (нужно перед началом передачи)
Serial.println("Chanel active");
}
void loop()
{
if (radio.available()){
bool done = false;
while (!done){
done = radio.read(msg, sizeof(msg));
if (msg[0] <127 && msg[0] >-1){
radio.stopListening();
posit = msg[0];
pos = map(posit, 0, 127, 0, 90);
servo1.write(pos);
radio.startListening();
}
if (msg[0] >=128 && msg[0] <=181 ){
radio.stopListening();
backward();
radio.startListening();
}
if (msg[0] >=201 && msg[0] <=255){
radio.stopListening();
forward();
radio.startListening();
}
}
//поворот камеры//
if (msg[1]>20){
radio.stopListening();
Serial.println("Cam rotating");
Serial.println(msg[1]);
servo2.write(msg[1]);
radio.startListening();
}
//передача данных по дальности до объекта//
if (msg[2]==999) {
radio.stopListening();
Serial.println("Got request");
do {sendData();} while (msg[2]==500);
radio.startListening();
}
}
}
void sendData(){
radio.openWritingPipe(pipe);
delay(500);
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
msg[3] = distance_sm;
radio.write(msg, sizeof(msg));
delay(100);
Serial.println("Distance send is - ");
Serial.println(msg[3]);
}
void forward()
{
Serial.println("forward");
}
void backward()
{
Serial.println("backward");
}
Собственно вопрос - почему такая большая разница прямой и согнутой антенны?
Потому, что вы меняете поляризацию и диаграмму направленности антенны. И то и другое самым прямым образом влияет на качество связи. Поляризация антенн на передатчике и и приемники должны совпадать, а так же приемник должен находится там, куда направлена максимальная мощность, излучаемая антенной передатчика.
Великие умы, спроектировавшие nRF2401. предусмотрели особый режим подтверждения. Так как радиоприемник после приема должен отправить пакет назад, чтобы подтвердить получение данных (если вы не отключили эту возможность), почему бы не записать что-нибудь в этот пакет? Если определить одиночный пакет для возврата, он будет отправлен и и декодирован обычным образом.
Один из вариантов применения этой схемы - удаленный датчик. Вместо того, чтобы писать код для отправки назад значения при каждом запросе на него, можно просто сохранить текущее значение датчика в пакете АСК, и оно будет возвращено автоматически - и это освобождает вас от необходимости выключать режим прослушивания, чтобы отправить ответ. Вы просто записываете данные в пакет таким образом
radio.writeAckPayload( 1, &data, sizeof(data));
Впрочем, в определенный момент нужно очистить буфер FIFO, считав из него принятые пакеты, иначе он переполнится и перестанет выдавать подтверждения для принимаемых данных.
При прямой антенне большая задержка,
ситуация такая - включаю все ок, проходит определенное время потери пакетов начинают возрастать,
подношу руку к антенне задержка пропадает, только убираю руку - бешеная задержка.
Питание от юсб компа, установка статичных пакетов не как не влияет.
Причем такая ситуация не всегда - бывает по несколько часов все ок.
И при согнутой антенне такого не наблюдаются, модуль рабочий - стоял в другом устройстве и работал нормально, может какие наводки на сигнальные провода? (они сантиметров 10)
ситуация такая - включаю все ок, проходит определенное время потери пакетов начинают возрастать,
подношу руку к антенне задержка пропадает, только убираю руку - бешеная задержка.
И при согнутой антенне такого не наблюдаются, модуль рабочий - стоял в другом устройстве и работал нормально, может какие наводки на сигнальные провода? (они сантиметров 10)
как вариант при прямой антенне происходит перегрузка входных каскадов приемника сильным сигналом передатчика, т.е. при изменении полярности антенны (или дефект антенны) или припятствии(рука) происходит ослабление сигнала и тем самым улучшение приема
я так понял что у вас модель с усилителем мощности еще и внешней антенной?!
попробуйте уменьшить мощность передатчика, хотя тут цифра такого не доложно быть
А самое интересное- что ни где и не кто не показал работу в скетче обмена NRF24L01+ между собой не команд ни информации именно между 2х блоков-(обмена). Я не прав? Только прием и передачу.
Кто- запускал трансиверы на NRF24L01+?
да сколько можно одно и тоже в разных темах. тут вроде не было
Что вы называете "обменом" ? Передающий выплюнул пакет в эфир. Принимающий его принял и выслал обратно подтверждение. Это подтверждение увидел передающий и отрапортовал в статусе, что передача завершена успешно. Вот и весь обмен. Чего тут нужно показывать? Так будут работать любые исправные модули в режиме "с подтверждением". Еще есть режим, когда к подтерждению подцепляется дополнительный блок данных. Так можно организовать почти что полудуплекс.
Нет, блин. Их столько лет уже выпускают, но никто так и не смог запустить ни один. Вы о чем вообще спрашиваете?
smesharik,ваши примеры должно быть рабочие,только вот данные летят как с пулемета,такой подход нигде в проекте вы не внедрите,порпробуйте,например,передавать данные раз в секунду...у вас там в передатчике даже закоментированно delay(1000); раскоментируйте..ну как,работает?)))
этот пример пойдет еще для проверки модулей,но понять работу на нем человеку не получится..
я недавно тоже пример в другой теме выкладывал,может кому поможет...как раз для tika
http://arduino.ru/forum/programmirovanie/ne-mogu-zastavit-nrf24l01-rabotat#comment-171858
https://www.mysensors.org я просто оставлю это тут.
все сделано на nrf24 и работает.
сайт,конечно,красивый..но что именно ты хотел нам на нем показать?
человек просил реальные примеры - там они есть.
Да нет там примерев. Там отдельно приёмник отдельно передатчики только.
чё серьезно?!
https://www.mysensors.org/build/serial_gateway - приемник / передатчик (должен быть 1)
https://www.mysensors.org/build/light - приемник / передатчик (может быть много)
причем сенсоры исполнители могут общаться между собой "aka mesh-сеть"
Вы бы хоть видео посмотрели ...
Я вас такими нарезками завалю- Вы пробовали запустить NRF24L01+ как трансивер (прием- передачик)? Вам удалось?Да их может быть много но где - пример .
А в качесте примера - вот это пример -а не мультяжки. И попродуйте решить мелоч в #639
у меня дома 10 сенсоров УЖЕ работают с год, недавно сделал чтоб с сигнализации снимать данные через mysensor. Так что да, это работает.
http://arduino.ru/forum/proekty/umnyi-dom-s-tsentralnym-kontrollerom-ot-...
Спасибо. Вот конкретика, а не есть -да у меня работает. Мы не в метро едем - а просим помощи или подсказок.
кажется немного выше я вам уже давал конкретно свои рабочие примеры
2pastry777, это бессмысленно, коллега. он/она/оно думать не хочет. проще не реагировать
если человек не хочет инвестировать свое время в изучение вопроса, а чего-то ждет и огрызается, то это, увы, не лечится, нехай дальше ищет тех кто будет за него делать его работу. удачи.
Я некого не хотел, обидел. Эта страница для чего - библиотека или для конкретной помощи. Если вы все знаете, разбираетесь в этом и не хотите помочь, поделится с такими как я. Для чего все это?
Спасибо кто откликнулся о крике, о помощи.
2pastry777, это бессмысленно, коллега. он/она/оно думать не хочет. проще не реагировать
если человек не хочет инвестировать свое время в изучение вопроса, а чего-то ждет и огрызается, то это, увы, не лечится, нехай дальше ищет тех кто будет за него делать его работу. удачи.
Так и хочется спросить. Уважаемый Вы на каком авто ездите?
Так и не удалось завести модули. Пробовал рекомендованные конденсаторы и примеры. Безуспешно
Просьба глянуть статусы девайсов. Вот в этом сообщении приводил:
http://arduino.ru/forum/programmirovanie/nrf24l01?page=12#comment-171586
Может кто сразу скажет в чем проблема.
Статусы вполне рабочие выдает у вас
модули получается разные у вас что ли? Один с + второй без +
http://forum.amperka.ru/threads/nrf24l01-побеждаем-модуль.3205/
тут можите порыться
Вроде они совместимы между собой. Или ошибаюсь?
4 штуки есть. Пробовал разные комбинации.
Так и не удалось заставить работать :(
Есть вероятность, что все 4 имеющихся модуля битые. Жду новую партию.
Попутно вопрос. Какие преимущества у nrf24l01 перед rf433?
То, что nrf - приемник/передатчик в одном флаконе, понятно. Что еще?
rf433 завелись с полоборота. С самодельной антенной пробивают три стены в квартире. Добьюсь ли таколь дальнобойности с NRF?
Как показывает практика модули крайне недальнобойные. Лучше брать версию с антенной
Добрый вечер, сопрягаю две ардуинки с помощью Этого вай фай модуля, когда заливаю скетч в "передатчик" - все хорошо, но когда загружаю на "приемник", выдает ошибку на этой строке: http://joxi.ru/krDlpGps0B5yYr . Пробовал брать скетч из разных источников - всегда одинаковая ошибка. В чем причина? Заранее благодарен)
Кто-то пробовал подключать две nrf24l01+ к одной ардуине? Как правильно подключить?
вы не внимательно используете примеры....
done = radio.read(&joystick, sizeof(joystick);
Всем здрасте, я тут потихоньку разбираюсь с этими радиомодулями (да и честно говоря программирование только осваиваю)
Не могу понять как идентифицировать наличие связи?
То есть как корректно сказать "при потере связи выполнить ..."
а то получаеться что при потере связи залипает последнее принятое значение.
А там нет наличия связи. Передатчик работает только непосредственно в момент остылки данных. Если приемник принял пакет полностью и в неискаженном виде, то он об этом отрапортует в статусе. Если пакет пришел битый, то можно и совсем не узнать, что он был.
А там нет наличия связи.
А как... кажеться спать пора (мозги уже не фурычат)
Я передаю шим на двигатель но если связь теряется двигатель продолжает крутить на последнем принятом значении, хотелось бы при потере связи хотя бы заглушить двигатель.
а как это по умному сделать... в голову приходит только раз в секунду запоминать значение и через секунду сравнить с нынешним (но кажеться это тупая идея)
Кто-то пробовал подключать две nrf24l01+ к одной ардуине? Как правильно подключить?
А зачем?
Я передаю шим на двигатель но если связь теряется двигатель продолжает крутить на последнем принятом значении, хотелось бы при потере связи хотя бы заглушить двигатель.
Шлите значение шима периодически. Считайте время, прошедшее с момента прихода последнего. Если времени прошло много, а больше никаких значений не пришло, значит связь потеряна.
Народ кто сможет соеденить в одно целое. Приемник и передатчик на NRF24L01+
зделайте чудо.
Приемник
Может это поможет.
Народец, эта тема еще жива?)
Делали с сыном танк на радиоуправлении.
Для тестирования двусторонней передачи написал такой скетч.
Замечания:
1. У меня идентичные модули и потому частичная инициализация.
2. Пришлось припаять конденсатор 220Мф, а то без него UNO не хотел работать на прием.
3. Две линии перенес на А0 и А1.
Слушать через COM порт
Этот скетч надо залить без изменений на две Ардуинки.
Столкнулся с такой интересной проблемой, радиомодули Nrf24l01 которые с внешней антенной и усилителем. (С внешней антенной на передатчике, с печатной антенной на приемнике.)
Сильно капризничают по питанию (я уже поставил ams1117 и обвешал их кондерами)
Суть в том что теряется очень много пакетов, причем это зависит от положения антенны, когда антенна согнута под 90 градусов (на штатной антенке имеется поворотная головка) я добился приемлемой передачи за счет навешивания кучу кондеров (керамика на выходе питания + керамика и электролиты на входе и выходе ams1117 + керамика на самих ножках модуля).
Но вот когда антенна прямая много пакетов все равно теряется.
Разъем антенны целый, питание импульсное (дс-дс преобразователь + литиевый акк)
Собственно вопрос - почему такая большая разница прямой и согнутой антенны?
(антенна штатная)
и как победить что бы и при прямой антенне все было норм?
Какой именно дс-дс преобразователь стоит?
Какой именно дс-дс преобразователь стоит?
MT3608 выставлен на 5 вольт ровно и от него питается мк и нрфка через ams1117
Но пробовал и от юсб компа, от нескольких повербанков - особых изменений не заметил.
Попробуйте статические пакеты слать, разница есть?
Проблема в DC-DC преобразователе. У них есть один недостаток, который я заметил - чем меньше "падение напряжения" на них, тем хуже по характеристикам на выходе "напруга" (простите за колхозный язык ). Кондёры плохо помогают в этом случае! Для проверки попробуйте запитать dc-dc преобразователь большим напряжением, либо исключите из схемы его.
P.S. Хотя, если запитывали от usb проблем не должно было быть, тогда возможно проблема в самом nrf
Со статическими пакетами наблюдаются изменения в положительную сторону,
кстати еще оказывается макетная плата немного мешала
ams1117 рапаян на макетной плате и на нее же установлен радиомодуль
и часть макетки заходила под радиомодуль (по высверливал неиспользуемые металлизированные отверстия и связь немного улучшилась)
Там в роди еще по стандарту установлена длина пакета 32 байта (библиотека RF24.h)
Если уменьшить пакет меньше пакетов будет теряться? Какой функцией устанавливается длина пакета?
P.S. Сейчас собрал светодиодную портативную шкалу из 10ти светодиодов по которой наглядно видно качество сигнала.
Оказывается множество нюансов накладываются (в том числе и некачественное питание от DC преобразователе) и в финале жуткие потери пакетов.
Доброго времени суток!
Зантоки, прошу Вашей помощи... Задача в следующем - сделать машинку на модулях Nrf24l01 с двусторонней связью, камерой(отдельно от ардуины). На машинке будет стоять два датчика - расстояние до объекта, датчик температуры и влажности. На пульте - экранчик на который выводятся данные с датчиков на машинке, джойстик, кнопки включения и выключения лампочек на машине и тд., экран камеры (отдельно от ардуины).
На данный момент получилось следующее - две меги, модули работают исправно. Моторы через мотор шилд на машинке (в скетче для них пока ничего не прописано). На одной меге(пульт) - джойстик, два потенциометра, экран. Джойстиком управляются серва на машинке (поворотная каретка) и моторы, одним из потенциометров крутится серва с камерой (беспроводной) на машинке, вторым потенциометром необходимо запустить процесс приема данных с датчиков на машинке (кнопки все сломались, что нашел запилил).
Проблема в двусторонней передаче... Все, кроме старта передачи данных с датчиков на машинке - работает как часы. Но как только начинаю процесс передачи данных с датчиков - нихрена не работает. Происходит след. образом - при значении потенциометра равном Х посылается запрос на мегу машинки; та его принимает, закрывает прием и открывает трубу на передачу. Мега пульта соответственно после отправки запроса данных переключается в режим приема.
Прошу помочь в решении этой задачи.. Пробовал уже и массивами трубы открывать разные, и открывать оба канала сразу в setup-е и переключаться в void-ах - ничего не помогает =(
Скетчи ниже-
Мега пульт
Мега машинка
Потому, что вы меняете поляризацию и диаграмму направленности антенны. И то и другое самым прямым образом влияет на качество связи. Поляризация антенн на передатчике и и приемники должны совпадать, а так же приемник должен находится там, куда направлена максимальная мощность, излучаемая антенной передатчика.
Шлите данные из машинки в пакете auto ask
в сетапе чтото типа
// radio.setAutoAck(true);
цитата из комментов к библиотеке
Большое спасибо за информацию!! Попробую этот вариант, отпишусь =)
Блин история повторяется...
При прямой антенне большая задержка,
ситуация такая - включаю все ок, проходит определенное время потери пакетов начинают возрастать,
подношу руку к антенне задержка пропадает, только убираю руку - бешеная задержка.
Питание от юсб компа, установка статичных пакетов не как не влияет.
Причем такая ситуация не всегда - бывает по несколько часов все ок.
И при согнутой антенне такого не наблюдаются, модуль рабочий - стоял в другом устройстве и работал нормально, может какие наводки на сигнальные провода? (они сантиметров 10)
Может и провода, а может антенна такая?
Было такое, но не с nRF, а с экраном: руку подношу - работает, нубираю - перестаёт. Земля в воздухе болталась...
При прямой антенне большая задержка,
ситуация такая - включаю все ок, проходит определенное время потери пакетов начинают возрастать,
подношу руку к антенне задержка пропадает, только убираю руку - бешеная задержка.
И при согнутой антенне такого не наблюдаются, модуль рабочий - стоял в другом устройстве и работал нормально, может какие наводки на сигнальные провода? (они сантиметров 10)
как вариант при прямой антенне происходит перегрузка входных каскадов приемника сильным сигналом передатчика, т.е. при изменении полярности антенны (или дефект антенны) или припятствии(рука) происходит ослабление сигнала и тем самым улучшение приема
я так понял что у вас модель с усилителем мощности еще и внешней антенной?!
попробуйте уменьшить мощность передатчика, хотя тут цифра такого не доложно быть