PHIL — простой робот на Arduino для слежения за светом


Робот PHIL состоит из контроллера Arduino Uno и платформы с двумя сервомашинками.
Платформа обеспечивает вращение головы датчика в двух плоскостях. Сам датчик состоит из напечатанного на 3D-принтере крестообразного кожуха, в отдельных секциях которого установлены четыре фоторезистора (подключены к аналоговым входам A0-A3).
Подобная конструкция кожуха помогает блокировать попадание света на датчики с других углов, что даёт более сильную разницу между показаниями фотосенсора который подвергается воздействию света, и теми, которые находится на тёмной стороне. Разностный сигнал считывается контроллером Arduino и он определяет — в какую сторону нужно повернуть голову датчика, чтобы она следовала за светом.

Код для Arduino (PHIL.ino)

#include <Servo.h>

  const int LDR1 = A0;
  const int LDR2 = A1;
  const int LDR3 = A2;
  const int LDR4 = A3;
  int value1;
  int value2;
  int value3;
  int value4;
  int xServoAngle = 85;
  int yServoAngle = 85;
  Servo xServo;
  Servo yServo;

  void setup() {

    Serial.begin(9600);
    xServo.attach(3);
    yServo.attach(5);
    //Home position
    xServo.write(xServoAngle);
    yServo.write(yServoAngle);
  }

  void loop() {

    value1 = map(analogRead(LDR1), 0, 1023, 0, 100);
    value2 = map(analogRead(LDR2), 0, 1023, 0, 100);
    value3 = map(analogRead(LDR3), 0, 1023, 0, 100);
    value4 = map(analogRead(LDR4), 0, 1023, 0, 100);

    Serial.print(value1); Serial.print(",");
    Serial.print(value2); Serial.print(",");
    Serial.print(value3); Serial.print(",");
    Serial.print(value4); Serial.print(",");
    Serial.print(" X Servo angle: "); Serial.print(xServoAngle);
    Serial.print(" Y Servo angle: "); Serial.println(yServoAngle);

    if (((value1 + value4) / 2) < ((value2 + value3) / 2 - 5)) {
      xServoAngle = xServoAngle + 2;
    }

    if (((value2 + value3) / 2) < ((value1 + value4) / 2 - 5)) {
      xServoAngle = xServoAngle - 2;
    }
    if (((value1 + value2) / 2) < ((value3 + value4) / 2 - 5)) {
      yServoAngle = yServoAngle + 2;
    }

    if (((value3 + value4) / 2) < ((value1 + value2) / 2 - 5)) {
      yServoAngle = yServoAngle - 2;
    }

    //Limit angle to between 50 and 130 degrees:
    if (xServoAngle < 30) {
      xServoAngle = 30;
    }
    if (xServoAngle > 150) {
      xServoAngle = 150;
    }
    if (yServoAngle < 30) {
      yServoAngle = 30;
    }
    if (yServoAngle > 150) {
      yServoAngle = 150;
    }

    xServo.write(xServoAngle);
    yServo.write(yServoAngle);
  }

Ссылки
How to Build PHIL — a Light Tracking Robot

По теме
Глаз насекомого, как вариант инфракрасного зрения робота
Управляемая веб-камера или же web-cam-бот

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