Сделай сам робота — рыбу на Arduino

Механическая часть

Для тела рыбы можно использовать полистирол, который обычно применяется в качестве изоляционного материала для стен. Недорогой, очень надежный и легкий: он плавает легко и легко формуется. Большое дело.

robofish3

Для того, чтобы движение рыбы было более реалистичным, необходимо сделать три шва между корпусом и хвостовым плавником. В качестве  приводов можно использовать  сервоприводы для моделирования. Небольшие достаточно мощные и легко управляемые микроконтроллером cервоприводы идеально подойдут, потому что с ними вы можете управлять движением небольшого вала, соединяющего все сегменты рыбы.
Тело рыбы делится на центральную  и три подвижные частей, каждая из которых перемещается с помощью сервопривода. Хвостовой плавник изготовлен с пластика взятого из упаковки товаров супермаркета .

robofish5

Гибкость плавника позволяет дать больше реализма в движении рыбы. Чтобы получить гармоническое движение, каждая часть присоединена к другой с помощью сервопривода: тело сервопривода должен быть приклеен на отрезке тела, а  рычаг сервопривода (соединен с валом) должны быть склеены на следующим образом.

 

robofish6

Очевидно, что для робота-рыбы нужна система для обнаружения препятствий, таких как подводные камни и сваи. Чтобы создать это, можно использовать два инфракрасные датчики с цифровым выходом. Эти компоненты могут обнаруживать объекты до 5 см и довольно легко управлять действиями Arduino на движение рыбы-робота. После того, как рыба- робот будет заключена в пластиковый мешок, она спокойно может работать в воде.

robofish10

Расположите датчики на передней части рыбы-робота с наклонном до 45 °, один слева и один справа. В голове рыбы-робота необходимо  выкроить место для управления, батареи и датчиков.
Профиль рыбы на Ваш выбор. Не беспокойтесь слишком о весе, как в нашем прототипе мы добавили 460 г дополнительного веса, чтобы обеспечить нулевую плавучесть.

 

Электрические соединения

ROBOFISH2

В качестве контроля мы выбрали Arduino совместимого с Seeedstudio но можно использовать  любую версию Arduino будет. Четыре простых батареек АА обеспечат напряжение, достаточное для питания сервопривода, в то время как плата Arduino запитывается этим же натяжением, благодаря своему внутреннему регулятору 5 вольт.
В рыбе-роботе трудно использовать обычный переключатель (вы не сможете включать и выключать его, так как все покрыто пластиком) мы использовали небольшой магнитный контакт, например, те, которые используются для обнаружения открытия окна. Он состоит из геркона активированного небольшим магнитом. Поместите контакт на внешнем краю робота так, чтобы приближая магнит, можно было активировать питание робота-рыбы. Это можно заметить на видео: маленькую шишку на голове робота.
Конечно, робот-рыба будет работать до тех пор, пока магнит у неё  на голове. Умный и дешево.

Оригинал статьи смотрите здесь

Прошивка

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// ROBOFISH
// di Segatello Mirco
#include <Servo.h>
Servo Servo1, Servo2, Servo3; // create servo object to control a servo
int i, time, obstacle;
int pos1, pos2, pos3;
int pos1R, pos2R, pos3R;
int phase=45;
int velocity=2000;
int maxDeflexion=20;
int maxDefobs=20;
int actualTime;
float shift;
const int center1=98;
const int center2=90;
const int center3=105;
const int sens_SX=5;
const int sens_DX=6;
const int lostTime=3000;
void setup()
{
Servo1.attach(4);
Servo2.attach(3);
Servo3.attach(2);
pinMode(sens_SX, INPUT);
pinMode(sens_DX, INPUT);
pinMode(13, OUTPUT);
time=velocity/360;
shift=0;
}
void loop()
{
for (i=0; i<360; i++) {
pos1 = i+2*phase;
pos2 = i+phase;
pos3 = i;
if (pos1>359) pos1-=360;
if (pos2>359) pos2-=360;
if (pos3>359) pos3-=360;
if (pos1>179) pos1=360-pos1;
if (pos2>179) pos2=360-pos2;
if (pos3>179) pos3=360-pos3;
pos1R=map(pos1,0,180,center1-maxDeflexion-obstacle,center1+maxDeflexion-obstacle);
pos2R=map(pos2,0,180,center2-maxDeflexion-obstacle,center2+maxDeflexion-obstacle);
pos3R=map(pos3,0,180,center3-maxDeflexion-obstacle,center3+maxDeflexion-obstacle);
Servo1.write(pos1R);
Servo2.write(pos2R);
Servo3.write(pos3R);
delay(time);
obstacle=int(shift);
if (digitalRead(sens_DX)==0) {
if (obstacle<maxDefobs) shift=shift+0.05;
actualTime=millis();
}
if (digitalRead(sens_SX)==0) {
if (obstacle > (-maxDefobs)) shift=shift-0.05;
actualTime=millis();
}
if (digitalRead(sens_SX)==1 && digitalRead(sens_SX)==1 && obstacle!=0)
if (millis()>actualTime+lostTime) {
if (shift>0) shift=shift-0.05;
if (shift<0) shift=shift+0.05;
}
}
}

Перемещение в воде робота-рыбы происходит путем перемещения трех сервоприводов синхронизированно, в соответствии с рисунком, который напоминает букву S: каждый сегмент изменяется незначительно по фазе по отношению к предыдущему.
Для движения сервопривода мы использовали servo.h библиотеку, уже имеющихся на Arduino IDE. Вы просто объявить сервопривод и Multi-Touch соответствующий выход на усилитель, используя. приложите (контактный). Метод servo.detach () позволяет освободить выход из сервопривода, чтобы использовать его в конечном итоге в качестве выхода ШИМ.Команды, управляющие движением сервоприводов два.
Во-первых, ServoWriteMicroseconds, позволяет установить положение команды сервопривода, указав длину в микросекундах. Значение в этом случае должна быть между 1000 и 2000 мкс. Середина 1500 соответствует нейтральное положение по отношению вал линии. Второе утверждение, писать, позволяет позиционировать, задавая угол в градусах: значение угла должно быть между 0 и 180 °, 90 ° промежуточное значение, соответствующее нейтральном положении сервопривода.

Два sens_SX и sens_DX названные датчики подключены соответственно к выводам 5 и 6. В главном цикле есть является для цикла, который увеличивает переменную я через регулярные промежутки времени от 0 до 360 циклически, в общем времени, определяемого переменной скоростью.
Значение переменной я вместе с тем по фазе, определяет положение серводвигателей. Это значение называется полным 360 ° цикла, а затем должны быть компенсированы, имея в виду нейтральную позицию серво, потенциальной смены и максимальной отклонения вы хотите, чтобы дать движения.
Последнее определяется Переменная maxDeflexion (десятичные градусы) и определяет максимальное отклонение каждого хода: чем выше это значение, тем шире будет движение из трех стволов рыбы.

robofish9

С фазы установлен в 0 почту все серво будет двигаться вдоль; увеличение этого значения представляет фазовый сдвиг между положением сервопривода. В результате вы получите движение, похожее на буквы S, тем более выражен, чем больше значение фазы.

robofish8

При обнаружении препятствия, нейтральное положение сервопривода постепенно перемещается на противоположную сторону препятствия. Таким образом, рыба будет описывать дугу окружности от препятствия.
Дуга можно управлять с помощью переменной maxDefobs: чем выше это значение, тем больше будет кривизна линии кромки. Если препятствие больше не обнаруживается (время контролируемого с LostTime), движение сервопривода не возобновится идти регулярно.Каждый диапазон PIN-серво-maxDeflexion между и + maxDeflexion, а если обнаружено препятствие она колеблется между значениями -maxDeflexion + maxDefobs и maxDeflexion + maxDefobs.

 

Тестирование
Перед началом тестирования робота в воду необходимо тщательно проверить все механическое и электрическое соединение. Переверните рыбу, и контролировать движения и убедиться, что оба датчики обеспечивают сигнал к Arduino. Используйте мультиметр для измерения напряжения на выходе их: в отсутствие препятствий сигнал должен быть высоким. Проверка напряжения питания не плохая идея: убедиться, что, по крайней мере 5,5 В.
В этот момент мы готовы к водонепроницаемой робота: Есть много решений, мы ввели робота в полиэтиленовом пакете (дышать внутрь, чтобы увидеть, если это имеет отверстия и скрепите скотчем). Используйте резинки, чтобы держать сумку плотно прилегающая к телу робота и убедитесь, что серво могут свободно перемещаться.
Плавать состоится в поверхностных водах: вы, возможно, придется отягощать робота с достаточной Райт сохранить его на нужной высоте. Как упоминалось выше, в нашем прототипе, как мы добавили 460 граммов. После того, как робот плавает в правильном образом, вы можете включить его, поместив небольшой магнит, и пусть он извилисто плавать в цифровом свободы.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5 − 4 =

© 2021 Журнал научно-технического творчества педагогов и школьников "Главный конструктор"