Arduino — С чего начинать и далее…. Упорядочите мозг, пожалуйста.


Содержание

Курс «Arduino для начинающих»

Не знаете, с чего начать изучение Arduino? Проект «Занимательная робототехника» представляет учебный курс «Arduino для начинающих». Серия представлена 10 уроками, а также дополнительным материалом. Уроки включают текстовые инструкции, фотографии и обучающие видео. В каждом уроке вы найдете список необходимых компонентов, листинг программы и схему подключения. Изучив эти 10 базовых уроков, вы сможете приступить к более интересным моделям и сборке роботов на основе Arduino. Курс ориентирован на новичков, чтобы к нему приступить, не нужны никакие дополнительные сведения из электротехники или робототехники.

Краткие сведения об Arduino

Что такое Arduino?

Arduino (Ардуино) — аппаратная вычислительная платформа, основными компонентами которой являются плата ввода-вывода и среда разработки. Arduino может использоваться как для создания автономных интерактивных объектов, так и подключаться к программному обеспечению, выполняемому на компьютере. Arduino как и Raspberry Pi относится к одноплатным компьютерам.

Как связаны Arduino и роботы?

Ответ очень прост — Arduino часто используется как мозг робота.

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

Подробнее об Arduino читайте в нашей публикации «Arduino: 10 лет вместе».

Урок 1. Мигающий светодиод на Arduino

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

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

Текст и видео урока «Мигающий светодиод».

Урок 2. Подключение кнопки на Arduino

На этом уроке вы научитесь подключать кнопку и светодиод к Arduino.

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

Урок 3. Подключение потенциометра на Arduino

В этом уроке вы научитесь подключать потенциометр к Arduino.

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

Текст и видео урока «Потенциометр».

Урок 4. Управление сервоприводом на Arduino

На этом уроке вы научитесь подключать сервопривод к Arduino.

Сервопривод – это мотор, положением вала которого можно управлять, задавая угол поворота.

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

Текст и видео урока «Сервопривод».

Урок 5. Трехцветный светодиод на Arduino

На этом уроке вы научитесь подключать трехцветный светодиод к Arduino.

Трехцветный светодиод (rgb led) — это три светодиода разных цветов в одном корпусе. Они бывают как с небольшой печатной платой, на которой расположены резисторы, так и без встроенных резисторов. В уроке рассмотрены оба варианта.

Текст и видео урока «Трехцветный светодиод».

Урок 6. Пьезоэлемент на Arduino

На этом уроке вы научитесь подключать пьезоэлемент к Arduino.

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

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

Текст и видео урока «Пьезоэлемент».

Урок 7. Фоторезистор на Arduino

На этом уроке нашего курса вы научитесь подключать фоторезистор к Arduino.

Фоторезистор — резистор, сопротивление которого зависит от яркости света, падающего на него.

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

Текст и видео урока «Фоторезистор».

Урок 8. Датчик движения (PIR) на Arduino. Автоматическая отправка E-mail

На этом уроке нашего курса вы научитесь подключать датчик движения (PIR) к Arduino, а также организовывать автоматическую отправку e-mail.

Датчик движения (PIR) — инфракрасный датчик для обнаружения движения или присутствия людей или животных.

В нашей модели при получении с PIR-датчика сигнала о движении человека Arduino посылает компьютеру команду отправить E-mail и отправка письма происходит автоматически.

Урок 9. Подключение датчика температуры и влажности DHT11 или DHT22

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

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

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

Урок 10. Подключение матричной клавиатуры

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


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

Урок 11. Подключение модуля часов реального времени DS3231

На последнем уроке нашего курса вы научитесь подключать модуль часов реального времени из семейства DS к плате Arduino, а также познакомитесь с различными интересными схемами.

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

Приложение. Готовые каркасы и роботы Arduino

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

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

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

Приложение. Мобильный справочник

“Справочник по Arduino” – помощник для разработчиков алгоритмов под платформу Arduino, цель которого дать конечному пользователю возможность иметь при себе мобильный набор команд (справочник).

Приложение состоит из 3-х основных разделов:

Где купить Arduino

Наборы Arduino можно купить на официальном сайте и в многочисленных интернет-магазинах.

Наиболее привлекательные цены, постоянные спецпредложения и бесплатная доставка на сайтах китайских магазинов AliExpress и DealExtreme . Если нет времени ждать посылку из Китая — рекомендуем интернет-магазин Амперка. Низкие цены и быструю доставку предлагает интернет-магазин ROBstore.

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

Курс будет пополняться дополнительными уроками. Подпишитесь на нас ВКонтакте или Facebook, чтобы быть в курсе обновлений.

Если вам понравился курс «Arduino для начинающих» или наш проект в целом, то вы можете поддержать нас:

Возможно, вас также заинтересует наш курс «Raspberry Pi: первое знакомство«

31 комментарий к статье “Курс «Arduino для начинающих»”

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

Отличные понятные видео, спасибо! Давайте продолжение

Мы организовали мини домашний кружок по ардуино (я и трое детей. Купили два набора для начинающих + у меня была всякая мелочевка. Я посмотрел несколько видео курсов, остановился на вашем. В итоге мы смотрели вместе урок и делали. Получилось не все, но в целом доволен результатами. Дети осилили. С сентября хотим продолжить. Надеюсь, ученики не разбегутся :)

А я недавно взял вот такой ардуино кит http://ali.pub/1p8hk учить — не мое это … Буду умный дом себе воять. Раньше думал, что микроконтроллеры — это очень сложно
Теперь понял, что элементарно )

vsjo klassno no ne hvataet primerov. vot byl odin migajushij svetodiod — eto klassno. a primera kak sdelatj dva i bolshe ne napisali dazhe. sam dolgo sidel i eksperementiroval.. v itoge polu4ilosj
#define led7 7
#define led8 8
void setup()
<
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
>
void loop()
<
digitalWrite(led7, HIGH);
delay(70);
digitalWrite(led7, LOW);
delay(190);
digitalWrite(led7, HIGH);
delay(70);
digitalWrite(led7, LOW);
delay(190);
digitalWrite(led7, HIGH);
delay(70);
digitalWrite(led7, LOW);
delay(550);

digitalWrite(led8, HIGH);
delay(500);
digitalWrite(led8, LOW);
delay(300);
digitalWrite(led8, HIGH);
delay(500);
digitalWrite(led8, LOW);
delay(300);
digitalWrite(led8, HIGH);
delay(500);
digitalWrite(led8, LOW);
delay(550);

digitalWrite(led7, HIGH);
delay(70);
digitalWrite(led7, LOW);
delay(190);
digitalWrite(led7, HIGH);
delay(70);
digitalWrite(led7, LOW);
delay(190);
digitalWrite(led7, HIGH);
delay(70);
digitalWrite(led7, LOW);
delay(1500);
digitalWrite(led8, HIGH);
digitalWrite(led7, HIGH);
delay(30);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
delay(50);
digitalWrite(led8, HIGH);
digitalWrite(led7, HIGH);
delay(30);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
delay(50);
digitalWrite(led8, HIGH);
digitalWrite(led7, HIGH);
delay(30);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
delay(50);
digitalWrite(led8, HIGH);
digitalWrite(led7, HIGH);
delay(30);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
delay(1500);
>

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

Мозг круглого червя загружен в робота Arduino

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

Робот управляется мозгом червя

Основная цель проекта заключалась в полной имитации поведения червя, а также представлении активности нервной системы и мозга в цифровом виде. Чтобы этого достигнуть, понадобится ещё немало дополнительных исследований. Однако, учёные уже смогли загрузить в робот Arduino некую симуляцию мозга червя. Робот оснащен всеми эквивалентами частей тела Caenorhabditis elegans: имеется аналог носа — сонарный датчик, а моторные нейроны нематоды высупают двигателями робота. Они прикреплены на каждой стороне её тела.

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

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

Революция в сфере ИИ

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

Дальнейшая разработка

Отцифрованный мозг червя располагается в GitHub-репозитории OpenWorm. Проект Nematoduino имеет открытый код. У всех желающих есть шанс познакомиться поближе с идеями, применными при загрузке цифровой копии мозга в Arduino. Он использует всего 13 542 байта, что включает всего 42% программной памяти платы, совместимой с UNO, и 825 байт (40%) SRAM. Разработчикам, которые заинтересовались проектом, предоставляется достаточно места для присоединения новых сенсоров и собственного кода.

Что такое Arduino и что с ним можно сделать

Содержание статьи

  • Что такое Arduino и что с ним можно сделать
  • Интерфейс SPI и Arduino
  • Как подключить RF >

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

«Мозг» Arduino

«Мозг» Arduino — это микроконтроллер семейства Atmega. Микроконтроллер представляет из себя микропроцессор с памятью и различными периферийными устройствами, реализованный на одной микросхеме. Фактически это однокристальный микрокомпьютер, который способен выполнять относительно простые задачи. Разные модели из семейства Arduino оснащены разными микроконтроллерами.

На фото микроконтроллер Atmega328. Такие микроконтроллеры стоят на Arduino UNO и Arduino Nano (но в другом корпусе).


«Руки» Arduino

Но какой толк от мозга, если он не имеет рук? Руками в данном случае служат электрические выводы, размещённые по периметру платы Arduino. Есть платы с большим количеством выводов, есть с меньшим. Например, самая большая плата в семействе Ардуино — Arduino Mega — имеет более 70 независимых выводов, а самая маленькая — Arduino Pro Mini — всего 22 вывода.

На фотографии показаны в сравнении Arduino Mega и Arduino Pro Mini.

Цифровые и аналоговые выводы

Не все выводы у Arduino одинаковые. Есть выводы цифровые, а есть аналоговые. Принципиальная разница между ними в том, что на цифровых выводах может быть только два значения: либо логическая «1» (TRUE, от 3 до 5 вольт), либо логический «0» (FALSE, от 0 до 1,5 вольт), а на аналоговых выводах — диапазон от логической 1 до 0 разбит на множество мелких участков.

Зачем это нужно? Давайте рассмотрим такой наглядный пример. Если подключить к цифровому выводу Arduino светодиод и подать на вывод логическую «1», то светодиод загорится с максимальной яркостью; если подать «0» — светодиод погаснет. Никаких промежуточных вариантов нет. Если светодиод подключить к аналоговому выводу, то яркостью светодиода можно управлять плавно. На практике к аналоговым выводам чаще всего подключаются какие-либо аналоговые датчики.

Чем может управлять Arduino

В итоге такое количество «рук» у Arduino позволяет подключать к нему огромное количество различных периферийных устройств. Среди них, например:

  • кнопки,
  • светодиоды,
  • микрофоны и динамики,
  • электродвигатели и сервоприводы,
  • ЖК дисплеи,
  • считыватели радиометок (RFID и NFC),
  • ультразвуковые и лазерные дальномеры,
  • bluetooth, WiFi и Ethernet модули,
  • считыватели SD карт,
  • GPS и GSM модули.

А также десятки различных датчиков:

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

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

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

Общение с Arduino

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

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

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

Почему не стоит использовать Arduino для обучения программированию

Hack van de dam

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

Цукерберг рекомендует:  Курсы Product manager - офлайн-интенсив Product manager

Что такое Arduino?

«Arduino – это открытая платформа для прототипирования электроники, основанная на гибком, простом в использовании оборудовании и программном обеспечении. Она предназначена для новичков, профессионалов и все тех, кто заинтересован в создании интерактивных объектов или сред», – именно так представлена Arduino своими разработчиками [1]. И они правы. Для создания интерактивных объектов или сред проект Arduino подходит идеально. Вам доступно невообразимое количество примеров кода, вы можете с легкостью считывать датчики (работа с которыми в обычном случае, даже при наличии опыта программирования, может занимать от нескольких часов до нескольких дней), и получаете доступ к большой базе пользователей для обсуждения вопросов. Создание интерактивных объектов – это, прежде всего, взаимодействие с человеком. Подключите датчик к исполнительному устройству, создайте новые алгоритмы и экспериментируйте… Однако для обучения программированию или использования возможностей встраиваемой электроники такой подход плох.

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

Пять причин, почему (не в порядке важности)

1. Отсутствие проектного пространства, разбиения кода и приличной интегрированной среды разработки

Для меня это большая неприятность. Я понимаю, что не следует перегружать новичков переизбытком опций, но среда Arduino IDE выглядит как насмешка над приличной записью кода. Может быть, нужно преклонить колени, чтобы уговорить их сделать цветовое выделение переменных, но для начала хотя бы дайте возможность просмотра их определений. Посмотрите, как это выглядит в Code::Blocks [2] на Рисунке 1. Другой момент состоит в том, что весь код необходимо писать в одном «эскизе» (скетче). Если нужно написать серьезную программу с функциями, которые будут использоваться позже, то хорошая практика (или даже похвальная) заключается в создании модульных фрагментов кода. Запись всего в один длинный файл идет в разрез с этой целью и стимулирует написание неструктурированного кода, называемого «макароны», с запутанным порядком выполнения и определениями переменных везде и нигде.

Рисунок 1. Опция поиска определений переменных и их
реализация в среде Code::Blocks.

Общие соображения, касающиеся того, почему так важны заголовочные файлы, очень хорошо изложены на сайте [3]. Кроме того, замечательное руководство по модульному программированию в Си (на английском языке) можно найти в (почитайте посты на форуме). Чтобы получить четкое представление о том, как это делается правильно, загляните, пожалуйста, в подробное руководство по заголовочным файлам в Си, выпущенном MIT [4] (на английском языке):

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

Написанию модульного кода отлично помогает возможность поиска определений и реализаций файлов. Но Arduino IDE не обеспечивает простых способов создания других Си- и h-файлов, а также не позволяет искать определения в своих собственных файлах кода. (Кто сможет сказать, что на самом деле делает функция «digitalWrite»)? Изучая программирование на Си, пожалуйста, научитесь правильно использовать заголовочные файлы.

2. Плохие уровни абстракций, плохие именования

«Язык программирования» Arduino использует множество предопределенных функций для использования периферийных устройств Arduino. Имена многих из этих функций вводят в заблуждение или используют плохие абстракции, просто не описывая того, что они делают. Хорошая аппаратная абстракция экономит время разработчика, плохая абстракция усложняет и запутывает. Вот несколько примеров:

  1. analogWrite(int):
    Функция «записывает аналоговое значение (ШИМ) в порт микроконтроллера». Вы скажете: «Что? ШИМ стал аналоговым?». Он настолько же аналоговый, насколько аналоговая информация на компакт-диске. Сигнал широтно-импульсной модуляции НЕ аналоговый; частота ШИМ Arduino равна «приблизительно» 490 Гц, и нет никаких указаний касающихся того, какой должна быть комбинация RC, чтобы сделать аналоговый сигнал. Это вводит в заблуждение. Сказанного достаточно для управления светодиодом, но это не «аналоговый сигнал», который можно было бы использовать в качестве уставки для аналоговой системы управления.
  2. И конечно, если уж вы предоставили возможность генерировать сигнал ШИМ, то хотя бы позвольте установить его частоту.
  3. pinMode():
    Я должен признать, что ошибка уже исправлена, но некоторое время назад были доступы только значения «INPUT» и «OUTPUT». Если бы потребовалось получить вход с подтягивающим резистором, пришлось бы еще выполнить функцию digitalWrite() для порта, который только что был сделан входом. Те, кто знают архитектуру AVR, понимают, что тем самым производится запись в регистры DDRx и PORTx, но для новичков включение подтягивающего резистора записью в порт, который только что был сделан входом, выглядит очень странной. Сейчас все исправлено, но для этого потребовалось слишком много времени; функция pinMode() уже использовалась, и нуждалась только в этой дополнительной опции. Здесь не только не было абстрагирования от «железа», но эта функция создавала код, который не мог нормально переноситься на другие микроконтроллеры. (Вероятно, поэтому функция была исправлена в момент появления платы Arduino Due).
  4. Переменные:
    Зачем использовать все типы char, int, long и т.д.? Использование stdint (uint8_t, uint16_t, int32, …) даст более правильное понимание и более переносимый код. Тип int – это 16-битная величина для компилятора AVR-GCC, тогда как для компилятора GNU ARM – 32-битная…
  5. Отсутствие абстракций и свойств системы:
    progmem. Очень многие используют для отладки сроковые последовательности, которые сохраняются в ОЗУ. Фиксированные строки могут храниться во Flash-памяти и считываться из нее; эти функции присутствуют в пакете avr-libc. Поэтому я думаю, что 90% людей, сказавших «память Arduino переполнилась», были бы рады добавлению какого-нибудь ключевого слова.

3. Ужасная документация

Документация по функциям в Arduino ничего не сообщает о том, какие в них используются периферийные модули (не говоря уж о более глубоком уровне), скрывая это от обычных пользователей. Раньше я использовал openFrameworks. По крайней мере, с их средой разработки можно в коде посмотреть, как реализуются те или иные функции. С Arduino вы работаете вслепую. Можно ли обращаться к таймеру из функции servo()? Будет ли отправка строки в последовательный порт блокировать выполнение программы? Будет ли функция analogWrite() влиять на другие функции времени? В руководстве по Arduino вы об этом не прочитаете.

В справочнике по Arduino также описывается её «язык программирования». В базовой структуре используются некоторые функции Си и Си++, описанные, опять же, непонятно. «Arduino» – не тот язык, который вы не постеснялись бы указать в своем резюме. Чтобы считаться программистом, надо уметь программировать на Си! Сходства и различия этих функций неясны, что приводит к путанице при переходе на другие микроконтроллеры или в среды разработки ANSI-C. Где используются классы? Где используются структуры? Я понимаю, что Arduino не хочет отпугивать новых пользователей, но как же они станут «продвинутыми» пользователями?

4. Отсутствие доступа к периферии и напрасная трата ресурсов

Я знаю, что, смешав скетч с «реальным» Си и используя регистры Atmel, вы можете получить доступ к периферии Arduino и микроконтроллера. Но, если уж вы продвинулись так далеко, пожалуйста, доставьте себе удовольствие и напишите собственный код, где вы будете знать, какая периферия используется и каким образом. Начиная программировать микроконтроллеры, я был поражен скоростью их работы (PIC, 8 МГц). Написание кода, оптимизированного для периферии, использование прерываний для параллельного выполнения максимально возможного числа задач – все это показало мне, какая сила заключена во встраиваемых устройствах и компьютерах. Поэтому, с моей точки зрения, использование Arduino для освоения программирования встраиваемых систем отнимает бесценную возможность научиться созданию по настоящему эффективных и мощных приложений.

У меня на работе многие пытаются писать на Arduino циклы управления. Используя функцию micros(), они отмечают время начала функции loop(), выполняют свои задачи, а затем снова опрашивают функцию micros() для ожидания завершения времени цикла. Это крайне расточительное использование ресурсов микроконтроллера, которые могли бы быть полезными для добавления новых задач, или для процессов, которые не могут работать в одной системе отсчета времени. Одно лишь это делает mbed лучше Arduino. Реализация функции Ticker, хотя и не лишена недостатков, но, по крайней мере, использует синхронизацию на основе прерываний, оставляя основной цикл для «медленных» задач.

5. Отсутствие «реальной» отладки

Когда в Arduino использовался ATmega328, у разработчика не было порта отладки. Теперь появилась серия плат Due, и отладочные порты имеют микроконтроллеры Microchip (Atmel) от серии tiny (DebugWire) до серии XMEGA (PDI и JTAG), однако пользователям Arduino этот мощный набор инструментов по-прежнему недоступен. Думаю, что при использовании правильно настроенного отладчика время разработки приложений у меня снижается процентов на 30. Поэтому ARM интересен хотя бы тем, что может использовать реализацию OpenOCD, предоставляющую разработчику широкие возможности отладки и программирования. Несколько точек останова дают очень быструю индикацию выполняемого кода и возникающих ошибок. Меня приводят в восторг все новые наборы разработки ARM с интегрированным аппаратным отладчиком. Добавьте поддержку arm-gdb и OpenOCD, и вы на вершине! Настройка этих инструментов может оказаться немного затруднительной, но полностью стоит того, чтобы попытаться создать достойное встроенное приложение.

Какова же альтернатива?

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

  • Scratch [5]. Это веселый и легкий инструмент для детей и подростков, желающих освоить программирование, который даже поддерживает возможность разбиения кода. Конечно же, он не предназначен для встраиваемых систем, но для детей это хороший способ понять, что такое программа.
  • Mbed [6]. Онлайн компилятор с открытым кодом, поддерживающий множество модулей и плат на микроконтроллерах различных производителей, включая NXP, Analog Devices, STMicroelectronics, Nordic Semiconductor, Ublox, который отлично подходит для новичков, так как не требует установки инструментальных средств. С компилятором предлагается огромный архив примеров, которые можно легко импортировать в свой проект. Да, речь именно о проектах. Вам дается возможность полного контроля над исходным кодом и его структурой, включая онлайн управление версиями. Предоставляемый mbed код – это Си++, использующий классы и перегрузку операторов, что лично меня, воспитанного на ANSI-C, первоначально немного сбивало с толку, однако документация, которую вы тоже найдете в своем проекте, прозрачна и доступна. Использование периферии нельзя назвать простым, но можно косвенно использовать таймеры для генерирования прерываний по времени, и, опять же, все это хорошо документировано. Вам не нравятся онлайн сервисы? Хорошо, можно работать оффлайн. Единственный, на мой взгляд, недостаток mbed – отсутствие возможности отладки с использованием точек останова и наблюдения.
  • Компилятор AVR-GCC/WinAVR [7] с микроконтроллерами серии Xmega. Пакет программ AVR-GCC (с библиотеками avr-libc) имеет солидную репутацию и очень хорошую базу пользователей [8]. Причина, по которой я рекомендую серию Xmega, – это «фантастическая» документация. Правда, из-за того, что для каждого периферийного устройства есть отдельное указание по использованию, Atmel Studio имеет очень «раздутые» размеры, но зато предоставляет реальный набор мощных инструментов для разметки кода, отладки (точки останова) и симуляции (просмотр и изменение битов регистров периферии). При использовании отладчика Dragon (переоцененного) можно работать с устройствами, имеющими память программ до 32 Кбайт. Конечно, начинать с такого набора без каких-либо знаний в области программирования будет тяжело, но всегда можно найти информацию в Интернете или попросить помощи у знающего друга. При чтении указаний по применению у меня возникает ощущение, что можно создать систему, которая после настройки все будет делать самостоятельно: DMA будут отправлять полученные значения АЦП в память, система событий будет запускать таймеры для запуска ЦАП, и тому подобное. Поработать придется довольно много, но вы сделаете действительно встраиваемую систему. Это как самостоятельно приготовить суши вместо того, чтобы идти в Макдональдс…
  • Использовать отладочные платы Launchpad/STM32/… [9]. Другие ARM платы. И да, и нет… Конечно, ARM – это будущее, но начинать с этого, думаю, довольно сложно. Кроме того, при использовании бесплатных инструментальных наборов вам придется потратить уйму времени на их настройку. Правда, это полезно; оценочная плата с интегрированным отладчиком (8 евро за плату серии STM32F0 Discovery [10] – не сравнить с продуктами Atmel/Microchip), и еще что-то, и в своем резюме вы сможете указать, что работали с ARM. Однако документация в основном посредственная и пугающе объемная. Кроме того, набор опций в компиляторах и средах разработки настолько велик, что порой трудно разобраться, почему программа не компилируется.


Заключение

Arduino – отличный «фаст фуд программирования» – легкодоступный, дающий быстрый результат и иногда даже изящный. Но для того, чтобы узнать «как программировать» или «как добиться максимальной производительности микроконтроллеров», или же для использования в качестве первого шага Arduino не подходит. Для этого изучайте настоящую кулинарию; начинайте с нуля – с кипящей воды, затем кладите туда scratch, готовьте картофель с mBed и делйте суши с Atmel, чтобы в конечном итоге выйти на фристайл с отладочными платами ARM.

Ссылки

Перевод: Vadim по заказу РадиоЛоцман

Ученые вставили мозг червя в робота Arduino

Несколько лет назад международная группа ученых разместила круглого червя Caenorhabditis elegans внутрь робота, собранного из кирпичиков Lego. Теперь они создали версию, в разработке которой каждый может принять участие. Она представляет собой биологически достоверную модель нейронной сети червя на платформе Arduino Uno.

C. elegans — нематоды, биология которых полностью изучена. Мы знаем все их гены, а их нервная система была исследована множество раз. В 2014 году коллектив ученых проекта OpenWorm записал все связи между 302 нейронами этого червя и смоделировал их в виде компьютерной программы. Целью проекта стало создание виртуального C. elegans.

Суперрастение спасет человечество от голода и изменений климата

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

Поразительное достижение 2014 года не позволяло, однако, из-за особенностей системы, собрав собственного робота, загрузить в него оцифрованную нейронную сеть круглого червя. Новый проект с открытым кодом — Nematoduino — использует только 13 542 байта или 42% программной памяти совместимой с UNO платы и 825 байт (40%) SRAM. Остается достаточно места для добавления собственного кода и новых сенсоров. Также было бы здорово придумать более изящный способ соединения двигательных нейронов с приводами, чем обычные колеса.

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

Аrduino для начинающих

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

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

Что такое Arduino и для чего оно нужно?

Arduino — это электронный конструктор, который позволяет любому человеку создавать разнообразные электро-механические устройства. Ардуино состоит из программной и аппаратной части. Программная часть включает в себя среду разработки (программа для написания и отладки прошивок), множество готовых и удобных библиотек, упрощенный язык программирования. Аппаратная часть включает в себя большую линейку микроконтроллеров и готовых модулей для них. Благодаря этому, работать с Arduino очень просто!

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

проекты на Arduino

Стартовый набор Arduino

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

Цукерберг рекомендует:  Построение UI средствами UITableView. Кастомизация. Анимация.
Базовый набор ардуино для начинающих: Купить
Большой набор для обучения и первых проектов: Купить
Набор дополнительных датчиков и модулей: Купить
Ардуино Уно самая базовая и удобная модель из линейки: Купить
Беспаечная макетная плата для удобного обучения и прототипирования: Купить
Набор проводов с удобными коннекторами: Купить
Комплект светодиодов: Купить
Комплект резисторов: Купить
Кнопки: Купить
Потенциометры: Купить

Среда разработки Arduino IDE

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

Язык программирования Ардуино

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

Для программирования Arduino используется упрощенная версия языка C++ с предопределенными функциями. Как и в других Cи-подобных языках программирования есть ряд правил написания кода. Вот самые базовые из них:

  • После каждой инструкции необходимо ставить знак точки с запятой (;)
  • Перед объявлением функции необходимо указать тип данных, возвращаемый функцией или void если функция не возвращает значение.
  • Так же необходимо указывать тип данных перед объявлением переменной.
  • Комментарии обозначаются: // Строчный и /* блочный */

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

Все прошивки для Arduino должны содержать минимум 2 функции. Это setup() и loop().

Функция setup

Функция setup() выполняется в самом начале и только 1 раз сразу после включения или перезагрузки вашего устройства. Обычно в этой функции декларируют режимы пинов, открывают необходимые протоколы связи, устанавливают соединения с дополнительными модулями и настраивают подключенные библиотеки. Если для вашей прошивки ничего подобного делать не нужно, то функция все равно должна быть объявлена. Вот стандартный пример функции setup():

Arduino для начинающих. Часть 1

Предисловие

Доброго времени суток, Хабр. Запускаю цикл статей, которые помогут Вам в знакомстве с Arduino. Но это не значит, что, если Вы не новичок в этом деле – Вы не найдёте ничего для себя интересного.

Введение

Было бы не плохо начать со знакомства с Arduino. Arduino – аппаратно-программные средства для построения систем автоматики и робототехники. Главным достоинством есть то, что платформа ориентирована на непрофессиональных пользователей. То есть любой может создать своего робота вне зависимости от знаний программирования и собственных навыков.

Начало

Создание проекта на Arduino состоит из 3 главных этапов: написание кода, прототипирование (макетирование) и прошивка. Для того, чтоб написать код а потом прошить плату нам необходима среда разработки. На самом деле их есть немало, но мы будем программировать в оригинальной среде – Arduino IDE. Сам код будем писать на С++, адаптированным под Arduino. Скачать можно на официальном сайте. Скетч (набросок) – программа, написанная на Arduino. Давайте посмотрим на структуру кода:

Важно заметить, что обязательную в С++ функцию main() процессор Arduino создаёт сам. И результатом того, что видит программист есть:

Давайте разберёмся с двумя обязательными функциями. Функция setup() вызывается только один раз при старте микроконтроллера. Именно она выставляет все базовые настройки. Функция loop() — циклическая. Она вызывается в бесконечном цикле на протяжении всего времени работы микроконтроллера.

Первая программа

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

Принцип работы этой программы достаточно простой: светодиод загорается на 1 секунду и тухнет на 1 секунду. Для первого варианта нам не понадобиться собирать макет. Так как в платформе Arduino к 13 пину подключён встроенный светодиод.

Прошивка Arduino

Для того, чтоб залить скетч на Arduino нам необходимо сначала просто сохранить его. Далее, во избежание проблем при загрузке, необходимо проверить настройки программатора. Для этого на верхней панели выбираем вкладку «Инструменты». В разделе «Плата», выберете Вашу плату. Это может быть Arduino Uno, Arduino Nano, Arduino Mega, Arduino Leonardo или другие. Также в разделе «Порт» необходимо выбрать Ваш порт подключения (тот порт, к которому вы подключили Вашу платформу). После этих действий, можете загружать скетч. Для этого нажмите на стрелочку или во вкладке «Скетч» выберете «Загрузка» (также можно воспользоваться сочетанием клавиш “Ctrl + U”). Прошивка платы завершена успешно.

Прототипирование/макетирование


Для сборки макета нам необходимы следующие элементы: светодиод, резистор, проводки (перемычки), макетная плата(Breadboard). Для того, чтоб ничего не спалить, и для того, чтоб всё успешно работало, надо разобраться со светодиодом. У него есть две «лапки». Короткая – минус, длинная – плюс. На короткую мы будем подключать «землю» (GND) и резистор (для того, чтоб уменьшить силу тока, которая поступает на светодиод, чтоб не спалить его), а на длинную мы будем подавать питание (подключим к 13 пину). После подключения, загрузите на плату скетч, если вы ранее этого не сделали. Код остаётся тот же самый.

На этом у нас конец первой части. Спасибо за внимание.

Применяем тактику Inbox Zero для мозга

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

Каша из 50 тысяч мыслей

Исследователи утверждают, что каждый день 50 тысяч мыслей проходят через нашу голову. Это могут быть совершенно любые мысли, начиная от «о, какой сексуальный парень/девушка» и заканчивая «я понял смысл жизни». И все эти мысли тратят энергию мозга.

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

Надоедливые мысли вызывают стресс

У вас бывало так, что одна и та же мысль постоянно всплывает в голове? Например, «Я должен отправить открытку своему дяде». Однако вы не делаете этого сразу, потому что дело не срочное.

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

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

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

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

Inbox Zero для мозга

Вы слышали про пустой ящик электронной почты Inbox Zero и разных способах навести порядок в куче писем?

То же самое можно сделать и со своим мозгом, «почистить» его и предупредить возникновение хаоса. Вот семь советов, как это сделать.

1. Выливаем мысли на бумагу

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

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

Не записывайте мысли, которые не направлены на достижение цели. Например, вы не можете что-то сделать в ответ на мысль: «О, эта машина красивого небесно-голубого цвета», поэтому не записывайте её. А вот если пришла мысль: «Хочу покрасить свою машину в такой же цвет», это нужно записать.

2. Организуйте по категориям

Каждый раз, когда в вашем списке появляется новое дело, надо дать ему два определения:

  1. Срочность — когда вам надо это сделать.
  2. Приоритет — какое дело надо закончить первым.

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

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

3. Добавляйте организованные мысли в календарь

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

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

4. Что, если мысли всё равно повторяются

Итак, ваша мысль схвачена, определена и добавлена в календарь. Теперь настало время проверить, всё ли работает как надо.

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

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

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

5. Дробим и выполняем

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

Чтобы лучше понять, о чем идет речь, давайте разберем пример:

У вас промелькнула мысль: «Надо построить дом», вы поймали её, записали, поставили высокий приоритет и сроки выполнения — три года. После этого вам надо внести её в календарь, на как это сделать?

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

Это поможет начать воплощение цели и не испытывать стрессов от её масштабов.

6. Правило пяти минут

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

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

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

  1. Могу ли я сделать его за пять минут?
  2. Если ли у меня сейчас пять свободных минут?

Если ответ на оба вопроса положительный, выполняйте его без отговорок.

7. Только реальность, без иллюзий


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

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

Что можно использовать

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

Могу посоветовать Evernote — бесплатные электронные заметки для десктопа или смартфона (заметки синхронизируются и доступны с любого устройства).

Есть ещё один вариант — Google Keep. Тоже полностью бесплатное, работает на разных девайсах, позволяет делать цветные заметки и менять их местами, что отлично подойдет для расстановки приоритетов.

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

Программируем Arduino с нуля

Мозгокурс молодого бойца по программированию Ардуино или с чего все-таки начать знакомство с этой платформой.

«— С чего начинать, Ваше Величество? — спросил он. — Начни с начала, — важно ответил Король,…» (C) Льюис Керрол Алиса в стране чудес

Шаг 1: Начинаем с самого начала или как было бы хорошо, если бы Ардуино была бесплатной

Перечитав тонны учебников по Ардуино, придумав кучу полезных применений этой штуки в быту, начиная с автоматизации кормления рыбок в аквариуме заканчивая роботом-сеятелем для личного газона мы понимаем — без Ардуино нам не обойтись!

Купив контроллер мы понимаем, что плата у нас одна, а задумок много. Что же делать? Мозгомысль приводит нас к правильному решению.

Нужно клонировать Ардуино своими руками!

Шаг 2: Собираем все необходимое

Для ускорения процесса воспользуемся макетной платой. Как известно из технических параметров контроллера ATmega 328 IC, для его запуска в минимальной конфигурации нам потребуются:

− контролер Arduino Duemilanove (будет использован как программатор);
− микросхема ATmega 328 IC ;
− кварцевый резонатор на 16 Мгц;
− резисторы 100 Ом 3 шт.;
− конденсаторы 22pF 2 шт.;
− светодиоды 3 шт с красным, зеленым, .и желтым цветом свечения;
− стабилизатор напряжения на 5 Вольт например 7805;
− любая 9 батарея с разъемом для подключения;
− кабель USB;
− компьютер или ноутбук с установленным пакетом программ Arduino IDE;
− макетная плата и провода.

Шаг 3: Начинаем макетировать

Размещаем на макетной плате микросхему контроллера.

Шаг 4: Монтируем стабилизатор напряжения и цепи питания

Устанавливаем на плату стабилизатор напряжения L7805. Назначение выводов микросхемы 1-вход (7-20 Вольт), 2-корпус, 3-выход (5 Вольт). C помощью монтажных проводов подключаем стабилизатор к источнику питания и контроллеру, как показано на фотографиях.

Шаг 5: Подключаем питание к контроллеру

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

Совет: Монтажные провода имеют разный цвет изоляции, старайтесь использовать провода одного цвета для каждой цепи.

Шаг 6: Подключаем кварцевый резонатор

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

Порядок монтажа следующий:

− конденсатор 22pF ставим между землёй и 9 ножкой контроллера;
− конденсатор 22pF ставим между землёй и 10 ножкой контроллера;
− резонатор включаем между ногами 9 и 10 контроллера;
− резистор 10 kOm включаем между 1 ногой контроллера и +5В (шунтируем сигнал «Сброс»).

Шаг 7: Добавляем индикаторы состояния контроллера

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

Шаг 7: Соединяем макет с платой программатора

Подключаем собранный макет к плате Arduino Duemilanove следующим образом:

− вывод жёлтого светодиода соединяем с 9 выводом на разъёме программатора, его пульсация покажет нам, что программатор работает;
− вывод красного светодиода соединяем с 8 выводом на разъёме программатора, он сигнализирует о возможных ошибках;
− вывод зелёного светодиода соединяем с 7 выводом на разъёме программатора, его свечение сигнализирует об обмене данными между программатором и микроконтроллером.

Соединяем наши платы между собой остальными проводами как показано на рисунке, не забыв соединить провода питания + 5 В и корпус между ними.

Шаг 8: Превращаем плату Arduino Duemilanove в программатор

Для того что в загрузить в микроконтроллер ATmega 328 IC бутлоадер необходимо превратить наш Arduino Duemilanove в программатор. Подключаем нашу сборку к компьютеру с помощью USB кабеля. Открываем среду программирования AndurinoIDE, выбираем в нем скетч (программу) AndurinoISP и загружаем его в Arduino Duemilanove. По миганию жёлтого светодиода убеждаемся, что скетч загрузился в наш программатор.

Шаг 9: Загружаем бутлоадер

В AndurinoISP (пункт меню «Tools») выбираем нужный нам тип контроллера (ATmega 328 IC). Даём команду на загрузку бутлоадера «Burn bootloader». Следим за сообщениями AndurinoIDE, после окончания загрузки бутлоадера «Done Burning bootloader» наш микроконтроллер готов к записи скетча проекта нашей новой самоделки.

Шаг 10: Возможные проблемы и их решение

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

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

Сообщества › Электронные Поделки › Блог › Мое первое знакомство с АРДУИНО.

Да оно первое пускай косо и криво но вышло.

В первые о микроконтроллерах PIC я узнал примерно год назад, так как хотел создать мозги для пневмоподвески. ну это желание ни куда не делось и по тихоньку я двигаюсь к этому, и тут случайно узнал об АРДУИНО и мне понравилась легкота и просто та всего этого, правда загвоздка язык С а я знаю только паскаль, но знание его у меня на 4, а как препод говорил знаешь паскаль и понимаешь его значит знаешь все языки поверхностно.

было заказано с АЛИ 4 вещи:
1. АРДУИНО УНО
2. ДАТЧИК ДТН11
3. ДАТЧИК ВЛАЖНОСТИ ПОЧВЫ
4. И экран 0,96 128*64 OLED 7 пиновый( с ним очень долго искал с подключением и выводом на экран).

Сам текст проги, Одна часть сам не знаю зачем она.

Смотрите также

Комментарии 80


пневмоподвески это что

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

Понял. Немного видимо притупил!
Я использую ардуино про мини как плату с микропроцессором, а среда-Баском,
Пока хватает, посмотрите в эту сторону если не хочется с С заморачиваться

Дружище ))) только Атмел и С… по другому не как! Ардуино и PIC в топку ))).
Эффективность, в разы больше !

А кто Вам мешает писать для Ардуино в Atmel Studio 7, используя обычный Си? Я вчера почитал как ее прикрутить и теперь спокойно пишу программы на Си, но при этом стоимость всей платы дешевле, чем одного камня в Мск. И прошивка заливается через Студию, используя Бутлоадер.

Ну эт уже вообще извращение писать на Atmel Studio для Ардуино))).
Здесь суть не в стоимости совсем…суть в том чтоб понимать что пишешь, чтоб самому писать для себя что требуется, понимать как устроен и работает контроллер.
Большинство быдлординщиков, даж представление не имеют об этом, тупо используют чужие скетчи используют, сами даж на поганом ардуино не могут реализовать простейшие задачи, я уж не говорю про эффективные алгоритмы, которые на ардуино невозможно сделать. вообщем ничего не зная не понимая, считают себя программистами. а некоторые даже хакерами))).
Ардуино это так чтоб поморгать светодиодами… надо развиваться…
А будлординщики, горе «програмисты, » «хакеры» даж моргалку на смогут реализовать на Attiny13 так как это не ардуино))).

Ох… Я имел ввиду, что я использую Ардуино Уно как обычную отладочную плату того же Atmel, пишу в Студии на Си (GCC C Executable Project), а шью через ее бутлоадер с помощью консольной AvrDude. Стоит копейки, а функционал полный. От Wiring самого тошнит.

Ха. Я тоже взялся за ардуино из за управления пневмой (хотя и раньше хотел изучить програмирование, но пока не узнал про ардуино мне это было не посилу). А теперь уже на финишной прямой. Одна загвоздка только с алгоритмом. Выходит пока что так. Своеобразный мини комп.

Вопрос в тему.Купил дисплей, но никак не запущу его.Ни на ноуте ни на компе.Библиотеки все перебрал.Ни скетч ни пример не компелируются-в чем дело?Дисплей огорчил сразу своим размером, еще и это.Хотя бы понять-работает ли))
yadi.sk/i/2tjdmkJVtyCQ8
yadi.sk/d/vxGaLxjntyCZB

Как я помню у этого дисплея подключение VCC 3.3B или 5В надо смотреть по модели дисплея, нуGND земля, а SCL и SDA любые два Апорта, вот мужик об этом дисплеи рассказывает, , и это по фотке ошибки скеча у тебя библиотек куча может в этом ошибка пользуйся одними а то у тебя и масте и просто.

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

Найди обычный тест и с копируй привяжи библиотеки и может у тебя монитор дохлый вообще.

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

5 строка скеча библиотека DTH.h не правильно подгружена у тебя #include «DHT.h», а должно быть #include , потом мне кажется вот это:
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET); тут должно больше написано быть хотя хз

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2 вот это все у тебя 2 провода подключения аналоговых, а тут указано 4

float h = dht.readHumidity();
float t = dht.readTemperature();
float hic = dht.computeHeatIndex(t, h, false); здесь надо int целые числа а не дробные тоже ругается.

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

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

github.com/adafruit/Adafruit_SSD1306 вот поставил эти библиотеки и все ОК с тем скетчем который у него.

// Дмитрий Осипов. www.youtube.com/user/d36073?feature=watch
// Arduino дисплей OLED LCD Display I2C 0.96 IIC Serial 128X64 TEST_1. // Скачать sketch.
#include
#include
#include // Скачанная библиотека для дисплея.
#include // Скачанная библиотека для дисплея. yadi.sk/d/9F_uW1wIZUDna
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup()display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 0.96″ 128X64 OLED LCD Display)I2C АДРЕС.
display.clearDisplay(); // Clear the buffer. / Очистить буфер.
display.setTextColor(WHITE); // Цвет текста.
display.setTextSize(1); // Размер текста (1).
display.setCursor(0,0); // Устанавливаем курсор в колонку 0, строку 0. на самом деле это строка №1, т.к. нумерация начинается с 0.
display.println(«Hello world! 11111111»); // Печатаем 1 строку.
display.setCursor(0,10); // Устанавливаем курсор в колонку 0, строку 1.(строка №2 ).
display.println(«Dmitry OSIPOV 2222222»); // Печатаем 2 строку.
display.setTextSize(5); // Меняем размер текста (5).
display.setCursor(0,20); // Устанавливаем курсор в колонку 0, строку 2.(строка №3 ).
display.println(«Size»); // Печатаем 3 строку.
display.display(); // Чтобы сделать символы видимыми на дисплее !
>
void loop() <
>

Скетч использует 8 680 байт (26%) памяти устройства. Всего доступно 32 256 байт.
Глобальные переменные используют 833 байт (40%) динамической памяти, оставляя 1 215 байт для локальных переменных. Максимум: 2 048 байт.

Бред какой-то, не работает нифига.В ручную подключаю библиотеку на которую жалуется, сразу переключает жалобы на другую.И так безконечно-заброшу я его

Хз я вот скачал его библиотеки, появилась жалоба на 1306 библиотеку заменил её удаля старую и поставя новую, не забывай при смени библиотек надо выходить из компилятора и запускать его заново. Я тебе кинул ссылку на библиотеку с которой проверка скетча прошла успешно, а дальше если монитор подключён правильно то все ок должно быть проверь по суечусь который я скинул хотя мне кажется в нем есть ошибка не вижу портов к которым подключён монитор только порт res а по мне должны быть mosi и slk

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

Хз я вот скачал его библиотеки, появилась жалоба на 1306 библиотеку заменил её удаля старую и поставя новую, не забывай при смени библиотек надо выходить из компилятора и запускать его заново. Я тебе кинул ссылку на библиотеку с которой проверка скетча прошла успешно, а дальше если монитор подключён правильно то все ок должно быть проверь по суечусь который я скинул хотя мне кажется в нем есть ошибка не вижу портов к которым подключён монитор только порт res а по мне должны быть mosi и slk

Так всегда-только пробую поучиться, все нихера не работает((

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

И уно и нано есть. Библиотеки в нете закончились.Без компеляции ничего сделать нельзя.Что можно написать не правильно? Скопировал-вставил

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

Так и у меня не должно быть вопросов, но как всегда

Исходник фотографией — это сильно :-)

В понедельник текстом выложу.

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

Ну да))) помиловать)))

кактус то жив ещё?

Ардуино — это круто!

У меня его уже целый ящик! )

Стоит очень дешево, а веселья — куча!

Про влажность почвы: я все равно не понял, почему у тебя на экране отображается три числа, да еще и с запятой?

Все должно быть красиво, пойми! )

Если 300.8 — это по факту 30%, то может в программе сразу делить полученный результат еще на 10?

Объяви еще одну переменную (типа int cVL) и печатай на дисплей ее:

int cVL = (int) bVL/10;

(int) превратит значение с запятой float в целое число без запятой int (ибо все эти датчики все равно не особо точные, тем более у тебя 1024=100%, а это уже погрешность более 2% влажности, поэтому что там после запятой не важно и только отвлекает).

bVL/10 — сразу же твое bVL на 10 разделить, и тогда 300.8 будет просто 30.

И выводить на дисплей тогда нужно не float bVL, а целое cVL

А еще можно нарисовать и процентик (%) и градус (C°), но такого как у тебя дисплея, у меня не было — у меня простые LCD, поэтому точно не знаю что тебе можно сделать, почитай мануал к библиотеке дисплея, и вообще про него в интернете. Там либо встроены эти знаки, либо их можно довольно легко нарисовать самому.

Вообще, с этими дисплеями куча тонкостей! )


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

Почему не целое число а потому, что делю на 3.4 если будет int то делиться будет на 3 а не 3.4, 300.88 это когда датчик в воздухе, а в воде он будет показывать 99,8 в почве ещё меньше так что делить на 10 ни чего не надо, а символы заморочиться надо сделаю я ещё русский хочу.)))

Хорошо, когда есть стремление к изучению чего-то нового, да и сделанное своими руками всегда душу греет. На ардуино, говорят, можно много чего собрать, я так понял там все ограничивается фантазией и упорством. Я тоже с Али жду железки, загорелся часы сделать большие, если опыт будет удачным, есть куда развиваться)

Arduino хорошая вещь, но на ней останавливаться не стоит если вдруг заинтересуешься программированием))) На мой взгляд самый главный минус это то что мало портов ввода/вывода, всего 13 цифровых и 5 аналоговых. И успехов тебе в изучении)

А если ардуина Мега уже на него больше.

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

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

Гуглим слово «мультиплексор», проникаемся идеей, навешиваем тысячу датчиков на один порт

Да видел что то подобное в видюшках но пока она мне не требуется хватает портов.

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

Для разработки прототипа, обкатки в железе, мелких поделок «для себя», разовых проектов
самое-то.
Контрольник, с интерфейсом, обвязкой, разъемами, все из коробки.
Бери и подключай.
Можно так-же в атмел или визуал студии ваять, через программатор.
Для серийных или уже обкатанных проектов конечно дороговато выходит.

Согласен с тобой)))

Arduino хорошая вещь, но на ней останавливаться не стоит если вдруг заинтересуешься программированием))) На мой взгляд самый главный минус это то что мало портов ввода/вывода, всего 13 цифровых и 5 аналоговых. И успехов тебе в изучении)

Может кому-то и пригодиться.
На ардуино (по крайней мере на моей китайской Nano) аналоговые порты можно использовать, как цифровые.
A0 — соответствует 14-му цифровому порту
А1 — 15-му
А2 — 16-му
А3 — 17-му
А4 — 18-му
А5 — 19-му
Лично проверял. Нормально работает.

Ко мне тоже едет ардуино;), а сегодня я скачал книжку по СРР и начал с ним разбираться. Программировал, крайний раз, больше 15 лет назад, во время учебы. Что за команда «инклюд» в первых строках? А то я до него не дочитал, а интересно;)

Подключение библиотек это.

Ко мне тоже едет ардуино;), а сегодня я скачал книжку по СРР и начал с ним разбираться. Программировал, крайний раз, больше 15 лет назад, во время учебы. Что за команда «инклюд» в первых строках? А то я до него не дочитал, а интересно;)

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

Эта команда «include» включает такие библиотеки в код.

Например, библиотеку для его датчика DHT11, библиотеку для управления типовыми дисплеями и т.п.

Ко мне тоже едет ардуино;), а сегодня я скачал книжку по СРР и начал с ним разбираться. Программировал, крайний раз, больше 15 лет назад, во время учебы. Что за команда «инклюд» в первых строках? А то я до него не дочитал, а интересно;)

Ссылок куча — ищи С++ для чайников;)

Раз просил замечаний — держи:
На первом снимке во второй строке очепятка. Да и «ж» принято транслировать в «zh».

ваще хотелось на русском написать, но это буду в понедельник думать

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

хороший программист — ленивый программист, поддерживаю))))

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

А потом распечатал, отсканировал, распознал текст и все готово. Делов-то :-)

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

Это не С, и не С++. Это язык Wiring. Весьма отдаленно связан с С. Хотя Ardоuino можно, как и любой микроконтроллер, программировать на чистом С.

Ну как отдаленно. Скармливается то все тому же GCC. Так что это СИ обвешанный разными свистоперделками из макросов всяких.

Это не С, и не С++. Это язык Wiring. Весьма отдаленно связан с С. Хотя Ardоuino можно, как и любой микроконтроллер, программировать на чистом С.

Ну я вот про это и читал что ардуино программируються на С

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

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

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

Я на работе все делал а выкладываю дома.

Ну я в хорошем смысле) Заморочился так)

Могу посоветовать FLProg для ардуинки. Ну по мне как то привычнее нежели в AWR кодить… Попробуйте, может понравится… Только на радостях как я не подавайте на ардуинку 24 вольта… �� Не выживает она от такого…

Чего кого ну типа я не х не понял, но спс поюзаю.

Там модульно собираешь программу… Ну для меня проще, я с подобными работаю… А вот Си мне что то не дается… Видео в ютубе куча по ней, да книг не мало в нете.

Теперь на изучение языка программирования)))))

Еще кто бы помог с этим изучением.

Если язык С++, то тут надо знать английский достаточно хорошо и книжка есть Делфи с++ если не ошибаюсь, я по ней обучался и в Visual Studia программы писал

Не тут С просто а не С++

Ну они похожи чем то, но как всегда есть отличия

Еще кто бы помог с этим изучением.

Вот хорошие уроки www.youtube.com/playlist?…6XIpFyd-1n6O2RYCqLisJl-W6 и вот www.youtube.com/playlist?…ylgDUtd9qRAt82u-pUa9x6O8Y, кстати, если что, то можно через Arduin’ку прошивать микроконтроллер. А с МК куда удобней))) По размерам меньше, хоть встроить куда то можно нормально)

Еще кто бы помог с этим изучением.

ДРУГ Я ТОЖЕ НА ЧЕЛ изучать .но что то трудновато идет .делаю управления с планшета для авто на андройде чуть по чуть колдую

Еще кто бы помог с этим изучением.

Да чего там изучать?!
Немного включить голову, и функцию логики и соображения.
Все языки сводятся (по большому счету все, но не все) к умению работать с функциями, переменными, условиями и циклами, все остальное это обертка в синтаксис.
Если четко осознаешь, что такое переменная, и как ей пользоваться в условиях, функциях, циклах…
А так же сумеешь логически все это дело применить, то… . То считай уже молодец.
Да и Ассемблер не так страшен.
И в нем так сказать, (особенно касается современных его диалектов) можно все обернуть в макросы, и адреса именовать как переменные, что в принципе делает код много читабельнее, приближая его на пару шагов к языкам программирования высокого уровня…
В общем дерзай!
А знание аглицкого языка… Это приятный бонус, но не так уж и не обходимо…

PS а всякие там FLProg…, ну на мой взгляд, не стоит к этому действу привыкать, ибо сильно ограничивает в выражении мысли… Это как наскальная живопись и обычный литературный язык. Сильно ограничен имеющимися кубиками и памятью МК. Данная программа вероятно интересна по большому счету своим создателям. Но убеждать не буду. Просто на мой взгляд, если все равно придется изучать работу с МК, то чего ради начинать изучение наскальной живописи, когда можно освоить красивую литературную речь :)

Цукерберг рекомендует:  Вакансии Lunch74
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих
Версия Windows Mac OS X Linux
1.8.2