Дирижабль, управляемый с компа — сделай сам!


Эй, моделисты, роботехи и сочувствующие! Хотите попробовать что-нибудь по-настоящему большое? Сегодня в домашних условиях из подручных материалов мы построим дирижабль!

Для постройки дирижабля Sverdlov Airship v 0.5 нам потребуется:


1.Ардуино-совместимый контроллер. Мы изготовили MRC28 по материалам сайта robozone.su.

2.Радиомодем с интерфейсом UART. Впрочем, можно летать на проводе RS-232 или USB. Мы купили Aurel-wiz-434. Две штуки — как приемник и передатчик.

3.Оболочка и гелий. В качестве оболочки возьмите радиозонды метеорологические. Поищите в своем городе — в Екб их продает ОАО «Метео» на Студенческой. Если нет — купите на Ебае. Нужны радиозондовые оболочки на 650 грамм — раздуются и поднимут больше. Гелий нужен марки «Б», у нас он продается на техгазе, баллон за 2000 + аренда\покупка баллона.

4.Винты, движки и драйверы к ним. От старых коллекторных помощнее — потянут в тихом помещении без сквозняков. До бесколлекторных, тянущих по 500 грамм.

В нашей альфа-версии стояли движки от советского магнитофона и драйвер к ним с того же робозона. В нынешней — бесколлекторные движки на 7А каждый и соответствующие драйверы к ним, купленные в магазине Пилотаж-RC. Как мы намаялись с подключением драйверов!

5.Сервомотор. Нужен для изменения вектора тяги. Наш выбор Hitec HS-49B, но можете взять любой подходящий.

6.Аккумулятор\батарея. Определитесь по движку. Можно использовать новый литий-полимерный аккум из магазина моделей, можно — 8-16 штук «Крон». Мы брали и то, и другое.

7.Рама. Алюминиевый уголок, полосу и трубу поищите в магазине стройматеиалов. Если кто умеет — может выклеить гондолу из углепластика.

8. Джойстик. Рулить будем именно им.

Изготовьте раму — нарежьте алюминиевый уголок ножовкой и склепайте каркас. Можете свинтить, но пользуйтесь гроверами — двигатели при нашей точности могут дать вибрацию, которая развинтит все крепления. Предусмотрите крепления для серводвигателя, место под вал, опору для электронных компонентов. Не забывайте, что драйверы двигателей нужно охлаждать. Разместите все на отведенных местах.

При достаточной аккуратности, в итоге получится нечто вроде этого:

В верхней половине укреплены батареи и драйвер двигателей (прикручен к раме, как к радиатору). Усилие с сервопривода шестерни передают на вал с закрепленными двигателями. Снизу — контроллер и отдельно лежит радиомодем.

Драйверы двигателей, радиомодем и сервомашинку подключите в соответствующие выходы ардуино.

Залейте прошивку.

#include <Servo.h>

// Серва для управления вертикального направления дирижабля

// ServoDirigable

Servo serDir; // Номер устройства num = 0

int pinSerDir = 2;

struct Motor {

int dir; // Направление

int enable; // Скорость

};

Motor motorLeft = {7, 6}; // Номер устройства num = 1

Motor motorRight = {4, 5}; // Номер устройства num = 2

void setup()

{

//Servo

serDir.attach(pinSerDir);

//MotorLeft

pinMode(motorLeft.dir, OUTPUT);

pinMode(motorLeft.enable, OUTPUT);

//MotorRight

pinMode(motorRight.dir, OUTPUT);

pinMode(motorRight.enable, OUTPUT);

//Serial

Serial.begin(9600);

// Выставляем все устройства на исходную позицию

serDir.write(90);

}

void loop()

{

int num;

int pos;

if (Serial.available() > 1) {

// Считываем номер устройства

num = Serial.read();

// Считываем позицию для движения устройства

pos = Serial.read();

if(num==0){writeServo(serDir, pos);}

if(num==1){writeMotor(motorLeft, pos);}

if(num==2){writeMotor(motorRight, pos);}

}

}

void writeServo(Servo ser, int pos) {

if(pos>180) {pos = 180;}

if(pos<0) {pos=0;}

ser.write(pos);

}

void writeMotor(struct Motor mot, int pos) {

if(pos<0){pos=0;}

if(pos>255){pos=255;}

digitalWrite(mot.dir, HIGH);

analogWrite(mot.enable, pos);

}

int SWread()

{

byte val = 0;

while (digitalRead(rx));

//wait for start bit

if (digitalRead(rx) == LOW) {

delayMicroseconds(halfBit9600Delay);

for (int offset = 0; offset < 8; offset++) {

delayMicroseconds(bit9600Delay);

val |= digitalRead(rx) << offset;

}

//wait for stop bit + extra

delayMicroseconds(bit9600Delay);

delayMicroseconds(bit9600Delay);

return val;

}

}

Подключите к компу джойстик и второй радиомодем. Запустите управляющую программу на питоне.

'''

Created on 24.02.2011

@author: pankratov.vs

'''

import pygame

import serial

ser = serial.Serial(port = '/dev/ttyUSB0', baudrate = 9600)

motor = 0

turn = 0

def handleJoyEvent(e):

global motor

global turn

if e.type == pygame.JOYAXISMOTION:

#X

if (e.dict['axis'] == 0):

turn = e.dict['value']

motorSpeed = chr(calcSpeed())

if(turn<0):

ser.write(chr(1))

ser.write(motorSpeed)

ser.write(chr(255))

else:

ser.write(chr(2))

ser.write(motorSpeed)

ser.write(chr(255))

#Y

if (e.dict['axis'] == 1):

pos = e.dict['value']

move = round(pos * 90, 0)

if (move < 0):

servo = int(90 - abs(move))

else:

servo = int(move + 90)

servoPosition = chr(servo)

ser.write(chr(0))

ser.write(servoPosition)

ser.write(chr(255))

#uncomment to debug

#print servo, servoPosition

#Z

if (e.dict['axis'] == 2):

pos = e.dict['value']

motor = int(round((1-pos)*90))

motorSpeed = chr(calcSpeed())

if(turn==0):

lmotor = chr(motor)

rmotor = chr(motor)

else:

if(turn<0):

lmotor = chr(calcSpeed())

rmotor = chr(motor)

else:

lmotor = chr(motor)

rmotor = chr(calcSpeed())

ser.write(chr(1))

ser.write(lmotor)

ser.write(chr(255))

ser.write(chr(2))

ser.write(rmotor)

ser.write(chr(255))

#uncomment to debug

#print motorSpeed

#Throttle

if (e.dict['axis'] == 3):

pass

elif e.type == pygame.JOYBUTTONDOWN:

# uncomment to debug

#str = "Button: %d" % (e.dict['button'])

#output(str, e.dict['joy'])

if (e.dict['button'] == 0):

print "Bye!\n"

ser.close()

quit()

def output(line, stick):

print "Joystick: %d; %s" % (stick, line)

def calcSpeed ():

global motor

global turn

curTurn = int(round(motor * abs(turn)))

curSpeed = motor - curTurn

return curSpeed

def joystickControl():

while True:

e = pygame.event.wait()

if (e.type == pygame.JOYAXISMOTION or e.type == pygame.JOYBUTTONDOWN):

handleJoyEvent(e)

def main():

ser.open()

ser.isOpen()

pygame.joystick.init()

pygame.display.init()

if not pygame.joystick.get_count():

print "\nPlease connect a joystick and run again.\n"

quit()

print "\n%d joystick(s) detected." % pygame.joystick.get_count()

print chr(1)

myjoy = pygame.joystick.Joystick(0)

myjoy.init()

joystickControl()

if __name__ == "__main__":

main()

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

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

Теперь выведите ваш дирижабль в открытое безветренное пространство - от школьного спортзала до тихого пустыря. А теперь - кораблю - взлет! От винта!

В чем отличия от предыдущей версии?
1.Поставлены бесколлекторные движки с тягой до 600 грамм и драйверы к ним. Теперь он летает быстро.
2.Установлен мощный аккумулятор. Теперь он летает долго.
3.Шары прикреплены к дирижаблю достаточно жестко - с помощью опорной рамы и тесьмы.
4.Управление выведено на джойстик.
5.Наконец, подключен радиомодем.

Над чем работать? Стабилизация движения, повороты, понизить чувствительность управления, научить избегать препятствия.

Опубликовано в журнале сообщества uralrobot.ru


0 комментариев на «“Дирижабль, управляемый с компа — сделай сам!”»

    • Мы тоже о них мечтаем. 🙂 И о вытекающих.

    • Собственно, следующий по компоновке будет напоминать именно Киров.

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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение