Урок 1. Введение. Общие сведения об Ардуино.

Arduino UNO R3

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

Список уроков     Следующий урок

Введение.

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

 

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

  • Недостаточно хорошо обрабатываются сигналы аппаратных устройств, подключаемых к контроллеру. Например, простейшие элементы – кнопки. Существует дребезг кнопок, они могут быть подключены длинными проводами, чувствительными к помехам. В надежной системе обязательно применение цифровой фильтрации сигналов с кнопок или датчиков сухого контакта. Как правило, в примерах уроков просто считывается состояние сигналов кнопок.
  • Надежные программы микроконтроллеров требуют циклической переустановки переменных, контроля целостности данных.
  • Хороший стиль программирования микроконтроллеров подразумевает структурное программирование. Это не формальные слова. Как известно можно писать красивые, структурные программы на ассемблере, а можно и на C++ такого нагородить.
  • Наверное, самое главное это многозадачность. Почти во всех уроках – последовательные действия программы. Посмотрели состояние кнопки, затем зажгли светодиод, вызвали какую-то непонятную функцию… Результат достигается просто, но и результат какой-то ущербный.

Если взять, к примеру, мою программу контроллера для холодильника на элементе Пельтье. Как ее сделать по такому принципу? Как с помощью простых последовательных операций выполнить все необходимые действия?   Эта программа написана на ассемблере PIC контроллера. Она выполняет множество параллельных операций:

  • С периодом 10 мс опрашивает три кнопки, обеспечивает цифровую фильтрацию сигналов кнопок, устранения дребезга.
  • Каждые 2 мс регенерирует данные светодиодных семисегментных индикаторов и светодиодов.
  • Формирует сигналы управления и считывает данные с двух датчиков температуры DS18B20 с интерфейсом 1-wire. Необходимо каждые 100 мкс формировать новый бит чтения или записи для каждого датчика.
  • Каждые 100 мкс считывает аналоговые значения выходного тока, выходного напряжения, напряжения питания.
  • Усредняет значения выходных тока и напряжения за 10 мс, вычисляет мощность на элементе Пельтье.
  • Постоянно работает сложная система регуляторов:
    • стабилизация тока, напряжения, мощности на элементе Пельтье;
    • ПИД (пропорционально интегрально дифференциальный) регулятор температуры.
  • Обрабатываются защитные функции, проверка целостности данных.
  • Обеспечивает чтение и запись внутреннего EEPROM.
  • Ну и, конечно, общее управление системой, логика работы.

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

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

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

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

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

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

 

Общие сведения об Ардуино.

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

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

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

Arduino UNO R3

Благодаря простоте разработке устройств система Ардуино получила крайне широкое распространение. В одном Яндексе до 150 тысяч запросов ”Ардуино” в месяц. Несмотря на простоту разработки проектов, используя Ардуино, могут быть созданы достаточно сложные системы, особенно после появления высокопроизводительных вариантов контроллеров.

В платах Ардуино используются микроконтроллеры Atmel  AVR с прошитым в них загрузчиком. С помощью загрузчика записывается программа в микроконтроллер из персонального компьютера без применения аппаратных программаторов.

 

Для программировании Ардуино используется язык C/C++, с некоторыми особенностями.

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

Список уроков     Следующий урок

11 комментариев на «Урок 1. Введение. Общие сведения об Ардуино.»

  1. Спасибо за ваш труд!
    Достаточно давно программировал на ассемблере AVR, сейчас возникло желание возобновить. Прикупил Arduino UNO, буду штудировать ваши уроки.
    Ещё раз спасибо.

  2. Прочитал несколько «Урок №1» на разных сайтах. Не знаю как дальше, но пока он на мой взгляд лучший из всех мной прочитанных. Хочу попробовать позаниматься сам и попробовать сына 2-классника заинтересовать.
    Спасибо за Первый Урок.

  3. Здравсвуйте, Эдуард!
    Можно ли скачать Ваши уроки в PDF? Удобно было бы распечатать на бумаге для лучшего усвоения.

  4. Эдуард, прошу прощения за дурацкий вопрос, но почему Вы не считаете ардуино удачным компонентом ??? По-моему штука вполне ладная. Правда никогда под них не писал, да и сама среда основанная на компиляторе С вызывает определенные сомнения (как-то немного стрёмно писать на С для 8-битного камня). Но на ассемблере для AVR писал в свое время достаточно много. Плюс стандартизация различных плат по разъёмам, что само по себе ценность. Сейчас буду делать свой вариант контроллера холодильника на элементе Пельтье (вариант для конченных лентяев, таких как я, на основе покупного блока питания). Заложился в нём именно на ардуино мега. Правда только потому, что она у меня уже была (хотя и покупалась для совершенно другой цели, до которой руки так и не дошли).

    • Здравствуйте!
      Я имел в виду именно программную среду. Не подконтрольные переменные, указатели, стеки… Достаточно одного сбоя и система перестанет правильно работать.

      • Да, уже посмотрел. Отстой полный. И даже программы называются скетчами, курам на смех. Увы, Atmel Studio у меня под wine так и не запустилась. Поэтому закачал себе avr-gcc, avr-gdb, simulavr, плагины для эклипса и буду работать с этим. Наверно на асме, хотя может и рискну на С (надо ещё будет посмотреть какой код он генерит). Задача (контроллер холодильника) у меня хоть и не жесткий риалтайм, тем не менее блоком питания желательно управлять побыстрее. Хотел приделать туда еще и jtag, но лень. Мега это в принципе (по выведенным портам) позволяет, но придется разбираться с бутлоадером. Вобщем надеюсь обойтись без внутрисхемной отладки.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *