Робот-копилка
- Войдите на сайт для отправки комментариев
Пт, 14/01/2022 - 22:53
Приветствую форумчан. Представляем вашему вниманию робокопилку. В роботе применен всего один сервопривод, датчик расстояния и контроллер. Проект подходит для сборки начинающим разработчикам при условии, что у вас есть паяльник, 3д-принтер и большой адронный коллайдер.
Если положить мелкий предмет роботу в руки, он немедленно заглатывает содержимое в себя.
Детали для печати корпуса на 3д-принтере лежат на thingiverse.
Для сборки проекта понадобится:
- Arduino pro mini
- Ультразвуковой дальномер HC-SR04
- Сервопривод SG90 или аналогичный
- Блок питания 5V или аккумуляторы
- Корпус напечатанный на 3D-принтере
- Светодиод и резистор 220 Ом (опционально)
Схема:
Код для Arduino:
01 | // Пины для подключения дальномера, светодиода, сервопривода// |
02 | #define trigPin 9 // |
03 | #define echoPin 8 // |
04 | #define led 10 // |
05 | #define servopin 7 // |
06 |
07 | //основные параметры |
08 | #define chewing 4 // Сколько раз пережёвываем проглоченное |
09 | #define blizost 10 // Расстояние, до которого будет реагировать датчик (в сантиметрах) |
10 |
11 | //состояния открытия рта. Всего их три: закрыт, открыт, приоткрыт. |
12 | //Настраиваются индивидуально под каждый сервопривод (значения от 0 до 180 градусов). |
13 | #define mouthClose 90 // Рот закрыт |
14 | #define mouthOpen 30 // Рот открыт |
15 | #define mouthAjar 70 // Рот приоткрыт |
16 |
17 | #include <Servo.h> // Подключаем библиотеку сервопривода |
18 | Servo Sergo; |
19 |
20 | void setup () { |
21 | Serial .begin(9600); //Инициализируем последовательный порт чтобы выводить в него расстояния определенное датчиком |
22 | |
23 | pinMode(trigPin, OUTPUT); // |
24 | pinMode(echoPin, INPUT); |
25 |
26 | Sergo.attach(servopin); // в скобках номера пина к которому подключен сервопривод |
27 | sleep(); // установим сервопривод в исходное положение, т.е. рот закрыт |
28 | } |
29 |
30 | void loop () { |
31 | int duration, distance; |
32 | digitalWrite(trigPin, LOW); // Для большей точности установим значение LOW на пине Trig |
33 | delayMicroseconds(2); |
34 | digitalWrite(trigPin, HIGH); // Теперь установим высокий уровень на пине Trig |
35 | delayMicroseconds(10); |
36 | digitalWrite(trigPin, LOW); |
37 | duration = pulseIn(echoPin, HIGH); // Узнаем длительность высокого сигнала на пине Echo |
38 | //Переводим скорость звука из 343 м/с в см/мкс: s = duration/29 |
39 | //Поскольку расстояние пройдено дважды, то s = duration / (29*2) |
40 |
41 | distance = duration / 58; // Рассчитываем расстояние в сантиметрах |
42 | Serial .print(distance); // Выведем значение в Serial Monitor |
43 | Serial .println( " cm" ); |
44 |
45 | if (distance < blizost) { // Если расстояние до предмета меньше заданного, то проглатываем |
46 | om_nom_nom(); |
47 | digitalWrite(led, HIGH); |
48 | } |
49 | delay(100); |
50 | } |
51 |
52 | void om_nom_nom() { |
53 | digitalWrite(led, HIGH); // Зажигаем лампочкой |
54 | Sergo.attach(servopin); // Подключаем сервопривод |
55 | delay(200); |
56 |
57 | Sergo.write(mouthOpen); // открываем рот и ждем пока предмет свалится в него |
58 | delay(700); |
59 |
60 | // жуем // |
61 | for ( int x = 0; x < chewing; x++) { |
62 | Sergo.write(mouthAjar); |
63 | delay(250); |
64 | Sergo.write(mouthOpen); |
65 | delay(250); |
66 | Serial .println( "nyam" ); |
67 | } |
68 | sleep(); //спим |
69 | } |
70 |
71 | void sleep(){ |
72 | Sergo.write(mouthClose); |
73 | delay(250); |
74 |
75 | Sergo.detach(); // отключаем питание сервопривода, иначе он будет жужжать |
76 | digitalWrite(led, LOW); // гасим светодиод |
77 | } |
Видео с процессом изготовления и демонстрация работы робота на YouTube. https://youtu.be/6AjMIHM4uXA
Красивое...
Но 3Д-принтера, увы, нету... В принципе, я так понимаю, что подойдет любая банка с открывающейся крышкой + подобрать какой то совок.
Тема хорошая - образовательная.
И печать, и программирование, и оформление проекта.
Вот тут идеи как можно робота-копилку сделать:
http://roboforum.ru/forum10/topic18094-210.html
для экономии батарей в спячку отправлять еще бы
Да вообще лучше микрик под "ковш" и просто по нажатию закидывать. Правда МК этой штуке вроде как и не нужен, ну да пофиг )
C ультразвуковым датчиком он может рот заранее приоткрывать при приближении объекта.
Ну как же...
Приходит молодой хакер к матерому и спрашивает -Гуру, научи как взломать банкомат?
-Ну берешь ноутбук и кувалду, подходишь к банкомату, бьешь его кувалдой, он разбивается, хватаешь бабки и смываешься.
-А ноутбук то зачем?
-А какой ты хакер без ноутбука?
Ардуинофобы детектед)