- Родительская категория: Проекты
- Категория: Электроника
- Автор: Administrator
- Просмотров: 54069
Наша версия знаменитого ARDUINO
Листая страницы заграничных сайтов, постоянно обращаешь внимание на статьи о чудо-модулях c оригинальным названием ARDUINО. В следствии природного неравнодушия к микроконтроллерной технике, я все-таки решил изучить, что же это за зверь такой - ARDUINO? {nomultithumb}
Итак, начну с того, что ARDUINO - это аппаратная вычислительная платформа (открытый проект), основными компонентами которой являются простая плата ввода/вывода и среда разработки на языке Processing/Wiring. В микроконтроллере имеется часть памяти, занятая программой-загрузчиком, которая размещается в памяти единожды и позволяет вносить в пользовательскую память контроллера программы посредствам UART интерфейса, имеющего всего 2 линии приема/передачи информации (RXD – TXD). Прошить контроллер ARDUINO можно и без специализированного программатора, так называемым Arduino Bit-Bang способом, о котором написано в
В качестве аппаратной части используются микроконтроллеры серии ATmega, производства компании ATMEL. Самым простым в серии ардуино является модуль на микроконтроллере ATmega8.
Как видно на картинке ARDUINO объявила контроллеру свои значения ввода/вывода, а именно:
- 14 цифровых входа/выхода ( из них 3 можно конфигурировать как выходы ШИМ)
- 6 аналоговых входа
Главной отличительной особенностью модулей ARDUINO является то, что для программирования контроллера не нужно дополнительного компилятора, заливка ПО в память контроллера производится по средствам USB – UART контроллера, одним нажатием клавиши и практически онлайн. Среднее время прошивки контроллера на примере MEGA8 составляет примерно 3 – 5 секунд. Язык программирования доступен даже начинающему любителю контроллеров, главное чтобы было понятие о построении алгоритмов.
{ads1}
Например, мигание светодиодом подключенному к ARDUINO выглядит так.
{codecitation}Int LED = 13 // Назначаем переменную и присваиваем ей значение 13
void setup() {
// Укажем, что данная ножка будет использоваться для вывода
pinMode(LED, OUTPUT);
}
void loop() {
// Зажжем светодиод, подав напряжение на ножку
digitalWrite(LED, HIGH);
// Подождем секунду
delay(1000);
// Погасим светодиод, убрав напряжение с ножки
digitalWrite(LED, LOW);
// Подождем секунду
delay(1000);
}{/codecitation}
Все элементарно просто.
В интернете существуем множество сайтов любителей ARDUINO, где представлено море примеров устройств изготовленных на данной платформе.
Теперь расскажу как я делал свой контроллер и что из этого получилось.
Покопавшись в своих запасах, обнаружил только ATMEGу 8 в планарном исполнении.
Так что будем ваять на нем. Взяв за основу классический вид дизайна платы модулей ARDUINO и одну из стандартных схем, размещенных на официальном сайте, я развел плату для одностороннего исполнения.
В качестве устройства сопряжения с USB портом решил применить надежный, проверенный временем контроллер FT232RL, который не требует использования внешнего кварца на 12МГц. Единственным недостатком применения данного контроллера является трудность монтажа на печатную плату, так как выводы корпуса данной микросхемы имеют высокую плотность расположения. Данную прблему я решаю применением монтажной оплетки. После точного позиционирования микросхемы на плату, я пропаиваю все ее выводы не боясь при этом допустить заливки припоя между выводами микросхемы. После чего излишки припоя я убираю с помощью монтажной оплетки, получается чисто и аккуратно. Но есть и альтернативный способ, например применить готовый интерфейсный контроллер или так называемый телефонный DATA кабель. Стоимость таких кабелей примерно от 300 рублей.
Вот как они выглядят без корпуса:
Можно приобрести например из наборов МАСТЕР КИТа, стоимость такого модуля 360 рублей:
Вот что получилось в итоге:
А вот пример реализации АМПЕР-ВОЛЬТ-ВАТТ метра с выводом информации на двухстрочный дисплей. И, соответственно пример реализации в программном коде.
{codecitation}#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); // Светодиод гасим
}
}
{/codecitation}
Ссылки на дополнительные материалы:
{ads1}
Комментарии
Хочу повторить, но не знаю номиналы резисторов, конденсаторов.. .
В спринт лайоут маркировки нету.
Напиши на мыло, скину номиналы.
[email protected]
Те кто смог завладеть схемой и номиналы деталей, не проходите мимо товарищи! Поделитесь инфой.
А то я написал автору, но ответа так и не дождался...
Заранее спасибо
Писал автору, о обещал поднять материал и скинуть. А тем временем после переписки с freeduino.ru там появились в продаже отдельно платы. Тож хороший вариант.
Я собрал уже ардуину, но только на СОМ-порте, но хочу подружить ее с USB
Первый Blink в Вашу честь
Сорри! Есть такая фигня. Совсем забыл исправить. Смотрите на фото собраной платы.
Это из-за односторонней разводки?
Спасибо.
Очень хочу заказать Вам изделие . Прошу ответить на [email protected]
Язык Си cтандартный - не надо Arduino
изучать
RSS лента комментариев этой записи