BristleSwarm — коллективные виброботы на Arduino


виброботы на Arduino
Для создания такого робота потребуются:
* пара щёток,
* два самодельных вибромотора,
* миниатюрная версия контроллера Arduino,
* два фоторезистора,
* два биполярных NPN-транзистора (PN2222), для управления двигателями,
* цветные светодиоды, для отслеживания ботов при помощи системы компьютерного зрения,
* немного мелочёвки (резисторы, провода и т.п.)

Программы для swarm-роботов:

bristleTHINKER.ino

//  This definition runs an early version of the script. With this script, the robot will occasionally check how
//  much light there is, and then turn left or right based on how much light it sees. The robot I was working with
// had one photocell mounted on top and one mounted on this bottom, instead of to the left and right on the chassis.

    // LED
    int LED = 4;

    //Photo Resistors
    int photocellUPPER = 1; //Ambient photocell sensor - Upper Sensor
    int photocellLOWER = 3; //Turnaround photocell sensor - Lower Sensor
    int photocellUPPERreading;
    int photocellLOWERreading;

    //Motors
    int leftMOTORpin = 0; // connect leftMotor to pin 0 (PWM pin)
    int rightMOTORpin = 1; // connect rightMotor to pin 1 (PWM pin)
    int MOTORspeed;


// in the setup, we're just going to turn on the LED's, which I had setup in pin 4 for this robot
void setup() {

   analogWrite (LED, 255);

}

void loop(void) {

// First off, we'll make a reading of the ambient light.

   photocellUPPERreading = analogRead(photocellUPPER);


// Now we'll remap the photocellReading values to a range of values that work for our motors.

    MOTORspeed = map(photocellUPPERreading, 0, 1023, 0, 255);

// Here's where the actual behavior is executed.
// In this definition, the robot will go right if it's bright out, and left if it's dark.
// After a second of this behavior, it then goes straight for two seconds.
// This behavior makes it look like they're always "thinking" about what to do next,
// hence the name "bristleTHINKER".

    analogWrite(rightMOTORpin, MOTORspeed);
    analogWrite(leftMOTORpin, 255 - MOTORspeed);

    delay(1000);

    analogWrite(rightMOTORpin, 255);
    analogWrite(leftMOTORpin, 255);

    delay(2000);

  }

bristleSEEKER.ino

    // LED
    int LED = 4;

    //Photo Resistors
    int photocellLEFT = 1; //left facing photocell sensor
    int photocellRIGHT = 3; //Turnaround photocell sensor

    //Motors
    int leftMOTORpin = 0; // connect leftMotor to pin 0 (PWM pin)
    int rightMOTORpin = 1; // connect rightMotor to pin 1 (PWM pin)
    int rightMOTORspeed;
    int leftMOTORspeed;
    int leftMOTORratio;
    int rightMOTORratio;


void setup() {

        analogWrite (LED, HIGH);
      }

void loop(void) {

//here we define the speed of the left and right motors as the ratio of brightness between the
//two photocells. As the photocell on one side gets brighter, it slows down, turning
//the robot in that direction.

        rightMOTORratio = (analogRead(photocellLEFT) / analogRead(photocellRIGHT));
        leftMOTORratio = (analogRead(photocellRIGHT) / analogRead(photocellLEFT));

//this part turns our ratio into a usable speed for our motors

        leftMOTORspeed = (leftMOTORratio * 255);
        rightMOTORspeed = (rightMOTORratio * 255);

//and this writes that value to the pin

        analogWrite(leftMOTORpin, leftMOTORspeed);
        analogWrite(rightMOTORpin, rightMOTORspeed);


  }

Видео работы:

Ссылки
BristleSwarm: Explorations into Swarm Robotics

По теме
Kilobot — роевые микророботы
Более 1000 роевых микророботов научили выстраивать сложные фигуры
Swarmanoid
Cамоорганизация роботов без алгоритмов

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


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

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
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение