Начало работы с Arduino Pro Mini,прошивка через TTL. Как запрограммировать Arduino Pro Mini с помощью программатора Arduino pro mini описание выводов

Arduino + два сервопривода + плата зарядки + плата повышающего преобразователя + старый аккумулятор + кучка радиодеталей + кусок фанеры + тумблер = сбылась мечта идиота!
Много текста, для тех, кто любит читать. Много спойлеров, для тех, кто любит читать «по диагонали». Видео, для тех, кто любит видео. Скетч, для тех, кто любит сразу скопировать и запустить «на коленке». Фото, фото, фото. Кот, для любителей котов.

Не совсем дисклеймер

Это мой первый проект, не считая мигания светодиодом, Hello world и т.п. По традиции надо предварительно посыпать голову пеплом, на предмет того, что код далек от совершенства и обязательно ввязаться в спор по этому поводу. А также по поводу частичной скопированности кода у другого проекта, попросить не бить сильно и т.д. Но этого не будет. Код идеален! Потому что работает, нравится мне и сделан для себя.
Интересующимся дам совет: не бойтесь, вступайте в бой, лопатьте горы кода, стройте свои мегапирамиды из разных операторов. Со временем придет и стиль, и утонченность, и идеал.
Пока в памяти контроллера есть место - вам ни чего не страшно. Упретесь в стену - будете оптимизировать. И это тоже развитие. Оно важно.
Большая книга по программированию на С - да, полезно. Но, на первых порах, гораздо полезнее иметь под рукой краткий справочник по командам и держать в закладках несколько ссылок на работу с простыми примерами, библиотеками и т.п., вроде , или той же Амперки.
И еще, мне очень помогают блок-схемы. Прямоугольник, ромбик, овал. Кто сталкивался - понимает. Делаю сейчас один проект - без блок-схемы никак. Для меня, лучше несколько дней рисовать - перерисовывать на бумаге, чтобы яснее представить себе весь ход работы программы, чем набросать кучу кода и зашиться в нем, т.к. я не обладаю умением охватить весь код силой своей программистской мысли, в виду малого опыта.
Желающим повторить или сделать по-своему – отвечу на все вопросы.
В пустые споры по моей письменной грамотности, стилю, дизайну, коду и нужности изделия и т.п., вступать не буду. Если допустил где-то в обзоре суровый косяк – исправлю или допишу.

Что такое «Самое бесполезное устройство» можете загуглить сами. Я натолкнулся на него случайно . Этот код и был взят за основу, т.к. сам по себе он не запустился, да и сценарии хотелось сделать свои.

Лирическое отступление

Говорят, после сорока, особенно, когда уже очень после сорока, нужно стараться «разминать» мозги. И что изучение языков - лучшая разминка. И не только в таком возрасте. К языкам я не очень, а журнал «Здоровье» как бы советует… В общем, решил я изучить что-то новое для себя. Электроника для меня не в новинку, хоть и забыл я ее уже по большей части, но вот программирование ни когда не было родным. Я его побаивался. Но тут совпало много знаков свыше: журнал «Здоровье», который рекомендует изучить что-то новое, давняя мечта разобраться (хоть немного) в программировании (хоть чего) и youtube, в котором только ленивый не рассказывает про то, как мигать светодиодом с помощью умной платы за доллар с копейками.
До этого я неплохо управлял миганием светодиода с помощью двух транзисторов, конденсатора и пары сопротивлений, но теперь, говорят, это не комильфо. Значит надо быть в тренде.


Очень мне понравилось это бесполезное, в прямом смысле слова, устройство. Увидел – влюбился. Хочу, и всё! Как детская мечта! Но возраст внес свои коррективы. Хочу именно сам сделать, а не купить. Тем более, что в продаже простые устройства. Я же натолкнулся на «интеллектуальное», а таких в продаже я не нашел. Тем более – надо делать!
И опять, Arduino. А я в нем ни бум-бум. Значит надо разбираться. Алиэкспресс в помощь. Начал с Ардуин. Понимал, что путь к изучению будет тернист и жертвы неизбежны. Поэтому заказал пять разных. Пусть себе горят, если что. Отладка схемы происходила на Uno от другого продавца. Но, так как в конечном устройстве оказалась именно эта плата - ее и вынес в заглавие.
Кроме ардуинок, заказал огромное количество всякого разного барахла, как ардуиносовместимого, так и околоардуинового. Здесь расскажу только о том, что пригодилось в данном изделии.

Arduino Pro Mini


Доставка быстрая, упаковка в виде стандартного антистатического пакета и конверта с внутренней пупырчатой поверхностью. Продавец общительный, русскоязычный.
На 328 чипе. 3,3 вольта, 8МГц. Почему именно так? Да по ошибке. Хотел на 5 вольт, 16МГц, а купил эту. Сам виноват. Впрочем, для данного проекта не критично - поставил лишний преобразователь напряжения. Собственно и всё. Огромных отличий от других Mini я не нашел. Фирменное отличие - черный текстолит(?) Из косяков: на плате не работает пин RAW. Но и это не остановило. Хотя, с ним мог бы сэкономить преобразователь на 3,3 В. гребенки не распаяны. Плата сделана добротно.
Почему так кратко? Потому что про этого продавца и его платы уже есть пристрастный (п.18). Желающие найдут легко. Пересказывать его не имеет смысла. Я в комментах к нему тоже вставил свои пять копеек. И с продавцом напереписывался вдоволь.


Сервопривод SG90


$3.2 за партию две штуки.
Описывать особенно нечего. Слабый сервопривод со средней точностью позиционирования, которая сильно зависит от скорости перемещения. Зато копеечный. Для привода крышки - с лихвой, для «руки» - на грани возможностей. Для работы нужно 5 вольт, но для управления достаточно и 3,3. Пробовал управлять через преобразователь и напрямую от ардуино - разницы нет. Поэтому преобразователь уровней сэкономил.


Контроллер зарядки и преобразователь питания


$2.28 за пять штук. С защитой. Пока заряжается - горит красный светодиод, окончание зарядки - синий светодиод. Обзор здесь был.


$0.50 за штуку. Доставка, правда, платная, но я брал в этом магазе еще целый ворох всякой всячины, поэтому доставка не напрягла. USB гнездо выпаял для облегчения веса))) На выходе выдает 5,12 вольт.





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


TTL преобразователь


$1.5 за штуку. Вообще-то я заказал сначала . Он в два раза дешевле. Но, по каким-то странным причинам, он пал смертью храбрых. Я так и не понял, чем я его убил. По этой причине проект застопорился на месяц, пока не пришел новый, более продвинутый - не надо давить reset. Это ли не прогресс?


Остальное из запасников

Регулятор напряжения1117Т-3,3V в корпусе TO220, конденсаторы 1500,0х6,3 и 470,0х16, два конденсатора по 0,1 мкФ, белый светодиод и микропереключатель от детской машинки, резистор 220 Ом. Аккумулятор валялся несколько лет без дела. Когда-то я разобрал сгоревший (в прямом смысле) портативный DVD-проигрыватель. Из хорошего там только аккумуляторы и уцелели. Вот один из них и пригодился. Вольтаж 3,7 V, емкости я в маркировке не нашел.
Клеевой пистолет, резинка для денег, два крючка от… лифчика (спасибо супруге. Дорогая, я тебя люблю!), два мебельных шканта, четыре шурупа, четыре клейких отбойника для мебельных дверей, кусок макетной платы, провода, разъемы.


Сложнее обстояло дело с корпусом. Было перепробовано множество коробок. Коробка из пластика от часов Tissot оказалась хрупкой, частично картонной. Но металлические завесы от нее подошли. Одна даже в запасе осталась. Пробовал готовые корпуса от парфюма, коробку от вина, от конфет. В итоге, решил сделать сам.
Качественная фанера, скорее всего березовая, нашлась в детском наборе для выжигания. Ребенок вырос - набор остался. С одной стороны был нанесен рисунок, зато другая сторона выглядела прямо-таки сказать, отлично

Прямо-таки сказать, отлично

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




Пробовал резать фанеру ножовкой, лобзиком - всё не то. Сколы, которые потом трудно убрать, не ровная кромка. Нашел выход - острый канцелярский нож. Замечательно прорезает половину фанеры с одной стороны, и половину с другой. Потом чуть-чуть наждачкой и всё в ажуре. Зато, при хорошей металлической линейке и постоянно остром лезвии, получается идеальный срез и ровная линия.
Конечно, не без косяков - под наклейкой Hand made скрывается банальная дырка. Просверлил по центру, для тумблера. А серва не влезла. Пришлось смещать тумблер в бок и закрывать дырку. Меня такие трудности не пугают.
Описывать каждый свой чих по изготовлению устройства не вижу смысла. Я опишу некоторые моменты. А уж имеющий руки - да сделает.
Коробку собрал на термоклей. Самого клея не жалел. Держится отменно. Не скрипит, не люфтит. Быстро, дешево и сердито. Да и вообще, как вы заметили, практически всё держится на этом клее. Рекомендую. Очень ускоряет процесс сборки. Микрик выключения приклеил изнутри на левую стенку - виднеется на фото немного.
Крышку прикрепил на завесу.

С завесой намучился. Много экспериментировал. Хотел, чтобы крышка располагалась именно сверху коробки, а не внутри. Даже согнул несколько вариантов скоб-завес из скрепок. По потом вспомнил, что в процессе экспериментов на глаза попались завесы из коробки часов Tissot. Такие добротные, швейцарские (китайские?).
Завеса вещь важная. Ее качество очень важно для общей внешней красоты устройства.
Основной тумблер нужен помягШе, тогда и работать будет полегШе.
Крышку возвращает в закрытое положение резинка. Ее не нужно выбирать очень жесткой - серва справится, но, при центральном расположении завесы, крышку будет перекашивать.
В случае с фанерой, покрытие лаком обязательно - пачкается сильно. Я применил бесцветный цапон-лак. Просто потому, что другого под рукой не оказалось.
Серву, которая управляет «рукой» лучше расположить по-другому. Не сбоку, а спереди от тумблера. Тогда «рука» может быть попроще в изготовлении - г-образная, вместо п-образной. Ширину коробки можно уменьшить и тумблер расположить по центру.
Серву крышки лучше развернуть на 180 градусов, тогда в коде проще будет ассоциировать градусы этой сервы с работой крышки. У меня наоборот, поэтому открывание - это уменьшение градусов. А у «руки» наоборот. И правильнее толкать крышку с той же стороны, с которой ее тянет назад резинка.
Коробку не стоит делать слишком маленькой. Будет не удобно пользоваться. А вот более плоской - допустимо. Коробка легкая и если она будет площе, будет устойчивее. Удобнее будет толкать тумблер пальцем не придерживая коробку.
Из двух кусков макетной платы сделал что-то типа шилда. Ардуину впаял без разъемов. Намертво. Мне не жалко.


А вот всю периферию сделал на разъемах. Так удобнее.
Конденсатор большой емкости по питанию ардуины (3,3 вольт) обязателен. Без него ардуина «виснет».
У меня нет сборочных чертежей устройства. Оно на столько простое, что можно применить много других простых решений, на которых строится вся механика. На видео, как моем, так и других подобных устройств, можно видеть применяемые варианты приводов.

#include #include Servo doorServo; //сервопривод крышки Servo handServo; //сервопривод руки Bounce bouncer = Bounce(12, 40); //создаем экземпляр класса Bounce для 12 вывода тумблера int pos = 0; //переменная начальной позиции int pos1door = 70; //начальное положение сервопривода крышки int pos2door = 30; //конечное положение сервопривода крышки int pos1hand = 10; //начальное положение сервопривода руки int pos2hand = 160; //конечное положение сервопривода руки int r; //случайное число, от которого зависит вариант выключения тумблера #define LED_PIN 11 // номер выхода,подключенного к светодиоду int ledState = LOW; // этой переменной устанавливаем состояние светодиода long previousMillis = 0; // храним время последнего переключения светодиода #define INTERVAL 30UL // интервал между включение/выключением светодиода void setup() { pinMode(LED_PIN, OUTPUT); pinMode(12, INPUT); //переключаем 12 вывод в режим входа digitalWrite(12, 1); //включаем на нем подтягивающий резистор Serial.begin(9600); //установка порта на скорость 9600 бит/сек. Для отладки. Потом можно убрать. doorServo.attach(9); //назначаем сервопривод крышки на пин 9 handServo.attach(10); //назначаем сервопривод руки на пин 10 doorServo.write(pos1door); //устанавливаем в начальную позицию сервопривод крышки handServo.write(pos1hand); //устанавливаем в начальную позицию сервопривод руки } void loop() { if (bouncer.update()) { if (bouncer.read()==0) { //если кнопка нажата { r = random(0,11); //генерируем случайное число jn 0 до 10 Serial.println®; if (r == 0) { move_0(); } //вызов функции по случайному числу else if (r == 1) { move_1(); } else if (r == 2) { move_2(); } else if (r == 3) { move_3(); } else if (r == 4) { move_4(); } else if (r == 5) { move_5(); } else if (r == 6) { move_0(); } else if (r == 7) { move_1(); } else if (r == 8) { move_4(); } else if (r == 9) { move_3(); } else if (r == 10) { move_0(); } } } } } // Библиотека функций. Общий принцип: открыть крышку - высунуть руку и выключить тумблер - убрать руку - закрыть крышку //а уж вариантов как это красиво обставить................ void move_0(){ //простой вариант: открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door; pos -=3) { doorServo.write(pos); delay(15); } //высовываем руку for(pos = pos1hand; pos <= pos2hand; pos +=3) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand; pos >= pos1hand; pos -=3) { handServo.write(pos); delay(15); } //закрываем крышку for(pos = pos2door; pos <= pos1door; pos +=3) { doorServo.write(pos); delay(15); } } void move_1(){ //простой вариант 2: открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door; pos -=1) { doorServo.write(pos); delay(15); } delay(1000); //высовываем руку for(pos = pos1hand; pos <= pos2hand; pos +=1) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand; pos > <= pos1door; pos +=5) { doorServo.write(pos); delay(15); } } void move_2(){ //задумчивый вариант 2: приоткрыли-закрыли-открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door+15; pos -=5) { doorServo.write(pos); delay(15); } delay(1000); //закрываем крышку for(pos = pos2door+15; pos <= pos1door; pos +=5) { doorServo.write(pos); delay(15); } delay(1000); //открываем крышку for(pos = pos1door; pos > <= pos2hand+2; pos +=5) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand+2; pos >= pos1hand; pos -=5) { handServo.write(pos); delay(15); } //закрываем крышку for(pos = pos2door; pos <= pos1door; pos +=5) { doorServo.write(pos); delay(15); } } void move_3(){ //дерганый вариант: приоткрыли-подергали - закрыли-открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door+15; pos -=1) { doorServo.write(pos); delay(50); } delay(500); //дергаем крышку for(int i=1; i <=8; i ++) { doorServo.write(pos2door+18); delay(80); doorServo.write(pos2door+15); delay(80); static unsigned long previousMillis = 0; if(millis() - previousMillis > INTERVAL) { previousMillis = millis(); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); } } delay(500); //закрываем крышку for(pos = pos2door+15; pos <= pos1door; pos +=1) { doorServo.write(pos); delay(50); } delay(1000); //открываем крышку for(pos = pos1door; pos >= pos2door; pos -=5) { doorServo.write(pos); delay(15); } //высовываем руку for(pos = pos1hand; pos <= pos2hand+2; pos +=5) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand+2; pos >= pos1hand; pos -=5) { handServo.write(pos); delay(15); } //закрываем крышку for(pos = pos2door; pos <= pos1door; pos +=5) { doorServo.write(pos); delay(15); } } void move_4(){ //открываем крышку delay(2000); for(pos = pos1door; pos >= pos2door+15; pos -=5) { doorServo.write(pos); delay(50); } delay(500); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(2000); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(500); //закрываем крышку for(pos = pos2door+15; pos <= pos1door; pos +=5) { doorServo.write(pos); delay(50); } delay(1000); //открываем крышку не полностью for(pos = pos1door; pos >= pos2door+15; pos -=1) { doorServo.write(pos); delay(50); } delay(2000); //открываем крышку полностью for(pos = pos2door+15; pos >= pos2door; pos -=1) { doorServo.write(pos); delay(15); } //высовываем руку for(pos = pos1hand; pos <= pos2hand-35; pos +=1) { handServo.write(pos); delay(35); } delay(1000); //высовываем руку for(pos = pos2hand-35; pos <= pos2hand+3; pos +=4) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand+3; pos >= pos1hand; pos -=7) { handServo.write(pos); delay(15); } //закрываем крышку for(pos = pos2door; pos <= pos1door; pos +=7) { doorServo.write(pos); delay(15); } delay(500); //открываем крышку for(pos = pos1door; pos >= pos2door+20; pos -=5) { doorServo.write(pos); delay(50); } delay(300); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(500); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(100); //закрываем крышку for(pos = pos2door+20; pos <= pos1door; pos +=1) { doorServo.write(pos); delay(50); } } void move_5(){ //возня for(int i=1; i <=2; i ++) { for(pos = pos1door; pos <= pos1door+45; pos +=5) { doorServo.write(pos); delay(50); } for(pos = pos1door+45; pos >= pos1door; pos -=5) { doorServo.write(pos); delay(50); } delay(100); } //дергаем крышку for(int i=1; i <=3; i ++) { doorServo.write(pos1door-6); delay(80); doorServo.write(pos1door-3); delay(80); } delay(300); //открываем крышку digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos1door; pos >= pos2door+25; pos -=5) { doorServo.write(pos); delay(50); } delay(500); //открываем крышку digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos2door+25; pos >= pos2door+10; pos -=5) { doorServo.write(pos); delay(50); } //открываем крышку digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos2door+10; pos >= pos2door-5; pos -=2) { doorServo.write(pos); delay(50); } //высовываем руку for(pos = pos1hand; pos <= pos2hand-35; pos +=9) { handServo.write(pos); delay(35); } delay(1000); //убираем руку for(pos = pos2hand-35; pos >= pos2hand-70; pos -=1) { handServo.write(pos); delay(15); } delay(1000); //высовываем руку for(pos = pos2hand-70; pos <= pos2hand+3; pos +=9) { handServo.write(pos); delay(15); } delay(50); //убираем руку for(pos = pos2hand+3; pos >= pos1hand; pos -=7) { handServo.write(pos); delay(15); } //закрываем крышку digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos2door-5; pos <= pos1door+3; pos +=5) { doorServo.write(pos); delay(50); } }

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


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


Особых пояснений по скетчу нет. Разве что момент добавления угла поворота на несколько градусов, когда скорость сервы большая. Заметил, что если «рука» выскакивает резко, то она не выключает тумблер. Явно это от низкого качества сервоприводов. Поэтому нужно добавить немного к углу вылета «руки». Подозреваю, что при повторении эти добавочные градусы могут быть у вас другими. Зависит от плеча «руки».
И про программы. Пока шесть программ. Вызываются через генерацию случайного числа. Причем простые программы (0, 1 и 2) вызываются чаще обычных. Всем моим тестировщикам показалось, что более навороченные программы должны быть редким приятным бонусом, тогда появляется некая интрига. Так и сделал.
Для любителей цифр - размер коробки: длина - 150мм, высота - 70мм, ширина - 65мм.

Youtube сильно ухудшил качество. Если нужно глянуть в оригинале - качайте. 21 МБ.
Здесь в скетч внесено изменение, позволяющее увидеть все шесть программ по очереди, чтобы вы имели представление обо всех. В жизни, как я писал, у них псевдо-случайный порядок.



Зарядка производится через микро-USB обычным зарядником от мобильного. Автономность сильно зависит от частоты использования. Иногда несколько суток, а иногда за день «убиваю».


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

Да и вообще – можно сделать аккуратнее. Много всяких можно. Собственно именно этим я и предлагаю заняться тем, кого это заинтересовало.
Может я упустил что-то. Крупноват обзор получился для такого простого устройства. Вот за это могу извиниться.
Теперь кот и спасибо за то, что дочитали до конца.

Arduino Pro Mini – это микроконтроллерный модуль на базе чипа ATmega328 . У него 14 цифровых I/O контактов (из которых 6 можно использовать для ШИМ ), 6 налоговых контактов , встроенный резонатор, кнопка сброса и отверстия для крепежа гребешков с контактами. Чтобы подать на модуль питание или организовать коммуникацию через USB , его 6-контактный гребешок можно подключить к FTDI -кабелю или макетной плате Sparkfun .

Модуль Arduino Pro Mini предназначен для полустационарного использования. У него нет предустановленных гребешков, что позволяет использовать разные типы коннекторов и припаивать провода напрямую.

Распиновка Arduino Pro Mini совместима с Arduino Mini .

Arduino Pro Mini предлагается в двух версиях. Одна работает на 3,3 вольтах и с частотой 8 МГц , а вторая – на 5 вольтах и с частотой 16 МГц .

Кроме того, Arduino Pro Mini была разработана и выпускается компанией Sparkfun Electronics . Информацию о гарантии можно почитать .

Входные и выходные контакты

Любой из 14 цифровых контактов Pro Mini можно использовать и в качестве входного, и в качестве выходного контакта – при помощи функций pinMode() , digitalWrite() и digitalRead() . Они оперируют на 3,3 и 5 вольтах (в зависимости от модели). Каждый контакт может получать/отдавать не более 40 миллиампер и оснащен встроенным подтягивающим резистором (по умолчанию отключен) номиналом 20-50 кОм .

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

  • Последовательная передача данных : 0-ой (RX) и 1-ый (TX) контакты. Используются для получения (RX ) и передачи (TX ) последовательных TTL -данных. Эти контакты подключены к контактам TX-0 и RX-1 на 6-контактном гребешке .
  • Внешние прерывания : 2-ой и 3-ий контакты. Эти контакты можно настроить на запуск прерывания при переключении на значение LOW , нарастающем/убывающем фронте импульса или изменении значения. Более подробно читайте в статье о функции attachInterrupt() .
  • ШИМ : 3-ий , 5-ый , 6-ой , 9-ый , 10-ый и 11-ый контакты. Эти контакты обеспечивают 8-битную ШИМ при помощи функции analogWrite() .
  • Интерфейс SPI : 10-ый (SS) , 11-ый (MOSI) , 12-ый (MISO) и 13-ый (SCK) контакты. Они поддерживают SPI -коммуникацию, обеспечиваемую оборудованием самой Arduino , но не языком Arduino .
  • Встроенный светодиод : 13-ый контакт . Это светодиод, по умолчанию встроенный в плату Arduino и управляемый 13-ым цифровым контактом . Если на этот контакт подано значение HIGH , то светодиод включится, а если LOW , то выключится.
  • Интерфейс I2C : A4 (SDA) и A5 (SCL) контакты. Они поддерживают TWI -коммуникацию (I2C -коммуникацию) при помощи библиотеки Wire .
  • Reset : если подать на эту линию LOW , это сбросит микроконтроллер. Как правило, используется, чтобы добавить на «шилд» кнопку сброса, т.к. подключение «шилда» к плате блокирует кнопку сброса на самой плате.

Кроме того, модуль Arduino Pro Mini оснащен 8 входными аналоговыми контактами , каждый из которых имеет 10-битное разрешение (т.е. позволяют работать с данными в диапазоне от 1 до 1024 ). Четыре из них расположены на гребешках на краю модуля, а два (4-ый и 5-ый ) – в отверстиях во внутренней части модуля. По умолчанию вольтовой диапазон в них составляет от Vcc до GND .

Коммуникация

На Arduino Pro Mini есть множество средств для коммуникации с компьютером, а также другими платами Arduino и микроконтроллерами. Во-первых, чип ATmega328 может общаться через последовательную коммуникацию UART TTL , доступную на 0-ом (RX) и 1-ом (TX) цифровых контактах. В IDE Arduino есть монитор порта, позволяющий отправлять и получать через USB -соединение текстовые данные – как от самой платы, так и на нее.

Для последовательной коммуникации через любой из цифровых контактов Arduino Pro Mini используйте библиотеку SoftwareSerial . Чип ATmega328 также поддерживает коммуникацию через интерфейсы I2C (TWI) и SPI . Чтобы упростить использование шины I2C , IDE Arduino использует библиотеку Wire ; подробнее о ней читайте . Перед использованием интерфейса SPI ознакомьтесь, пожалуйста, с «даташитом» ATmega328 .

Программирование

Модуль Arduino Pro Mini можно программировать через

Если вы хотите загрузить на Arduino Pro Mini новый скетч, для этого необязательно нажимать кнопку сброса вручную. Эта модель устроена таким образом, что позволяет выполнить сброс при помощи ПО , которое запущено на компьютере, подключенном к Arduino . Один из шести контактов на 6-контактном гребешке подключен (через 100-нанофарадный конденсатор ) к линии сброса ATmega328 . Этот контакт подключается к одной из аппаратных линий конвертера USB-Serial , отвечающих за управление потоками и подключенных к гребешку: при использовании FTDI -кабеля это RTS , при использовании макетной платы Sparkfun это DTR . Когда эта линия получает значение LOW , значение на линии RESET падает настолько, что этого хватает для сброса чипа.

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

Эта система влияет на работу Pro Mini и в другом. Когда Pro Mini подключена к компьютеру на Mac OS X или Linux , то сбрасывается каждый раз при настройке соединения между нею и программой (через USB ). Следующие полсекунды на Pro Mini выполняется запуск загрузчика. Хотя Pro Mini запрограммирована на игнорирование дефектных данных (то есть всего, что не имеет отношение к загрузке нового кода), она все же перехватит несколько байт, отправленных ей после открытия соединения.

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

Физические характеристики

Размеры Arduino Pro Mini составляют примерно 1,77 на 3,3 см .

Общие сведения

Arduino Pro Mini построена на микроконтроллере ATmega168 (техническое описание). Платформа содержит 14 цифровых входов и выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, резонатор, кнопку перезагрузки и отверстия для монтажа выводов. Блок из шести выводов может подключаться к кабелю FTDI или плате-конвертеру Sparkfun для обеспечения питания и связи через USB.

Arduino Pro Mini предназначена для непостоянной установки в объекты или экспонаты. Платформа поставляется без установленных выводов, что позволяет пользователям применять собственные выводы и разъемы. Расположение выводов совместимо с платформой Arduino Mini.

Существует две версии платформы Pro Mini. Одна версия работает при напряжении 3.3 В и частоте 8 МГц, другая при напряжения 5 В и частоте 16 МГц.

Arduino Pro Mini разработана и производится SparkFun Electronics.

Схема и исходные данные

Характеристики
Питание

Arduino Pro Mini может получать питание: через кабель FTDI, или от платы-конвертора, или от регулируемого источника питания 3.3 В или 5 В (зависит от модели платформы) через вывод Vcc, или от нерегулируемого источника через вывод RAW.

Выводы питания:

  • RAW . Для подключения нерегулируемого напряжения.
  • VCC . Для подключения регулируемых 3.3 В или 5 В.
  • GND. Выводы заземления.
Память

Микроконтроллер ATmega168 имеет: 16 кБ флеш-памяти для хранения кода программы (2 кБ используется для хранения загрузчика), 1 кБ ОЗУ и 512 байт EEPROM (которая читается и записывается с помощью библиотеки EEPROM).

Входы и Выходы

Каждый из 14 цифровых выводов Pro, используя функции pinMode() , digitalWrite() , и digitalRead() , может настраиваться как вход или выход. Выводы работают при напряжении 3,3 В. Каждый вывод имеет нагрузочный резистор (стандартно отключен) 20-50 кОм и может пропускать до 40 мА. Некоторые выводы имеют особые функции:

  • Последовательная шина: 0 (RX) и 1 (TX) . Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы имеют соединение с выводами TX-0 и RX-1 блока из шести выводов.
  • Внешнее прерывание: 2 и 3 . Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении, либо на переднем или заднем фронте, или при изменении значения. Подробная информация находится в описании функции attachInterrupt().
  • ШИМ: 3, 5, 6, 9, 10, и 11 . Любой из выводов обеспечивает ШИМ с разрешением 8 бит при помощи функции analogWrite() .
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) . Посредством данных выводов осуществляется связь SPI, которая, хотя и поддерживается аппаратной частью, не включена в язык Arduino.
  • LED: 13 . Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит.

На платформе Pro Mini установлены 6 аналоговых входов, каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Четыре из них расположены на краю платформы, а другие два (входы 4 и 5) ближе к центру. Измерение происходит относительно земли до значения VCC. Некоторые выводы имеют дополнительные функции:

  • I2C: A4 (SDA) и A5 (SCL) . Посредством выводов осуществляется связь I2C (TWI), для создания которой используется библиотека Wire.

Существует дополнительный вывод на платформе:

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

На платформе Arduino Pro Mini установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами.ATmega168 поддерживает последовательный интерфейс UART TTL, осуществляемый выводами 0 (RX) и 1 (TX). Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные через подключение USB.

Библиотекой SoftwareSerial возможно создать последовательную передачу данных через любой из цифровых выводов Pro Mini.

ATmega168 поддерживает интерфейсы I2C (TWI) и SPI. В Arduino включена библиотека Wire для удобства использования шины I2C. Более подробная информация находится в документации. Для использования интерфейса SPI обратитесь к техническим данным микроконтроллера ATmega168.

Программирование

Микроконтроллер ATmega168 поставляется с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500.

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

Автоматическая (программная) перезагрузка

Arduino Pro Mini разработана таким образом, чтобы перед записью нового кода перезагрузка осуществлялась самой программой, а не нажатием кнопки на платформе. Один из выводов на блоке из шести выводов подключен к линии перезагрузки микроконтроллеров ATmega168 через конденсатор 100 нФ. Данный вывод соединен с одной из линий управления потоком конвертора USB-to-serial, подключенного к блоку: к линий RTS при использовании кабеля FTDI или к линии DTR при использовании платы-конвертора Sparkfun. Активация данной линии, т.е. подача сигнала низкого уровня, перезагружает микроконтроллер. Программа Arduino, используя данную функцию, загружает код одним нажатием кнопки Upload в самой среде программирования. Подача сигнала низкого уровня по линии перезагрузки скоординирована с началом записи кода, что сокращает таймаут загрузчика.

Функция имеет еще одно применение. Перезагрузка Pro Mini происходит каждый раз при подключении к программе Arduino на компьютере с ОС Mac X или Linux (через USB). Следующие полсекунды после перезагрузки работает загрузчик. Во время программирования происходит задержка нескольких первых байтов кода во избежание получения платформой некорректных данных (всех, кроме кода новой программы). Если производится разовая отладка скетча, записанного в платформу, или ввод каких-либо других данных при первом запуске, необходимо убедиться, что программа на компьютере ожидает в течение секунды перед передачей данных.

Физические характеристики

Габаритные размеры печатной платы Pro Mini составляют 1,8х3,3 см.

Распиновка и характеристики одной из самых удобных плат Arduino — Pro Mini

Коммуникации

Характеристики

Microcontroller ATmega328
Рабочее напряжение Есть есть 2 модели — 3.3 вольтовые и пятивольтовые. Как узнать какая попалась вам? Скорее всего написано на плате. Если же нет, просто подайте на RAW 5 вольт и на VCC померяйте напряжение. Если там 5 воольт то у вас 5 вольтовая, если 3.3 — то 3.3 вольтовая.
Напряжение питания 3.35 — 12 V (если модель рассчитана на 3.3V) или 5 — 12 V (для 5V моделей)
Цифровые выходы 14 (6 из них поддерживают ШИМ)
Аналоговые выходы 6
Максимальный ток для вывода 40 mA
Флешка 32 kB (0.5 kB из которых занимает загрузчик)
Оперативная память 2 kB
EEPROM 1 kB
Тактовая частота 8 МГц для 3х вольтовых моделей или 16 МГц для 5V моделей

Питание

На плате Arduino Pro Mini есть 2 вывода для «плюса» питания RAW и VCC и общий вывод «минус» GND. Если вы уверены что источник питания выдает ровно 5 вольт (или 3.3 для трехвольтовой версии платы), то можно включить питание напрямую в VCC. Если же напряжение питания больше 5 вольт — необходимо подключать его к выводу RAW — там стоит весьма низкопробный стабилизатор напряжения.

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

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

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

Размеры платы Arduino Pro Mini всего 18 x 33 мм, что позволяет применять ее в проектах критичных к габаритам электроники.

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

Естественно, простота и миниатюрные размеры платы отразились на ее стоимости. Это одна из самых дешевых плат Ардуино. На момент написания статьи (февраль 2017 г.) по моей плата Arduino Pro Mini с микроконтроллером ATmega328 стоит всего 180 руб.

Все вышесказанное делает привлекательным применение Arduino Pro Mini:

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

Платы выпускаются в модификациях:

  • тип микроконтроллера ATmega168 или ATmega328;
  • напряжение питания 3,3 или 5 В.

В варианте с микроконтроллером ATmega168 объемы всех типов памяти (ОЗУ, FLASH и EEPROM) уменьшены в 2 раза.

В вариантах с питанием 3,3 В уменьшена тактовая частота с 16 до 8 мГц.

Характеристики платы Arduino Pro Mini.

Большей частью плата имеет такие же параметры, как и другие платы Ардуино с микроконтроллерами ATmega168/328.

Тип микроконтроллера ATmega168 ATmega328
Архитектура AVR
Напряжение питания микроконтроллера 3,3 или 5 В (в зависимости от модификации)
Напряжение питания платы 3,35 - 12 В (модификация 3,3 В) или 5,2 – 12 В (модификация 5 В)
Тактовая частота 8 мГц (модификация 3,3 В) или 16 мГц (модификация 5 В)
Объем оперативной памяти (SRAM) 1 кбайт 2 кбайт
Объем памяти программ (FLASH) 16 кбайт 32 кбайт
Объем энергонезависимой памяти (EEPROM) 512 байт 1 кбайт
Дискретные входы/выходы 14 (6 могут быть использованы для генерации ШИМ сигналов)
Аналоговые входы 6 или 8 входов
Максимально-допустимый ток цифрового выхода 40 мА (суммарный ток выводов не более 200 мА)
Размеры платы 18 x 33 мм

Назначение выводов платы Arduino Pro Mini.

Питание.

Arduino Pro Mini может получать питание следующими способами.

  • От внешнего стабилизированного источника питания напряжением 5 В. В этом случае используется вывод VCC.
  • От USB порта компьютера через преобразователь интерфейсов USB-UART, подключенный к 6 контактному разъему платы. Используется вывод VCC 6 контактного разъема.
  • От внешнего не стабилизированного источника питания напряжением до 12 В. В этом случае используется встроенный стабилизатор напряжения платы. Питание подключается через вывод RAW.

Схема питания платы Arduino Pro Mini выглядит так.

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

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

При внешнем питании платы через вывод RAW этот стабилизатор может быть использован для питания внешнего устройства через вывод VCC. Ток потребления ограничен нагрузочной способностью MIC5205 и не должен превышать 150 мА. Кроме того необходимо учитывать максимально-допустимую мощность рассеивания стабилизатора. По этой ссылке можно получить подробную информацию о MIC5205 и расчете максимальной мощности для этого стабилизатора.

Входы и выходы платы.

  • Все выводы, аналоговые или цифровые, могут работать в диапазоне от 0 до 5 В (от 0 до 3,3 В для модификации платы с питанием 3,3 В).
  • Для дискретного вывода в режиме выхода втекающий или вытекающий ток не должен превышать 40 мА. Суммарный ток выводов микроконтроллера должен быть не более 200 мА.
  • Все выводы микроконтроллера подключены к источнику питания через подтягивающие резисторы сопротивлением 20-50 кОм. Подтягивающие резисторы могут быть отключены программно.
  • Если на любой аналоговый или дискретный вход подать напряжение ниже 0 В или свыше 5 В (свыше 3,3 В для модификации с питанием 3,3 В), то оно будет ограничено защитными диодами микроконтроллера.

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

Цифровые выводы. У платы есть 14 цифровых выводов. Каждый из них может работать в режиме входа и выхода. Некоторые выводы еще имеют дополнительные функции.

Последовательный интерфейс UART : выводы 0(RX) и 1(TX). Используются для обмена данными по интерфейсу UART и загрузки программы в микроконтроллер из Arduino IDE. Плата не содержит преобразователя интерфейса USB-UART. Для связи с компьютером необходимо использовать внешний конвертер интерфейсов.

Входы внешних прерываний: выводы 2 и 3. К выводам могут быть подключены сигналы внешних аппаратных прерываний.

ШИМ: выводы 3,5,6,9, 10, 11. На этих выводах может быть сформирован аппаратным способом сигнал ШИМ. После сброса в системе установливаются параметры ШИМ: 8 бит, 500 Гц.

Интерфейс SPI: выводы 10 (SS), 11 (MOSI), 13 (SCK). Выводы аппаратного последовательного интерфейса SPI.

Интерфейс I2C: выводы 4 (SDA) и 5 (SCL). Сигналы аппаратного интерфейса I2C.

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

Аналоговые входы: A0…A8. 6 или 8 аналоговых входов, предназначенных для измерения напряжения. Разрядность АЦП – 10 бит, что соответствует 1024 градациям сигнала. Время измерения порядка 100 мкс. Для сохранения точности выходное сопротивление источника сигнала не должно превышать 10 кОм.

RST. Сигнал сброса микроконтроллера. Низкий уровень приводит к перезагрузке системы. Вывод RST на 6 контактном разъеме имеет несколько другое назначение и используется при загрузке программы в микроконтроллер.

На плате есть 2 светодиода.

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

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

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

С платой Arduino Pro Mini все сложнее. Некуда подключать стандартный USB кабель.

Затем автоматически появляется сообщение “Загрузка”.

В этот момент Arduino IDE инициирует импульс низкого уровня на выходе DTR. DTR это один из сигналов управления передачей данных COM порта. Обычно он формируется на выходе встроенного преобразователя интерфейсов USB-UART.

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

У платы Arduino Pro Mini внутреннего конвертера интерфейсов нет, поэтому сигнал DTR выведен на 6 контактный разъем. Схема сброса от сигнала DTR для Arduino Pro Mini выглядит так.

Независимо от длительности импульса DTR на входе ”RESET” микроконтроллера будет сформирован короткий импульс сброса.

По любому сбросу микроконтроллер передает управление программе загрузчика. В течение примерно 1 секунды загрузчик ожидает связи с компьютером по протоколу STK500. Если данные от компьютера поступают, то происходит загрузка программы из Arduino IDE.

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

Из всего вышесказанного становится понятно, что если плату Arduino Pro Mini подключить через полноценный конвертер интерфейсов с сигналами RXD, TXD и DTR, то загрузка будет происходит совершенно так же, как и в других платах Ардуино со встроенным преобразователем интерфейсов. Дополнительно можно использовать для питания платы сигнал 5 В интерфейса USB. Или 3,3 В для плат с питанием 3,3 В.

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

Надо только учитывать, что на некоторых платах сигналы RXI и TXO 6 контактного разъема могут соответствовать сигналам RXD и TXD микроконтроллера, а могут и быть включены наоборот. Например, как на этой плате.

Лучше прозвонить цепи выводов RXI и TXO. На моей плате сигналы соответствуют. Схема подключения конвертера USB-UART к моей плате выглядит так.

Обратите внимание, что сигнал DTR надо подключать к выводу RST именно на 6 контактном разъеме. Он соединен с входом сброса микроконтроллера через дифференцирующий конденсатор. На плате есть еще один вывод RST. Он подключен непосредственно ко входу “RESET” микроконтроллера.

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

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

Другой способ – использовать кнопку ”RESET” платы Arduino Pro Mini.

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

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

Рубрика: . Вы можете добавить в закладки.