Инструменты пользователя

Инструменты сайта


doc:1308:mgul.130080.001

Самоходная платформа для тестирования и отработки блоков полезных нагрузок

No Обозначене Наименование Кол-во Примечание
Документация
Схема подключения
Ультразвуковой датчик HC-SR04
Драйвер моторов L293n
Bluetooth модуль HC-06
Raspberry pi3
Сборочные единицы
Шасси гусеничное 1
Аккумуляторная батарея 1
Блок бортовой телеметрической системы 1
Power bank (raspberry)
Модуль поворотной платформы 1
Детали
Стойки 4
Стандартные изделия
Винты, гайки, саморезы
Ультразвуковой дальномер 1
Bluetooth модуль 1
Микроконтроллер arduino mega 1
Драйвер для управления моторами 1
Материалы
Фанера/платик/оргстекло 2 400х250х5 мм
Соединительные провода 10 м
Изолента 2 м
Программное обеспечение
Скетч для работы подвижной платформы

в состав нашей подвижной платформы входят:

  • Микроконтроллер arduino mega
  • Гусеничное шасси с 2 моторами
  • Драйвер для управления моторами
  • Ультразвуковой дальномер – предназначен для определения дальности до препятствия спереди
  • 3 инфракрасных датчика – предназначены для определения боковых препятствий, а также для определения ям границ ступенек
  • Bluetooth модуль – предназначен для получение управляющих команд, а также для передачи отладочной информации
  • Аккумуляторная батарея

Шасси

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

Микроконтроллер

В качестве микроконтроллера управления гусеничным шасси была использована плата Arduino Mega 2560. Она обладает большим количеством аналоговых, цифровых, коммуникационных и ШИМ выходов, что позволяет подключать к ней всё необходимое, для движения платформы, а также может пригодиться для дальнейшей разработки платформы.

Модуль драйвера двигателей L298N

Модуль драйвера двигателей L298N позволяет управлять двумя моторами постоянного тока, либо шаговым двигателем с потребляемым током до 2 Ампер.

Пары выводов (IN1, IN2) и (IN3, IN4) задают направление вращения моторов. Таким образом, подавая на выводы IN1, IN2 разноименные логические сигналы например (0 и 1) или (1 и 0) мы установим направление движения левого мотора. Установка одноименных логических сигналов любой из пар выводов например: (0 и 0) остановит движение мотора. Выводы ENABLE A, B (ENA привязан к IN1, IN2. ENB к IN3, IN4) отвечают за скорость движения моторов. Для регулировки скорости моторов, на «EN» выводы подается ШИМ (PWM) сигнал. Высокий логический уровень разрешает вращение моторов, низкий запрещает вне зависимости от состояния выводов «IN». На рис.а2 выводы «EN» замкнуты с высоким уровнем (+5V). Для этого на плате, рядом с выводами ENA и ENB находятся штырьки соединенные с +5V. Замыкаем выводы с помощью джамперов. В данном режиме мы не сможем регулировать скорость двигателей, они будут всегда вращаться в полную скорость (зато для управления экономится 2 вывода контроллера). Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль. Для остановки нужно будет подавать одноименные сигналы на выводы «IN».

В приведенном ниже скетче два мотора будут вращаться в обе стороны с плавным нарастанием скорости.

int IN1 = 5;	// Input1 подключен к выводу 5 
int IN2 = 4;	// Input2 подключен к выводу 4
int IN3 = 3;	// Input3 подключен к выводу 3
int IN4 = 2;	// Input4 подключен к выводу 2
int ENA = 9;	// EnableA подключен к выводу 9
int ENB = 3;	// EnableB подключен к выводу 3
int i;

void setup()
{
	 pinMode (EN1, OUTPUT);	// объявляем наши выводы
	 pinMode (IN1, OUTPUT);
	 pinMode (IN2, OUTPUT);
	 pinMode (EN2, OUTPUT);
	 pinMode (IN4, OUTPUT);
	 pinMode (IN3, OUTPUT);
}

void loop()
{
 	digitalWrite (IN1, LOW);		// устанавливаем направление движения
 	digitalWrite (IN2, HIGH); 
 	digitalWrite (IN3, LOW);
 	digitalWrite (IN4, HIGH);
 	for (i = 50; i <= 180; ++i)
 	{
 		analogWrite(EN1, i);
 		analogWrite(EN2, i);
 		delay(30);
 	}
 	analogWrite (EN1, 0);		// останавливаем наши моторы
 	analogWrite (EN2, 0);
 	delay(500);
 	digitalWrite (IN1, HIGH);		// устанавливаем обратное направление
 	digitalWrite (IN2, LOW); 
 	digitalWrite (IN3, HIGH);
 	digitalWrite (IN4, LOW);
 	for (i = 50; i <= 180; ++i)
 	{
 		analogWrite(EN1, i);
 		analogWrite(EN2, i);
 		delay(30);
 	}
 	analogWrite (EN1, 0);
 	analogWrite (EN2, 0);
 	delay(8000);
}

При старте двигатель в среднем потребляет ток в 2-4 раза больше номинального, а при резком реверсе еще больше. Данный скачок можно снизить или вообще убрать, если разгонять двигатель плавно и дать на разгон какой-то промежуток времени.

Автономный источник питания

В качестве автономного источника питания желательно использовать батарею, которая способна выдавать более 7 вольт. Для продолжительной работы передвижной платформы потребуется батарея большой емкости. На нашей платформе используется батарея емкостью 3600 мАч(ну так по крайней мере написано), и выходным напряжением 7.2 вольта. на практике мы практически всегда использовали полностью заряженную батарею, и редко замечали падения напряжения ниже 7.5 вольт.

ИК приемник

Инфракрасный приемник служит для получения сигналов в прямой видимости в инфракрасном спектре.

Данная программа считывает ИК сигнал и возвращает данные, которые он принял в COM порт.

#include "IRremote.h"
IRrecv irrecv(6);	// Указываем пин, к которому подключен приемник
decode_results results;
 
void setup()
{
        Serial.begin(9600);	// Выставляем скорость COM порта
	irrecv.enableIRIn();	// Запускаем прием
}

void loop()
{
	if (irrecv.decode(&results))	// Если данные пришли 
{
Serial.println(results.value, HEX);	// Отправляем полученную данную в консоль
irrecv.resume();	// Принимаем следующую команду
}
}

Bluetooth модуль

Будьте внимательны, подключать подключать нужно TX → RXD ,RX → TXD. Во время загрузки скетча необходимо, чтобы Bluetooth модуль был отключен от микроконтроллера arduino. В противном случае скетч не запишется, потому что связь с Bluetooth модулем происходит по одному и тому же порту RX и TX, что и USB. Работа с bluetooth модулем ничем не отличается от работы с COM портом.

int val;
int LED = 13;
void setup()
{
	Serial.begin(9600);
	pinMode(LED, OUTPUT);
	digitalWrite(LED, HIGH);
}

void loop()
{
	if (Serial.available())
	{
		val = Serial.read();	// При символе "1" включаем светодиод
if (val == '1')
{
digitalWrite(LED, HIGH);
}	// При символе "0" выключаем светодиод
if ( val == '0')
	{
 		digitalWrite(LED, LOW);
}
}
}

HC-SR04

Этот дальномер может служить прекрасным датчиком для робота, благодаря которому он сможет определять расстояния до объектов, объезжать препятствия, или строить карту помещения. Его можно также использовать в качестве датчика для сигнализации, срабатывающего при приближении объектов.

Принцип действия Ультразвуковой дальномер определяет расстояние до объектов точно так же, как это делают дельфины и летучие мыши. Он генерирует звуковые импульсы на частоте 40 кГц и слушает эхо. По времени распространения звуковой волны туда и обратно можно однозначно определить расстояние до объекта. В отличие от инфракрасных дальномеров, на показания ультразвукового дальномера не влияют засветки от солнца или цвет объекта. Но могут возникнуть трудности с определением расстояния до пушистых или очень тонких предметов. Сенсор излучает короткий ультразвуковой импульс (в момент времени 0), который отражается от объекта и принимается сенсором. Расстояние рассчитывается исходя из времени до получения эха и скорости звука в воздухе.

Т.о., сенсор получает сигнал эха, и выдаёт расстояние, которое кодируется длительностью электрического сигнал на выходе датчика (Echo). Следующий импульс может быть излучен, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс. Если на сигнальный пин (Trig) подается импульс длительностью 10 мкс, то ультразвуковой модуль будет излучать восемь пачек ультразвукового сигнала с частотой 40 кГц и обнаруживать их эхо. Измеренное расстояние до объекта пропорционально ширине эха (Echo) и может быть рассчитано по формуле, приведенной на графике выше. Документация на сенсор, также указывает, что если никаких препятствий не обнаружено, то на выходе будет сигнал с длительностью 38 ms. Пример кода для использования ультразвукового датчика без использования библиотек.

long getEchoTiming()
{
digitalWrite(trigPin, LOW);
	delayMicroseconds(2);
 	digitalWrite(trigPin, HIGH);
 	delayMicroseconds(10);
 	digitalWrite(trigPin, LOW);
 	long duration = pulseIn(echoPin, HIGH);
 	return duration;
}
doc/1308/mgul.130080.001.txt · Последние изменения: 2018/04/28 23:47 (внешнее изменение)