Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 0

Робот на ардуино и машинка на bluetooth своими руками

Введение

Мы собираемся создать FM-радиоприемник в стиле ар-деко. Дизайн этого радио основан на впечатляющем радиоприемнике AWA 1935 года. Можно найти фото этого старого радио в Интернете. Дизайн этого радио очень красивый, так что сделать свой радиоприемник в аналогичном стиле — отличный вызов. Ушел ровно месяц на то, чтобы реализовать такой проект с нуля, но повторить результат теперь каждый сможет буквально за один день.

В уроке используется ЖК-дисплей Nokia 5110 для отображения частоты, которую мы слушаем. Используется поворотный регулятор для изменения частоты и другая ручка для увеличения или уменьшения громкости. На фото выше видно, что на ЖК-дисплее FM-радио Ардуино используется шрифт в стиле ар-деко. Кроме того, если мы прослушиваем одну и ту же радиостанцию ​​более 5 минут, радиостанция автоматически сохранит ее в памяти, поэтому при следующем включении радиостанции она автоматически настроится на частоту, которую мы использовали ранее. Радио также имеет встроенную литиевую батарею и соответствующее зарядное устройство, поэтому оно может работать от батарей в течение нескольких дней.

Качество звука проекта довольно хорошее. Используется небольшой динамик 3 Вт с усилителем малой мощности. Радио звучит хорошо, а выглядит еще лучше. Давайте теперь посмотрим, какие детали нужны для создания этого проекта.

Скетч для передатчика

В нашем эксперименте мы просто отправим традиционное сообщение «Hello World» от передатчика к приемнику.

Вот скетч, который мы будем использовать для нашего передатчика:

//Include Libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

//create an RF24 object
RF24 radio(9, 8);  // CE, CSN

//address through which two modules communicate.
const byte address = "00001";

void setup()
{
  radio.begin();
  
  //set the address
  radio.openWritingPipe(address);
  
  //Set module as transmitter
  radio.stopListening();
}
void loop()
{
  //Send message to receiver
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  
  delay(1000);
}

Код начинается с подключения  библиотек. Библиотека SPI.h управляет связью SPI, а nRF24L01.h и RF24.h модулем:

//Include Libraries
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

Далее нам нужно создать объект RF24. Объект принимает два номера контактов в качестве параметров, к которым подключены сигналы CE и CSN:

//create an RF24 object
RF24 radio(9, 8);  // CE, CSN

Затем нам нужно создать байтовый массив, который будет представлять адрес канала, через который будут связываться два модуля nRF24L01 +:

//address through which two modules communicate.
const byte address = "00001";

Мы можем изменить значение этого адреса на любую 5-буквенную строку, например «node1». Адрес необходим, если у вас есть несколько модулей в сети. Благодаря адресу вы можете выбрать конкретный модуль, с которым вы хотите общаться, поэтому в нашем случае у нас будет один и тот же адрес как для передатчика, так и для приемника.

Далее в функции setup() нам нужно инициализировать радиообъект, используя radio.begin() и используя radio.openWritingPipe() функцию, мы устанавливаем адрес передатчика:

//set the address
radio.openWritingPipe(address);

Наконец, мы будем использовать radio.stopListening() функцию, которая устанавливает модуль в качестве передатчика:

//Set module as transmitter
radio.stopListening();

В разделе loop () мы создаем массив символов, которым мы назначаем сообщение «Hello World». Используя radio.write() функцию, мы отправим это сообщение приемнику.

Первый аргумент здесь — это сообщение, которое мы хотим отправить. Второй аргумент — это количество байтов, присутствующих в этом сообщении:

const char text[] = "Hello World";
radio.write(&text, sizeof(text));

С помощью этого метода вы можете отправлять до 32 байтов за раз. Потому что это максимальный размер одного пакета, который может обработать nRF24L01 +. Если вам нужно подтверждение, что получатель получил данные, функция radio.write() возвращает bool значение. Если он возвращает TRUE, данные достигли получателя. Если он возвращает FALSE, данные были потеряны.

Инструкция по сборке робота-автомобиля

В этой статье расскажем вам о том, как по шагам собрать универсального робота на колесной или гусеничной платформе.  Управлять им будет микроконтроллер Ардуино нано. Если вам не нравится долго читать, посмотрите в конце статьи на видео, подготовленное нашими партнерами – каналом ArduMast Club.

Пример платформы робота-машины на Ардуино

Предлагаем инструкцию по созданию универсальной платформы, которая потом пригодится для создания самых разных проектов, независимо от выбранного контролера или типа шасси. Вы можете использовать стандартные варианты из Алиэкспресса, как на видео, можете снабдить машину гусеницами и создать вездеход,  можете придумать вообще ни на что не похожий вариант. Главное, чтобы число двигателей не превышало 4 и сами ни не были слишком мощными (тогда придется менять тип управления моторами – другой драйвер двигателя).

Робот на Ардуино

Для реализации проекта нам понадобится:

  • Контроллер Ардуино (в нашем случае, Arduino Nano).
  • Драйвер двигателя L298N.
  • Двигатели с редукторами.
  • Корпус и шасси для крепления колес и оборудования
  • Корпус для аккумуляторов 18650 с выключателем.
  • Коммутационные провода.

Дополнительное оборудование, которое потребуется для создания полноценного проекта:

  • Датчик расстояния и серво-мотор, на который он установлен.
  • Инфракрасные датчики линии.
  • Светодиоды для индикации и “красоты”.
  • Пьезодинамик – пищалка.
  • Bluetooth модуль (если собираетесь управлять машинкой дистанционно).
  • Sensor shield (упрощает коммутацию).
  • Модуль контроля заряда и подзарядки аккумуляторов.
  • Сами аккумуляторы.

Общая схема машинки на Ардуино

Схема электропитания робота автомобиля

Вопрос организации правильного стабильного электропитания является одним из самых важных в любом проекте.В нашей модели применена рекомендованная нами схема питания, основанная на использовании литийионных аккумуляторов формата 18650 и платы защиты их от переразряда и перезаряда.

Давайте разберем самый простой вариант схемы питания электромоторов. Перед началом сборки лучше заранее припаять провода к моторам.

Схема питания и подключения двигателей в ардуино автомобиле

Все достаточно стандартно и вы найдете в интернете десятки подобных примеров. Но в этой схеме есть большой минус – в случае полного разряда аккумуляторы придут в негодность.

Машинка на Ардуино

Для добавления контроллера разряда придется внести следующие изменения в схему:

Схема питания с контролем разряда аккумулятора

Теперь аккумуляторы будут защищены, но здесь нет возможности заряжать их.

Питание робота Ардуино

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

Схема питания с модулем зарядки для ардуино робота машинки

Подключаем двигатели и плату

С питанием платформы мы разобрались, теперь подключим остальные компоненты. Для начала припаиваем провода к моторам, затем обматываем их изолентой, чтобы случайно в дальнейшем не оторвать контакты. Можно сделать так, что в итоге на 2 двигателя будут идти всего два провода вместо 4х. Это немного упростит монтаж и сэкономит место на платформе.

Монтируем драйвер двигателей на платформу так, чтобы его радиатор был спереди

ЭТО ВАЖНО! В противном случае, вам придется переписывать программу для микроконтроллера. Драйвер двигателя для Ардуино робота

Затем размещаем холдер и плату БМС. Не забываем оставлять место спереди для последующего монтажа каких-либо сенсоров. Ардуиио нужно разместить так, чтобы была в дальнейшем возможность подключить его к ПК для прошивки. Это же правило относится и к модулю для зарядки аккумуляторов.

Питание для ардуино и других электронных компонентов мы возьмем от драйвера двигателей.

Подключаем Bluetooth к машинке

Мы собираемся использовать модуль Bluetooth через  SoftwareSerial (библиотеку SoftwareSerial.h), поэтому подключаем модуль блютуз к 3 и 4 цифровым пинам ардуино.  RX к D3,   TX к D4

Схема подключения Bluetooth к ардуино машинкеПодключаем BluetoothСхема подключения драйвера двигателя к роботу

Схема подключения компонентов к Arduino


Датчик расстояния машины

Платформа робота готова! Теперь осталось загрузить прошивку для контроллера Ардуино и программу для смартфона RC CAR. Вы можете посмотреть на нашем сайте обзор Android приложений для работы с Arduino.

Подключение nRF24L01 к Arduino

Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуине. Наиболее популярные библиотеки — RF24 и Mirf.

Я предпочитаю RF24 (так как с ней у меня не возникло проблем). Скачать библиотеку можно здесь:

В этом случае схема подключения следующая (показано на примере Arduino Nano; но для UNO тоже самое)

* Схема подключения *

* Замечания. Возможные проблемы *

1) Большинство проблем происходит из-за шума на источнике 3.3V, что расположен на плате. Решение следующее: нужно припаять кондесаторы на радиомодуль между контактами GND и 3.3V. Я использую электролитический конденсатор емкостью 2.2 мкФ.

2) Пин 8 IRQ обычно не используется, хотя некоторые библиотеки его используют.

3) Рекомендуется запитывать модуль от 3.3 V (как показано на рисунке), хотя от 5V они тоже работают без проблем (поддерживается совместимость по питанию).

Выводы CE и CSN модуля могут подключаться и к другим выводам ардуины. Это указывается в программе при вызове конструктора класса RF24. В нашем случае будем использовать пины D9 и D10.

Машинка на arduino и Bluetooth — аппаратная часть.

Первое что необходимо это шасси
, то есть корпус с колесами и моторчиками, который и будет ездить на радость нам и окружающим. В моем случае был использован корпус от радиоуправляемой игрушки в которой выгорела силовая часть. Перспектива ремонта мне показалась унылой, да и хотелось чего то нового для своих детей. Так и родился этот проект. В корпусе стоят два двигателя которые приводят в движение колеса по бортам машинки, как у танка. Вся электронная начинка отправилась на запчасти.

Для управления электродвигателями нашего будущего творения понадобится Н-мост на микросхеме L298N
Ссылка на Али, я брал у именно этот. Картинка кликабельна.

Н-мост для arduino

Может управлять двумя двигателями в диапазоне напряжений 5 — 35 вольт. Поддерживает ШИМ, то есть можно регулировать обороты двигателей. На плате есть вывод стабилизированного напряжения 5 вольт для питания ардуино.

Схема подключения проста и незатейлива:

Следующей неотъемлемой частью электронной начинки нашего проекта является bluetooth модуль HC-06 .
Самый обычный модуль для ардуино, настолько популярен что в дополнительном описании не нуждается.

HC-06 bluetooth for arduino

Основным элементом и мозгом в моем случае выступает arduino nano
, тут даже фото выкладывать не буду ибо все о ней знают и умеют с ней работать. Кстати подойдет любая плата ардуино, лишь бы в корпус поместилась

Аккумуляторы и провода для пайки в определении спецификации не нуждаются. Выбор аккумуляторов зависит от рабочего напряжения электродвигателей.

Машинка на arduino и Bluetooth — составление скетча.

Повторюсь — никакого копания в коде тут не будет. Мы будем использовать популярную программу FLProg. Скачать ее последнюю версию можно на официальном сайте . Интерфейс проги прост и незатейлив, но имеется огромный функционал и поддержка практически всех популярных модулей. Как ей пользоваться писать не буду так как это потянет на пару статей. Скажу только что я не встречал более удобной и доступной программы для составления скетчей для arduino и ее клонов. Скрин интерфейса:

Интерфейс FLProg

На сайте полно текстовых и видео мануалов, думаю разберетесь.

Мой проект для дистанционно-управляемой машины можно скачать с яндекс-диска через сервис сокращения ссылок.

Машинка на arduino и Bluetooth — интерфейс управления на планшете android.

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

Для устройств под управлением android существует программа HmiKaskada (ссылка на ЯндексДиск) . Изначально она разрабатывалась как альтернатива дорогим промышленным HMI панелям. Но пытливые умы быстро смекнули что управлять она может чем угодно. В нашем случае машинкой. Поддерживает беспроводные интерфейсы Wi-Fi и Bluetooth, кроме того можно девайс подключить напрямую через USB.

Есть платная и бесплатная версии программы. У меня есть обе но я принципиально сделал проект в бесплатной версии что бы показать вам и в очередной раз убедиться в абсолютной работоспособности free версии. Основное отличие free от PRO версий это работа только по блютуз.

На форуме FLProg есть гигантская ветка по вопросу совместимости с КаСкадой, да и разработчик активен и общителен. Скрин панели управления выкладывать не вижу смысла — он есть в видеоролике.

Основная идея проекта — создать недорогую автономную четырехколесную подвижную платформу.

В проекте используется логика на базе Arduino, недорогая радиоуправляемая машина, источник питания 9 вольт. В качестве датчиков обратной связи используется инфракрасный передатчик.

Так как оборудование недорогое, можно расценивать эту статью исключительно как общую инструкцию и первый шаг для дальнейших модификаций вашей автономной четырехколесной платформы.

Распиновка модуля nRF24l01

Распиновка модуля беспроводной связи nRF24l01 ниже:

nRF24L01 — софт и библиотеки

Ниже будет приведен пример софта для передачи и приема данных. Кроме того, есть множество примеров на странице загрузок библиотеки RF24 Library. Как уже не раз упоминалось, для работы передатчика/приемника будем использовать библиотеки, в которых решены многие мелкие задачи, усложняющие наладку работы передатчика с Arduino.

Библиотека TMRh20’s RF24 Library.

После загрузки ZIP архива, на вашем ПК появится архив RF24-master.ZIP. Измените название архива на RF24.ZIP. Внутри архива находится папка с тем же названием RF24-master. Ее тоже переименуйте в RF24.

Для начинающих разбираться в Arduino, есть отличная инструкция по установке библиотек в Arduino IDE.

После установки библиотек, вы можете запускать примеры, включенные в библиотеку.

Исходный код программы

В программе первым делом необходимо инициализировать выходные контакты для подключения двигателей (через драйвер мотора).

Arduino

#define m11 11 // задний двигатель
#define m12 12
#define m21 10 // передний двигатель
#define m22 9

1
2
3
4

#define m11 11    // задний двигатель
#define m12 12
#define m21 10    // передний двигатель
#define m22 9

Затем в функции setup задать направление работы для этих контактов (на вывод данных).

Arduino

void setup()
{
Serial.begin(9600);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
}

1
2
3
4
5
6
7
8

voidsetup()

{

Serial.begin(9600);

pinMode(m11,OUTPUT);

pinMode(m12,OUTPUT);

pinMode(m21,OUTPUT);

pinMode(m22,OUTPUT);

}

После этого мы будем считывать данные из последовательного порта Arduino, получаемые им от последовательного порта Bluetooth модуля, и выполнять соответствующие инструкции.

Arduino

void loop()
{
while(Serial.available())
{
char ch=Serial.read();
str=ch;

if(str==’1′)
{
Serial.println(«Forward»);
forward();
i=0;
}

else if(str==’2′)
{
Serial.println(«Left»);
right();
i=0;
}

else if(str==’3′)
{
Serial.println(«Right»);
left();
i=0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

voidloop()

{

while(Serial.available())

{

charch=Serial.read();

stri++=ch;

if(stri-1==’1′)

{

Serial.println(«Forward»);

forward();

i=;

}

elseif(stri-1==’2′)

{

Serial.println(«Left»);

right();

i=;

}

elseif(stri-1==’3′)

{

Serial.println(«Right»);

left();

i=;

}

Затем мы запрограммируем функции для различных направлений движения машины. Всего будет использоваться пять условий для задания направления движения машины, представленных в следующей таблице:

Далее представлен полный текст программы.

Arduino

#define m11 11 // задний двигатель
#define m12 12
#define m21 10 // передний двигатель
#define m22 9
char str,i;
void forward()
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void backward()
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, HIGH);
}
void left()
{
digitalWrite(m11, HIGH);
digitalWrite(m12, LOW);
delay(100);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void right()
{
digitalWrite(m11, LOW);
digitalWrite(m12, HIGH);
delay(100);
digitalWrite(m21, HIGH);
digitalWrite(m22, LOW);
}
void Stop()
{
digitalWrite(m11, LOW);
digitalWrite(m12, LOW);
digitalWrite(m21, LOW);
digitalWrite(m22, LOW);
}
void setup()
{
Serial.begin(9600);
pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
pinMode(m21, OUTPUT);
pinMode(m22, OUTPUT);
}
void loop()
{
while(Serial.available())
{
char ch=Serial.read();
str=ch;

if(str==’1′)
{
Serial.println(«Forward»);
forward();
i=0;
}
else if(str==’2′)
{
Serial.println(«Left»);
right();
i=0;
}
else if(str==’3′)
{
Serial.println(«Right»);
left();
i=0;
}

else if(str==’4′)
{
Serial.println(«Backward»);
backward();
i=0;
}
else if(str==’5′)
{
Serial.println(«Stop»);
Stop();
i=0;
}
delay(100);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91

#define m11 11    // задний двигатель
#define m12 12
#define m21 10    // передний двигатель
#define m22 9

charstr2,i;

voidforward()

{

digitalWrite(m11,LOW);

digitalWrite(m12,LOW);

digitalWrite(m21,HIGH);

digitalWrite(m22,LOW);

}

voidbackward()

{

digitalWrite(m11,LOW);

digitalWrite(m12,LOW);

digitalWrite(m21,LOW);

digitalWrite(m22,HIGH);

}

voidleft()

{

digitalWrite(m11,HIGH);

digitalWrite(m12,LOW);

delay(100);

digitalWrite(m21,HIGH);

digitalWrite(m22,LOW);

}

voidright()

{

digitalWrite(m11,LOW);

digitalWrite(m12,HIGH);

delay(100);

digitalWrite(m21,HIGH);

digitalWrite(m22,LOW);

}

voidStop()

{

digitalWrite(m11,LOW);

digitalWrite(m12,LOW);

digitalWrite(m21,LOW);

digitalWrite(m22,LOW);

}

voidsetup()

{

Serial.begin(9600);

pinMode(m11,OUTPUT);

pinMode(m12,OUTPUT);

pinMode(m21,OUTPUT);

pinMode(m22,OUTPUT);

}

voidloop()

{

while(Serial.available())

{

charch=Serial.read();

stri++=ch;

if(stri-1==’1′)

{

Serial.println(«Forward»);

forward();

i=;

}

elseif(stri-1==’2′)

{

Serial.println(«Left»);

right();

i=;

}

elseif(stri-1==’3′)

{

Serial.println(«Right»);

left();

i=;

}

elseif(stri-1==’4′)

{

Serial.println(«Backward»);

backward();

i=;

}

elseif(stri-1==’5′)

{

Serial.println(«Stop»);

Stop();

i=;

}

delay(100);

}

}

Обучение Arduino

Не знаете, с чего начать изучение Arduino? Подумайте, что вам ближе — сборка собственных простых моделей и постепенное их усложнение или знакомство с более сложными, но готовыми решениями?

Машинка на arduino и Bluetooth без редактирования кода. Мы будем использовать специализированный бесплатный софт для составления скетча. Кроме того не надо покупать шасси для нашей поделки, подойдет практически любая неисправная радиоуправляемая модель автомобиля или танка.

Предлагаю посмотреть обзорный видеоролик про блютуз-управляемую машинку и ее начинку.

Итак, давайте разберем на живом примере как сделать своими руками дистанционно управляемую по bluetooth c android планшета или смартфона машинку. Статья, как ни странно, рассчитана на начальный уровень знаний. Здесь нет руководства по редактированию кода в Arduino IDE, да и мы использовать его будем только для заливки нашего кода. А составлять алгоритм управления будем в программе под названием FLProg. Программа управления со смартфона — HmiKaskada_free. Но сначала о железе, которое нам понадобится.

Программирование nRF24L01

Для написания скетчей в среде ARDUINO IDE нужно установить 2 библиотеки – RF24 и SerialFlow. Первая нужна для работы с модулем, вторая – для пакетной передачи данных. Ссылки на скачивание библиотек вы найдете в конце статьи.

Пример программы для передатчика. В первую очередь создается объект класса SerialFlow:

SerialFlow rd(9,10);

В этой строке 9 и 10 – это свободные пины с Ардуино, к которым подключаются контакты CN и CSN.

Настройка формата передаваемых пакетов производится в функции setup:

rd.setPacketFormat(2, 1);

Первый аргумент (в данном случае число 2) определяет размер передаваемого числа. Для конкретного случая число находится в диапазоне от 0 до 655535 и занимает 2 байта. Для 0 до 255 будет занят 1 байт. Второй аргумент  – количество чисел.

Далее нужно настроить адреса передатчика и приемника:

rd.begin(0xF0F0F0F0E1LL,0xF0F0F0F0D2LL);

Первым аргументом записывается адрес передатчика, вторым – адрес приемника.

Цикл loop выполняет отправку пакетов.

Пример программы для приемника. При получении данных приемник должен сигнализировать об этом. Данные будут отправляться в монитор порта Arduino IDE.

В коде так же записывается объект SerialFlow и настраиваются необходимые параметры пакета данных. Изменения происходят в строчке

rd.begin(0xF0F0F0F0D2LL,0xF0F0F0F0E1LL);

Теперь первым аргументом должен быть указан адрес приемника, а вторым – передатчика.

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

Помимо библиотек RF24 и SerialFlow существует и другая – библиотека Mirf. Выбор той или иной библиотеки определяется удобством работы.

Операторы для передачи данных между двумя модулями с помощью библиотеки Mirf:

  • payload = PAYLOAD; – задает размеры буфера для приема. На payload установлено ограничение – максимальный размер равен 32 байтам.
  • setRADDR((byte*)’serv1′); – выбор адреса приемника (размер не менее 3 байт и не более 5 байт).
  • setTADDR((byte *)’clie1′); – выбор адреса передатчика (размер не менее 3 байт и не более 5 байт).. Во время передачи пакета данных на первом модуле происходит установка адресата Mirf.setTADDR((byte *)’clie1′), затем пакет отправляется ко второму модулю. После этого на втором модуле устанавливается Mirf.setTADDR((byte *)’serv1′) и возвращается ответ на первый модуль.
  • isSending() – проверка окончания передачи данных.
  • dataReady() – проверка получения входящего пакета.
  • getData((byte *) &data); – чтение полученных пакетов в переменную data.
  • send((byte *) &data); – подача команды на отправку пакета. В библиотеке указывается адрес, в котором находятся переменные. После этого происходит копирование их в память и в итоге пользователь получает доступ к переданным данным через переменные. Способ удобен тем, что можно передавать любой тип данных, в том числе структуры.

Схема сборки машинки на Ардуино

Если у вас есть все необходимые детали (в проекте можно обойтись без светодиодов и резисторов), то далее мы рассмотрим, как сделать машинку из ардуино своими руками. Для начала следует припаять к контактам моторчиков провода и зафиксировать их изолентой, чтобы контакты не оторвались. Провода необходимо соединить с клеммниками M1 и M2 на Motor Shield (полярность потом можно будет поменять).


Схема сборки машинки с Блютуз управлением

Питание на Bluetooth модуль идет от контактов для сервопривода, в проекте серво нам не понадобятся. А на питание идет стабилизированное напряжение 5 Вольт, что нам подходит. К портам TX и RX удобнее будет припаять коннекторы «мама», а к портам «Pin0» и «Pin1» на Motor Shield припаять штырьки (BLS). Таким образом, вы сможете легко отключать Bluetooth модуль от Arduino при необходимости загрузки скетча.

Управление светодиодами идет от порта «Pin2», здесь провод можно припаять напрямую к порту. Если вы делаете несколько машинок с Блютуз, которыми будете управлять одновременно, то рекомендуем сделать перепрошивку модуля HC-05. Делается прошивка модуля очень просто, а затем вы уже не будете путать машинки, так как у каждой будет отображаться свое уникальное имя на Андроиде.

RF контролируемая схема самолета

На фиг.1 показана принципиальная схема стороны передатчика самолета, управляемого РЧ, а на фиг.2 показана принципиальная схема стороны приемника. Цепи построены вокруг Arduino Uno (board1 и board2), пары радиочастотных модулей 433 МГц (TX1 и RX1), модуля ESC (электронного регулятора скорости), трех серводвигателей (M1-M3), двигателя BLDC (M4) и несколько других компонентов.

Сторона передатчика приводится в действие батареей 9 В PP3, а сторона приемника – батареей 11,1 В LiPo, которая используется для питания бесщеточного двигателя постоянного тока (двигателя BLDC) через модуль ESC.

Плата Arduino1 получает питание от батареи 9 В PP3, а плата Arduino 2 – от батареи 11,1 В на соответствующие входные контакты Vin.

На стороне передатчика находятся четыре потенциометра, которые используются для передачи различных сигналов управления на сторону приемника через радиочастотные модули. Управляющие сигналы, принимаемые приемником, обрабатываются микроконтроллером в Arduino, который, в свою очередь, управляет двигателем BLDC, серводвигателями руля направления, элероном и лифтом самолета.

Arduino Uno доска

Arduino – это платформа для создания прототипов электроники с открытым исходным кодом, основанная на гибком, простом в использовании аппаратном и программном обеспечении. Он предназначен для художников, дизайнеров, любителей и всех, кто заинтересован в создании интерактивных объектов или сред.

Рис. 2: Схема самолета, управляемого РЧ (сторона приемника)Рис. 3: РЧ-модули 433 МГцРис. 4: Бесщеточный двигатель постоянного тока

Arduino Uno – плата на базе микроконтроллера ATmega328. Он состоит из 14 выводов цифрового ввода / вывода, шести аналоговых входов, USB-соединения для программирования встроенного микроконтроллера, разъема питания, разъема ICSP и кнопки сброса.

Он работает с кварцевым генератором 16 МГц и содержит все необходимое для поддержки микроконтроллера. Он очень прост в использовании, поскольку пользователю просто нужно подключить его к компьютеру с помощью USB-кабеля или подключить к нему с помощью адаптера переменного тока в постоянный или батареи, чтобы начать работу. Микроконтроллер на плате программируется с использованием языка программирования Arduino и среды разработки Arduino.

РЧ-модули 433 МГц

Это недорогие радиостанции, работающие на частоте 433 МГц (см. Рис. 3). Эти радиостанции доступны в отдельном передатчике и приемнике или в одной модели приемопередатчика. Рабочее напряжение для передатчика составляет от 1,5 до 12 В, а для приемника от 3 до 5 В. Дальность передачи составляет от 30 до 150 м, в зависимости от напряжения питания и типа используемого модуля.

Сторона передатчика

Контакт 12 платы 1 соединен с контактом данных 2 радиочастотного передатчика (TX1). Выводы от A0 до A3 платы 1 соединены с четырьмя 10k предустановками (от VR1 до VR4). VR1, VR2, VR3 и VR4 используются для управления BLDC (см. Рис. 4), рулем направления, элероном и лифтом соответственно.

Рис. 5: модуль ESCРис. 6: Детали самолета RC (любезно предоставлено: dduino.blogspot.in)

Сторона получателя

Контакт 11 платы 2 соединен с контактами данных (6 и 7) радиочастотного приемника (RX1). Контакты 12, 10, 8 и 9 платы соединены с сигнальным контактом серводвигателей M1 (руль высоты), M2 (руль направления), M3 (элерон) и модуля ESC (см. Рис. 5) соответственно. Некоторые из основных частей тела типичного самолета RC показаны на рисунке 6.

Мотор BLDC используется в качестве пропеллерной системы самолета. Пропеллер или воздушный винт преобразуют вращательное движение от двигателя для обеспечения движущей силы. Это самая важная часть самолета. Пропеллер установлен на лицевой стороне самолета.

Руль используется для управления самолетом, который движется через воздушную среду, контролируя направление, в котором направлен самолет. Это плоская плоскость или лист материала, прикрепленный шарнирами к корме, хвосту или после конца корабля.

Элерон представляет собой шарнирную поверхность управления полетом, обычно прикрепленную к задней кромке каждого крыла самолета. Элероны используются попарно для управления самолетом по крену или движением вокруг продольной оси самолета.

Лифты – это поверхности управления полетом, обычно сзади самолета, которые контролируют продольную высоту самолета. Положение лифта контролирует, направлен ли нос самолета вверх или вниз и, таким образом, движется вверх или вниз. Лифты обычно крепятся на петлях к неподвижной или регулируемой задней поверхности.

Входной провод питания ESC соединен с аккумулятором 11,1 В. Три выходных провода ESC соединены с трехфазными входами двигателя BLDC (M4).

Распиновка модуля приемопередатчика nRF24L01 +

Давайте посмотрим на распиновку обеих версий радиомодуля nRF24L01 +.

  • GND — это контакт заземления.
  • VCC — обеспечивает питание для модуля. Это может быть где-то от 1,9 до 3,9 вольт. Вы можете подключить его к выводу 3,3 В вашей Arduino. Помните, что подключение его к выводу 5 В может привести к повреждению вашего модуля nRF24L01 +!
  • CE (Chip Enable) — активный-HIGH вывод. При выборе nRF24L01 будет либо передавать, либо получать, в зависимости от того, в каком режиме он находится в данный момент.
  • CSN (Chip Select Not) — активный-LOW вывод и обычно поддерживается на высоком уровне. Когда этот вывод становится низким, nRF24L01 начинает прослушивать данные на шине SPI и обрабатывает их соответствующим образом.
  • SCK (Serial Clock) — принимает тактовые импульсы, предоставляемые шиной SPI Master.
  • MOSI (Master Out Slave In) — является входом SPI для nRF24L01.
  • MISO (Master In Slave Out) — это выход SPI от nRF24L01.
  • IRQ — это вывод прерывания, который может предупредить мастер, когда новые данные доступны для обработки.

В следующей статье рассмотрим вопрос подключения модуля nRF24L01 + к Arduino.

Схема приемника

Соедините nRF24L01 и сервомотор с Arduino в соответствии с приведенной ниже схемой.

Важное замечание! Входное напряжение составляет от 1,9 до 3,6 В, не превышайте это напряжение, иначе оно сожжет ваш модуль.

Соединения:

Arduino <-> nRF24L01Pin 9 <-> CEPin 10 <-> CS(N)Pin 11 <-> MOSIPin 12 <-> MISOPin 13 <-> SCKPin 3 <-> Servo signal pin3.3v <-> VCCGND <-> GND

Вакансии

Программирование аппаратно-программных средств arduino, разработка чертежей в SolidWorks.

Программирование режима работы радиореле.

У китайцев да и на других сайтах по этому поводу какая-то муть написана. Пока методом тыка не догадаешься нифига не запрограммируешь по такой инструкции.

На самом деле все просто:

Нажимаем на кнопочку и удерживаем на плате радиореле (там она одна), пока светодиод на плате не начнет мигать.

Затем уже нажимаем кнопку на радиокнопке (радиопульте). Причем нажимаем ее быстро и столько раз в зависимости какой хотим установить режим работы радиореле.

Скетчи для nRF24L01 и Arduino

Скетчи для nRF24L01 и Arduino

Пример: передача данных о положении координат джойстика Х и Y от одного модуля nRF24L01 к другому nRF24L01. Второй модуль получает данные положении джойстика и передает их на дальнейшее отображение.

Ниже два скетча. Загрузите первый на ваш первый Arduino, к которому подключен радиопередатчик nRF24L01 и джойстик (или можно использовать потенциометр). Второй скетч загрузите на Arduino с подключенным модулем nRf24L01.

/* YourDuinoStarter пример: nRF24L01 передаем данные о положении джойстика

— Что делает скетч: считывает аналоговые значения на контакте A0, A1 и передает их

с помощью радиопередатчика nRF24L01 приемнику.

— Подключение nRF24L01 модуля смотрите на:

1 — GND

2 — VCC 3.3V !!! НЕ 5V

3 — CE к Arduino пину 9

4 — CSN к Arduino пину 10

5 — SCK к Arduino пину 13

6 — MOSI к Arduino пину 11

7 — MISO к Arduino пину 12

8 — НЕ ИСПОЛЬЗУЕТСЯ

Аналоговый джойстик или два потенциометра 10 КОм:

GND к Arduino GND

VCC к Arduino +5V

X потенциометр к Arduino A0

Y потенциометр к Arduino A1 */

/*——(Импортируем необходимые библиотеки)——*/

#include <SPI.h>

#include <nRF24L01.h>

#include <RF24.h>

/*——(Объявляем константы и номера пинов)——*/

#define CE_PIN 9

#define CSN_PIN 10

#define JOYSTICK_X A0

#define JOYSTICK_Y A1 // ПРИМЕЧАНИЕ: «LL» в конце константы — это тип данных «LongLong»

const uint64_t pipe = 0xE8E8F0F0E1LL;

/*——(Объявляем объекты)——*/

RF24 radio(CE_PIN, CSN_PIN); // Создаем объект Radio

/*——(Объявляем переменные)——*/

int joystick; // массив из 2-х элементов, в котором хранятся с джойстика

int i = 0;

void setup() /****** SETUP: ОТРАБАТЫВАЕТ 1 РАЗ ******/

{

Serial.begin(9600);

radio.begin();

radio.openWritingPipe(pipe);

}//—(завершение setup )—

void loop() /****** LOOP: ОТРАБАТЫВАЕТ В БЕСКОНЕЧНОМ ЦИКЛЕ ******/

{

joystick = i++;

joystick = i++;

radio.write( joystick, sizeof(joystick) );

delay(3);

}//—(завершаем главный цикл)—

Если что-то не работает???

В первую очередь проверьте питание 3.3 В. Хотя среднее значение силы тока питания равно 15 мА, бывают резкие скачки. В результате бывает такое, что передатчик отлично работает день/минуту, а потом перестает. Поэтому в схеме подключения желательно использовать конденсаторы на 10 мкФ между контактами GND и 3.3 В.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации