Это еще одна версия "Голодного робота", который был сделан в 2018 году. Вы можете сделать этого робота без 3D-принтера. Все, что вам нужно, это коробка из-под чипсов, сервопривод, инфракрасный дальномер, Arduino и немного инструментов.
Список основных деталей:
• 1 х Arduino NanoЧертежи для распечатки можно скачать по ссылке.
PDF с выкройкой распечатайте в оригинальном размере без перемасштабирования.
В зависимости от Вашего принтера интерфейс может отличаться, для примера приведу пару скриншотов, как может выглядеть настройка масштабирования:
Приклейте выкройку к картону или плотной бумаге и вырежьте по контуру. Эти две части предназначены для разделения пространства внутри робота.
Теперь отрезаем прямоугольник по линии, как показано на следующем фото:
Приклеиваем его на банку с помощью клея и потом липкой лентой по краям:
Теперь нужно обрезать банку. Канцелярским ножом немного не удобно точно отрезать, поэтому сначала отрежем чуть больше и потом ножницами вырежем более точно. Будьте осторожны, канцелярским ножом можно очень сильно порезаться, т.к. при разрезании банки он очень легко может соскочить. Большим пальцем не следует обхватывать банку, как показано на следующем фото:
Более безопасно прижать палец к ладони и прижать банку к столу рукой сверху:
Теперь ножницами отрежем по шаблону:
Теперь делаем отверстия для сервопривода и USB-шнура:
С выкройки отрезаем следующую полоску и делаем верхнюю часть:
Для рук вырезаем следующую часть выкройки:
Приклеиваем:
Вырезаем:
Делаем по шаблону четыре отверстия:
Теперь прорезаем и сгибаем:
Вставляем качалку сервопривода и затем с помощью клеевого пистолета закрепляем:
Делаем деталь, которая будет приподымать голову:
Такие инфракрасные дальномеры обычно идут в комплекте с проводами, на одном конце которых есть разъём для подключения к дальномеру, а на обратной стороне провода ничего нет. Обрежем соединительные провода мама-мама и припаяем их к проводам дальномера, что бы его можно было подключить к Arduino. В зависимости, что у Вас есть в наличии и удобней (термоусадка, специальные колпачки, изолента и т.д.), то и используйте. В данном случае использовались колпачки:
Для подключения сервопривода можно сделать также:
Что бы не портить шнур, можно использовать соединительные провода папа-мама:
Если у Вас ещё не установлена Arduino IDE, загрузите её с на официального сайта и установите.
Если у Вас версия Arduino Nano c USB-UART на CH340 или CH341, драйвера для него можно скачать по ссылке.
Скетч для Arduino:
#include <Servo.h> // let's make an instance of Servo Servo armServo; // this function automatically runs only once when the Arduino's power up void setup() { // we use pin number 12 for control the robot. armServo.attach(12); // move the motor to default angle armServo.write(90); // pin A7 is for the distance sensor pinMode(A7, INPUT); // these 3 pins (pin0, pin1, pin13) are for turning on LEDs // Arduino nano already has 3 LEDs on these pins. pinMode(13, OUTPUT); pinMode(0, OUTPUT); pinMode(1, OUTPUT); } // in order to check coming hand, // we will keep the sensor value these variables int sensorValue = 0; int prevSensorValue = 0; // When the sensor value is hight than the THRESHOLD value, // The code will call action(); const int THRESHOLD = 360; void loop() { // read A7's analog value and asign the value into sensorValue sensorValue = analogRead(A7); // these two lines means that some object has come // from outside of Threshold to inside of it. if (prevSensorValue <= THRESHOLD) { if (sensorValue > THRESHOLD) { // It's time to action action(); } } // regardless the action, save current sensor value prevSensorValue // so that we can check the direction prevSensorValue = sensorValue; // this delay controls how often this loop is running // without this delay, this loop runs too fast // then, the differences between previous and current sensor value // can not be meaningful. delay(10); } void action() { // call this function for turning on three LEDs all together led(true); // eating sequence // wait 1000ms (1 second) delay(1000); // let's use pin12 for motor control armServo.attach(12); // let's move the motor to degree '10' (move the arm up) armServo.write(10); // wait 300 ms delay(300); // let's move the motor to degree '70' (move the arm down) armServo.write(70); delay(500); // after ate delay(100); armServo.write(50); delay(250); armServo.write(70); delay(250); armServo.write(50); delay(250); armServo.write(70); delay(250); armServo.write(50); delay(250); armServo.write(70); delay(250); armServo.write(50); delay(250); armServo.write(90); delay(250); // release arm's torque armServo.detach(); // call this function for turning off three LEDs all together led(false); } void led(bool onOff) { // pin 13's LED turns on when it is high // pin 0, 1's LED turn on when it is low if (onOff) { digitalWrite(13, HIGH); digitalWrite(0, LOW); digitalWrite(1, LOW); } else { digitalWrite(13, LOW); digitalWrite(0, HIGH); digitalWrite(1, HIGH); } }
Загрузив скетч в Arduino Nano, переходим к установке деталей внутри корпуса.
С помощью клеевого пистолета закрепляем сервопривод и инфракрасный дальномер:
Подключаем Arduino Nano и размещаем её на дне корпуса:
Наденьте качалку на сервопривод, подключите питание Arduino с помощью USB-кабеля и отрегулируйте угол руки. Поскольку этот робот очень маленького размера, такие детали как подшипники, использовать не имеет смысла, поэтому руки закреплять будем с помощью нейлоновых стяжек закрепляем руки. Что бы не замкнуть монетами электронику и монета не проваливалась и прикрываем Arduino сверху диском:
Прикрепляем верх, приклеиваем или рисуем глаза:
На этом всё, наш робот, поедающий монеты готов:
Возможно некоторые моменты по фотографиям могут быть непонятны, поэтому в видео кроме демонстрации работы также добавил видеолог по сборке.