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, термины, начало работы
КМБ для начинающих ардуинщиков
Состав стартера (точка входа для начинающих ардуинщиков)
  • 0
  • 9 октября 2020, 08:19
  • admin

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.