Нестабильная работа при питании от Powerbank

Poplan
Offline
Зарегистрирован: 18.03.2019

Доброго времени суток!
В проекте имеется передатчик и приёмник. Связь между ними осуществляется по радиоканалу с помощью модулей nRF24L01. К передатчику подключены два тублера (имитация нормально-замкнутых контактов реле). Передатчик контролирует состояние положения тумлера (замкнута цепь или разомкнута). При размыкании цепи передатчик отправляет посылку на приёмник.
Когда цепь питается от компьютера через USB, посылки приходят мгновенно. Когда питание осуществляется от Powerbank, посылки приходят через раз и с большим запозданием. 
Подскажите пожалуйста в чем дело и как решить эту проблему? 
 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. Кто питается от powerbank? Передатчик или приёмник?

2. Что за передатчик, и что за приёмник?

3. Схема включения?

4. Скетч?

А то у меня тут кот, когда один корм ест, в лоток ходит одним цветом, а когда другой - другим. Не подскажете?

b707
Offline
Зарегистрирован: 26.05.2017

Poplan пишет:

Когда цепь питается от компьютера через USB, посылки приходят мгновенно. Когда питание осуществляется от Powerbank, посылки приходят через раз и с большим запозданием.
 

Повербанк как подключаете - через USB или еще как?

Poplan
Offline
Зарегистрирован: 18.03.2019

1. От Powerbank питается передатчик.

2. Передатчик имеется в виду - Arduino UNO + nRF24L01. Приёмник - Arduino NANO + nRF24L01. Приёмник подключен к компьютеру и наличие посылок отслеживается через монитор порта.

3. 

4.

01#include <SPI.h>                                               // Подключаем библиотеку для работы с шиной SPI
02#include <nRF24L01.h>                                          // Подключаем файл настроек из библиотеки RF24
03#include <RF24.h>                                              // Подключаем библиотеку для работы с nRF24L01+
04RF24           radio(9, 10);                                   // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
05int            data[2];                                        // Создаём массив для передачи данных (так как мы будем передавать только одно двухбайтное число, то достаточно одного элемента массива типа int)
06                                                               // Для данного примера, можно использовать не массив data из одного элемента, а переменную data типа int
07int rele1 = 6;
08int rele2 = 8;
09 
10                                                               
11void setup(){
12    radio.begin();                                             // Инициируем работу nRF24L01+
13    radio.setChannel(5);                                       // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
14    radio.setDataRate     (RF24_1MBPS);                        // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
15    radio.setPALevel      (RF24_PA_HIGH);                      // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
16    radio.openWritingPipe (0xAABBCCDD11LL);                    // Открываем трубу с идентификатором 0xAABBCCDD11 для передачи данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора)
17 
18pinMode(rele1, INPUT);
19pinMode(rele2, INPUT);
20 
21}
22 
23void loop(){
24    if (digitalRead(rele1) == LOW)
25 {
26  data[0] = 1, radio.write(&data,  sizeof(data));                           
27 }
28 else if (digitalRead(rele1) == HIGH)
29 {
30  data[0] = 0, radio.write(&data,  sizeof(data));                          
31 }
32  
33 if (digitalRead(rele2) == LOW)
34 {
35  data[1] = 1, radio.write(&data,  sizeof(data));                          
36 }      
37  else if (digitalRead(rele2) == HIGH)
38 {
39  data[1] = 0, radio.write(&data,  sizeof(data));                           
40 }
41                                                               
42}

 

Poplan
Offline
Зарегистрирован: 18.03.2019

Через USB

sadman41
Offline
Зарегистрирован: 19.10.2016

Сразу вижу, что кнопки в воздухе болтаются. Посмотрите правильное подключение: https://www.arduino.cc/en/tutorial/button или почитайте про INPUT_PULLUP.

b707
Offline
Зарегистрирован: 26.05.2017

Poplan пишет:

Через USB

то есть от USb компа все работает, а от повербанка - нет? - скорее всего повербанк дохлый или разряженный в ноль.

Подлючите Повербанк и померяйте тестором напряжение между контактами 5v и GND на ардуине.

Poplan
Offline
Зарегистрирован: 18.03.2019

b707 пишет:

Poplan пишет:

Через USB

то есть от USb компа все работает, а от повербанка - нет? - скорее всего повербанк дохлый или разряженный в ноль.

Подлючите Повербанк и померяйте тестором напряжение между контактами 5v и GND на ардуине.

При подключенном Powerbank, питание между контактами 5V и GND - 4.99V. При включении тумблеров напряжение также остается неизменным.
 

b707
Offline
Зарегистрирован: 26.05.2017

Poplan пишет:

При подключенном Powerbank, питание между контактами 5V и GND - 4.99V. При включении тумблеров напряжение также остается неизменным.
 

в яем тогда выражается нестабильная работа?

Poplan
Offline
Зарегистрирован: 18.03.2019

b707 пишет:

в яем тогда выражается нестабильная работа?

Когда питание от компьютера, при открытом мониторе порта приёника, посылки приходят мгновенно при переключении тумблеров.
Когда питание от Powerbank, посылки приходят либо с запозданием в 20-30 секунд, либо сразу. 
Суть в том, чтобы посылки приходили сразу, даже при кратковременном переключении тумблера. При питании от POwerbank этого не наблюдается. Если тумблер включить и тут же выключить (или даже через секунд 5) посылка вряд ли придет.

b707
Offline
Зарегистрирован: 26.05.2017

прислушайтесь к совету #5 - при такой схеме, как у вас, тумблеры будут срабатывать случайным образом. Вполне возможно, что внешне это будет выглядеть именно как у вас - при одном питаниии все ОК, при другом - глюки.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

а если так

01#include <SPI.h>                                               // Подключаем библиотеку для работы с шиной SPI
02#include <nRF24L01.h>                                          // Подключаем файл настроек из библиотеки RF24
03#include <RF24.h>                                              // Подключаем библиотеку для работы с nRF24L01+
04RF24           radio(9, 10);                                   // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN)
05int            data[2];                                        // Создаём массив для передачи данных (так как мы будем передавать только одно двухбайтное число, то достаточно одного элемента массива типа int)
06// Для данного примера, можно использовать не массив data из одного элемента, а переменную data типа int
07int rele1 = 6;
08int rele2 = 8;
09 
10void setup() {
11  radio.begin();                                             // Инициируем работу nRF24L01+
12  radio.setChannel(5);                                       // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
13  radio.setDataRate     (RF24_1MBPS);                        // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
14  radio.setPALevel      (RF24_PA_HIGH);                      // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
15  radio.openWritingPipe (0xAABBCCDD11LL);                    // Открываем трубу с идентификатором 0xAABBCCDD11 для передачи данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора)
16 
17  pinMode(rele1, INPUT_PULLUP);
18  pinMode(rele2, INPUT_PULLUP);
19}
20 
21void loop() {
22  data[0] = digitalRead(rele1);
23  data[1] = digitalRead(rele2);
24  radio.write(&data,  sizeof(data));
25}

 

strarbit
Offline
Зарегистрирован: 12.06.2016

the scheme can't function from the TS. sir, xDriver +10500001)

Poplan
Offline
Зарегистрирован: 18.03.2019

sadman41 пишет:

Сразу вижу, что кнопки в воздухе болтаются. Посмотрите правильное подключение: https://www.arduino.cc/en/tutorial/button или почитайте про INPUT_PULLUP.

b707 пишет:

прислушайтесь к совету #5 - при такой схеме, как у вас, тумблеры будут срабатывать случайным образом. Вполне возможно, что внешне это будет выглядеть именно как у вас - при одном питаниии все ОК, при другом - глюки.

поставил резисторы по 10кОМ, все стабильно заработало. Спасибо большое!

 

 

Poplan
Offline
Зарегистрирован: 18.03.2019

xDriver пишет:

а если так

 

Спасибо! Позже попробую

bwn
Offline
Зарегистрирован: 25.08.2014

strarbit пишет:

the scheme can't function from the TS. sir, xDriver +10500001)

Роза, Вы, когда на православном писали, перевод лучше был.))))

strarbit
Offline
Зарегистрирован: 12.06.2016

Dear sir, bwn have a nice day!

i'm going to try. i'm sorry/\

 

bwn
Offline
Зарегистрирован: 25.08.2014

Та ладно, шучу я.))))