Миньон-копилка

Тема в разделе "Глядите, что я сделал", создана пользователем Technomagic, 14 янв 2022.

  1. Technomagic

    Technomagic Нерд

    Приветствую. Представляем вашему вниманию робокопилку. В роботе применен всего один сервопривод, датчик расстояния и контроллер. Проект подходит для сборки начинающим разработчикам при условии, что у вас есть паяльник, 3д-принтер и большой адронный коллайдер.

    [​IMG]
    Если положить мелкий предмет роботу в руки, он немедленно заглатывает содержимое в себя.
    Детали для печати корпуса на 3д-принтере лежат на thingiverse.

    [​IMG]

    Для сборки проекта понадобится:
    • Arduino pro mini
    • Ультразвуковой дальномер HC-SR04
    • Сервопривод SG90 или аналогичный
    • Блок питания 5V или аккумуляторы
    • Корпус напечатанный на 3D-принтере
    • Светодиод и резистор 220 Ом (опционально)

    Схема:
    [​IMG]

    Код для Arduino IDE:
    Код (C++):
    // Пины для подключения дальномера, светодиода, сервопривода//
    #define trigPin 9   //
    #define echoPin 8   //
    #define led 10      //
    #define servopin 7  //

    //основные параметры
    #define chewing 4   // Сколько раз пережёвываем проглоченное
    #define blizost 10  // Расстояние, до которого будет реагировать датчик (в сантиметрах)

    //состояния открытия рта. Всего их три: закрыт, открыт, приоткрыт.
    //Настраиваются индивидуально под каждый сервопривод (значения от 0 до 180 градусов).
    #define mouthClose 90 // Рот закрыт
    #define mouthOpen 30  // Рот открыт
    #define mouthAjar 70  // Рот приоткрыт

    #include <Servo.h>    // Подключаем библиотеку сервопривода
    Servo Sergo;      

    void setup() {
      Serial.begin(9600);      //Инициализируем последовательный порт чтобы выводить в него расстояния определенное датчиком
     
      pinMode(trigPin, OUTPUT); //
      pinMode(echoPin, INPUT);

      Sergo.attach(servopin);   // в скобках номера пина к которому подключен сервопривод
      sleep();                  // установим сервопривод в исходное положение, т.е. рот закрыт
    }

    void loop() {
      int duration, distance;
      digitalWrite(trigPin, LOW);     // Для большей точности установим значение LOW на пине Trig
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);    // Теперь установим высокий уровень на пине Trig
      delayMicroseconds(10);        
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH); // Узнаем длительность высокого сигнала на пине Echo
      //Переводим скорость звука из 343 м/с в см/мкс: s = duration/29
      //Поскольку расстояние пройдено дважды, то s = duration / (29*2)

      distance = duration / 58;       // Рассчитываем расстояние в сантиметрах
      Serial.print(distance);         // Выведем значение в Serial Monitor
      Serial.println(" cm");

      if (distance < blizost) {       // Если расстояние до предмета меньше заданного, то проглатываем
        om_nom_nom();
        digitalWrite(led, HIGH);
      }
      delay(100);
    }

    void om_nom_nom() {
      digitalWrite(led, HIGH);  // Зажигаем лампочкой
      Sergo.attach(servopin);   // Подключаем сервопривод
      delay(200);

      Sergo.write(mouthOpen);          // открываем рот и ждем пока предмет свалится в него
      delay(700);

      // жуем //
      for (int x = 0; x < chewing; x++) {
        Sergo.write(mouthAjar);
        delay(250);
        Sergo.write(mouthOpen);
        delay(250);
        Serial.println("nyam");
      }
      sleep();  //спим
    }

    void sleep(){
      Sergo.write(mouthClose);
      delay(250);

      Sergo.detach();         // отключаем питание сервопривода, иначе он будет жужжать
      digitalWrite(led, LOW); // гасим светодиод
    }

    Видео с процессом изготовления и демонстрация работы копилки.

     
    b707, Un_ka и Airbus нравится это.
  2. Airbus

    Airbus Радиохулиган Модератор

    Зачот! Самое трудное—напечатать корпус этого Миньона. А код и железо как два пальца. Не отказался бы от такого. Где такой можно напечатать?
     
    Последнее редактирование: 15 янв 2022
  3. Technomagic

    Technomagic Нерд

    Себестоимость пластика около 1 евро, это если есть свой принтер. На заказ будет раз в 8 дороже. :) Зависит от того насколько хорошо вы сможете сторговаться с 3D-печатниками в вашем регионе.
    Продублирую ссылку на 3d-модель миньона: https://www.thingiverse.com/thing:5196086
     
    Airbus нравится это.
  4. vvr

    vvr Инженерище

    Прикольно получилось.
    молодца!!!
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Эх! Попрошу может Parovozz напечатает. А какой материал пластика нужен? Они же вроде разные?
     
  6. parovoZZ

    parovoZZ Гуру

    Я сейчас в приполярье. А так можно.
     
  7. Technomagic

    Technomagic Нерд

    Мы использовали PLA, он самый дешевый и в печати удобен благодаря тому что его не корёжит при печати. Из недостатков PLA я бы отметил его твердость, это усложняет постобработку. Когда деталь нужно быстро подрезать канцелярским ножом после печати, то сделать это трудно. А дорабатывать канцелярским ножом детали приходится часто: удалять поддержки, сопли, доводить детали "по месту" до нужного размера.
     
    Последнее редактирование: 16 янв 2022
    Airbus нравится это.
  8. Airbus

    Airbus Радиохулиган Модератор

    Ок! Спасибо!
     
  9. Technomagic

    Technomagic Нерд

    Добавил исходные файлы 3D моделей в Solidworks 2018. Можно скачать и изменять как захочется.
     
  10. parovoZZ

    parovoZZ Гуру

    PLA на солнце корежится.