Activity
Добрый день!
Вот сваял проект приемника из NRF24 и аппаратуры имеющей PPM выход.
Ардуинка сразу подрубилась к PPM выходу.
Подцепил библиотеку PinChangeInt.h
Потом посмотрел уровни в Serial.
Подкорректировал пид-ы на сервах.Все крутится,вертится.
Будем испытывать теперь в полевых условиях.
TX
#include <Arduino.h>
#include <PinChangeInt.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>
#define PPM_PIN 6
#define MAX_CHANNELS 12
int EndPointLTx=988; // Нижняя граница pwm канала TX (подключаемого передатчика) в мкрсек.
int EndPointHTx=2016; // Верхняя граница pwm канала TX (подключаемого передатчика) в мкрсек.
int EndPServoL=30; // Нижняя граница серво в градусах.
int EndPServoH=150; // Верхняя граница серво в градусах.
RF24 radio(9, 10); //(CE, CSN)
byte transmit_data[4];
volatile int pwm_value[MAX_CHANNELS] = { 0 };
volatile int prev_time = 0;
volatile int curr_channel = 0;
volatile bool overflow = false;
void rising()
{
int tstamp = micros();
/* overflow should never acutally happen, but who knows… */
if(curr_channel < MAX_CHANNELS) {
pwm_value[curr_channel] = tstamp - prev_time;
if(pwm_value[curr_channel] > 2100) { /* it’s actually a sync */
pwm_value[curr_channel] = 0;
curr_channel = 0;
} else
curr_channel++;
} else
overflow = true;
prev_time = tstamp;
}
void setup()
{
Serial.begin(9600);
pinMode(PPM_PIN, INPUT_PULLUP);
PCintPort::attachInterrupt(PPM_PIN, &rising, RISING);
radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток)
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(12); //размер пакета, в байтах
radio.openWritingPipe( 0xAABBCCDD11LL); //мы - труба 0, открываем канал для передачи данных
radio.setChannel(120); //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_1MBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
radio.powerUp(); //начать работу
radio.stopListening(); //не слушаем радиоэфир, мы передатчик
}
void loop()
{
transmit_data[0] = map(pwm_value[0], EndPointLTx, EndPointHTx, EndPServoL, EndPServoH);
transmit_data[1] = map(pwm_value[1], EndPointLTx, EndPointHTx, EndPServoL, EndPServoH);
transmit_data[2] = map(pwm_value[2], EndPointLTx, EndPointHTx, EndPServoL, EndPServoH);
transmit_data[3] = map(pwm_value[3], EndPointLTx, EndPointHTx, EndPServoL, EndPServoH);
radio.write(&transmit_data, sizeof(transmit_data));
}
RX
#include <Arduino.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>
#include <Servo.h>
byte recieved_data[4]; // массив принятых данных
byte servo1 = 2; // сервопривод 1 канала TX на 2 цифровом
byte servo2 = 3; // сервопривод 2 канала TX на 3 цифровом
byte servo3 = 4; // сервопривод 3 канала TX на 4 цифровом
byte servo4 = 5; // сервопривод 4 канала TX на 5 цифровом
RF24 radio(9, 10);
#define MAX_CHANNELS 12 // задания pwm каналов, не более 12(в настройках используемого передатчика выставить не более, чем в скетче)
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
void setup()
{
Serial.begin(9600);
myservo1.attach(servo1);
myservo2.attach(servo2);
myservo3.attach(servo3);
myservo4.attach(servo4);
radio.begin(); //активировать модуль
radio.setAutoAck(1); //режим подтверждения приёма, 1 вкл 0 выкл
radio.setRetries(0, 15); //(время между попыткой достучаться, число попыток) в ответ на входящий сигнал
radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал
radio.setPayloadSize(12); //размер пакета, в байтах
radio.openReadingPipe(1, 0xAABBCCDD11LL); //
radio.setChannel(120); //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_1MBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS
radio.powerUp();
radio.startListening();
}
void loop()
{
if(radio.available())
{
radio.read( &recieved_data, sizeof(recieved_data)); // чиатем входящий сигнал
myservo1.write(recieved_data[0]); //
myservo2.write(recieved_data[1]); //
myservo3.write(recieved_data[2]); //
myservo4.write(recieved_data[3]); //
}
}
А разве frsky d8 не под внешний модуль djt?
Олег,Станислав,спасибо,буду разбираться!
Коллеги!!!
Еще раз ссылка на данную реализацию,только через usb:
rcopen.com/blogs/255272/23241
Да понятно,что в Таранисе нет поддержки nrf.
Таранис транслирует ppm сигнал в ардуину,потом все это уходит в эфир через nrf,далее принимающая сторона на nrf через ардуино ppm сигнал дешифрует на несколько pwm
Мультимодуля ес-но нет!
Почему негативный смысл?В чем проблема подать управляющий ppm с Тараньки на ардуинку и транслировать его через nrf.Далее принимающая сторона раскладывает ppm на pwm для серв!?Есть же готовое решение в инете на данной сборке только для usb(беспроводной симулятор на компе)
Двухканальные приемники на бангуде за 16 долларов для самолета?
Может я плохо искал,но frsky-приемника за 10 зеленых я не нашел.
Самое дешевое,что есть-это RXF801 на али и бангуде от 1000 руб и то под вопросом.
Конечно можно и аппу взять бу за «бесплатно» типа fly,но если есть подобные готовые решения на примере беспроводного симулятора на nrf и usb,то может кто поделится подобным.!?
Согласен,что есть много реализованных проектов с самодельными TX, на nrf-ке,но если уж есть на руках Таранька,а ребенку не хочется давать управлять пенолетом с приемником на r9slim+(дороговатое удовольствие с учетом того ,что пару квадриков уже улетело в небытиё),а сей девайс будет не особо жалко,как «расходный материал».
Добрый день!
Может кто поможет с реализацией проекта создания приемника для Тараньки на модуле:
(nrf24l01 или nrf24l01-pa-nla+Arduino(Nano).
С учетом перерытой информации ,как я понимаю в Тараньку надо воткнуть связку (nrf24l01 или nrf24l01-pa-nla+Arduino(Nano))через PPM ,как внешний передающий модуль.
Нужен скетч для прошивки ардуино для вывода на принимающей стороне: (nrf24l01 или nrf24l01-pa-nla+Arduino(Nano),четырех-пяти PWM каналов.
Приемник ес-но будет использоваться без контроллера.
P.S.
Возможна ли реализация на данной прошивке минимальная телеметрия по питанию и уровню сигнала?
Заранее спасибо.
Чувствую,что придется прошивать APM по S.Bus.
Если будет еще информация по PPM,то буду благодарен.
Надеюсь,что вся дополнительная инфрмация будет познавательна для всех.
P.S.
Не ищу простых решений(Типа:поставь контроллер с s.bus и все будет хорошо).Есть matec 405 ,но пока хочу досконально разобраться про эту связку.
Еще раз спасибо за новые вводные.
Спасибо Александр.Почитаю.
Так у меня в Таранисе и стоит модуль дальнобойки R9M
Ну тогда читая мануал по R9mm:
www.frsky-rc.com/wp-content/…/R9 MM-manual.pdf
Добрый день!
Прошу помощи в подключении R9mm к APM 2.8.
Есть передатчик Taranis QX7 прошитый (OpenTX 2.2.2) + R9mm прошитый (последняя прошивка с Frsky).
Согласно мануалу R9mm:
www.frsky-rc.com/wp-content/uploads/Downloads…
забиндил приемник в режиме (R9M).Зеленый светодиод на приемнике горит,RSSI на передатчик выводит.Подключая R9mm к APM по CH1,2,3,4 (как я понимаю в режиме PWM),в Mision Planer калибровка стиков 4-х каналов работает.
Вопрос!!!
1.Как подключить этот приемник в режиме PPM,для получения 8-ми каналов PPM?
2.Какой вывод R9mm,является pin-ом PPM?
Заранее благодарен за помощь.
P.S.
Прошу не пинать,если такая инфа есть,но перелопатив море форумов,так ответа не нашел.
Так же пока не хочу перешивать энкодер APM в режим S.BUS, если есть пути решения по PPM.