163

#8 Функции и их применение. Основы Arduino для начинающих

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


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


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


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

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


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


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


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Простейшая функция выглядит следующим образом:

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


Итак, заготовка простейшей функции готова и в ней уже написан необходимый нам код.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


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


Что бы использовать эту возможность, теперь в пустых скобках мы должны указать тип и имя переменной, которая будет отвечать за номер пина. Назовем её, например, numberPin и дадим ей тип byte, который может нести в себе число от 0 до 255.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Теперь, обращаясь к функции, мы так же обязаны указать в круглых скобках число от 0 до 255 и если этого не сделать, то компилятор выдаст вам ошибку, так как функция теперь обязана принимать какое-либо значение. В нашем случае мы будем указывать номер пина, с которым хотим работать, поставим, например, цифру 4.


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


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


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


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


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

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

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Обязательно поделитесь своими успехами или вопросами в комментариях, ну а на этом про функции все, спасибо за то, что дочитали до конца и до встречи в 9-м выпуске! ;)

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

0
А почему в ардуино можно объявлять функцию после её вызова, а в с++ (хотя ардуино на нём и пишется) нельзя так делать? В с++ надо сначало объявить, а потом уже вызывать!
0

Мне кажется или все-таки в последнем примере вместо

byte check_button(byte nomberPin)

нужно написать

bool check_button(byte nomberPin)?

Ведь в основной программе result - булевая.

0

Вопрос. Пишу функцию


void FastC()

{

  SetBitPortC(Out2);     // Включаем светодиод 2 для контроля что вообще заходим в эту функцию

  button1State = digitalRead(button1); 

}


Вызываю её из основного цикла

void loop()

{

  FastC;

}


Не срабатывает, светодиод не загорается, нажатие кнопки не обрабатывается.


Делаю по другому, функцию с параметром

void FastC(int X)

{

SetBitPortC(Out2); // Включаем светодиод 2 для контроля что вообще заходим в эту функцию

button1State = digitalRead(button1);

}

Вызываю её из основного цикла

void loop()

{

FastC (1);

}


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


Где я косячу? Или не я?

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

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

То есть в первом случае нужно вызывать так:

void loop()

{

FastC();

}

раскрыть ветку 1
0
Ыыых, спасибо. Кто бы мог подумать...
0

Что-то не выходит больше видосиков.

0

учиться программировать через аруино, жесть) надо бы потом в сторону си сдвинуть курс, что-то типа https://habrahabr.ru/post/247663/

0

Сделал бы кто урок по PIC32-PINGUINO (32-разрядный МК PIC32MX440F256H)...

Иллюстрация к комментарию
0

Я понимаю и знаю как работает функция. Материал дан нелегко.


Респект за работу.

раскрыть ветку 11
+1

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

раскрыть ветку 10
0
А не проще ли для понимания сразу начать об объектах рассказывать?
раскрыть ветку 3
0
Если честно не знаю. Я когда изучаю что то новое. Например так было с указателями, прерываниями МК, ООП,... читаю много разных источников. (соответствующие главы книг). И в определённый момент какая то "выстреливает" и в голове образуется понимание. После чего иду дальше.


Источников и времени  бывает по разному, но закономерность общая такая. Чем меньше источников тем дольше приходит понимание. Например для понимания принципов програмирования МК на ARM у меня ушло 2 месяца. Из источников только форумы и даташит. А вот ООП заняло неделю. Но книг было много.

раскрыть ветку 5
Похожие посты
91

Робот для сбора чаевых на Arduino

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


Наткнулся на проект на просторах YouTube, есть вариант сборки при наличии 3D-принтера и без. Решил собрать такого в подарок для бара.


Исходники (они есть и под видео, дублирую сюда для удобства):


Видео с оригинальным проектом

Файлы для печати (можно поддержать автора и купить коммерческую лицензию, но файлы одинаковые)

Прошивка

Вариант без печати

О моем опыте:


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



Было:

Робот для сбора чаевых на Arduino Arduino, Своими руками, Робот, Технологии, Программирование, Видео, Длиннопост

Стало: Не без дефектов, но поправить уже можно.

Робот для сбора чаевых на Arduino Arduino, Своими руками, Робот, Технологии, Программирование, Видео, Длиннопост

Также хочу отметить, что если вы используете китайскую версию сервопривода MG90S - внутренний вкладыш-накопитель (файл - inner_body) может не поместиться и при установке деформирует корпус. В разработке моделей для печати я пока не очень силен, для себя решил проблему уменьшив масштаб модели вкладыша на 3%. Установилось корректно, щель есть, но монеты в нее не проваливаются.

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

Погодная станция Dozor meteo

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Станция  «Дозор метео» предназначен для замера параметров окружающей среды (температура, давление, влажность) отображения результатов на ЖК-дисплее, передачи показаний в сеть интернет на облачный сервис Интернета вещей IoT «Народный мониторинг», управления устройсвами. 

Особенности прибора:


-  измерение температуры, влажности, давления;

- наружный блок влажности/температуры;

- 2 удаленно управляемых выхода 12/220B;

- 1 логический/счетный вход;

- до 5 точек контроля температуры;

- автономная работа (без сети WiFi);

- WiFi-подключение к интернету;

- управление через приложение или бот Telegram


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


Назначение полей дисплея и кнопок

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

1. Канал управления (вкл./выкл.)

2. Счетно-контрольный вход.

3. Поле «Влажность» (наруж. блок)

4. Давление

5. Температура Tout (наружный блок)

6. Температура Tk (комнатная), датчик расположен внутри модуля.

7. Дополнительный датчик T1(DS18B20)

8. Дополнительный датчик T2(DS18B20)

9. Дополнительный датчик T3(DS18B20)

10. Обратный отсчет до сеанса связи с сервером.

11. Индикатор НЕ-успешности последнего сеанса связи с сервером.

12. Кнопка управления.

Схема межмодульных соединений:
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Для сборки прибора Дозор meteo на основе Arduino Nano понадобятся:


- Arduino nano – «рулит» всем в конструкции;


- модуль ESP-01. Это WiFi модуль на основе ESP8266, используется для связи прибора с интернетом и отправки данных на сервер народного мониторинга. Можно заменить практически любым модулем на основе ESP8266;


- модуль GY-68 (BMP180 со встроенным стабилизатором 3,3V и конвертером уровня I2C). Измеряет давление и температуру в помещении;


- модуль HTU21D. Используется в составе внешнего модуля и «отвечает» за наружную температуру и влажность;


- МК Attiny13a. Используется в наружном модуле;


- дисплей 128Х64 COG с контроллером UC1701

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

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


-м/с стабилизатора 3,3V.Нужна для питания ESP-01  и дисплея. Можно использовать соответствующий выход Power board (модуль питания для Arduino);

- DS18B20, цифровой датчик


Если необходимо коммутировать (управлять) нагрузками, то необходим узел на оптосимисторах AHQ2223 (IC1, IC3)  в корпусе DIP-7, и транзисторные ключи для управления ими. Если коммутация не нужна- часть схемы, выделенная как switching module можно не использовать. Если же такая необходимость есть, необходимо помнить, что указанные оптосимисторы рассчитаны на максимальный ток 0,8A, что вполне достаточно коммутации нагрузки до 150Вт (220Вольт). Также следует учитывать, что симисторы- полупроводниковые приборы, используемые в цепях переменного тока. Поэтому если надо управлять нагрузкой, рассчитанной для работы в цепи постоянного тока, вместо симистора надо поставить либо реле, либо транзистор с малым сопротивлением силового перехода.


Счетно-контрольный вход устройства (X2) можно использовать, например, для контроля уровня жидкости в баке.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Также можно подключить магнитный дверной датчик или контакты ИК датчика движения. В этом случае получиться простейшая охранная система.
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Датчику IN (это имя имеет ВХОД прибора в сообщении на сервер) в личном кабинете можно присвоить имя «ДВЕРЬ». При изменении состояния датчика (замыкание или размыкание ) пользователю поступит сообщение «ДВЕРЬ». На дисплее прибора отобразится изменение- иконка “IN” изменит вид. При этом датчик INC (значение тоже отсылается на сервер) покажет количество срабатываний. Можно использовать, например, для текущего расхода воды, если подключить к специальному водомеру. Максимальное значение между посылками на сервер -255. После отправки на сервер счетчик обнуляется.


Т.к. напряжение питания Arduino составляет 5V, а все модули датчиков, в том числе и дисплей, линии управления (UART, SPI) приходится подключать к модулям через резистивные делители (R2, R3; R5-R13). Исключение составляют модуль GY-68 и HTU21D. GY-68 имеет на «борту» собственный стабилизатор 3,3V, а HTU21D питается как и весь наружный модуль напряжением 3,3V. Дисплей- попадаются варианты исполнения как со встроенным стабилизатором, так и без него.


Если будет встроенный стабилизатор, то дисплей можно запитать от 5V, но резистивные делители всё равно желательны. Были случаи, когда на дисплей на управляющие контакты поступало напряжение 5V, и дисплей оставался жив. Но скорее всего это не полезно для дисплея. Документация на контроллер UC1701, установленный в данном дисплее по вопросу толерантности цифровых входов к напряжению 5V теряет нить разговора молчит.

Несколько неудобно конечно, когда элементы имеют разные значения питающих напряжений, но Arduino требует жертв…


Часть схемы, выделенная как OUTDOOR MODULE (внешний модуль) используется для измерений наружных (на улице) температуры и влажности.

Наружный и внутренний модуля соединены трёхпроводной линией – «земля», «+» и сигнальный провод. Микроконтроллеры модулей общаются по протоколу 1-wire, где внутренний модуль- ведущий. Это конечно несколько усложнило конструкцию внешнего модуля, но результат налицо. В результате такого решения удалось отнести внешний модуль на десятки метров от внутреннего. С «чистой» шиной I2C такой результат недостижим- буквально на 5 метрах начинались «глюки». В результате дополнительных экспериментов по применению 2-х транзисторного «драйвера» шины 1-Wire удалось получить расстояние в 80м! Кабель, как ни странно, желательно использовать не экранированный-меньше погонная емкость.


Ведущий посылает в линию 1-wire запрос «запустить преобразование всех датчиков», который совпадает со стандартным запросом для датчиков DS18B20 ($CC+$44), что удобно с точки зрения программной реализации- одним запросом «запускаются» все 1-wire устройства. Ведомый МК принимает этот запрос, и инициирует преобразование влажности и температуры(МС HTU21D)по «своей» шине I2C. После окончания преобразования полученный результат считывается внутренним модулем. При этом наружный модуль не мешает работе датчиков DS18B20(которые можно подключить в линию в любом месте), независимо от режима работы- будь то замер температуры или считывание ROM. Если наружный модуль не подключать, устройство сохраняет работоспособность, но данные будут искажены.


После сборки устройства (или до)необходимо запрограммировать микроконтроллеры устройства- саму Arduino и МК ATtiny13a наружного модуля. ПО написано в среде Algorithm Builder ( почти ассемблер ), поэтому прошивки публикуются «как есть», полнофункциональные, в виде готовых «хексов».

В архиве есть 2 файла – DM_indoor_V1_nano.hex (для Arduino Nano 16 MHz) и DM_outdoor_V1_tiny13a.hex (для наружного модуля). Для «заливки» в Arduino готового «хекса» есть несколько программ, например X-loader и GC-uploader.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
На странице автора программы GC-uploader хорошо описана процедура загрузки при использовании этих программ. После «заливки» «хекса» Arduino останется Arduino-й, т.е. при необходимости в неё можно при помощи Arduino IDE «пролить» какой-нить скэтч.


С программированием Arduino проблем быть не должно(если прочитать указанную выше ссылку на help)- выбрал «хекс», выбрал порт, нажал «программ» и вуаля.


«Тиньку» же придется «прошивать» при помощи программатора и одной из множества программ, например, ProgISp. Последняя кстати, замечательно работает с дешевым программатором USB ISP с родины Мао.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Известный сайт с тех же краёв на запрос «AVR USB ISP» предложит несметное количество этих программаторов по цене 2-3х «Эскимо».

Конечно, "заливка" чего-либо не из Arduino IDE- это несомненно «два», но кто сказал, что будет легко? иначе никак… Можно конечно было использовать ещё одну Arduino, но она великовата для конструкции наружного модуля, описанного далее. Хотя, возможно…


В общем, для ATtiny13a надо запрограммировать fuse-биты и "залить" прошивку.

Состояние Fuse-bit для ATtiny13a  в данной конструкции должно быть такое

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Написал небольшой ликбез процесса программирования МК ATtiny13a  c картинками.

Если возникнут проблеммы при программировании  - пишите.


После правильной сборки и программирования  настроек "железа" не требуется. Перед включением необходимо пройтись по соединениям, включить устройство. Причем  во время работы желательно не подключать кабель USB ПК-Arduino, т.к. в схеме используется интерфейс UART- могут быть конфликты. Используйте плату Power board.


После подключения проверить наличие напряжения 3,3V на выходе стабилизатора (C2). На дисплее должна появиться заставка. Если всё ок- входим в режим настроек. Для этого выключаем питание, нажимаем кнопку S1 и её удерживая включаем питание (кнопку продолжаем удерживать). Примерно через 2-3 сек. На дисплее появится надпись «SETUP MODE». Так же будет выведена информация о SSID и пароле WiFi, периоде отправке данных, которая хранится в памяти прибора.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Кнопку отпустиь.

Для изменения настроек (П.2) необходимо нажать кнопку еще раз. Появится надпись WEB SETUP.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Кнопку отпустить.

В WI-FI сети появится точка доступа Dozor_meteo. Необходимо подключится к ней и зайти (набрать в окне любого браузера) на адрес 192.168.4.1.

Откроется окно

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Тут необходимо ввести название и пароль домашней точки доступа( первые 2 поля), и 3-е поле –период отправки данных на сервер.. Тут рекомендуется установить значение Т>300 сек. Доступный диапазон – 60- 999 сек. Но для установки периода Т< 300сек. необходимо ознакомится с условиями на сайте narodmon.com . Кратко- если у пользователя нет бонусов, период отправки не может быть меньше 300 сек. Иначе при рецидивном нарушении данного требования устройство может быть заблокировано.

Нижнее поле- MAC устройства. Это значение MAC необходимо указать при регистрации своего устройства на сайте narodmon.com .

SEND- сохранить введённые значения. Если поле «AND EXIT» отметить, то после нажатия на SEND устройство будет перезагружено и войдет в основной режим работы.


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


В устройстве прибора по схеме, приведенной выше, есть датчик давления BMP180. В нем есть встроенный датчик температуры, он используется для измерения температуры внутри помещения. Температура на улице измеряется при помощи датчика температуры, входящего в состав датчика влажности HTU21D. Дополнительно, при необходимости, можно подключить до 3х датчиков температуры DS18B20. Датчики подключаются к разъему SV1, можно параллельно линии, идущей к наружному модулю. Можно в любом месте линии.


Процесс регистрации.


При выключенном устройстве нажать кнопку S1. Удерживая кнопку нажатой включить устройство. Через 2 секунды на экране появится надпись SETUP MODE.

Кнопку отпустить.

Нажать кнопку. Появиться надпись WEB SETUP. Кнопку не отпускать. Через 3 сек появится надпись DS SETUP.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Кнопку отпустить.

Далее необходимо (правильно!) подключить датчик DS18B20 к разъему SV1 и коротко нажать на кнопку. Если процедура выполнена верно - на экране будет отображен серийный номер датчика . Датчик Т1 зарегистрирован в приборе.

Далее необходимо отключить датчик Т1 и подключить датчик Т2 (если он необходим), и коротко нажать на кнопку. Очередной датчик (Т2) занесен в память устройства. Далее регистрируется датчик Т3. Т.е. получается такой алгоритм:


- войти в режим регистрации DS SETUP, отпустить кнопку;

- подключить датчик Т1, коротко нажать на кнопку;

- отключить датчик Т1, подключить Т2, короткое нажатие;

- отключить датчик Т2, подключить Т3, короткое нажатие;

Следующее нажатие инициирует выход из режима настойки.


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


Подробно о эксплуатации, подключении назрузок,  регистрации устройства на сайте narodmon.com,  управлении со смартфона можно прочитать в полном руководстве.


1. Файлы проекта (схема, прошивки, ликбез по прошивке МК ATtiny)

2. Прошивка любого HEX-файла в ARDUINO


Конструкция наружного модуля станции  ДОЗОР meteo


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

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

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Для изготовления необходимы

1. Пластиковая труба D25mm 25-30 см. Можно использовать водопроводную «под пайку» либо трубу для кабелей.

2. Заглушка сантехническая под систему D32mm. 1 шт

3. Хомут крепления для трубы D25mm -2шт.

4. Клеевой состав ( герметик, «эпоксидка», клей «Титан»)


На одном конце трубы необходимо с отступом от края 5-8мм (до края отверстия) просверлить отверстия D4-6мм 4-8 шт.

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Обработать край крупным наждаком либо поцарапать, например ножом. Также желательно обработать внутреннюю поверхность заглушки.
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Необходимо изготовить центрирующую гильзу, например из картона. Лучше взять картон не толстый, отформовать его «гармошкой».
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Затем его надо зафиксировать примерно так. Так как внутренний диаметр заглушку больше наружного диаметра трубы, щель между ними с отверстиями в трубе образуют канал естественной вентиляции (тяги).
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

На внутреннюю грань заглушки нанести валик клея или герметика. С клеем усерствовать не надо- до отверсий в трубке клей не должен "добраться".

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Одеть на трубку и оставить сохнуть, в зависимости от клея- до 24 часов.
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
После полимеризации клея узел должен выглядень примерно  так
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост
Затем в трубку вставляется плата внешнего модуля, так чтобы плата оказалась дальше (выше) середины трубки. И фиксируется. Самый простой вариант- стяжкой. Можно двумя .
Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

При вертикальной установке такая конструкция обеспечивает хорошую дождезащиту, но при этом за счет естественной вентиляции внутри плата датчика постоянно обдувается восходящим потоком, обеспечивая верность показаний температуры и влажности. Был проведен эксперимент- на корпусе модуля с наружной стороны примерно посередине расположил доп. датчик температуры DS18B20 (тоже в тени), который фиксировал температуру на улице вместе с наружным модулем. При этом показания доп. датчика в светлое время суток были всегда на 0,5 – 0,8 град. больше, чем внутри модуля. Ночью же показания практически сравнивались. Объяснением (один из вариантов) этого может быть тот факт, что доп. датчик дополнительно нагревался ИК-излучением от посторонних объектов.


Модуль необходимо закрепить к стене при помощи кронштейнов в месте, защищенном от прямых солнечных лучей. Крепить надо заглушкой вверх!!! (мало ли...).

Погодная станция Dozor meteo Arduino, Погода, Программирование, Микроконтроллеры, Электроника, Своими руками, Esp8266, Длиннопост

Будтобы все...


Материалы:


1. Файлы проекта (схема, прошивки, ликбез по прошивке МК ATtiny)

2. Прошивка любого HEX-файла в ARDUINO

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

Из Arduino в С/C++ и мои первые шаги

Доброго времени суток уважаемые.

Вот, буквально недавно, я бился в судорогах наслаждения от того что научился мигать светодиодом на голом С/С++.

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Мем в полной мере отоброжает эмоции моей души. Просто представьте, делаешь что-то, упорно при упорно через ошибки, поражения и тут на тебе - заработало, понял суть!

Немного Story of my life:

Раньше я вообще ни каким местом не касался программирования, от слова совсем! Ну было что-то в школе, техникуме - тогда это меня не интересовало и пропускал всё мимо ушей.

И вот, переломный день года так 2018 - был тихий вечер, мне 29 годиков, сижу залипший в YouTube, прилетает рекомендация - ролик Гайвера про Ардуино. Посмотрел и загорелся!!!

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Закупился набором с Алика и давай познавать основы основ.

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

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

Первым результатом всех поисков стали опыты приминения Arduino в цепях переменного напряжения 220...380В:

- Как Arduino запускает эл.двигатели 7 и 15 кВт одновременно.

- Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор.

Получил бесценный опыт для себя.

Думаете я на этом остановился? Неет. Начал засматриваться на другие МК, такие как Attiny13..85. Они подходили отлично под мои задачи, простые задачи. Применение Atmega328, которое пихают везде где надо но в основном где не надо, в этих задачах - это излишки мощности и много-много свободных незадействованных ножек. Attiny13 или же 85 это отличный вариант в простеньких проектах

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Со временем стал понимать, оболочка Arduino в Attiny13 очень существенно потребляла память, замедляла некоторые процессы ну и всё то что давным давно расписано на форумах и статьях.

Выход был один - писать код на С/С++ в Atmel Studio. Была загвоздка - я ни фига не шарил в этом.

Скачал даташиты, посмотрел парочку уроков в YouTube и понеслась - первое знакомство с регистрами.

Из Arduino в С/C++ и мои первые шаги Arduino, Программирование, Микроконтроллеры, Длиннопост

Скажу честно, прыгнуть с Arduino в регистры МК - не очень приятное занятие. Возникает чувство что всё что ты изучил в Arduino, типа millis(), pinMode, digitalWrite и т.д. это всё коту под хвост.

Вроде бы код написанный в оболочке Arduino или Atmel Studio выполняет одно и тоже, но состав кода отличается конкретно.

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

Но, пару вечеров на неделе, несколько десятколв роликов на YouTube и вауля... стало получатся. А какой же "выхлоп" я получил от этого - более быстрая работа МК, там где в ардуино занимало 1Кб памяти, стало занимать 200 байт, отсутствует лишняя переферия.

Вот так произошло моё первое знакомство с языком C/C++.

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

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика

В прошлой части я обозревал механическую часть моего проекта. Ну а теперь настало время рассказать об электронике. Я взял ручку газа от своего старого электросамоката, достал из неё все потроха и вставил свои. Родной датчик Холла в ручке приказал долго жить, потому был заменён на новый. Светодиоды сменил на цилиндрические 3мм и подпилил, чтобы влезли в корпус. Для экономии проводов и пинов на центральном микроконтроллере, я использовал сдвиговый регистр 74HC595N (на фото не попал, но смысл ясен) и подключил всё это к косе проводов от руля до блока управления на раме

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Поскольку у нас мотор BLDC, то он не может работать напрямую от батареи. Потому был заказан регулятор оборотов для бесколлекторных двигателей на 100 Ампер и 50 Вольт

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Были куплены 2 батареи 6S1P (6 банок последовательно, 1 параллельно) на 4Ач каждая. Для них был спаян переходник на XT90 коннекторах для последовательного соединения

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Сердцем и мозгом всего этого стала плата разработчика Arduino Nano, которая была заботливо уложена в корпус старого автомобильного инвертора вместе с регулятором оборотов и вентилятором охлаждения. Главной задачей микроконтроллера было преобразовывать и фильтровать аналоговый сигнал датчика Холла в рукоятке газа в ШИМ сигнал для регулятора оборотов двигателя. Помимо этого на нём висит обязанность контроля плавности разгона, управления "габаритами" и "стопами" на задней диодной адресной ленте, регулирование оборотов куллера в центральном блоке, отслеживание температур в двигателе и регуляторе оборотов двигателя, контроль заряда батарей и последующая передача этой информации на индикаторы в ручке газа

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Глаза боятся, а руки паяют. Соединений и правда много, но всё работает исправно и вибраций не боится, проверено 1 сезоном использования

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Итоговый результат выглядит сильно эстетичнее

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Ну а после этого пошли первые тесты сего монстра. Максимальная скорость на испытаниях была 49 км/ч. Но, как в последствии выяснилось, Ультрабайк может ехать даже 52 км/ч! Запас хода от 6 до 10 км в зависимости от стиля езды и скорости, чего мне за глаза хватает. Зарядка в быстром темпе занимает менее часа. Адреналин от езды на нём бьёт через край, машины при разгоне запросто обгоняет, при резком ускорении может и перекинуть на спину) Без заднего тормоза, конечно, тяжелее, каждый раз боюсь, что вилка не выдержит и сломается при резком торможении. В последствии планирую использовать рекуперацию, для торможения задним колесом, поскольку обгонной муфты в этой системе нет. Ну и главное, цена этого проекта без цены самого велосипеда стала всего 600 долларов, что смело укладывается в рамки разумного, ведь велосипеды с такой же мощностью стоят куда дороже. Сумка для аккумуляторов позволяет увеличить объём батарей в 2 раза, а если перейти на 18650 и забить весь внутренний треугольник рамы, то можно будет достичь запаса хода и в 50 км, но мне этого не требуется. Главная задача Ultrabike`а - доехать до работы с ветерком и довольной харей:)


Двухстрочный LCD экран был установлен временно для диагностики при калибровке
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

В начале торможения светодиодная лента часто мигает в течении 5 секунд для привлечения внимания, потом начинает гореть постоянно ярко. Когда тормоз отпущен, светится "в пол накала"

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Ну и несколько фоток в итоговом виде:

Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 2 из 2. Электрика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика

В связи с тем, что до работы мне ехать всего 2км, то тратить ресурс машины на это в летнее время кажется бессмысленным. Ну а пешком ходить мне лень:) Потому было принято решение осуществить мою давнюю мечту - собрать из моего фрирайдового велосипеда Norco Rampage электробайк. Задача стояла в получении максимальной мощности и скорости при небольшом запасе хода и минимальной цене. У меня уже имелся в наличии бесколлекторный двигатель, который я когда-то ставил на электроскейт, но у него были разбиты все подшипники. Двигатель имел максимальные обороты в районе 7500 при напряжении в 50 Вольт и мощность 2250 Ватт. В конечном итоге это мне сэкономило около 100 долларов.


Итак, начало проекта - самая первая деталь и первый мой чертёж со времён школы:D Изначально это был вал от ротора автомобильного стартера со снятыми обмотками. На чертеже то, во что он должен превратиться, а именно в новый вал для моего двигателя, поскольку старый сильно повредили разбитые подшипники. Чертёж я отнес в цех к нашим соседям, которые занимаются обработкой металла. "Loziska" в переводе с чешского означает "подшипники" - токарь меня попросил обозначить их местоположение на чертеже

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Примерка ведущей звезды на выходной вал редуктора

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Приваренная звезда. Соотношение шестерён в редукторе 3,9:1

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Второй чертёж - переходная пластина между посадочным местом статора двигателя и планетарным редуктором бывшего стартера

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Пока токарь изготавливал пластину, я решил покрасить ротор и опорную пластину ротора в суровотехнический оранжевый цвет. На фото нанесение грунтовки

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Готовая пластина

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Собрал всё воедино и проверил - работает отлично, без биения, но шумно - явно не хватает смазки в редукторе. Позже залил туда графитовую смазку для ШРУСов, которая вполне отлично справляется со своей задачей

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Начинаем думать над креплением всей тяговой установки к байку. Поскольку рама имеет пожизненную гарантию, то сверлить и вариться к ней нельзя. Значит будем крепиться к опоре сидушки. Использование 8мм листа железа будет очень кстати для добавления жесткости конструкции. Однако обработка такого куска металла, да еще и с фрезеровкой овальных отверстий при условии отсутствия фрезера, да еще и под углом к поверхности... короч, несколько дней мучений (делал это в свободное от работы время) и готово

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Итоговая конструкция. Обработку швов еще не делал

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Дальше речь пойдёт о приводе. Снимаем задний тормозной диск и калиппер (на фото уже снят) и примеряем туда ведомую звезду

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом
Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

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

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Внимательный читатель заметит, что звезда несколько видоизменилась. Да, это так, первые звёзды, которые я нашел на складе оказались с нюансом. Подобрать цепь к их шагу было очень сложно. Как мне сказали в магазине, такая цепь применяется на некотором количестве японских двигателей в качестве привода ГРМ, цена и доставка которой были просто возмутительны. Я решил купить полностью новый комплект цепи 3/8x5,8 со звёдами, который мне обошёлся более чем в 2 раза дешевле, чем просто цепь под первый тип звёзд. Получилось вот так:

Мой электровелосипед Ultrabike! Часть 1 из 2. Механика Электровелосипед, Электроника, Своими руками, Arduino, Программирование, Самоделки, Длиннопост, Рукоделие с процессом

Продолжение следует...)

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

Помогите с реализацией. Подсветка комнаты на адресной светодиодной ленте

Привет друзья! Являюсь абсолютным новичком в проектах на базе ардуино и адресных светодиодных лент, так что заранее прошу понять и простить)

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

Вообщем, имеем ТЗ:

1) Помещение, условно 3х6 метров.

2) Подсветка будет располагаться в профилях с круглым рассеивателем по потолку с широчайших сторон комнаты параллельно друг другу.

3) В программный код планируется вносить некоторые корректировки

Добавление эффекта "Пылающего северного сияния" (Добавление цветовой схемы в эффект огня)

Различные одноцветные подсветки с изменением уровня яркости с помощью регулятора

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

Теперь переходим к возникшим вопросам.

1) Как лучше соединять ленты - параллельно или последовательно?

2) Какой следует брать блок питания исходя из плотности ленты в 60 на метр?

3) Вытянет ли ардуино нано подобную схему или следует брать какие то другие аналоги?

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

Но если все же мой "проект" вызвал в ком то интерес, то прошу помочь с подбором компонентов, советом, тапком, бубном и добрым словом! ;)

P.S. Если мой проект найдет отклик, то обязательно отсниму отчет по реализации. Так же приму помощь по скетчам за еду, бесконечный респект, или условную плату :Р

Всем вселенского добра!

Помогите с реализацией. Подсветка комнаты на адресной светодиодной ленте Помощь, Arduino, Светодиоды, Программирование, Видео, Длиннопост
Показать полностью 1
99

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор.

Всем привет.
Появился повод написать продолжение своего опыта использования Arduino в коммутации силовых цепей до 1000В (0,4 кВ). А именно, автоматизированный запуск асинхронных (короткозамкнутых) эл.двигателей.
Как всё начиналось в глубочайших подробностях можно почитать тут.
Ну а я начинаю свою историю...
25.10.2019 в 17:05 по МСК раздается звонок на моем сотовом телефоне. Позвонил коллега пенсионного возраста - "Выходи в субботу на работу, твоя приблуда накрылась!".
Мои мысли начали тут же гулять вокруг одной причины - накрылись оптроны PC817, так как из всей схемы только у них была большая вероятность выйти из строя.

На следующее утро приезжаю на рабочее место, открываю щиток и вижу:

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост
Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост

Сгорели два резистора и один симистор на включение звонка. Оптрон MOC3063 под вопросом.

Пораженные элементы отметил кружочками на схеме:

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост

Остальные же элементы схемы и само Arduino исправны и функционируют отлично, ни каких сбоев.

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

Спрашиваю у коллеги - "Ты что-то делал?".

Оказывается, был поменян звонок из-за механического износа. В новом звонке просто на просто не подсоединили RC-фильтр

Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост
Arduino и эл.двигатели 7 и 15 кВт. Взорвался симистор. Arduino, Самоделки, Электроника, Производство, Технологии, Программирование, Длиннопост

С другой стороны, имеется RC-фильтр у симистора, но почему-то он не смог защитить симистор

Может у вас есть мнения или совет на эту тему?

Я думаю что немного неверно подобрал RC-фильтр и резисторы R11 и R12. А возможно симистор был плохого качества и не выдержал столь мизерную нагрузку как звонок.

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

А теперь стоимость запчастей для замены:

Симистор BTA16-600 - 35 руб.

Два резистора - 2 руб.

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

---

На этом у меня пока всё. Продолжаем наблюдение работы моего прототипа ПЛК.

Всем добра!

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

Считываем кнопки и датчики не смотря на длительные задержки в программе - Аппаратные прерывания - Arduino для начинающих

Продолжаем рубрику для начинающих ардуинщиков :)


На этот раз поговорим об аппаратных (внутренних) прерываниях в Arduino (ATmega328P).

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


Краткая выжимка из видео:

- Что такое аппаратные прерывания и как они работают (0:33)

- Смотрим информацию о прерываниях в datasheet на микроконтроллер ATmega328p (2:38)

- Пишем программу для внешнего прерывания по кнопке (6:24)

- Наблюдаем дребезг контактов на графике осциллографа (14:47)

- Пишем простую программу для борьбы с дребезгом контактов (16:00)

- Получаем домашнее задание (22:30)


Программа с настройкой прерываний по кнопке, позволяющая обойти дребезг контактов: Google Drive

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


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим сюда.

227

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy

Little Game Engine (LGE) – это виртуальная игровая консоль выдуманной конфигурации, с выдуманным процессором и онлайн web-SDK, состоящий из компилятора С-подобного кода в ассемблер и дальнейшей перекомпиляцией его в машинный код с возможностью исполнения этого кода там же, в онлайн в эмуляторе.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Как видно из названия, заточен весь комплект на быстрое создания 2d ретро игр. Более 20 игр уже готовы, несколько в разработке.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Чтобы поиграть онлайн, перейдите по ссылке игры ниже, выберете «compile» и затем «run».


TankCity, 1916, FourINaRow, BlackJack, ZombieDefence, MicroRace, DwarfClicker, Galaxies, Memories, NinjaEscape, Mines, Breakout, TowerDefence, FlappyBird, WormBlast, ESProgue, Snake, FishLife, Columns, MarsAttack, CityRunner, Asteroids, Bashe

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Отдельный плюс в том, что эмулятор LGE virtual machine помимо онлайн версии написан и для ESPboy гаджета, который имеет сходную с LGE VM переферию воплощенную в железе и про который я уже писал.


* цветной экран разрешением 128х128,

* 8 кнопок,

* однобитный звук

* RGB светодиод

* подходящий по скорости эмуляции микроконтроллер ESP8266

* встроенную флеш память с файловой системой SPIFFS

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Таким образом можно загружать откомпилированные в онлайн LGE SDK игры в портативный ESPboy, брать его с собой и с интересом коротать свободные минуты.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Загружать игры можно, как по проводу (см. заргрузка файлов на spiffs), так и через WiFi. Удерживая при запуске ESPboy кнопку «B», мы превращаем гаджет в точку доступа, и подключившись к ее WiFi сети с именем «ESPboy» через браузер, попадаем в веб интерфейс файловой системы, где можно, как удалять файлы, так и загружать новые.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Остается только собрать гаджет, на что есть схемы, инструкции и kit набор для сборки, который вскоре будет доступен на tindie.com.

Наигравшись в существующие игры – можно довольно быстро начать писать свои.

Игровая консоль и игры к ней своими руками. Little Game Engine + ESPboy Esp8266, Arduino, Gamedev, Программирование, Микроконтроллеры, Длиннопост

Краткая спецификация LGE виртуальной машины:


- Набор из 108 инструкций навеян CHIP8/SCHIP и микропроцессором MOS6502.

- 16 регистров по 16 бит, нулевой регистр является указателем стека.

- Каждая инструкция двухбайтовая, некоторые инструкции содержат после себя два байта данных

- Адресуемая память 20Kб.

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

- Размер экрана 128х128 пикселей, 16 цветов на точку, что занимает 8Kб памяти, еще столько же занимает буфер для рисования спрайтов и частиц.

- Обновление экрана около 20 кадров в секунду.

- Можно рисовать тайлы и 32 спрайта размером до 128х128 пикселей с возможностью вращения и зеркалирования.

- Поддерживается работа с частицами.

- Для экономии памяти можно использовать однобитные изображения или RLE сжатие.

- Присутствует упрощенная физика: обнаружение столкновений спрайтов со спрайтами и тайлами, разрешение столкновений, гравитация.

- Экран обновляется построчно, только если в строке произошло изменение пикселей.

- Скорость VM в зависимости от того, сколько строк отрисовывается в кадре, варьируется от 100 тысяч до 900 тысяч операций в секунду.

- Можно использовать разные цветные экраны, есть программное растягивание изображения.


Чтобы не писать напрямую в опкодах, в SDK входит самописный компилятор «LGE С», представляющий из себя «C» образный язык высокого уровня. На данный момент этому компилятору далеко до полной поддержки стандартов языка C и при компиляции можно легко столкнуться с непонятной ошибкой в непонятном месте. Зато он быстр, ведь он занимает меньше 2000 строк исходного кода, а также постоянно развивается.


LGE онлайн среда разработки с компилятором и эмулятором

Описание виртуальной машины LGE

Руководство по LGE компилятору «C» образного языка

Исходный код игр LGE на LGE C


На LGE SDK уже сделано не мало игр и можно продолжать создавать новые прямо сейчас, однако до совершенства далеко. Если кто-то желает принять участие в создании новых игрушек на LGE или улучшении самого LGE SDK, а так же если кто-то заинтересовался сборкой ESPboy, добро пожаловать на форум www.espboy.com.

Там постараемся ответить на все вопросы и помочь в реализации идей.


Всем добра и успехов в творчестве.


С уваженеием,

Роман

Показать полностью 5
Похожие посты закончились. Возможно, вас заинтересуют другие посты по тегам: