45

Соберем ШестиНог'а Часть -1.

Статья вступление, здесь не будет количества деталей (легкое описание), подробного описания подхода к сборке, а только «как все начиналось».

Побудило к написанию отсутствие адекватных описаний "на пальцах" как это все создается .


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

Соберем ШестиНог'а Часть -1. Arduino, Начинающий, Робототехника, Гексапод, Шестиног, Длиннопост

задание с которым справится только желающий этим заниматься, я дал ему FreeCAD, показал как рисовать и сказал искать платформу и перерисовывать «под себя»!

Надо сказать он справился с этой задачей! Мы взяли платформу, он ее немного уменьшил, подогнал под, тогда уже накупленные 6 сервоприводов, отверстия чертеж (на фото не мое, но похоже).

Соберем ШестиНог'а Часть -1. Arduino, Начинающий, Робототехника, Гексапод, Шестиног, Длиннопост

Остов и ноги мы вырезали на лазерном станке из фанеры 4мм, крепления и ответные втулки вращения корневых серв напечатали на 3D Принтере. К тому моменту я докупил еще приводов до полного комплекта чтобы подстегнуть «подмастерье». Сервы были выбраны не самые лучшие, но самые недорогие и прочные. Это китайские подделки копии (по механике и габаритам) TowerPRO MG946 (MG995). 12 кг усилие по паспорту. Опробовав разные версии этих серв пришел к выводу что годными являются те у которых латунный выход на крепление, а не металлического оттенка 

Соберем ШестиНог'а Часть -1. Arduino, Начинающий, Робототехника, Гексапод, Шестиног, Длиннопост

(у оригинала латунный).

Соберем ШестиНог'а Часть -1. Arduino, Начинающий, Робототехника, Гексапод, Шестиног, Длиннопост

Внутри может быть не как у оригинала, но они мне понравились. Не питайте мокрых надежд, конечно они не цифровые (если куплены по минимальной цене) скорость отклика и работы ниже, но жажда творчества это для меня окупает.

Платформу мы взяли arduino nano (full china) добавим плату расширения на 16 каналов или запилим вторую arduino nano по I2C (может оба варианта покажем)

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


П.С. хотел назвать свою статью : -по стопам «Пробная платформа с шестью ножками..» но это не так, хотя приятно увидеть что кто то тоже хочет разобраться во всем с нуля!


П.П.С. Поражает обилие конструкций в сети и либо никакого описания процесса, либо выкладывают совершенно дикие способы ( по мне так доставание гланд через *) с кучей библиотек в кокой нибудь системе 3-х мерного проектирования которую написал "акимото" и т.д.


П.П.П.С. Это не очередной рассказ о том как наша галактика прекрасна и в ней много красивых роботов, взгляните на моего! Все чертежи, скетчи и прочее необходимое для повторение будет выкладываться.

Дубликаты не найдены

+2

А вот девитиножка было-бы круто!


Почитай Иван Ефремов - Час Быка, вот цитата про число ног у роботов СДФ:

— Меня всегда интриговало число ног у СДФ. Почему 9, почему нечётное, а не двусторонняя симметрия 2-4-6-8-10?


— Вопрос не так прост, — ответил Норин. — Выше билатеральной симметрии — триада. Геликоидальная нечётность выше двустороннего равновесия противоположностей, обычно применяемого на Земле и соответствующего поверхностной структуре окружающего мира. 5-7-9 дают особое преимущество в преодолении противоречий в бинарных системах и стойкость в двусторонне противоречивом мире, то есть возможность переходить неодолимые препятствия. Нечётность, большая, чем единица, — это выход из инфернальной борьбы противоположностей, возможность избежать диалектического качания вправо-влево, вверх-вниз. В природе это многоосные фазовые системы или трехфазный ток, например. Нечётность как свойство подмечена ещё в глубокой древности. Три, пять, семь, девять считались счастливыми и магическими числами. А у нас применяется методика косых, или геликоидальных, врезов в равновесные системы противоположных сил.

раскрыть ветку 2
+3

Не ожидал такого комментария, наверно я мыслю в ключе не геликоидальной нечетности. Спасибо, мне понравилось!

раскрыть ветку 1
0

собери девятижопа

Иллюстрация к комментарию
+2
Математика движения уже готова? Сделать механизм - плёвое дело. Как движение ножек описывать будете? Странно еще вот что: Изучение ардуино начинать с наиболее сложных задач. Управлять чем-то будете, или искусственный интеллект на ардуино-нано создадите?
раскрыть ветку 1
0

А я вас "посчитал"! (не признал вас в гриме) "П.С. хотел назвать свою статью : -по стопам «Пробная платформа с шестью ножками..» но это не так, хотя приятно увидеть что кто то тоже хочет разобраться во всем с нуля!". Да уже готово, не вышлифовано, но работает.. сейчас просто красиво опишем все, если терпения хватит.

+1

Автор - молодец! Публикуйте результаты и не обращайте внимания на субъективную критику. Любой проект который создаешь с "ноля" и когда начинаешь понимать, что готовых библиотек не хватает - приносит колоссальный опыт, тем более проект такой сложности. Желаю всяческих успехов!

P.S. Сам начинал с погодной станции по Wi-Fi, а сейчас уже ООП и коммерция. Да-да, на Arduino)

Похожие посты
57

Успешно профинансирован карманный робот - вероятно, лучший подарок на новый год

Успешно профинансирован карманный робот - вероятно, лучший подарок на новый год Робот, Собака, Arduino, Kickstarter, Робототехника, Видео

На сайте indiegogo.com успешно профинансирован Bittle — робот-собака размером с ладонь. На данный момент собрано 46 миллионов рублей.


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


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


Благодаря настраиваемой плате Arduino "неигрушку" можно улучшать с помощью различных датчиков, ИИ Raspberry Pi и других микросхем.


В комплекте имеется пульт для запуска основных движений: ходить и сидеть.

МК — ATMega328P (16 МГц),

IMU — ICM20600 (6-осевой, 16-битные гироскоп+акселерометр )

для управления сервами используется PCA9685,

ИК-приёмник — HX18388,

пищалка-зуммер (бузер),

разъём 5х2 — для подключения Raspberry Pi,

4 разъёма для подключения модулей Seeed Grove (2 цифровых, 1 аналоговый, 1 — i2c) — зажимаются в «пасти» робота,

электропитание — 7.4 В.


Робот на Github.


Предзаказ на кикстартере набора для сборки своей робо-собаки обойдётся в $225 (ожидаемый срок отправки — декабрь 2020).

Показать полностью
89

Робот на Уно Совместимой платформе

Робот на Уно Совместимой платформе Робототехника, Arduino, Робот, Программирование, Разработка, Своими руками, Свежее, Электроника, Видео, Длиннопост

Всем привет! Не пинайте сильно, это мой первый пост на пикабу. Сегодня речь пойдет об очень интересном проекте. Как то раз мне понадобилось сделать простое устройство, чтоб научить детей программированию. Всё то, что имеется в сети либо дорого, либо не удовлетворяет мои запросы. Хотелось сделать что то простое и компактное, но в то же время функциональное. Назвал робота muBot! Так как это был первый мой серьезный проект - решил делать платы в Китае.

Заказал из Китая 5 штук.

Коротко  шо по чём (основная плата):

- МК - Atmega328p-au

- Драйвер моторов MX1508

- Датчик черной линии сделан на микросхеме LM393

- Заряд АКБ сделан на ТР4056.

- Юсб - ЮАРТ сделан на CH340G

- 2 двигателя N20 100об./мин.

- разъем USB-B.

- li-pol аккумулятор 3,7в ( в моём случае старая батарея от iphone 4s)


Схемы все по даташитам, как по мне - самое верное решение!


Кроме того сделал шилд (который ещё в дороге) где есть место под OLED дисплей  128х32, барометр BMP180, сонар НС-SR04, 2 фоторезистора с компаратором LM393, 3 адресных светодиода, термометр LM35, стабилизатор 3,3в, ИК-приемник пульта ДУ, место под макетирование и несколько свободных пинов под свои нужды. Неплохо как по мне.


Устройство получилось компактным 100х130х60мм.


Спустя месяц ожиданий платы пришли, можно паять!

Робот на Уно Совместимой платформе Робототехника, Arduino, Робот, Программирование, Разработка, Своими руками, Свежее, Электроника, Видео, Длиннопост

Около 2 часов спустя белый кругляшек стал похож на что то - напоминающее плату с колёсиками! На 3д принтере напечатал упоры, чтобы плату не  клонило со стороны в сторону.

Робот на Уно Совместимой платформе Робототехника, Arduino, Робот, Программирование, Разработка, Своими руками, Свежее, Электроника, Видео, Длиннопост

Осталось дело за малым - прошивка. Дабы упростить задачу, решил залить бутлоудер от Ардуино Уно, так как это самая ходовая плата, и при работе с ней проблем не возникает. После загрузки загрузчик (прям игра слов какая то!) надо установить драйвер СH340 и программировать из под Ардуино ИДЕ ка обычную Ардуино Уно.


Осталось дождаться плат шилда, и завершить сие чудо полностью,  А пока на этом всё! Всем удачи и хорошего настроения!

Робот на Уно Совместимой платформе Робототехника, Arduino, Робот, Программирование, Разработка, Своими руками, Свежее, Электроника, Видео, Длиннопост
Показать полностью 3 1
105

Шагающий FPV дрон "Скорпион". Часть 2: Настройка и тесты

Всем привет. Недавно я писал о своём новом Гексаподе.

Шагающий FPV дрон "Скорпион". Часть 2: Настройка и тесты Гексапод, FPV drone, Arduino, Видео, Длиннопост

Вот вторая часть видео, в которой я очень подробно рассказал обо всех режимах ходьбы и о настройке прошивки. А в конце вас ждёт небольшой тест - драйв:

Если вкратце, то вот список того, что умеет робот:

У нас тут есть четыре режима ходьбы: Tripod, Tetrapod, Wave, Ripple.

Tripod (Треножник) – Робот переставляет по 3 ноги за раз.

Tetrapod (Четвероногий) – Робот переставляет по две ноги за раз, как Тетрапод (четвероногий)

Wave – Робот переставляет по одной ноге за раз, по очереди, от первой до шестой.

Ripple – Так же по одной ноге за раз, но уже в ином порядке.

Для каждого из этих режимов доступен медленной подрежим ходьбы, при активации которого скорость робота снижается в 3 раза.

Ну и дополнительные возможности:

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

Режим Rotate позволяет вращать корпус по трём осям при помощи правого и левого стиков, а так же поднимать и опускать его по вертикали.

Ещё есть режим фиксации. Можно изменить положение корпуса робота при помощи режимов Rotate или Translate, зафиксировать его, а затем выбрать один из четырёх режимов ходьбы и попробовать ходить в таком виде.

Ещё робот можете махать передними лапами, но этот режим так, для галочки, видимо просто оставалась свободная кнопка.

Шагающий FPV дрон "Скорпион". Часть 2: Настройка и тесты Гексапод, FPV drone, Arduino, Видео, Длиннопост

Прошивка взята вот из ЭТОГО проекта – это отличный большой Гексапод. Автора этого проекта зовут Марк, он проделал большую работу и написал отличный код, а затем выложил в открытый бесплатный доступ, за что надо сказать ему просто Огромное Спасибо. Мне только пришлось разобраться что к чему (не без помощи автора) и настроить прошивку под моего Гексапода, т.к. он отличается от оригинального как по размерам, так и частично по конструкции. В своём видео я изложил всю необходимую информацию о прошивке, так что любой желающий теперь сможет собрать своего робота, желаемых размеров и формы, и настроить эту прошивку для работы с ним.

Шагающий FPV дрон "Скорпион". Часть 2: Настройка и тесты Гексапод, FPV drone, Arduino, Видео, Длиннопост

В целом робот получился очень даже не плохим, особенно как за свои деньги. Без FPV системы эта штука обойдётся примерно в $70 - $80, что очень дёшево, как для радиоуправляемого шагающего робота.

Аккумулятора ёмкостью 850mah хватает на 30 минут ходьбы по ровной поверхности. Из минусов – робот получился не особо быстрым, а так же едва отрывает ноги от поверхности, из за чего цепляется ими даже за мелкие камни и ветки. Всё это я постараюсь исправить уже в следующей версии.

Этот шагающий FPV дрон – это только первый прототип, который был необходим, чтобы помочь мне разобраться в прошивке и посмотреть, как всё это должно работать на практике. Следующая пара роботов будет куда интереснее =)

Показать полностью 2
404

Шагающий FPV дрон "Скорпион"

Всем привет! Решил я наконец собрать ещё одного шагающего робота. На этот раз - это Гексапод, управляемый контроллером от PS2. На борту установлена FPV система, которая отправляет картинку на шлем и пишет её на бортовую MicroSD карту.

Ссылка на страницу проекта - тык.

Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост

Видео по сборке:

Платой управления является Mega 2560 Pro - уменьшенный аналог Arduino Mega 2560. О прошивке я подробно расскажу в следующей части.

Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост

FPV камера RunCam Split 3 с возможностью записи видео и звука на бортовую флешку. Максимальное разрешение - FullHD (1080) при 60 кадрах в секунду. Матрица тут совсем небольшая, потому по качеству видео получается не лучше, чем на бюджетных экшен камерах, но и весит эта штука всего 14 грамм, потому никаких претензий к картинке быть не может =)

Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост

Платы распределения питания для сервоприводов нарисованы самостоятельно и заказаны у производителя прототипов печатных плат.

Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост

В движение робота приводят 18 сервоприводов MG90.

Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост

Для питания используется 2S Lipo аккумулятор на 850mah.

Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост
Шагающий FPV дрон "Скорпион" Гексапод, FPV drone, Arduino, Видео, Длиннопост

В следующей части видео я подробно расскажу о прошивке, что и где нужно крутить, чтобы настроить её под Гексапода любых (в разумных пределах) размеров и, конечно, устроим небольшой тест -драйв =)

Показать полностью 13
34

Мой первый проект на ардуино

Сразу скажу что все подсмотрено из интернетов. Это мой первый опыт. Делал из того что было под руками. Хочу услышать в коментариях советы или ваше мнение по поводу проекта. Когда начался карантин я решил сделать какой нибудь интересный проект. Выбор пал на руку манипулятор. Решено было поставить руку на движущуюся платформу и управлять все с помощью пульта. Далее расскажу про само создание:


1) Рука

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

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

Для большей прочности я пропитал детали супер клеем и еще подкрасил для красоты.  Для руки я использовал самые дешевые сервоприводы (SG90). В качестве соединений я просто использовал кусочки гвоздей склеенных супер клеем. В итоге получилось такая конструкция.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

2) Пульт

Для пульта я использовал ардуино нано, радиомодуль NRF24L01, 3 джойстика и выключатель. Питается пульт от кроны и я еще в конце добавил диод. Корпус я сделал пвх пластика. Выпилил 2 части и склеил их горячими соплями. Соединил все навесным монтажом. Схему приводить не буду, тут вроде и нечего смотреть. Кому интересно то скину в комментариях.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост
Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

3) Движущуюся платформа

Платформу я вырезал также из пвх пластика. На нее поставил 2 мотор редуктора и драйвер который ими управляет (L298N), такой же радиомодуль NRF24L01 и ардуино уно ( в схеме нано но у меня в наличии лишней не было). В эту же схему подключается 4 серво из которых состоит рука манипулятор. Хотел сделать что то на подобии гусеничной платформы но не закончил. Схему набросал в протеусе.

Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост
Мой первый проект на ардуино Arduino, Робототехника, Робот, Видео, Длиннопост

Программы тоже простенькие. Передатчик считывает значение  с 3 джойстиков и  непрерывно передает массив из 6 элементов (это x и y  каждого джойстика) по радиоканалу в приёмник. 2 джойстика управляют серво и 1 джойстик моторами. Значение одного джойстика я перевел из 1024 в 510 через функцию map ( для управления скоростью моторов). Приёмник непрерывно получает  массив и с помощью операторов  If оперирует ими. Я много пробовал программ и путем проб и ошибок выбрал наиболее как по мне работающие части кода и соединил их.

Вот программа передатчика:

#include <SPI.h> // библиотека для работы с шиной SPI

#include "nRF24L01.h" // библиотека радиомодуля

#include "RF24.h" // ещё библиотека радиомодуля

RF24 radio(9, 10);

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера каналов

int transmit_data[6];

int xPin = A0; //1 джойстик

int yPin = A1; //1 джойстик

int x1Pin = A2;//2 джойстик

int y1Pin = A3; //2 джойстик

int x2Pin = A4;//3 джойстик

int y2Pin = A5; //3 джойстик

int D2 = 2; //светодиод

void setup() {

radio.begin(); //активировать модуль

radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 0); //время между попыткой достучаться, число попыток

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах

radio.openWritingPipe(address[0]); //мы нулевой канал, открываем канал для передачи данных

radio.setChannel(0x60); //выбираем канал

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика

radio.setDataRate (RF24_1MBPS); //скорость обмена. Скорость должна быть одинакова на приёмнике и передатчике

radio.powerUp(); //начать работу

radio.stopListening(); //не слушаем радиоэфир, мы передатчик

pinMode(xPin, INPUT);

pinMode(yPin, INPUT);

pinMode(x1Pin, INPUT);

pinMode(y1Pin, INPUT);

pinMode(x2Pin, INPUT);

pinMode(y2Pin, INPUT);

pinMode(D2, OUTPUT);

}

void loop() {

digitalWrite(D2, HIGH);

transmit_data[0] = map(analogRead(xPin), 0, 1035, 0, 510); // изменяем значение из 1024 в 510 для управления движения (ШИМ)

transmit_data[1] = map(analogRead(yPin), 0, 1023, 0, 510);

transmit_data[2] = analogRead (x1Pin);

transmit_data[3] = analogRead (y1Pin);

transmit_data[4] = analogRead (x2Pin);

transmit_data[5] = analogRead (y2Pin);

radio.write(&transmit_data, sizeof(transmit_data)); //отправляем получившийся массив

}

А вот приемника:


#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

#include <Servo.h>

Servo servo1, servo2, servo3, servo4;

RF24 radio(9,10);

byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"}; //возможные номера каналов

int recieved_data[6];

int ENA = 5;

int in1 = 7;

int in2 = 4;

int ENB = 6;

int degree1 = 0; // DEL SERVO 1 DEGREES

int degree2 = 0; // DEL SERVO 2 DEGREES

int degree3 = 0; // DEL SERVO 1 DEGREES

int degree4 = 0; // DEL SERVO 2 DEGREES

void setup(){

pinMode(ENA, OUTPUT);

pinMode(ENB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

servo1.attach (8);

servo2.attach (3);

servo3.attach (2);

servo4.attach (A5);

radio.begin(); //активировать модуль

radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0,15); //(время между попыткой достучаться, число попыток)

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах

radio.openReadingPipe(1,address[0]); //хотим слушать нулевой канал

radio.setChannel(0x60); //выбираем канал

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика.

radio.setDataRate (RF24_1MBPS); //скорость обмена

radio.powerUp(); //начать работу

radio.startListening(); //начинаем слушать эфир, мы приёмный модуль

}

void loop() {

byte pipeNo;

while( radio.available(&pipeNo)){ // слушаем эфир со всех каналов

radio.read( &recieved_data, sizeof(recieved_data) ); //читаем присланный массив

if (recieved_data[1] > 255){

analogWrite(ENA, recieved_data[1] - 255);

analogWrite(ENB, recieved_data[1] - 255);

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

//digitalWrite(in3, HIGH);

//digitalWrite(in4, LOW);

} else if (recieved_data[1] < 255)

{ analogWrite(ENA, 255-recieved_data[1]);

analogWrite(ENB, 255-recieved_data[1]);

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

}

else if (recieved_data[0] > 255){

analogWrite(ENB, recieved_data[0] - 255);

digitalWrite(in2, HIGH);

digitalWrite(in1, LOW);

}

else if (recieved_data[0] < 255){

analogWrite(ENA, 255 - recieved_data[0]);

digitalWrite(in2, LOW);

digitalWrite(in1, HIGH);

}

else if (recieved_data[0]==255 && recieved_data[1]==255){

digitalWrite(in2, LOW);

digitalWrite(in1, LOW);

delay(10);

}

// INCREASE MOTOR1 DEGREES

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

if ( (recieved_data[2] > 550 ) && (recieved_data[2] <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree1 = degree1 + 1;

}

// DECREASE MOTOR1 DEGREES

if ( (recieved_data[2] >= 0 ) && (recieved_data[2] < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree1 = degree1 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree1 = degree1;

}

// INCREASE MOTOR 2 DEGREES

if ( (recieved_data[3] > 550 ) && (recieved_data[3] <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree2 = degree2 + 1;

}

// DECREASE MOTOR 2 DEGREES

if ( (recieved_data[3] >= 0 ) && (recieved_data[3] < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree2 = degree2 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree2 = degree2;

}

/////////////////////////////////////////////////////////////////////////////

if ( (recieved_data[4] > 550 ) && (recieved_data[4] <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree3 = degree3 + 1;

}

// DECREASE MOTOR1 DEGREES

if ( (recieved_data[4] >= 0 ) && (recieved_data[4] < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree3 = degree3 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree3 = degree3;

}

// INCREASE MOTOR 2 DEGREES

if ( (recieved_data[5] > 550 ) && (recieved_data[5] <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree4 = degree4 + 1;

}

// DECREASE MOTOR 2 DEGREES

if ( (recieved_data[5] >= 0 ) && (recieved_data[5] < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree4 = degree4 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree4 = degree4;

}

/////////////////////////////////////////////////////////////////////////////

servo1.write (degree1); // SEND THE DEGREES TO SERVO 1

servo2.write (degree2); // SEND THE DEGREES TO SERVO 2

servo3.write (degree3); // SEND THE DEGREES TO SERVO 1

servo4.write (degree4); // SEND THE DEGREES TO SERVO 2

delay (15);

}

}


Для экономии места я убрал все отступления. Заранее извиняюсь за код если кому будет глаза резать.

Теперь о проблемах с которыми я столкнулся:

Значение на джойстиках было никак не 0 - 1024. На каждом джойстике было разное. По этому с помощью функции map значение переводились не совсем корректно и достаточно плавного изменения скорости я не добился. Так же я не решил проблему с питанием. Запитал устройство от блока питания на 12 v через драйвер двигателя, с 12 вольт подключил так же Ардуино. Далее  с клеммы 5 v отдельно подключил  4 серво. Так же у меня не хватало пинов чтобы управлять серво. Насколько я понял что серво ими лучше управлять через пины в которых есть шим но большинство пинов было занято радиомодулем и драйвером. При таком подключении все работало и потом узнал что аналоговые пины тоже можно использовать как цифровые. Серво в итоге пульсировали хотя контакты я припаял напрямую к плате. Если подскажете в чем проблема то буду очень благодарен. Ну и в конце демонстрация того что получилось.

Показать полностью 6 1
102

Книга - Конспект Ардуинщика 12 мини-проектов - от ArduBlock для детей!

В этом видео установим программу Arduino ide и соберём 12 мини проектов используя генератор кода ArduBlock.

1046

Робо-рука под управлением платы arduino UNO

Привет, меня зовут максим, я студент первого курса в колледже. Я пришел сюда похвастаться своим проектом, который получил 3-е место на конференции. Знаю, это такое себе творение, но я бился над ним больше месяца, уделяя ему почти все свободное время, и я мягко говоря горжусь им.

768

Bluetooth машинка с камерой на Arduino своими руками

Предыдущий проект с мини роботом-шпиёном вам понравился, поэтому продолжаю тему. Сегодня будем делать мини робота, который управляется со смартфона по Bluetooth, а также шлёт видео с бортовой камеры опять же на смартфон! Для этого проекта мне пришлось чуть поднять свой скилл и разработать собственное приложение под Андроид. Всё показано и рассказано в следующем видео, а ссылки на компоненты, инструкции и прошивки находятся на странице проекта вот тут https://alexgyver.ru/bluetooth-car/

Кратко о том, что как работает:

Машинка: Bluetooth модуль принимает пакеты вида $<позиция X> <позиция Y>; (пример $10 50; ) и отправляет их на Ардуину, значения преобразуются в управление моторами по танковой схеме (едем вперёд - все моторы крутят вперёд, поворот - моторы одной стороны крутятся медленнее), моторы управляются через полномостовой драйвер для двух моторов. Камера передаёт видео по каналу 5.8 GHz.

Смартфон: к смартфону подключен FPV приёмник, который принимает и показывает видео с камеры в специальном приложении (в моём случае FPViewer, но есть и другие). Приложение GyverJoy (лежит в архиве проекта в папке Android) отслеживает позицию джойстика и отправляет пакеты вида $<позиция X> <позиция Y>; по Bluetooth. Вооружившись разделением экрана в свежих версиях Android получаем одновременно и возможность управлять машинкой, и смотреть видео с бортовой камеры!

Bluetooth машинка с камерой на Arduino своими руками Своими руками, Arduino, Робототехника, Видео, Длиннопост
Bluetooth машинка с камерой на Arduino своими руками Своими руками, Arduino, Робототехника, Видео, Длиннопост
Bluetooth машинка с камерой на Arduino своими руками Своими руками, Arduino, Робототехника, Видео, Длиннопост
Bluetooth машинка с камерой на Arduino своими руками Своими руками, Arduino, Робототехника, Видео, Длиннопост
Bluetooth машинка с камерой на Arduino своими руками Своими руками, Arduino, Робототехника, Видео, Длиннопост

СХЕМА ПРОЕКТА

Bluetooth машинка с камерой на Arduino своими руками Своими руками, Arduino, Робототехника, Видео, Длиннопост
Показать полностью 6
216

Arduino для начинающих - Передача и прием данных. Библиотека Serial и коды ASCII

Это 10-й выпуск курса "Arduino для начинающих", сегодня мы поговорим о том, как пользоваться последовательным монитором порта – получать, отправлять различные данные, в общем, общаться со своим устройством и управлять им.

Список остальных выпусков:

#0 Введение в курс. Чего ожидать от этой серии для начинающих.

#1 Немного электроники и схемотехники – без них никуда.

#2 Знакомство с Arduino. Основные компоненты для начала работы.

#3 Arduino изнутри - структура, составляющие и их назначение. Микроконтроллер Atmega328P

#4 Arduino IDE Настройка и установка драйверов. Проверка работоспособности платы Arduino

#5 Первая программа – работаем со светодиодом и кнопкой.

#6 Условные операторы и циклы.

#7 Логические операции И, НЕ, ИЛИ.

#8 Функции и их применение.

#9 Библиотеки - как с ними работать и создать свою собственную.


Всем, как обычно, удачных компиляций! :)


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим: http://pikabu.ru/community/arduino

144

Машинка на ардуино управляемая с телефона

Делать было нечего, дело было вечером...

Решил я начать осваивать микроконтроллеры, взял для этого Arduino UNO китайскую. Поигравшись с датчиками и модулями посетила мысль: "Было бы круто сделать машинку которая управляется с телефона и которую можно заряжать от обычного microUSB".

Мужик сказал - мужик сделал.

Все комплектующие были куплены на Ali, за исключением металлического конструктора, на котором всё закреплено.

Роль аккумуляторов выполняют две батареи Nokia BN-02 на 2000 мАч каждая.

Зарядка происходит через два параллельно соединенных модуля TP4056.

Переключение между режимом работы и зарядки производится переключателями.

Машинка на ардуино управляемая с телефона Arduino, Bluetooth, Металлический конструктор, Робот, Начинающий, Первый длиннопост, Видео, Длиннопост

В качестве драйвера двигателей выступает TB6612FNG.

Драйвер двигателя и модули зарядки распаяны на одной плате для удобства, так же на плате выведены контакты для двигателей, батарей, питания +7,4 и +5, вывод измерения напряжения на батареях, входа управления с ардуино.

Машинка на ардуино управляемая с телефона Arduino, Bluetooth, Металлический конструктор, Робот, Начинающий, Первый длиннопост, Видео, Длиннопост

Ардуинка и телефон общаются между собой через Bluetooth модуль HM-10, а точнее китайский аналог CC2541. Связь на расстоянии 100 метров стабильная, но приторможенная, с близкого расстояния всё норм.

Машинка на ардуино управляемая с телефона Arduino, Bluetooth, Металлический конструктор, Робот, Начинающий, Первый длиннопост, Видео, Длиннопост

Используемая мобилка Xiaomi redmi 3 pro с установленной программой Remote XY (не реклама). На экране отображается управление: вперёд - назад, влево - вправо; уровень заряда АКБ; Бипка - включает сигнал на зуммере. Кнопки открыть и закрыть для клешни, которую снял для доработки.

Машинка на ардуино управляемая с телефона Arduino, Bluetooth, Металлический конструктор, Робот, Начинающий, Первый длиннопост, Видео, Длиннопост

Фото клешни.

Машинка на ардуино управляемая с телефона Arduino, Bluetooth, Металлический конструктор, Робот, Начинающий, Первый длиннопост, Видео, Длиннопост

общий вид полученной машинки и видео дрифтинга ;)

Машинка на ардуино управляемая с телефона Arduino, Bluetooth, Металлический конструктор, Робот, Начинающий, Первый длиннопост, Видео, Длиннопост

Извиняюсь за шакалистые фото и несвязное изложение)

Если есть вопросы - отвечу.

Спасибо за внимание!

Показать полностью 5 1
243

Библиотеки - как с ними работать и создать свою собственную. Драйвер двигателей L298N и ШИМ-сигнал

Привет, друзья ардуинщики! :)

Это выпуск #9 из серии видео "Arduino для начинающих" и в нем мы затронем тему создания библиотек, а также немного разберемся с тем, что такое ШИМ-сигнал и заставим двигаться колеса робота благодаря драйверу двигателей L298N.

Список остальных выпусков:

#0 Введение в курс. Чего ожидать от этой серии для начинающих.

#1 Немного электроники и схемотехники – без них никуда.

#2 Знакомство с Arduino. Основные компоненты для начала работы.

#3 Arduino изнутри - структура, составляющие и их назначение. Микроконтроллер Atmega328P

#4 Arduino IDE Настройка и установка драйверов. Проверка работоспособности платы Arduino

#5 Первая программа – работаем со светодиодом и кнопкой.

#6 Условные операторы и циклы.

#7 Логические операции И, НЕ, ИЛИ.

#8 Функции и их применение.


Удачных компиляций и с праздником вас! :)


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим: http://pikabu.ru/community/arduino

123

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих

И снова здравствуйте! :)


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


Предыдущие выпуски вы найдете здесь: 0,1,2,3,4,5,6


Видеоверсия поста:

Начнем с определения в википедии – логическая операция в программировании, это операция над выражениями логического (булевского) типа, соответствующая некоторой операции над высказываниями в алгебре логики. На первый взгляд – ничего не понятно, давайте подробнее разберемся, что такое логический или булевский тип, а так же алгебра логики.


Фраза логический (он же булевский) тип выражения означает, что это выражение может принимать только два значения – ложь или истина, 0 или 1. Если мы укажем переменной, что она имеет тип bool (boolean), то, как ни крути, значения, которые она сможет в себе нести, будут либо 0, либо 1. Помните, в предыдущих выпусках мы составляли условия, в зависимости от истинности или ложности которых происходили какие-либо действия – как раз тогда мы уже работали с булевыми выражениями.


Итак, кажется, теперь становится более понятной первая строчка определения – логическая операция, это операция над выражениями логического (булевского) типа. Теперь со второй частью об операциях алгебры логики.


Каждый из вас помнит уроки математики в школе, где мы работали с числами в привычной для нас, десятичной системе счисления – то есть с цифрами от 0 до 9. Но мир логики, если так можно сказать, отличается от нашего, ведь там все значения имеют только два состояния - 0 или 1, отсюда и возникает потребность в специальной математике для работы с логическими выражениями. Эта математика носит название «алгебра логики».


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


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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Давайте попробуем реализовать такую же систему на Arduino – возьмем, например, три кнопки и подключим их к микроконтроллеру, а так же добавим в схему светодиод и, при наличии, пьезо-извещатель.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

В нашей задаче необходимо включить оповещение при срабатывании первой или второй или третьей кнопки и, если вы помните, операция сложения так и называлась – логическое ИЛИ.


Давайте создадим три переменных типа boolean, в которые будем сохранять считанный сигнал от каждой из кнопок, и объединим эти переменные в одном условии, поставив между ними логическое ИЛИ. Эта операция записывается в виде двух вертикальных черточек и, что бы понять логику ее работы, давайте взглянем на так называемую таблицу истинности, где указываются операнды, над которыми совершается операция.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Два первых столбца это возможные значения на входах - например, если бы у нас было две кнопки и между ними мы производили дизъюнкцию. Как видите, при комбинации 00 итогом логического сложения так же будет 0. А вот следующая комбинация - 0 или 1 уже дает на выходе логическую единицу, так же, как и оставшиеся комбинации. Нижняя строка 11 так же выдаст единицу, поскольку мы производим сравнение двух положительных значений.


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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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


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


Более наглядно это можно увидеть по таблице истинности. Как можно заметить, если в комбинации присутствует хотя бы один ноль, то вся функция становится равной нулю.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Эта операция записывается в виде двойного амперсанда (&&), и, такой символ - &, по сути, заменяет слово И (от английского and). Таким образом, если вам понадобится сделать условие истинным при одновременно нескольких истинных событиях, то этот оператор то, что нужно.


Это можно увидеть, если заменить в предыдущем коде ИЛИ на И.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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


Также мы можем комбинировать операции сложения и умножения в одной функции. Например, нам необходимо включать оповещение только при одновременном наличии сигнала с 1-й и 2-й кнопки, или со 2-й и 3-й. Тогда условие примет вот такой вид:

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Скобками осуществляется разграничение между отдельными условиями и, по сути, сейчас у нас два условия в одном: первое – нажатие 1-й и 2-й кнопки, второе – нажатие 2-й и 3-й кнопки, что бы учесть выполнение одного из этих двух условий мы ставим между ними логическое ИЛИ.


И, наконец, нам осталось разобраться с третьей логической операцией, пожалуй, самой простой из всех – это логическое отрицание или логическое НЕ. Единственная его задача - менять значение переменной или функции на противоположное.


Обозначается операция восклицательным знаком, который ставится впереди переменной или функции. Например, первая переменная кнопки при считывании значения с порта микроконтроллера стала равна нулю, но, добавив впереди нее восклицательный знак, это значение становится обратным – то есть теперь эта связка равна единице.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Когда может понадобиться отрицание? Например, когда в условии нужно проверить не истинность какой-либо функции или переменной, а, наоборот, ее ложность. Но, как вы помните, например, оператор if разрешит нам попасть в тело условия, только если условие в его круглых скобках будет истинно, а не ложно, для ложного значения мы использовали else.


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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Для тех, кому трудно придумать свои условия, я составил небольшую таблицу зависимостей выходного сигнала от состояния 4 кнопок. Попробуйте реализовать каждое из этих условий:

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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


Ну а на этом про логические операции, пожалуй, все, не забывайте оценивать материал и писать свои пожелания и замечания, надеюсь, что вам было интересно :) Всем добра!

Показать полностью 14
196

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих

Привет начинающим ардуинщикам! :)


Прошу прощения за возникшую задержку в выпусках - болело горло и не мог записывать видео. Сегодня мы разберемся с такими понятиями как условные операторы и циклы, поговорим о том, как ими пользоваться и разберем несколько примеров их применения.


Предыдущие выпуски вы найдете здесь: 0,1,2,3,4,5


Видеоверсия поста:

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

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

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


Если взять за пример человека, то мы с вами каждый день выполняем огромное множество подобных условий на подсознательном уровне, не замечая этого. Допустим, вы решили попить чаю и пришли на кухню что бы поставить чайник. Перед тем, как его включить или зажечь газ, вы проверяете, есть ли в чайнике вода. Если воды достаточно, то можно включать чайник, если нет, то необходимо её долить. Как раз условием в данном случае и является проверка вашего чайника на достаточное количество воды. И при истинности либо ложности этого условия вы выполняете определенные действия. Тоже самое делает и микроконтроллер, если вы задаете ему какое-то условие. Например, в прошлом выпуске мы рассматривали условие нажатия кнопки и зажигали в зависимости от этого светодиод.


Такой условный оператор носит название if, что в переводе означает «если». И частично его конструкция вам уже должна быть знакома – это непосредственное указание оператора, затем необходимое условие в круглых скобках и какой-либо код, выполняющийся при истинности этого условия. Но, в случаях, когда важно учитывать не только истинность, но и ложность, то есть не выполнение заданного вами условия, после фигурных скобок пишется слово else, что в переводе означает «иначе», и ставятся такие же фигурные скобки, только уже код в них будет выполняться при ложности заданного условия.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Например, к нашему прошлому коду можно добавить условие, что при нулевом сигнале, то есть отпущенной кнопке, подать на пин 13 постоянный сигнал высокого уровня. И тогда, если кнопка не нажата, наш светодиод будет постоянно гореть, а при нажатии, мигать с указанной частотой.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

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

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Согласитесь, оператор if очень прост и удобен в использовании, но здесь стоит оговориться, ведь удобно с ним работать, только если нам необходимо проверить какое-либо одно условие. А что если их будет несколько? Представьте, что вам дали задание, например, разложить научные статьи по году их публикации, и вы, проверяя год каждой статьи, кладете их в соответствующую папку.


Но как этот процесс будет выглядеть с точки зрения алгоритма для микроконтроллера и оператора if? Давайте запишем. Очевидно, что вам потребуется сделать такое количество алгоритмов, какое количество годов будет у ваших статей. Ведь каждый раз мы должны проверить год на соответствие и в случае совпадения, положить документ в папку, либо же отправить его на проверку другому алгоритму.  

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

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


И здесь нам на помощь приходит еще один оператор выбора, имеющий название switch, что в переводе означает коммутатор или переключатель. Его удобство заключается в том, что нам не нужно теперь создавать каждый раз новое условие, чтобы проверить одно и тоже значение, а всего лишь необходимо указать в круглых скобках оператора переменную, которая будет принимать это значение, а сам оператор осуществит поиск из возможных вариантов нужного нам значения, и выполнит соответствующий ему код.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Что бы стало понятно, вернемся к нашей задаче распределения статей. В качестве постоянно изменяющейся переменной мы можем указать оператору значение года публикации статьи, а в возможных вариантах существующие года публикации. И, таким образом, получив очередное значение года, оператор выберет необходимый год из вариантов и выполнит действия, указанные в пределах от оператора case до оператора break, а затем выйдет из оператора switch. Break в нашем случае переводится как выход, а case - это возможный случай или вариант. Если же необходимый год в списке не найдется, то в конце оператора возможно указание значения ключевого слова default, то есть по умолчанию, и в таком случае мы не просто выйдем из оператора, а сначала выполним код, указанный после default.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

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


В дальнейшем, научившись сообщать микроконтроллеру различные данные и значения, мы обязательно опробуем оператор switch в действии, ну а пока вам важно изучить и понять логику его работы.


Итак, подводя итог, можно сказать, что существует два условных оператора, или оператора выбора – это if и switch. Оператор if больше подходит для одиночных проверок условия, а switch подойдет для случаев с большим количеством возможных вариантов и одним проверяемым значением.


Идем дальше. Теперь у нас на очереди операторы циклов. Любой цикл представляет собой повторяющееся несколько раз действие. Операторы циклов бывают трех видов: for, while и do while - давайте остановимся поподробнее на каждом из них.


Оператор цикла while.

Представим себе простую ситуацию: вы стоите на остановке и ждете автобус под номером 25. В данный момент вы задаетесь условием проверки каждого номера автобуса на совпадение с цифрой 25. Если номер не подходит, то вы продолжаете стоять и ждать нужный - именно так и действует цикл while, который проверяет условие, указанное в его круглых скобках.


Цикл while переводится как «пока» и до тех пор, пока его условие выполняется, он бесконечно долго выполняет код, указанный в его фигурных скобках. Например, на каком-либо этапе работы микроконтроллера, нам важно получить сигнал с какого-нибудь пина Arduino, и, пока сигнала нет, программа не должна ничего выполнять. Как раз в этом случае нам и поможет while, если в условии мы укажем считывание пина и его проверку на равенство нулю.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Важно еще раз отметить, что while будет выполняться до тех пор, пока условие будет истинным, и как только оно станет ложным, при очередной проверке условия произойдет выход из цикла.


Оператор цикла do while.

Оператор цикла do while называется оператором цикла с постусловием и работает практически по тому же принципу, но с одной лишь разницей: сперва происходит выполнение тела цикла, а уже затем проверка условия. Этот цикл используется, когда необходимо хотя-бы один раз выполнить код, указанный в фигурных скобках независимо от истинности или ложности условия, указанного ниже. В случае с обычным циклом while при изначально ложном условии микроконтроллер переходит сразу же к выполнению кода, написанного после фигурных скобок цикла и, таким образом, минует код, указанный в теле цикла.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Прошу обратить ваше внимание на синтаксис оператора do while – возможно, кто-то уже заметил, что после условия в круглых скобках ставится точка с запятой, поскольку тело цикла уже было описано в фигурных скобках выше.


Оператор цикла for.

И, наконец, нам осталось познакомиться с еще одним, не менее важным оператором цикла под названием for. Давайте вернемся к нашей остановке и автобусу. Допустим, что мы дождались нужный нам автобус, зашли внутрь и теперь нам необходимо заплатить за проезд. Билет стоит 22 рубля, рассчитываться мы будем наличными, поэтому достаем кошелек и начинаем отсчитывать монетки, пока не достигнем нужной нам суммы. Как только нужная сумма будет набрана - можно расплачиваться за проезд. Как вы могли догадаться, цикл for действует по тому же принципу: в условии мы указываем действие, которое выполнится в начале цикла, затем само условие работы и действие, выполняемое в конце каждого прохода цикла.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Давайте возьмем конкретный пример для микроконтроллера и посмотрим, как работает этот цикл. Не за горами наступление нового года, поэтому предлагаю сделать с помощью нашей Arduino упрощенную гирлянду. Подключим со 2-го по 11-й пин 10 светодиодов и напишем цикл их включения.  

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

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

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Теперь опишем это с помощью программы.

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

Сперва укажем имя оператора – for. Затем, в открывающейся скобке, указываем действие в начале цикла - в нашем случае это инициализация переменной pin и присваивание ей значения 2, так как ко второму пину подключен первый светодиод. Кстати, если мы не укажем чему изначально равна переменная pin, то компилятор по умолчанию присвоит ей нулевое значение. Затем ставим точку с запятой и указываем условие, при котором цикл должен выполняться - в нашем случае это работа цикла пока переменная pin меньше или равна 11. После чего мы снова ставим точку с запятой и указываем шаг увеличения или уменьшения значения pin. Запись pin++ означает увеличение переменной pin на единицу, такая операция носит название инкремент и равносильна записи pin = pin+1. А запись pin--наоборот, уменьшит значение pin на один, эта операция называется декрементом.

После указания циклу, что ему делать перед каждым новым проходом, ставится закрывающая скобка – обратите внимание, точка с запятой здесь не нужна. Затем по традиции мы открываем фигурные скобки и пишем знакомые нам строки: digitalWrite(pin, HIGH); и delay(100);

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


На этом наш код готов. Как он работает? Опишем по пунктам:

1. Объявление переменной pin и присваивание ей значения 2

2. Проверка условия, что 2 меньше или равно 11

3. Выполнение тела цикла: зажигаем светодиод на 2-м пине и ждем 100 мс.

4. Инкремент переменной pin, теперь она будет содержать в себе цифру 3, то есть 3-й пин

5. Снова проверяем условие, что 3 меньше или равно 11

6. И выполняем подачу высокого потенциала на пин 3 с задержкой


Аналогично зажигаются остальные светодиоды. Когда значение pin будет равно 12, условие 12 меньше или равно 11 не выполнится, и будет осуществлен выход из цикла. Таким образом, мы зажжем последовательно все 10 светодиодов.


Загрузив наш код в микроконтроллер, мы увидим, что нам придется постоянно нажимать кнопку сброса, что бы погасить все светодиоды и зажечь их вновь. Если мы можем сделать цикл, который будет последовательно зажигать светодиоды, то, что нам мешает сделать такой же цикл, который будет эти светодиоды последовательно гасить? Давайте добавим еще один цикл в наш код, только теперь в теле цикла мы будем не подавать высокий потенциал на выход, а наоборот, снимать его. Исправляем HIGH на LOW, снова компилируем код и загружаем его..

Выпуск 6. Условные операторы и циклы. Основы Arduino для начинающих Arduino, Начинающий, Цикл, Условия, Программирование, Урок, Видео, Длиннопост

После загрузки наши светодиоды будут постоянно включаться и выключаться, что выглядит гораздо интереснее :) Код примера, а так же схему подключения, вы найдете здесь - это ссылка на проект в симуляторе circuits, в нем можно сразу же посмотреть на работу кода.


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


Ну а на этом я прощаюсь с вами до следующего выпуска, в котором мы поговорим о логических операциях и их применении. Надеюсь, что сегодня вы узнали для себя что-то новое, спасибо, что дочитали до конца, успехов и добра вам! :)

Показать полностью 14
985

Сircuits от Autodesk — бесплатный online-конструктор

Очень давно я слышал про Arduino, что есть такая заморская вещица, что можно с её помощью делать всякие-интересные электронные штуковины типа подсветки, «волшебные» фонарики, самоходные машинки и прочее. Но как-то не интересовало меня всё это… Пару-тройку недель назад на Пикабу я увидел пост, о том, как сделать Ambilight-подсветку для монитора своими руками на базе Arduino и тут меня зацепило! Я не мог ни есть, ни пить, ни спать, все думал о Arduino и о том, что можно сделать с ним. Начал читать форумы, искать сайты с обучающими материалами и наткнулся на Progmk.ru. Стал смотреть основы Ардуино для начинающих. В четвертом выпуске Виктор сказал, что пора приобретать устройство, послушавшись его я приобрел на всем известном сайте у братского народа Arduino и детали к нему. Тут меня постигли грустные мысли… Видео смотрю, книги про микроконтроллеры листаю…


Но что делать пока Arduino идет в посылке ко мне?


Посмотрел на форумах о программном обеспечении, наткнулся на Fritzing. Программа хороша, и макетку можно рядом с Arduino положить, и проводами контакты соединить, и код прописать… Но плоды своего труда не посмотреть… Нет эмуляции. Пришлось копать интернет дальше. На одном из форумов шло обсуждение VBB, что мол может она эмулировать, но платная. В комментариях предложили воспользоваться бесплатным online- конструктором circuits.io от Autodesk. Для меня это было открытием!


Circuits.io – электроника от новичка до профессионала!


После прохождения регистрации и согласия со всем, что предлагает сделать с моей душой автодеск в лицензионном соглашении, моему взору предстала страница с предложением начать

Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост

В правом верхнем углу жму + New и выбираю New Elecronic Labs, открывается страница ради которой все и писалось! :) Перед собой я вижу макетную плату!

Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост

Добавив Arduino Uno R3 с помощью кнопки Components +,

Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост

я перешел в редактор кода, скрытый под кнопкой Code Editor. После ввода кода для мигания встроенным светодиодом, жму Upload & Run и наслаждаюсь магией! СВЕТОДИОД МИГАЕТ! ЭМУЛЯЦИЯ РАБОТАЕТ!

Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост

Для программы из пятого выпуска мне понадобились:

- Резистор

- Кнопка

- Соединительные провода

Добавив все компоненты, соединив все проводами и переписав код, я получил вторую магию: кнопка жмется, светодиод светится! :)

Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост

Также cirquit.io позволяет строить схему и печатную плату, но для меня это пока не нужно.

Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост
Сircuits от Autodesk — бесплатный online-конструктор Arduino, Электроника, Начинающий, Circuits, Программа, Длиннопост

Итог: Приложение добротное, внимания заслуживает, думаю, будет интересно всем, от начинающих и ожидающих посылку (как я :) ), до профессионалов. Построить макет, запустить, посмотреть на свои труды (хоть и виртуальные).


Кстати, забыл упомянуть, в приложении есть множество модулей, для построения и тестирования электронных схем.


Спасибо всем, кто дочитал до конца! :)

Показать полностью 6
472

Fritzing - электроника доступна всем! Часть вторая.

Немного истории:

Программный пакет Fritzing был разработан в 2009 году в Потсдамском университете прикладных наук за счет субсидий, выделяемых государством на исследования научной программы под названием «From prototype to product» (от прототипа к продукту). В настоящее время создатели САПР предлагают талантливым программистам сотрудничать с ними по вопросам дальнейшего развития программы.

Будем надеяться что проект будет расти и развиваться.

Так же хочу добавить что Fritzing это простая в работе программа для рисования наглядных электрических схем, заточенная под Arduino-проекты.

Но хватит истории и описаний, попробую показать как с ней работать.

Первое: в программе есть примеры как с кодом, так и без. Лежат они здесь:

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Выбираем пример, я взял два светодиода и кнопку.

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Левый клик выбирает элемент и в окне инспектора появляются его свойства, а в нижней части повернуть и отразить. Там же сообщение от трассировщика.

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост
Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Правый клик - выпадающее меню, все как всегда))

Для тех кто не знает распиновку элемента или где анод и катод у светодиода:

Наводим указатель на пин делали и все написано

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост
Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Также можно посмотреть пины Ардуины и других микросхем из библиотеки.

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Во вкладке принципиальная схема есть полезная функция "Автотрассировка"

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Но иногда создает излишние перегибы:

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Придется руками переставлять точки перегиба и удалять лишнее, а можно и самому нарисовать, ориентируясь на пунктиры (так указаны провода с макетки)

Fritzing - электроника доступна всем! Часть вторая. Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост

Вот в общем то и все. Программа достаточно проста, для самостоятельного изучения.

Во вкладке Code - смотрим код из примера или записываем свой. Можно залить в Ардуину, но я предпочитаю Arduino IE.

Р.S. Про "Печатную плату" рассказывать не буду )) ИМХО тот кто соберется травить плату сам, вполне разберется с этой программой.

Показать полностью 8
1111

Fritzing - электроника доступна для всем!

Всем привет!

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

Побродив по просторам интернета я случайно наткнулся на программу Fritzing. Причем "старички" постят скриншоты из нее и не признаются как они их сделали)))


Итак коротко о Fritzing

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

Приятно, что Fritzing является изначально переносимой (portable), т. е. для неё не существует какого-то инсталлятора - просто нужно скачать пакет архива, распаковать его в любую папку на диске, и система сразу готова к работе. Кроме того, система автоматически определяет язык операционной системы, и сама переключается на русифицированный интерфейс меню.

После первого запуска Fritzing сразу бросаются в глаза 5 главных рабочих закладок: Welcome, Макетная плата, Принципиальная схема, Печатная плата и Code. Изначально активна первая закладка Welcome, на ней просто представлены совет дня (Tip of the Day), ссылка на блог разработчиков (где представлены статьи, реклама новых стартер-китов и прочее), ссылка на фабрику печатных плат и на магазин, и справа браузер готовых компонентов и инспектор их свойств.

Fritzing - электроника доступна для всем! Arduino, Начинающий, Электроника, Программа, Схема, Длиннопост, Текст
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: