ARDUINO Машинка на nrf24l01

UnckleM

✩✩✩✩✩✩✩
29 Авг 2019
5
0
А зачем 3-ий мотору и функционал концевиков
нажимаю кнопку мотор выдвигает заслонку для подбросамашины. чтобы он выкрутил на максимум и остановился даже когда кнопка его включения осталась нажата. и так же обратно - убираю заслонку подпрыгивания до максимумас ограничением.
 

UnckleM

✩✩✩✩✩✩✩
29 Авг 2019
5
0
так не нужен угол. надо открыть во время движения резко и так же резко закрывать. это переделка готовой машинки
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Интересно. Можно увидеть как реализован механизм этой заслонки ?

все же смотрел бы на серву с системой рычагов (но это если с нуля делать) или соленойд какой... с обычным движком плохо представляю.
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
@Старик Похабыч, легко бывает и больше. Замерял сам. Нормально можно использовать только с аккумами на 7в и дальше и не сильно жрущими моторами, примерно до 0.5А.

На дешевых DC-130 моторах (как на схемах тут), которые нормально пашут от 1.5-3.0в его исползование крайне неэффективно: эти моторы имеют очень небольшое внутреннее сопротивление, около 1-2ом всего. И, соответственно жрут от 1А и дальше. И вот тут попадаем на 50% потерю в КПД: 2-3 вольта высаживаем на драйвере и 2-3 вольта остается на сам мотор, который сам по себе имеет КПД не выше 40-50%..
абыдна.. :)

Гораздо лучшие результаты с такими же 130-ми моторами, если они рассчитаны на "высокое" напряжение - миниум 6, а лучше 12в. В это разе у них токи пропорционально меньше, и потери на драйвере точно также падают. Но .. 12вольтовые моторы приходится питать уже связкой из 3-х литиев 18650, что утяжеляет тележку в целом.

Проще взять нормальный драйвер. :)

P.S. За три года участия в соревнованиях на трассах "по линии", в т.ч. общероссийского уровня и выжимания из Ардуины всего чего только можно, мы на этих моторах и драйверах съели не одну собаку и не один мотор был перемотан вручную для достижения "пиковых" показателей.. с этим драйвером (L298) - всё просто: это "худшее решение" из всех возможных. :)
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
У меня мотор-редуктор, который называют N-20, на 300 оборотов в минуту, поэтому еще и повышающий редуктор стоит (самопальный с 3-д печати). С ним попроще вроде. Лепил из того что было

Видео
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
@Старик Похабыч, ф
P.S. За три года ... съели не одну собаку и не один мотор
Про драйвер понял. А из пром что есть приличное ? И какие моторы использовали ? какие аккумуляторы полегче ?

Сейчас уперся создание передатчика , что бы мне было удобно, а то изначально крутил 2 потенциометра. Потом буду переделывать машину под расширенные функции передатчика, а с ним пока глуховато.. мыслей куча, но сырые
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
@Старик Похабыч, в той же теме (там вообще кладезь наших знаний и опыта, жаль недописано) см. посты №6,7 в них про наши моторчики.

За типоразмер N-20 руки не дошли, ибо фоток не нашел, а достать сейчас проблемка .. в общем кратко о них:
Сами моторчики (без редукторов) есть несколько разные и кроме N20, бывают ещё N30 .. :)
Они точно также есть на разное напряжение 3,6,12 вольт, а ещё дополнительно бывают "для летаков" на 3.7 - 4.2в. Вот эти последние, жрут ток "мама не горюй", под 3А "не моргнув глазом". :)
Типовые редукторы у них это GA-12 (железные, часто прикручены к моторчику, съемные) и они бывают на 10, 50, 100, 300, 600, 1000 - передаточный понижающий к-т. Наиболее типовые 300:1 :)
Моторчики на 6-12в - жрут очень мало, не более (в режиме старта или КЗ) 0.4А, а в рабочем режиме, когда крутится и того меньше .. около 0.1А. Но и мощность на валу невелика. Сам моторчик имеет около 1-2 гр*см, соответственно умножаем на к-т редуктора (300 к примеру) и домножаем на 0.95 (КПД одной передачи) столько раз, сколько зацеплений шестеренок насчитаете глазом, глядя в редуктор.. :)
Собственно всё.

А не, ещё засада: продаваны АЛИ часто(!) под видом одного комплекта, скажем моторчик "6в + редуктор 300:1" могут прислать иной комплект с подобным результатом, но совсем иным раскладом, к примеру "3в + 600:1".
Отличается это просто: измеряем сопротивление моторчика обычным тестером и если оно в районе 15-16 ом, то это штатный 6-и вольтовый моторчик. Соответственно 30-32 ома - 12 вольтовый и т.д. в меньшую сторону. :)

P.S. К сожалению, на одни из соревнований заказывал комплект из 4шт "6в + 300:1", а по факту пришли 3шт "1.5в х 1200:1" и только один правильный. В итоге, на соревнованиях кривой мотор "дал дуба" (отгорели щетки) с самыми печальными последствиями для сына.
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
По приемнику/передатчику - интересно, т.к. сам только поковырялся и забросил, в связи с потерей интереса у сына. У нас лежат такие же шилды, но уже видимо "бесхозно". Хотя .. может когда-нибудь сподоблюсь допилить нашего робота на кубок РТК. :)

Приличных драйверов моторов, впрочем как и самих моторов - увы, не нашел в свое время, почему и делали "самодельщину" .. может сейчас что-то и появилось, не смотрел и давно уже. К сожалению, в номенклатуре моторов есть как-бы "дырка" .. как раз для "самобеглых тележек на Ардуино" (микроконтроллерах): или слишком мелко (N20,30) или откровенно слабо для своего веса (DC-130) или уже "выше классом" для модельных 1:18, 1:10 и т.д. "спорткаров". Последние уже сильно негуманны по ценам и ТТХ (жрут много, что и понятно).
По-хорошему, нужны или качественные DC-130, скажем на NeFeB магнитах или что-то чутка полегче в весе, но больше N20.. не нашел.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Ну вот я смотрел (присматривался) как раз на 130-ые. Но пока не решил ничего.

есть такие недалеко от дома. ссылку давать не буду, скажут реклама :) а я не такой
F130-08450 6.0V:
Тип : коллекторный электродвигатель постоянного тока
Номинальное Напряжение : 6 В
Диапазон Рабочего Напряжения : 2,4...13,8 В
Мощность : 0,15 Вт
КПД : 38,4 %
Холостой Ход : скорость - 2800 об/мин;
ток х.х. - 0,025 А
Под Нагрузкой : скорость - 2007 об/мин;
ток - 0,063 А;
момент - 7,08 гc см
Дополнительно : момент остановки - 25 гc см;
ток остановки - 0,16 А
Диаметр Корпуса : 20,4 мм
Диаметр : вала - 2,0 ммВысота : 15,1 мм
Глубина : 40,3 мм

и такой
F130-13180 5.0V:
Тип : коллекторный электродвигатель постоянного тока
Номинальное Напряжение : 5 В
Диапазон Рабочего Напряжения : 1,0 ...6,0 В
Мощность : 0,61 Вт
КПД : 57,9 %
Холостой Ход : скорость - 6050 об/мин; ток х.х. - 0,055 А
Под Нагрузкой : скорость - 4800 об/мин; ток - 0,211 А; момент - 12,4 гc см
Дополнительно : момент остановки - 60 гc см; ток остановки - 0,81 А
Диаметр Корпуса : 20,4 мм
Диаметр : вала - 2,0 мм
Высота : 15,1 мм
Глубина : 40,3 мм

склоняюсь взять попробовать 2-ой, но редуктор надо будет полностью менять, я на своей делал на оси порядка 1000 оборотов в минуту, т.е. с 300 повышал 3 с хвостиком раза, а тут в другую сторону надо. хотя технически я ставил другой мотор (130 из желтого ардуредуктора) но он ессно не потянул )
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
?!? 130-е моторы из желтого ардуредуктора, да и сам редуктор - это по сути лучшее, что можно найти. У нас их уже 12шт стоят в разных конструкциях... у них сопротивление якоря около 7ом, они конечно похуже самопальных, но свои 45гр*см отдают честно. По крайней мере те, что мы покупали (поищу ссыль, позже, спать пошел). Редуктор там тоже штатный 48:1, что при оборотах ХХ под 12-16 тыс в мин. дает очень приличные скорости тележек. Держат 12.6в (3 банки лития) легко, хотя они и на 6в.

То, что Вы нашли .. мягко говоря "не айс" и далеко. Первый - совсем не айс, а второй получше (5в / 0.81А = 6.17ома - сопротивление якоря, 60г*см - очень неплохо для пром изготовления, наверное это максимум), но будет заметно тяжелее (глубина 40мм против 25-30мм, смотря как измерять). В целом серии F130 слабы и дороговаты для таких ТТХ.
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
Ну да. Это и есть "желтый ардублоковый мотор-редуктор". Смотрите, чтобы было детальное описание режимов ХХ и останавливающий момент. И рабочее напряжение в 6в. :)
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
ну я его "на дурочка" воткнул. 12к оборотов * 3, это 36к оборотов на колесе, 1200 это скорость порядка 6км,ч :D 120кмч не поедет однозначно :D
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
:) У него (самого мотора, без редуктора) скорость ХХ около 12000 об/мин, что на выходе редуктора дает 12000/48 = 250 об/мин. Рабочая скорость под нагрузкой на 25% меньше (это макс КПД) => 250*0,75 = 187,5 об/мин, для колеса (штатное) Д64мм получим максимальную линейную скорость перемещения на оптимальном КПД = (187,5/60) * 0,064 *3.14 = 0,63 м/сек. для большей части покатушек - вполне вменяемая скорость.
На большем напряжении (от базовых 6в) получим пропорционально шустрее.
С Вашим редуктором 1:3 получим ещё довесок .. ну не в три раза, но раза в два - точно. Просто мотор скорее всего уйдет с точки оптимального КПД дальше.
Но это не точно .. зависит от общего веса тележки и общей нагрузки на моторы .. к-т трения, потери в редукторе, момент инерции вращения колеса, способ рулевого управления и т.д. :)

На его выходной вал колесо одевается напрямую, там не нужен доп. редуктор для машинок. :)

P.S. Это мы "для соревнований" выжимали все что можно .. нам требовалось не только "низко летать" по прямой за 5м/сек (и на колесах Д43мм), но ещё разгонять 200граммовую тележку до таких скоростей за считанную секунду .. :) Вот тут - та самая "дыра" в номенклатуре моторов...
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
редуктор убирал, у меня под него места нет. было интересно размеры сохранить в пределах печатного стола принтера, сама машина по максимуму напечатана, из штатного только 168 ардуина, акб, сервы, проваода и винтики. а ,еще подшипники.
Диаметр колеса у меня чуть больше 3см, сейчас уже не помню.
Когда начинал делать этих моторов у меня не было, только N-20 1:300. все рисовалось из расчетов на него
 

leeroy

★✩✩✩✩✩✩
1 Окт 2019
19
16
Здарова всем, хочу поделиться своим проектом - машинка под управлением nrf24l01. Машинка получилась очень резвая и быстрая.
Управляется за счёт двух джойстиков от приставки. Ездит на 2 колёсах и одной шаровой опоре.
Делалась она из того, что было, а именно, из какого-то светорассеивающего оргстекла, пульт из распределительной коробки. Корпус это две пластинки из светорассеивающего оргстекла, которые скреплены между собой шестью спейсерами длиной 2 см. Размеры машинки: прямоугольник 10x15 см, у которого спереди по бокам срезано два треугольника 2.5x5 cм, высота 2 см. Размер распределительной коробки: 4 см высота, диаметр 10 см.


фото
Посмотреть вложение 52 Посмотреть вложение 50 Посмотреть вложение 51

Перейдём к внутренностям:

КОМПОНЕНТЫ ПУЛЬТА
  • arduino nano
  • nrf24l01 без антенны c адаптером
  • Аккумулятор 610мАч 7.4А (две банки)
  • Джойстики X2
  • Выключатель
Фото внутренностей
Посмотреть вложение 53
КОМПОНЕНТЫ МАШИНКИ
  • arduino nano
  • nrf24l01 с антенной и адаптером
  • Аккумулятор 610мАч 7.4В (две банки)
  • Драйвер моторов двухканальный Pololu на TB6612FNG v2 <1А
  • Мотор-редуктор Gekko MR12-050 turbo X2
  • Колесо Pololu 32x7 X2
  • Выключатель
Фото внутренностей
Посмотреть вложение 54
СХЕМА МАШИНКИ
Посмотреть вложение 90


СХЕМА ПУЛЬТА
Посмотреть вложение 91
Принцип работы кода. Скорости вычисляются так: у нас есть 4 значения от 0 до 1023, измеряющихся в реальном времени (я решил использовать только два и разбил их на две части каждую, в итоге получили 4). Теперь преобразовываем их так, чтобы при сгибании 1-го джойстика из центра до максимума вперёд получали значения от 0 да 255, и при сгибании из центра назад было бы тоже самое. Со 2-м джойстиком, тоже из центра влево от 0 до 255 и в право от 0 да 255. В первой версии кода мы просто складывали эти скорости, то есть третье с четвёртым прибавляем к первым двум, и скорость движения вперёд просто пишем через if, чтобы можно было стоять . Это лишало нас способности поворачивать при движении вперёд на максимальной скорости. В version 2 (отдельное спасибо Nashatirko за помощь в написании кода) c джойстика, отвечающего за поворот ось Y, мы снимаем коэффициент скорости колеса от 0 да 100, что более разумно. И вот так высчитываем скорость одного колеса: spr = x1p * y2r / 100. Скачать скетчи можно по ссылке.
КОД ПУЛЬТА
C++:
/*   Данный скетч модернизация скетча AlexGyver

*    исходник тут https://github.com/AlexGyver/nRF24L01

*/



#include <SPI.h>          // библиотека для работы с шиной SPI

#include "nRF24L01.h"     // библиотека радиомодуля

#include "RF24.h"         // ещё библиотека радиомодуля



RF24 radio(9, 10);





byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб

byte transmit_data[4];





void setup() {

  Serial.begin(9600); //открываем порт для связи с ПК



  radio.begin(); //активировать модуль

  radio.setAutoAck(0);         //режим подтверждения приёма, 1 вкл 0 выкл

  radio.setRetries(0, 0);    //время между попыткой достучаться, число попыток

  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал

  radio.setPayloadSize(32);     //размер пакета, в байтах



  radio.openWritingPipe(address[0]);   //мы - труба 0, открываем канал для передачи данных

  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)



  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(analogRead(A0), 0, 1023, 0, 255); //считываем и обрезаем показания с джостика 1 оси X

  transmit_data[1] = map(analogRead(A1), 0, 1023, 0, 255); //считываем и обрезаем показания с джостика 1 оси Y

  transmit_data[2] = map(analogRead(A2), 0, 1023, 0, 255); //считываем и обрезаем показания с джостика 2 оси X

  transmit_data[3] = map(analogRead(A3), 0, 1023, 0, 255); //считываем и обрезаем показания с джостика 2 оси Y

  radio.write(&transmit_data, sizeof(transmit_data)); //отправляем получившийся массив
}
КОД МАШИНКИ Version 2
C++:
/*   Данный скетч модернизация скетча AlexGyver
*    исходник тут https://github.com/AlexGyver/nRF24L01
*/

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"

RF24 radio(9,10); // "создать" модуль на пинах 9 и 10 Для Уно
//RF24 radio(9,53); // для Меги

byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"};  //возможные номера труб
byte recieved_data[4];
void setup(){
  Serial.begin(9600); //открываем порт для связи с ПК

  pinMode(4, OUTPUT);

  pinMode(A0, OUTPUT);
  pinMode(A1, OUTPUT);
  pinMode(5, OUTPUT);

  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(6, OUTPUT);


  radio.begin(); //активировать модуль
  radio.setAutoAck(0);         //режим подтверждения приёма, 1 вкл 0 выкл
  radio.setRetries(0,15);     //(время между попыткой достучаться, число попыток)
  radio.enableAckPayload();    //разрешить отсылку данных в ответ на входящий сигнал
  radio.setPayloadSize(32);     //размер пакета, в байтах

  radio.openReadingPipe(1,address[0]);      //хотим слушать трубу 0
  radio.setChannel(0x60);  //выбираем канал (в котором нет шумов!)

  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() {
    byte pipeNo;                
    while( radio.available(&pipeNo)){    // слушаем эфир со всех труб
      radio.read( &recieved_data, sizeof(recieved_data) ); //читаем присланный массив
      digitalWrite(4, HIGH);

      int x1p = constrain(map(recieved_data[1], 128, 255, 0, 255), 0, 255); //обрезаем и переворачиваем значения
      int x1b = constrain(map(recieved_data[1], 128, 0, 0, 255), 0, 255); //обрезаем и переворачиваем значения
      int y2r = constrain(map(recieved_data[2], 122, 255, 100, 1), 0, 100); //обрезаем и переворачиваем значения
      int y2l = constrain(map(recieved_data[2], 122, 0, 100, 1), 0, 100); //обрезаем и переворачиваем значения
 
      int stl = constrain(map(recieved_data[2], 123, 255, 0, 255), 0, 255); //обрезаем и переворачиваем значения
      int str = constrain(map(recieved_data[2], 122, 0, 0, 255), 0, 255); //обрезаем и переворачиваем значения
 
      //Serial.print(x1p); Serial.print(" | "); Serial.print(x1b); Serial.print(" | "); Serial.print(y2r); Serial.print(" | "); Serial.print(y2l); Serial.println();
      int spr = constrain(x1p * y2r / 100, 0, 255); //скорость правого колеса
      int spl = constrain(x1p * y2l / 100, 0, 255); //скорость левого колеса
      int bspr = constrain(x1b * y2r / 100, 0, 255); //скорость правого колеса назад
      int bspl = constrain(x1b * y2l / 100, 0, 255); //скорость левого колеса назад
      Serial.print(stl); Serial.print(" | "); Serial.print(str); Serial.println();
      //Serial.print(recieved_data[2]); Serial.println();
      if (recieved_data[1]>138)
    { digitalWrite(A1, LOW);
      digitalWrite(A0, HIGH);
      analogWrite(5, spr);

      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      analogWrite(6, spl);
    } else if (recieved_data[1]<118)
    { digitalWrite(A1, !LOW);
      digitalWrite(A0, !HIGH);
      analogWrite(5, bspr);

      digitalWrite(7, !LOW);
      digitalWrite(8, !HIGH);
      analogWrite(6, bspl);
    }else if (118<recieved_data[1]<138)
    { digitalWrite(A1, LOW);
      digitalWrite(A0, HIGH);
      analogWrite(5, str);

      digitalWrite(7, LOW);
      digitalWrite(8, HIGH);
      analogWrite(6, stl);
      }
  }
}
Я думаю, нужно усовершенствовать код. И машинке хорошо бы придумать применение, чтоб она не только была как игрушка для детей. К примеру, сверху держатель для бутылки приделать, чтобы возить напитки, не вставая с дивана, но это слишком просто. Предлагайте свои идеи по поводу кода и апгрейда. Кстати скоро выйдет версия с камерой как у Алекса. Всем спасибо за внимание!
Здравствуйте, я собрал по вашей схеме подключение к самодельному танку, напечатанному на 3д принтере. Когда подаю питание на передатчик и приемник, оба мотора сразу вращаются, причем с разными скоростями (разные напряжения на выходах - 10V и 7V, при входном на аккумах 12.2V). При отклонении одного джойстика влево-вправо, танк поворачивает как надо. При отклонении назад - поворачивает налево. При отклонении вперед - ничего не происходит. Манипуляции со вторым джойстиком вообще ни к чему не приводят. Не подскажете, что я мог сделать не так?..
https://yadi.sk/i/FFFzv46F5Zeo6A - видео
 
Изменено:

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
я не автор, он ответит отдельно, но чем управляешь ? стики на потенциометрах (как у автора) в нулевом положении очень просто имеют разные значения, на 10-15 единиц разницы запросто. проверь их центрирование, что дают показания в центре и введи поправки
 

leeroy

★✩✩✩✩✩✩
1 Окт 2019
19
16
@Старик Похабыч, самыми дешевыми стиками с али (ky 023). Меня больше волнует, почему руль работает, а второй джойстик просто не реагирует ни на что, хотя по схеме, вроде, все правильно подключил
 

leeroy

★✩✩✩✩✩✩
1 Окт 2019
19
16
Выяснил, что пульт нормально отправляет значения X и Y c обоих стиков при их отклонении, а вот приемник ловит только значения X1 одного стика и X2 второго стика, а значения Y1 и Y2 не меняются при отклонении соответствующих осей на стиках пульта. Из-за чего такое может быть?
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
@leeroy, а они к передатчику .. подключаются? А считываются в программе? И если оба ответа да, то передаются в приемник? А приемник о них "знает"? :)
 

leeroy

★✩✩✩✩✩✩
1 Окт 2019
19
16
@Arhat109, все ответы - да, на пульте на выходе все 4 координаты транслируются как массив, приемник этот массив принимает, по осям Х он видит изменения при отклонении стиков (0 и 2 элементы массива), а Y (1 и 3 элементы массива) - видит всегда как константу и не реагирует на изменения стиков, при том что в мониторе порта пульта(трансмитера) все 4 координаты отображаются и изменяются как надо...
 

Arhat109

★★★★✩✩✩
9 Июн 2019
473
203
видит всегда как константу
Ну вот я собственно про это. Если константно "видит", то зачем ему "реагировать"? А то, что отображается на пульте - это передатчик. Стало быть копать надо то место в приемнике что принимат массив из 4 чиселок и убеждаться что принимает нормальные значения - те, что переданы, а не константный мусор.