luzAI — роботизированная лампа отслеживает руку


luzAI — это проект роботизированной лампы, которая отслеживает положение руки, чтобы на ней всегда было освещение.
Для изготовления робо-лампы использовался контроллер Arduino Nano и пара небольших шаговых двигателей.
Захват видео с USB-камеры осуществляется скриптом на питоне (интерфейс на tkinter) с помощью OpenCV.
Для распознавания руки используется библиотека ImageAI.
При детекции объекта, отправляются команды для Arduino через последовательный порт (serial), которые приводят в движение шаговые двигатели, выдвигающие и вращающие штанги лампы.

Скетч для Arduino — arduinoCode.ino

#include <Stepper.h>

int numSteps = 2038;
Stepper stepperX(numSteps, 8, 10, 9, 11);
Stepper stepperZ(numSteps, 2, 4, 3, 5);
int incoming[3];


void setup()
{
  pinMode(7, OUTPUT);
  Serial.begin(9600);
  stepperX.setSpeed(15);
  stepperZ.setSpeed(15);
}

void loop()
{
  while(Serial.available() >= 3)
  {
    //incoming data
    for (int i = 0; i < 3; i++)
    {
      incoming[i] = Serial.read();
    }

    //light toggle
    if (incoming[2]==1)
    {
      digitalWrite(7,HIGH);
    }
    else
    {
      digitalWrite(7, LOW);
    }

    //motor control
    if (incoming[0]==0)
    {
      if (incoming[1]==0)
      {
        for(int i=0; i<150; i++)
        {
          stepperX.step(-1);
          stepperZ.step(1);
        }
      }
      else if (incoming[1]==1)
      {
        for(int i=0; i<150; i++)
        {
          stepperZ.step(1);
        }
      }
      else if (incoming[1]==2)
      {
        for(int i=0; i<150; i++)
        {
          stepperX.step(1);
          stepperZ.step(1);
        }
      }
    }
    else if (incoming[0]==1)
    {
      if (incoming[1]==0)
      {
        for(int i=0; i<150; i++)
        {
          stepperX.step(-1);
        }
      }
      else if (incoming[1]==2)
      {
        for(int i=0; i<150; i++)
        {
          stepperX.step(1);
        }
      }
    }
    else if (incoming[0]==2)
    {
      if (incoming[1]==0)
      {
        for(int i=0; i<150; i++)
        {
          stepperX.step(-1);
          stepperZ.step(-1);
        }
      }
      else if (incoming[1]==1)
      {
        for(int i=0; i<150; i++)
        {
          stepperZ.step(-1);
        }
      }
      else if (incoming[1]==2)
      {
        for(int i=0; i<150; i++)
        {
          stepperX.step(1);
          stepperZ.step(-1);
        }
      }
    }
  }
}

Ссылки
3D Printed Hand-Following AI Task Light
luzAI GitHub
ImageAI GitHub

По теме
Luci - робо-лампа с функцией распознавания лиц
Очень милая роболампа
Lili - забавная робот-лампа на Arduino
Pinokio - робо-лампа в стиле Pixar
Роболампа на Arduino
Роботизированная лампа
Лампа настроения из Arduino
Автоматизация стола IKEA SKARSTA при помощи 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
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение