Простой Arduino-робот из LEGO для избегания препятствий


Используя стандартные детали LEGO можно конструировать самые разные объекты и механизмы.
А если добавить несколько специальных деталей, которые дают Arduino совместимость c конструктором LEGO, то возможности радикально расширяются.

Для сборки электронной начинки этого простого робота, понадобятся:
* плата — Crazy Circuits Robotics Board, которая добавляет LEGO-совместимые контакты обычному контроллеру Arduino,
* пара совместимых с LEGO сервомашинки постоянного вращения — LEGO Compatible Continuous Rotation 360 Degree Servo,
* ультразвуковой датчик измерения расстояния — HC-SR04,
* USB-ный источник питания.

Остаётся только собрать шасси, установить контроллер и прошить его скетчем AvoidanceRobot.ino:

/*
 * AvoidanceRobot.ino
 *
 * Brown Dog Gadgets 
 *
 * We used the following items for this robot:
 *   1 x Crazy Circuits Robotics Board 
 *   2 x LEGO Compatible Continuous Rotation 360 Degree Servo 
 *   1 x HC-SR04 Ultrasonic Distance Sensor
 *   1 x USB Power Bank
 *
 */



// you will need the following libraries
#include <NewPing.h>
#include <Servo.h>

// set up the ultrasonic sensor, connect the echo and trigger wires to the specified pins
#define ECHO_PIN     3  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define TRIGGER_PIN  5  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define MAX_DISTANCE 800 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

int theDistance = 0;
int theDistanceTotal = 0;
int triggerDistance = 13; // set the distance in centimeters to trigger the action
int sampleVal = 5;

// make two servo objects
Servo servoLeft;
Servo servoRight;

// connect the signal wires (orange) to the specified pins
int servoPinLeft = 6;
int servoPinRight = 9;

// this is the midpoint of the servo, or where it is "stopped"
int midPoint = 1600;

// set the number for forward and backward movement
int forward = 1300;
int backward = 1800;


// set how many milliseconds your robot will move backwards for
int goBackwardTime = 1000;

// set how many milliseconds your robot will turn for
int turnRightTime = 1000;

// setup runs one time when things start
void setup() {

  Serial.begin(9600);
  Serial.println("Starting...");
  servoLeft.attach(servoPinLeft);
  servoRight.attach(servoPinRight);
  delay(500);

}

// loop runs forever
void loop() {

  delay(50); // delay between pings
  theDistance = sonar.ping_cm();

  // check if the distance sensor sees something
  if ((theDistance > 0) and (theDistance < triggerDistance)) {
    // distance sensor
    Serial.print("distance: ");
    Serial.print(theDistance);
    Serial.println("cm");

    goBackward(goBackwardTime);
    turnRight(turnRightTime);
  }
  else {
    // if the distance sensor does not see anything, keep moving forward
    goForward(100);
  }
}


// Below are the functions to move forward & backward, and turn left & right

void goForward(int theDelay) {
  servoLeft.writeMicroseconds(backward);
  servoRight.writeMicroseconds(forward);
  delay(theDelay);
}


void goBackward(int theDelay) {
  servoLeft.writeMicroseconds(forward);
  servoRight.writeMicroseconds(backward);
  delay(theDelay);
}


void turnLeft(int theDelay) {
  servoLeft.writeMicroseconds(forward);
  servoRight.writeMicroseconds(forward);
  delay(theDelay);
}

void turnRight(int theDelay) {
  servoLeft.writeMicroseconds(backward);
  servoRight.writeMicroseconds(backward);
  delay(theDelay);
}

Ссылки
Obstacle Avoiding LEGO Robot
Avoidance Robot

По теме
Конструктор LEGO Boost 17101 и его устройство
Робот на Arduino Mega крепится к потолку
Lego Rumba - робот-уборщик из LEGO
LegoDuino
LEGO-автомобиль и Arduino

Arduino
Arduino, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)


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

Arduino

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

Разделы

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

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

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

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