Наша версия знаменитого ARDUINO

Рейтинг пользователей: / 22
ХудшийЛучший 
Проекты - Электроника

БуратиноЛистая страницы заграничных сайтов, постоянно обращаешь внимание на статьи о чудо-модулях c оригинальным названием ARDUINО. В следствии природного неравнодушия к микроконтроллерной технике, я все-таки решил изучить, что же это за зверь такой - ARDUINO?

Итак, начну с того, что ARDUINO  - это аппаратная вычислительная платформа (открытый проект), основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring. В микроконтроллере имеется часть памяти, занятая программой-загрузчиком, которая размещается в памяти единожды и позволяет вносить в пользовательскую память контроллера программы посредствам UART интерфейса, имеющего всего 2 линии приема/передачи информации (RXD – TXD). Прошить контроллер ARDUINO можно и без специализированного программатора, так называемым Arduino Bit-Bang способом, о котором написано в http://www.freeduino.ru/arduino/isp.html .

В качестве аппаратной части используются микроконтроллеры серии ATmega, производства компании ATMEL. Самым простым в серии ардуино является модуль на микроконтроллере ATmega8.

arduino-to-atmega8-pins

Как видно на картинке ARDUINO объявила контроллеру свои значения ввода/вывода, а именно:

  • 14 цифровых входа/выхода ( из них 3 можно конфигурировать как выходы ШИМ)
  • 6 аналоговых входа

Главной отличительной особенностью модулей ARDUINO является то, что для программирования контроллера не нужно дополнительного компилятора, заливка ПО в память контроллера производится по средствам USB – UART контроллера, одним нажатием клавиши и практически онлайн. Среднее время прошивки контроллера на примере MEGA8 составляет примерно 3 – 5 секунд. Язык программирования доступен даже начинающему любителю контроллеров, главное чтобы было понятие о построении алгоритмов.

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

Int  LED  = 13 // Назначаем переменную и присваиваем ей значение 13
void setup() {
   // Укажем, что данная ножка будет использоваться для вывода
   pinMode(LED, OUTPUT);
}

void loop() {
   // Зажжем светодиод, подав напряжение на ножку
    digitalWrite(LED, HIGH);
   // Подождем секунду
    delay(1000);
    // Погасим светодиод, убрав напряжение с ножки
    digitalWrite(LED, LOW);
    // Подождем секунду
    delay(1000);
}

Все элементарно просто.

В интернете существуем множество сайтов любителей ARDUINO, где представлено море примеров устройств изготовленных на данной платформе.

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

Покопавшись в своих запасах, обнаружил только ATMEGу 8 в планарном исполнении.

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

pcb
В качестве устройства сопряжения с USB портом решил применить надежный, проверенный временем контроллер FT232RL, который не требует использования внешнего кварца на 12МГц. Единственным недостатком применения данного контроллера является трудность монтажа на печатную плату, так как выводы корпуса данной микросхемы имеют высокую плотность расположения. Данную прблему я решаю применением монтажной оплетки. После точного позиционирования микросхемы на плату, я пропаиваю все ее выводы не боясь при этом допустить заливки припоя между выводами микросхемы. После чего излишки припоя я убираю с помощью монтажной оплетки, получается чисто и аккуратно. Но есть и альтернативный способ, например применить готовый интерфейсный контроллер или так называемый телефонный DATA кабель. Стоимость таких кабелей примерно от 300 рублей.

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

pl-2303-plata

Можно приобрести например из наборов МАСТЕР КИТа, стоимость такого модуля 360 рублей:

bm8051

Вот что получилось в итоге:

buratino2

А вот пример реализации АМПЕР-ВОЛЬТ-ВАТТ метра с выводом информации на двухстрочный дисплей. И, соответственно пример реализации в программном коде.

buratino3

#include <LiquidCrystal.h> //Указываем библиотеку для LCD
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);// Указываем номера выводов ДУИНО для подключения LCD
int voltage = 0; // Переменная для хранения данных считаных с АЦП вывода (НАПРЯЖЕНИЕ)
int current = 0; // Переменная для хранения данных считаных с АЦП вывода (ТОК)
float u = 0; // Переменная для вычислений (НАПРЯЖЕНИЕ)
float i = 0; // Переменная для вычислений (ТОК)
float p = 0; // Переменная для вычислений (МОЩНОСТЬ)
int del = 30; // Переменная для паузы
int ledPin = 13; // Переменная номера вывода подключения светодиода.
void setup() // Стартуем с настройками
{
   lcd.begin(16, 2); // Указываем что LCD будет 16 столбов по 2 строки
   pinMode(ledPin, OUTPUT); // Указываем что 13 вывод это ВЫХОД. (светодиод)
}
void loop() // Стартуем
{
   {
      voltage = analogRead(5); // Указываем что данные считаные с аналогово вывода 5 заносим в переменную.
      u = voltage/40.92; // Математика однако, с занесением данных в переменную "u"
      lcd.setCursor(0, 0); // Указываем координаты/ первый 0 столбец, второй строка.
      lcd.print("U="); // Рисуем
      lcd.setCursor(2, 0); // Указываем координаты
      lcd.print(u); // Берем данные из переменной и рисуем их на LCD
      lcd.setCursor(6, 0); // Указываем координаты
      lcd.print("V"); // Рисуем
      delay(del); // Ждем 30 миллисекунд
   }
   {
      current = analogRead(4); // Указываем что данные считаные с аналогово вывода 4 заносим в переменную.
      i = current/40.92; // Математика однако, с занесением данных в переменную "i"
      lcd.setCursor(0, 1); // Указываем координаты/ первый 0 - столбец, второй строка.
      lcd.print("I="); // Рисуем
      lcd.setCursor(2, 1); // Указываем координаты
      lcd.print(i); // Берем данные из переменной и рисуем их на LCD
      lcd.setCursor(6, 1); // Указываем координаты
      lcd.print("A"); // Рисуем
      delay(del); // Ждем 30 миллисекунд
   }
   {
      p = u * i; // Математика из школьного курса физики
      lcd.setCursor(8, 1); // Указываем координаты
      lcd.print("P="); // Рисуем
      lcd.setCursor(10, 1); // Указываем координаты
      lcd.print(p); // Берем данные из переменной и рисуем их на LCD
      lcd.setCursor(13, 1); // Указываем координаты
      lcd.print("W "); // Рисуем
      delay(del); // Ждем 30 миллисекунд
   }
   {
      digitalWrite(ledPin,HIGH); // Включаем светодиод
   }
   if (u <= 12) // Если напряжение на входе меньше 12 Вольт
      {
         digitalWrite(ledPin,LOW); // Светодиод гасим
      }
}

Ссылки на дополнительные материалы:

Файлы для загрузки:
ФайлОписаниеРазмер файла
Скачать файл (BURATINO_MEGA8.rar)BURATINO_MEGA8.rarПечатная плата в формате Sprint Layout182 Kb
 Обсудить на форуме (0 комментариев).

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

Правила комментирования

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


Защитный код
Обновить



Темы форума
Комментарии
Статистика
Просмотров:
mod_vvisit_counterСегодня1221
mod_vvisit_counterВчера4638
mod_vvisit_counterНа этой неделе1221
mod_vvisit_counterНа прошлой неделе25792
mod_vvisit_counterВ этом месяце71996
mod_vvisit_counterЗа все время15872995

Ваш IP: 54.162.111.61
 , 
21 Авг. 2017