Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Робот-компаньон ASI (Ананси) на Arduino Nano с LED-дисплеем

Компоненты и материалы

Arduino Nano R3 1
Микро-сервопривод SG90 1
Модуль LED-матрицы MAX7219 (красный) 1
Короб для 4х АА батареек (или Li-ion 3.7В 200мАч) 1
Саморезы 1
Прозрачные пластиковые формы для ванн-бомб (для головы) 1
Adafruit Trinket 5V 1

Необходимые инструменты и станки

О проекте

История создания

Изначально проект был основан на Xpider с Thingiverse. Но потом я увидел Archimedes от Алекс Глоу (Alex Glow) — это взорвало мой мозг. Я очень хотел такого. Начал работать над своим роботом-компаньеном. Я не типа «сова», и хотел, чтобы мой фамильяр был особенным. Тогда вспомнил африканскую сказку об Ананси — пауке-плуте и боге историй. Решил спроектировать бота с идеей истории, и так родился ASI (на самом деле ASI_v4, v1–v3 были прототипами).

Сборка

Базовый дизайн — Xpider, но я сильно переработал многое, выбросил лишнее и поэкспериментировал. На фото — большинство деталей для печати.

Сборка довольно интуитивна, но вот фото для наглядности.

Для электроники: платы можно разместить в верхней или нижней части головы (на ваш выбор), но сервопривод должен быть закреплен именно так. Убедитесь, что шестеренка надета на вал.

ASI управляется двумя микроконтроллерами: Trinket и Arduino Nano. Trinket управляет движением глаза — сервопривод поворачивает его туда-сюда в случайные интервалы. Arduino Nano управляет «глазом» (LED-матрицей). Он тоже работает случайно — смотрит вокруг, и людям кажется, что он смотрит на них.

Платы установлены на двух маленьких макетных платах, соединенных цепочкой с 4х АА батарейками. (Можно использовать литий-ионный аккумулятор 3.7В 200мАч. Но с ним иногда были проблемы — не запускалось, поэтому лучше использовать два отдельных литий-ионных аккумулятора и подключить их к одному выключателе, чтобы всё включалось одновременно.)

Голова — это рождественский шар, купленный на праздниках. Я отступил назад и слегка распылил его черной краской из баллона. Затем горячим клеем приклеил к детали шеи ASI — и голова готова!

Наконец, как я его ношу. Я просто взял алюминиевую проволоку, прошел её через отверстия в нижней части ASI и закрепил на плечевом ремне рюкзака.

Код

ASI Eye (Arduino Nano)

#include <LedControl.h>
#include "LedControl.h"

#define PIN_EYES_DIN 12
#define PIN_EYES_CS 11
#define PIN_EYES_CLK 10

LedControl lc = LedControl(PIN_EYES_DIN, PIN_EYES_CLK, PIN_EYES_CS, 2);

bool rotateMatrix0 = false;
bool rotateMatrix1 = false;

byte eyeBall[8] = {
  B00111100, B01111110, B11111111, B11111111,
  B11111111, B11111111, B01111110, B00111100
};
byte eyePupil = B11100111;
byte eyeCurrent[8];
int currentX, currentY;
int cntLoop = 0, cntEffect = 0;

#define MIN -2
#define MAX 2
#define DELAY_BLINK 40
#define EFFECT_ITERATION 4

void setup() {
  lc.shutdown(0,false); lc.shutdown(1,false);
  lc.setIntensity(0,1); lc.setIntensity(1,1);
  lc.clearDisplay(0); lc.clearDisplay(1);
  
  // LED test
  byte b = B10000000;
  for (int c=0; c<=7; c++) {
    for (int r=0; r<=7; r++) { setRow(0,r,b); setRow(1,r,b); }
    b >>= 1; delay(50);
  }
  b = B11111111;
  for (int r=0; r<=7; r++) { setRow(0,r,b); setRow(1,r,b); }
  delay(500);
  lc.clearDisplay(0); lc.clearDisplay(1); delay(500);
  
  randomSeed(analogRead(0));
  displayEyes(0, 0); delay(2000);
  blinkEyes(true, false); blinkEyes(false, true); delay(1000);
}

void loop() {
  moveEyes(random(MIN, MAX+1), random(MIN, MAX+1), 50);
  delay(random(5,7) * 500);
  
  if (random(0,5) == 0) { delay(500); blinkEyes(); delay(500); }
  
  if (EFFECT_ITERATION > 0) {
    cntLoop++;
    if (cntLoop == EFFECT_ITERATION) {
      cntLoop = 0;
      if (cntEffect > 6) cntEffect = 0;
      switch(cntEffect) {
        case 0: crossEyes(); delay(1000); break;
        case 1: roundSpin(2); delay(1000); break;
        case 2: crazySpin(2); delay(1000); break;
        case 3: methEyes(); delay(1000); break;
        case 4: lazyEye(); delay(1000); break;
        case 5: blinkEyes(true,false); blinkEyes(false,true); delay(1000); break;
        case 6: glowEyes(3); delay(1000); break;
      }
      cntEffect++;
    }
  }
}

// ... (остальные функции: blinkEyes, crazySpin, crossEyes, displayEyes, 
// getValidValue, glowEyes, methEyes, moveEyes, lazyEye, roundSpin, setRow, bitswap)
// Полный код доступен в оригинальном проекте.

ASI Neck with Trinket (шея)

#define SERVO_PIN 4
#define SERVO_MIN 4
#define SERVO_MAX 26

Adafruit_TiCoServo servo;

void setup(void) {
  #if (F_CPU == 16000000L)
    clock_prescale_set(clock_div_1);
  #endif
  servo.attach(SERVO_PIN);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, HIGH);
}

uint32_t lastLookTime = 0;

void loop(void) {
  unsigned long t = millis();
  if ((t - lastLookTime) > 500) {
    if (random(10) == 0) {
      servo.write(random(SERVO_MIN, SERVO_MAX));
      lastLookTime = t;
    }
  }
  if (random(10) == 0) {
    digitalWrite(LED_PIN, LOW);
    delay(random(50, 250));
    digitalWrite(LED_PIN, HIGH);
  }
  delay(100);
}

Детали для 3D-печати

Все STL-файлы для печати деталей робота (ноги, корпус, шея, шестеренки, крепления и т.д.) доступны в разделе Custom parts оригинального проекта.

Схемы

Схемы подключения для шеи ASI и питания обеих плат прилагаются в разделе Schematics.

Производственный процесс

  1. Создание робота на Arduino и Raspberry Pi: пошаговое руководство
  2. DIY робот в стиле Wall‑E на Raspberry Pi из коробки от CD
  3. PiCy: Создайте своего компактного робота на Raspberry Pi
  4. Робот-будильник на колесах: умная мобильная система пробуждения на Raspberry Pi и Google Calendar
  5. Создание моторизированного робота-крипера Minecraft на Arduino
  6. Archimedes: Робот-совица с ИИ для распознавания эмоций
  7. Создание робота с компьютерным зрением и голосовым управлением на Windows 10 IoT Core
  8. ROS-робот: Управление навигацией из терминала на Raspberry Pi
  9. Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
  10. Напитки-роботы: технологии, автоматизация и роль в напиточной индустрии