Робот CyberBot


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

Комплект выглядит так же как на фото

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

Набор для сборки платформы робота
Плата контроллера робота
Arduino Nano v.7
Драйвер двигателей

Сборка робота занимает 10-15мин.

Код программы робота получился тоже достаточно простым, но он выполняет то что от него требуется на все 100%
Робот обходит препятствия, даже с неподвижно установленным на него дальномером. Мне так и не удалось создать такую ситуацию из которой бы он не смог выбраться
Для управления роботом и для стабильной работы дальномера, я использовал библиотеку CyberLib
Вращение колес можно выравнять при помощи оптических энкодеров, но это уже тема для другой статьи.
Планировал выравнивать вращение колес при помощи ШИМ, но мне не пришлось этого делать, так как у меня они примерно одинаково вращаются

Схеиа робота CyberBot

Исходник для Arduino Nano v.7

#include <CyberLib.h>
#include <avr/wdt.h>

#define motors_init D4_Out; D5_Out; D6_Out; D7_Out
#define robot_go D4_Low; D5_High; D6_High; D7_Low
#define robot_stop D4_Low; D5_Low; D6_Low; D7_Low
#define robot_rotation_left D4_Low; D5_High; D6_Low; D7_High
#define robot_rotation_right D4_High; D5_Low; D6_High; D7_Low

#define size_buff 5 //размер массива sensor
uint16_t sensor[size_buff]; //массив для хранения замеров дальномера
uint8_t stat=0;

void setup()
{
  motors_init;  //инициализация выходов моторов
  D11_Out; //динамик
  D14_Out; D14_Low; //пин trig ультразвукового сонара
  D15_In; //пин echo  ультразвукового сонара
  for(uint8_t i=0; i<12; i++) beep(50, random(100, 1000)); //звуковое оповещение готовности робота
  wdt_enable (WDTO_500MS);    //Сторожевая собака 1сек.
  robot_go;
}

void loop()
{Start
      uint16_t dist=GetDistance(); //производим замер
      if( dist < 40 && stat==255)   //если дистанция меньше 40см
      {
        robot_rotation_left;
         delay_ms(140);
        robot_stop;
      } else if( dist < 40 && stat==0)   //если дистанция меньше 40см
                {
                  robot_rotation_right;
                  delay_ms(140);
                  robot_stop;
      } else if( dist > 39) {robot_go; stat=~stat;} //поехали!!!

      wdt_reset(); //покормить собаку, что бы она не сбежала
End;}

//***************************************************
uint16_t GetDistance()
{
 uint16_t dist;
 for (uint8_t i = 0; i < size_buff; ++i) //производим несколько замеров
  {
    D14_High; delay_us(10);  D14_Low;  //запустить измерение
   dist = pulseIn(15, HIGH, 2400); //считываем длительность времени прохождения эха, ограничить время ожидания
   if(dist==0) dist=2400;
   sensor[i]=dist;
   delay_ms(40); //задержка между посылками
   wdt_reset(); //покормить собаку, что бы она не сбежала
  }
  dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см
  return dist;
}
//***************************************************
void beep(byte dur, word frq)
{
  dur=(1000/frq)*dur;  //расчет длительности бипа
  for(byte i=0; i

На видео можно посмотреть то, что у меня получилось

Следующий этап, это подключение Wi-Fi роутера и видеокамеры


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение