Как сделать робота чтобы объезжал препятствия

Добавлено: 18.08.2017, 05:20 / Просмотров: 64231

В этом проекте мы будет делать «движущиеся картинки». Они будут двигаться вперед и назад с помощью Arduino, к которому мы подключим электромотор, H-bridge и ... неподвижные картинки.

До того, как появилось кино, движущиеся картинки создавались с помощью прибора, называемого зоотроп. Зоотроп создает иллюзию движения из статических картинок, которые немного отличаются друго от друга.

Конструкция его довольно простая. Это цилиндр, в верхней части цилинда делаются небольшие прямоугольные отвестия-прорези. В нижней части цилиндра (там где прорезей нет) на внутренней его стороне закрепляется полоска с картинками, которые будут «двигаться». Надо смотреть на картинки через прорези. Когда цилиндр начинает вращаться картинки начинают «оживать». Выглядит вот так:

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

В нашем проекте «Вертушка с моторчиком» мотор вращался только в одном направлении. Если поменять полярность питания, подаваемого на двигатель, то он начнет вращаться в противоположную сторону. Не очень практично каждый раз, когда нам требутся поменять направление вращения двигателя, переключать проводки двигателя. Для автоматизации этой задачи придумали специальный компонент, который называется H-bridge. H-bridge — это интегральная микросхема, схема, которая содержит множество элементов, плотно «упакованных» в  в один комнонент. С помощью интегральных микросхем можно составлять достаточно сложные схемы, состоящие из легко заменяемых компонентов. Например, H-bridge, который мы будем использовать в этом проекте, содержит внутри несколько транзисторов. Чтобы собрать его, может понадобится еще одна макетная плата.
Для доступа к «внутренностям» интегральной схемы используются пины (выходы), расположенные по ее бокам. Разные компоненты имеют разное количество выходов, и не все из них используются в конкретной схеме. Для удобства выходы интегральных схем нумеруются, нумерация выводов ведется против часовой стрелки, начиная от первой ножки, находящейся под ключом, который может иметь вид засечки или углубления.

В нашем проекте мы используем микросхему L293D. Назначение пинов можно посмотреть на схеме. С ее помощью можно управлять двумя двигателями, каждый из которых можно будет вращать либо в одну, либо в другую сторону. Можно также подключить четыре двигателя, тогда каждый из них можно будет вращать только в одну сторону. Мы будем вращать двигатель в две стороны, поэтому используем схему подключения для двух двигателей.

Выходы 1 и 9 предназначены для включения и выключения двигателей, если их подключить к  выходам Arduino с ШИМ, то можно управлять скоростью вращения двигателей. Выходы 2 и 7, и 10 и 15 управляют направлением вращения двигателей, первого и второго соответственно (парами). Если на выход 2 подать HIGH, а на выход 7 LOW, то мотор будет вращаться в одну сторону, наоборот — в другую сторону. Если на эти выходы подать одинаковый сигнал (LOW или HIGH) то мотор вращаться не будет. То же и для второго двигателя. К выходам 3 и 6 подключается один мотор (напряжением на этих выходах управляют 2-й и 7-й), к выходам 10 и 15 — второй мотор. Выход 8 соединяют с положительным полюсом источника питания двигателей. Выход 16 — с положительным полюсом источника питания микросхемы (5В). Выходы 4, 5, 12, 13 подключаются на «землю», они же используются для теплоотвода от схемы (в нашем случае нагрев был небольшой, так как подлючили только один двигатель и не надолго, а вообще греется она хорошо, может понадобиться радиатор).

Схема, которую мы будет собирать с использованием H-Bridge L293D:

В схеме присутствуют два выключателя. Один для включения и выключения моторчика (если мотор включен, то нажатием на кнопку он выключается, если выключен, то нажатием включается). Второй — для изменения направления вращения двигателя. Потенциометр используется для регулировки скорости двигателя.

Собираем схему

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

const int motorenablepin=9;//пин для пуска мотора const int directionpin1=3;//первый пин для направления мотора const int directionpin2=2;//второй пин для направления мотора const int onoffswitchpin=5;//пин с кнопкой для пуска/останова мотора const int directionswitchpin=4;//пин с кнопкой для смены направления мотора const int potens=A0;//пин с потенциометром int potensVal=0;//значение с потенциометра //переменные для отражения текущего состояния мотора int onoffswitchSt=0;//текущее состояние кнопки для пуска мотора int directionswitchSt=0;//текущее состояние кнопки для смены направления мотора int previosonoffswitchst=0;//предыдущее состояние кнопки запуска мотора (надо для определения смены состояния кнопки int motorenabled=0;//запущен ли в текущий момент мотор int motorSp=0;//скорость мотора int motordirection=1;//направление мотора int prevdirectionswitchpinst=0;//предыдущее состояние кнопки смены направления //мотора (надо для определения смены состояния кнопки void setup(){ pinMode (motorenablepin,OUTPUT);//инициализация пинов pinMode (directionpin1, OUTPUT); pinMode (directionpin2,OUTPUT); pinMode (onoffswitchpin,INPUT); pinMode (directionswitchpin,INPUT); digitalWrite(motorenablepin,LOW);//выключаем мотор на всякий случай } void loop (){ onoffswitchSt=digitalRead(onoffswitchpin);//текущее состояние кнопки запуска мотора delay(1); directionswitchSt=digitalRead(directionswitchpin );//текущее состояние кнопки смены направления мотора potensVal= analogRead(potens);//считываем значение потенциометра motorSp=map(potensVal,0,1023,0,254);//преобразуем значение в скорость мотора if (onoffswitchSt != previosonoffswitchst){//если состояние кнопки поменялось if(onoffswitchSt==HIGH){//и она нажата motorenabled=!motorenabled;//меняем состояние мотора на противоположное } previosonoffswitchst=!previosonoffswitchst;//меняем предыдущее состояние кнопки на противоположное } if (directionswitchSt != prevdirectionswitchpinst){//аналогично для направления вращения if(directionswitchSt==HIGH){ motordirection=!motordirection; } prevdirectionswitchpinst=!prevdirectionswitchpinst; } //в зависимости от значения переменной, определяющей состояние мотора запускаем //мотор с нужной скоростью или останавливаем его if(motorenabled==1){ analogWrite(motorenablepin,motorSp); } else{ digitalWrite(motorenablepin,LOW); } //в зависимости от значения переменной, определяющей направление вращения мотора устанавливаем направление if(motordirection==1){ digitalWrite(directionpin1,HIGH); digitalWrite(directionpin2,LOW); } else{ digitalWrite(directionpin1, LOW); digitalWrite(directionpin2,HIGH); } }

Когда собрана схема и написана программа, можно сделать тестовый пуск моторчика. И так, с помощью первой кнопки мы пускам/останавливаем мотор, потенциометром регулируем скорость вращения, второй кнопкой управляем направлением вращения. мотора.

Теперь осталось собрать непоследственно сам Зоотроп. Используем диск, который мы делали для предыдущего проекта. Приделаем к нему цилиндр с прорезями и картинки.

На этом видео можно попытаться увидеть как работает Зоотроп.

25 апреля 2013, 0:02

В этом проекте Arduino будет управлять вращающейся с помощью моторчика вертушки.

Управлять моторами с помощью Arduino намного сложнее чем управлять светодиодами. Во-первых, моторы требуют больше тока чем может дать Arduino. Во-вторых, моторы могут сами генерировать электрический ток за счет являния, называемого индукцией, и этот ток может повредить элементы схемы. Однако, моторы приводят в движение разные вещи, и от этого проекты становяться интереснее. В общем оно того стоит.

Для того, чтобы что-то двигать, требуется много энергии.  Кроме того, что моторы требуют больше тока, чем дает Arduino (только 40мА на цифровом выходе), некоторым так же нужно более высокое напряжение. В момент начала движения  или при высоких нагрузках, потребление тока также может значительно возрастать.

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

Электромотор — это индуктивное устройство. Индукция — это являние возникновения изменяющегося магнитного поля вокруг провода, по которому протекает изменяющийся электрический ток. Внутри электромотора есть катушка с плотно намотанным на нее медным проводом. Когда на мотор подается электрический ток, внутри этой катушки возникает магнитное поле. Это магнитное поле заставляет вал двигателя вращаться.

В обратную сторону индукция тоже работает: мотор может вырабатывать электричество, если вращать его вал. Если подключить к выходам мотора светодиод и начать вращать вал двигателя, то диод будет светиться. Так можно превратить мотор в маленький электрогенератор.

Если прекратить подавать электричество, то он по инерции продолжает какое-то время вращаться. Пока он вращается, он вырабатывает электрический ток, противоположный по направлению тому, который его вращал. Этот ток называют «обратным током», он может вывести из строя транзистор. Чтобы избежать этого, параллельно с мотором надо подключить диод и обратный ток будет проходить через диод.

С учетом всего вышесказанного схема для управления мотором получается такая:

Поскольку для мотора требуется много энергии, он питается от дополнительного источника — 9-ти вольтовой батерейки. И так получается, что управление транзистором производится с помощью Arduino, а сам мотор запитан от дополнительного мощного источника электроэнергии. Обязательное правило, которое следует соблюдать если в схеме используется несколько источников энергии — минусы всех источников должны быть соединены вместе.

Теперь, когда макет готов, осталось написать программу:

int motor=9; //пин управления мотором int switchButn=2; //кнопка включения мотора int switchButnVal=0;//значение считанное с кнопки включения мотора void setup(){ Serial.begin(9600); pinMode (switchButn,INPUT); pinMode(motor,OUTPUT); } void loop(){ switchButnVal=digitalRead(switchButn);//считываем состояние кнопки Serial.println(switchButnVal); if(switchButnVal==HIGH){ digitalWrite(motor,HIGH);//если кнопка нажата включаем мотор } else{ digitalWrite(motor,LOW);//если не нажата — выключаем } }

Работает вот так:

Чтобы за вращением наблюдать было интереснее, мы сделали деревянный диск, наклеили на него разноцветный рисунок, и подсоединили к мотору.

Если скорость вращения мотора уменьшить, то на диске с рисунком,  который крутиться, можно увидеть интересный оптический эффект. Для управления скоростью вращения в схему добавили потенциометр, и на затвор транзистора подаем напряжение от 0 до 5В, в зависимости от положения потенциометра. Программа чуть-чуть увеличилась.

int motor=9; //пин управления мотором int switchButn=2; //кнопка включения мотора int switchButnVal=0;//значение считанное с кнопки включения мотора int pot=A0; // пин с потенциометром int potVal=0;//значение считанное с потенциометра int Val=0;//значение выдаваемое на пин управления мотором void setup(){ Serial.begin(9600); pinMode (switchButn,INPUT); pinMode(motor,OUTPUT); } void loop(){ potVal=analogRead(pot);//читаем значение с потенциометра Val=map(potVal,0,1023,0,254); // в значение для вывода switchButnVal=digitalRead(switchButn);//считываем состояние кнопки Serial.println(switchButnVal); if(switchButnVal==HIGH){ analogWrite(motor,Val);//если кнопка нажата включаем мотор } else{ digitalWrite(motor,LOW);//если не нажата — выключаем } }

Arduino   Electronic   Mosfet   Motor   transistor

Комментарии


Источник: http://medinskiy.net/nfss/tags/motor/


Закрыть ... [X]

Учим робота ориентироваться в пространстве. Робот Как сделать рамку квиллинг


Как сделать робота чтобы объезжал препятствия Как сделать чтобы робот объезжал препятствия
Как сделать робота чтобы объезжал препятствия Роботы, созданные фанатами LEGO MINDSTORMS LEGO
Как сделать робота чтобы объезжал препятствия Автоматический полив грядок и газона: как установить систему
Как сделать робота чтобы объезжал препятствия Ботокс для волос купить в интернет-магазине
Как сделать робота чтобы объезжал препятствия Выравнивание стен по маякам штукатуркой Ротбанд своими
Как сделать робота чтобы объезжал препятствия Где был изготовлен Ваш смартфон как узнать?
Как сделать робота чтобы объезжал препятствия Дачный душ с солнечным коллектором: горячая вода своими
Как сделать робота чтобы объезжал препятствия Дачный туалет своими руками. Как сделать туалет на даче
Замена радиатора печки Нива Как сделать БУКЕТЫ ИЗ КОНФЕТ. Пошаговые ФОТО Как сделать ламинирование ресниц в домашних условиях? Как сделать своими руками Как сделать скриншот в eve online - Смотрим видео онлайн Мастер классы, как сделать игольницу своими Печеночные котлеты, рецепты с фото на m: 33