Контакти

Програмування Ардуін для міні. Початок роботи з Arduino Pro Mini, прошивка через TTL. Входи та Виходи

Більшість модулів, що продаються як частини конструктора для Arduino, є платою з лінійним стабілізатором і написом: «вхідна напруга від 3 до 5 Вольт», а самі мікросхеми, що виконують роботу модулів, часто живляться від напруги 3.3В, і іноді можуть працювати при зниження його до 3 чи 1.8В.

Даний модуль допоможе оптимізувати розмір та збільшити час роботи мого GPS-логера.

Упакований про Ардуїно в пакетик зі штрих-кодом:



Може це оригінальний модуль?


Світлодіод індикації живлення зеленого кольору, #13 - червоного:

Навіщо потрібен саме цей Ардуїно – на 3.3В, а не як усі – на 5В по $1.4? Все добре, коли нам треба показати диво, що відбувається при підключенні пристрою до Ардуїно: ми купуємо модулі, чіпляємо їх до загального джерела на 5В, завантажуємо скетч - і все блищить і пихтить. Але при розробці більш-менш використовуваних пристроїв, доводиться думати і про енергоефективність, і про компактність, - в результаті, зі схем вилітає половина зайвих блоків.

Як видно, процесор Atmega328 даного модуляможе працювати на напрузі 2.7В, причому на стабілізаторі напруга практично на падає; для порівняння, на 5-вольтній Ардуїно (з попередньої версії GPS-логгера) у мене спостерігалося напруга 3.6 при живленні від 5В на вході RAW.

До речі, з якою швидкістю він надає інформацію? У мене був файл із логом, за дві хвилини набігає 5.42 КБ (4336 Кб) ~ 37 Кб/с, якщо я не помилився, то швидкість майже в 15 разів менша.

Ті ж проводки, що живляться з'єднуємо без стабілізатора - безпосередньо до VCC, TX -> 2:


Скрипт читає з програмного послідовного порту і пише в апаратний, до якого ми підключили програматор і дивимося, що видається:
#include // Для використання програмного порту. SoftwareSerial mySerial(2, 3); // Ініціалізуємо 2 контакти Arduino. char ch; // Буфер. void setup() ( Serial.begin(9600); mySerial.begin(9600); ) void loop() ( // Якщо прочитався символ з програмного поту, if ((ch = mySerial.read()) != -1) Serial.write(ch); // пишемо його в апаратний.
У «Моніторі порту» приходять рядки, характерні для GPS-модуля:

Код, написаний раніше, насправді іноді глючить, тому є ще необхідність у його доопрацюванні. Зібравши такий альфа-варіант:


переписав скрипт -

майже готовий GPS-логер

#include #define SER_SP 9600 / / Швидкість послідовного порту. File flDataFile; // Файл для запису GPS-рядків. char chGpsLint; // Змінна для зберігання GPS-рядка, byte btReaded; // її довжина. void setup() ( Serial.begin(SER_SP); // Налаштовуємо порт. if (!SD.begin()) // Якщо не вдається почати працювати з карткою, delay(3600000); // нічого не робимо годину. flDataFile = SD.open("-NKK-LOG.GPS", FILE_WRITE); // Файл для запису: if (!flDataFile) // якщо не вдається відкрити delay(3600000); // нічого не робимо годину. ) void loop() () void serialEvent() ( // Авто. Викликається при надходженні нових даних. while (Serial.available()) ( // Поки в послідовному порту є дані, btReaded = Serial.readBytesUntil("\n", chGpsLint, 128) // читаємо рядок, if (btReaded > 45) // якщо його довжина не менше стільки символів, flDataFile.write(chGpsLint, btReaded);// пишемо дані у файл.) flDataFile.flush(); .

Ловить текст із переривання. Зображене на фото вище можна вже підключати до акумулятора і використовувати, але потрібно зробити виріб!

Для монтажу було вирішено використовувати, але перед тим, як монтувати, чи не краще подумати, як будуть розташовуватися елементи. Fritzingв допомогу!


Найскладніше було - домальовувати плату, але краще витратити час біля екрана комп'ютера, ніж ще більше з паяльником, вибираючи оптимальне розташування елементів.
«Хатина» зліва - адаптер MicroSD->SD карт пам'яті;
світлодіоди справа вгорі: 3 для кадансу та один для індикації стану пристрою (збій при зверненні до карти, збій при створенні файлу, очікування даних з GPS), опір буде SMD на землю;
GPS-модуль не зображений: він розташований на звороті плати;
там буде і батарея живлення;
справа внизу - jack-3.5 для підключення геркона, у корпусі біля його розташування потрібно буде просвердлити отвір.
Приступив до збирання, розмір плати виявився саме за розміром корпусу. Здається мені, я її під цей корпус і вибирав... У кріпленні модулів усередині корпусу мені допоможе термоклей! Спочатку хотів ліпити батарею до корпусу:


Але особливості конструкції визнач, що її краще розташовувати на платі:


Потім до плати (так, щоб лягати поряд з батареєю) був прикріплений GPS-модуль та його антена, через брак місця, довелося зняти з антени «екран»:


Для більшої зручності вилучення, до плати була припаяна «ручка»:


Спочатку я планував кріпити модуль Ардуїно через роз'єми, але тому що висоти корпусу не вистачало, і більше пиляти або різати нічого не хотілося, вирішив припаяти його до плати прикольним способом:


Вперше такий монтаж плати на плату я побачив у Bluetooth-модулі – вийшло прикольно. Єдиний мінус – безболісно зняти назад вийде лише феном. Для перепрошивки напаю ще контактів – плата велика.
Правильно припаяти адаптер карти пам'яті мені допомогла ілюстрація, наведена вище, 2 рази перепаював, на третій запам'ятав розташування контактів =)


Термоклеєм фіксуємо для зручності:

^-під адаптером розташовані контакти живлення GPS-модуля, що з'єднуються перемичкою: через перемичку живлення походить від лінійного стабілізатораАрдуїно. При підключенні до GPS-модуля UART, перемичку можна зняти щоб Ардуїно не перехоплювала інтерфейс.


Після включення, GPS видав час за Грінвічем на 80 секунд, а дані про позицію - через 14 хвилин! Багато, але це лише з балкону.
Після комутації та припаювання світлодіодів та конденсатора до RAW (28uF, про всяк випадок, знайдений «зайвих» деталях):

^- для підключення до програматора на платі стирчать контакти.
Зі зворотного боку згадана вище перемичка дозволяє відключати GPS-молуль при роботі з Ардуїно або Адруїно при роботі з GPS-модулем через UART-програматор:

^- окремо виведені контакти для зручності підключення до GPS.

Кришка, в якій закріплюється плата, накладається на дно і фіксується (поки що гумками з камери). Дно, у свою чергу, кріпиться на кермо, для цього є 4 отвори у вершинах прямокутника:


Ряд отворів із краю потрібний для світлодіодів індикації, але вони ще будуть налаштовуватися: або поправлю світлодіоди всередині, або заклею отвори прозорим термоклеєм, поки не вирішив. З лицьового боку корпусу приклеєна:


Дно кріпиться на кермо:


Знизу чіпляється «кришка» (і перетворюється на дно):


Після закріплення на кермі, «дно» вже не знімається, а пристрій залишається у кришці, його можна зняти та використовувати окремо для налагодження або запису треку, наприклад, пробіжки.

Три сині світлодіоди-індикатори каденсу загоряються за такою схемою:
[Світлодіоди] [ * * * ] 130 + [ * * ] 120 [ * ] 110 [ * * ] 100 [ * ] 90 [ * * ] 80 [ * ] 70 70 - [Каденс]

З того, «що потрібно зробити»:
- після , було ухвалено рішення відключати програмно;
- модуль підвищення напруги прибраний, споживаний струм - в районі 95-125 мА - це майже в 2 рази менше, порівняно з і там не було світлодіодів, кожен з яких споживає 10-15 мА;
- SD підключена безпосередньо;
- розташування світлодіодів та елементів усередині корпусу конфліктує з прагненням зробити універсальну/розбірну систему на платі - в результаті корпус залишився тим самим і батарею в ньому майже нікуди встромити =)

Вихідний код

/** * На численні прохання * публікую довгоочікуваний вихідник, * без індикаторів каденсу. * Один світлодіод (17) горить на початку роботи * до отримання першого NMEA-рядка довжиною 70 символів. */ #include #define FILE_NM "-NKK-LOG.GPS" #define SER_SP 9600 #define RED_ON PORTC |= 0b000001000 // Запалюємо або #define RED_OFF PORTC &= 0b111110111 // гасимо червоний світлодіод. volatile word wTotRev, // Загальна кількість оборотів педалей; wTotRevLastWtd = 0; // останнє, записане в балку. File flNMEA; // Файл для запису GPS-рядків. char chNMEA; // Змінна для зберігання GPS-рядка, byte btReaded; // її довжина. bool bWaitingGps=true; // Прапор очікування перших актуальних даних GPS. void setup() ( delay(800); // При включенні можливий брязкіт контактів живлення. pinMode(17, OUTPUT); // Світлодіоди стану пристрою. while (!SD.begin()) ( // Поки SD-карта не виявлена , RED_ON;delay(150);// блимаємо .RED_OFF;delay(500); while (true) ( ​​// блимаємо по 2 рази. RED_ON; delay(150); RED_OFF; delay(150); RED_ON; delay(150); RED_OFF; delay(500); ) Serial.begin(SER_SP); // Стартуємо роботу з GPS-датчиком RED_ON; ) // setup() // void loop() ( ) // loop() // void serialEvent() ( // Автоматично викликається при надходженні нових даних. )) ( // Поки в послідовному порту є дані, читаємо. btReaded = Serial.readBytesUntil("\n", chNMEA, 128); if (bWaitingGps) ( // Якщо GPS ще не видає актуальні дані, if (btReaded > 70 ) ( // перевіряємо їх. bWaitingGps = false; RED_OFF; flNMEA.write(chNMEA, btReaded); ) ) e lse if (btReaded > 0) // Якщо GPS раніше видав актуальні дані, flNMEA.write(chNMEA, btReaded); // пишемо у файл. ) flNMEA.flush(); // Скидаємо файловий буфер. ) // serialEvent() //

Товар наданий для написання огляду магазином. Огляд опубліковано відповідно до п.18 Правил сайту.

Планую купити +21 Додати в обране Огляд сподобався +16 +36

Після придбання плати Ардуїно Про Міні деякі користувачі стикаються з проблемою прошивки, тому що, щоб прошити цю плату, потрібно придбати ще особливий програматор. У зв'язку з цим ви зацікавитеся, як можна прошити плату без програматора? На щастя, це досить просто. У цій статті докладно розглянемо, як прошити чи перепрошувати Arduino ProМіні. Давайте розумітися. Поїхали!

Для перепрошивки вам знадобиться Ардуін Uno. Насамперед потрібно з'єднати GND із землею, UCC – з плюсом, RXI та NX0 з такими ж входами на Uno, а GRN – із reset. Найкраще буде подати тривольтну напругу. При подачі живлення на платі світиться червоний індикатор. Не забудьте заздалегідь дістати з Uno контролер ATMEGA.

Тепер потрібно підключити плату до комп'ютера. Потім запустіть на своєму комп'ютері Sketch. Перебуваючи в головному вікні утиліти, відкрийте меню «Файл» і натисніть на пункт «Приклади», далі наведіть курсор на розділ «Basics» і в списку натисніть «Blink». Після цього перейдіть до верхньої панелі та відкрийте меню «Сервіс». Виберіть у ньому пункт «Плата». У списку плат необхідно буде відзначити рядок "Arduino Pro Mini (5V, 16MHz) w/ATmega328" замість того, що зазначено за замовчуванням. Також не забудьте вказати в налаштуваннях необхідний com-порт.

Потім натисніть кнопку «Завантажити» у програмі. Як тільки в нижньому рядку з'явиться слово "завантаження", натисніть на платі "reset". На екрані ви побачите повідомлення про завершення завантаження. Готово. Перепрошивка успішно виконана.

Тепер розглянемо, як зробити те саме, тільки через Nano. Відкрийте Sketch і перейдіть в меню "Файл", виберіть розділ "Зразки". У списку, що з'явився, клікніть по «ArduinoISP». Потім потрібно зайти в "Інструменти", вибрати пункт "Плата" та відзначити "Arduino Nano".

Виконайте прошивку Nano за допомогою скетчу ArduinoISP. Перевірте швидкість порту у функції setup. Саме такою буде швидкість під час прошивки Pro Mini. У стандартному Sketch швидкість дорівнює 19200.

Підготувавши Nano, приступайте до складання breadboard, щоб перепрохати Про Міні. Підключіть +5V до Vcc, GND з'єднайте з таким самим входом, D10 з RST, а D11, D12 та D13 з аналогічними входами на Pro Mini.

Тепер потрібно підключити Nano до ПК. Перш ніж приступити до перепрошивки, переконайтеся, що у вас використовуються рівні швидкості порту, орієнтуючись на швидкість Sketch. Знайдіть текстовий файл "boards" у папці "arduino". Відкривши його, знайдіть рядок:

pro5v328.name=Arduino Pro Mini (5V, 16 MHz) w/ ATmega328

Якщо ви використовуєте іншу версію, виберіть відповідну. Перевірте задану швидкість. Також слід перевірити налаштування в текстовому файлі"Programmers".

Якщо з налаштуваннями все гаразд, запустіть/перезапустіть IDE. Після цього перейдіть в меню "Інструменти" та вкажіть плату, яку потрібно прошити разом із типом програматора "Arduino as ISP".

На наступному кроціпотрібно відкрити розділ «Файл» і натиснути на пункт «Ввантажити через програматор». Так само, як і в цьому випадку, необхідно натиснути на платі кнопку «reset», щоб успішно виконати перепрошивку. Усе. Готово.

Тепер ви знатимете, як можна прошити або перепрошувати Ардуїно Pro Mini без спеціального програматора. Пишіть у коментарях чи була корисною для вас ця стаття, розповідайте іншим користувачам про свій досвід прошивки Ардуїно, і ставте будь-які питання, що цікавлять, по розглянутій темі.

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

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

Це мій перший проект, не рахуючи миготіння світлодіодом, Hello world і т.п. За традицією треба попередньо посипати голову попелом, на предмет того, що код далекий від досконалості і обов'язково вплутуватися в суперечку з цього приводу. А також щодо часткової скопійованості коду в іншого проекту, попросити не бити сильно і т.д. Але це не буде. Код ідеальний! Тому що працює, подобається мені і зроблено для себе.
Цікавим дам порада: не бійтеся, вступайте в бій, лопати гори коду, будуйте свої мегапіраміди з різних операторів. Згодом прийде і стиль, і витонченість, ідеал.
Поки що в пам'яті контролера є місце – вам ні чого не страшно. Упріться в стіну - оптимізуватимете. І це також розвиток. Воно важливе.
Велика книга з програмування на С – так, корисно. Але, спочатку, набагато корисніше мати під рукою короткий довідник по командах і тримати в закладках кілька посилань на роботу з простими прикладами, бібліотеками тощо, на зразок , або тієї ж Амперки.
І ще мені дуже допомагають блок-схеми. Прямокутник, ромб, овал. Хто стикався - розуміє. Роблю зараз один проект – без блок-схеми ніяк. Для мене краще кілька днів малювати - перемальовувати на папері, щоб ясніше уявити весь хід роботи програми, ніж накидати купу коду і зашитися в ньому, т.к. я не володію вмінням охопити весь код силою своєї програмістської думки через малого досвіду.
Охочим повторити або зробити по-своєму – відповім на всі запитання.
У порожні суперечки з моєї письмової грамотності, стилю, дизайну, коду та потреби виробу тощо, вступати не буду. Якщо допустив десь в огляді суворий одвірок – виправлю чи допишу.

Що таке «Найнепотрібніший пристрій» можете загуглити самі. Я натрапив на нього випадково. Цей код і було взято основою, т.к. сам собою він не запустився, та й сценарії хотілося зробити свої.

Ліричний відступ

Кажуть, після сорока, особливо, коли вже після сорока, треба намагатися «розминати» мізки. І що вивчення мов – найкраща розминка. І не лише у такому віці. До мов я не дуже, а журнал «Здоров'я» ніби радить… Загалом вирішив я вивчити щось нове для себе. Електроніка для мене не в новинку, хоч і забув я її вже здебільшого, але програмування ніколи не було рідним. Я його побоювався. Але тут співпало багато знаків згори: журнал «Здоров'я», який рекомендує вивчити щось нове, давня мрія розібратися (хоч трохи) у програмуванні (хоч чого) та youtube, в якому тільки лінивий не розповідає про те, як блимати світлодіодом за допомогою розумної плати за долар із копійками.
До цього я непогано керував миготінням світлодіода за допомогою двох транзисторів, конденсатора та пари опорів, але тепер, кажуть, це не комільфо. Значить, треба бути в тренді.


Дуже мені сподобалося це марне, у прямому значенні слова, пристрій. Побачив – закохався. Хочу, і все! Як дитяча мрія! Але вік зробив свої корективи. Хочу саме сам зробити, а не купити. Тим більше, що у продажу прості пристрої. Я ж натрапив на інтелектуальне, а таких у продажу я не знайшов. Тим паче – треба робити!
І знову, Arduino. А я в ньому не бум-бум. Значить, треба розбиратися. Аліекспрес на допомогу. Почав із Ардуїн. Розумів, що шлях до вивчення буде тернистим і жертви неминучі. Тож замовив п'ять різних. Нехай собі горять, якщо що. Налагодження схеми відбувалося на Uno від іншого продавця. Але, оскільки в кінцевому пристрої виявилася саме ця плата - її і назвав.
Окрім ардуїнок, замовив величезна кількістьвсякого різного барахла, як ардуіносумісного, і околоардуинового. Тут розповім тільки про те, що знадобилося у цьому виробі.

Arduino Pro Mini


Доставка швидка, упаковка у вигляді стандартного антистатичного пакета та конверта з внутрішньою пухирчастою поверхнею. Продавець товариський, російськомовний.
На 328 чіпі. 3,3 вольти, 8МГц. Чому так? Так помилково. Хотів на 5 вольт, 16МГц, а купив цю. Сам винен. Втім, для цього проекту не критично – поставив зайвий перетворювач напруги. Власне, і все. Величезних відмінностей від інших я не знайшов. Фірмова відмінність - чорний текстоліт(?) З косяків: на платі не працює пін RAW. Але це не зупинило. Хоча з ним міг би заощадити перетворювач на 3,3 В. гребінки не розпаяні. Плата зроблена добротно.
Чому так коротко? Тому що про цього продавця та його плати вже є упереджений (п.18). Охочі знайдуть легко. Переказувати його немає сенсу. Я у коментах до нього теж вставив свої п'ять копійок. І з продавцем переписувався вдосталь.


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


$3.2 за партію – дві штуки.
Описувати особливо нічого. Слабкий сервопривід із середньою точністю позиціонування, яка залежить від швидкості переміщення. Натомість копійчаний. Для приводу кришки – з лишком, для «руки» – на межі можливостей. Для роботи потрібно 5 вольт, але для керування достатньо і 3,3. Пробував керувати через перетворювач і безпосередньо від Ардуїно - різниці немає. Тому перетворювач рівнів зекономив.


Контролер зарядки та перетворювач живлення


$2.28 за 5 штук. Із захистом. Поки заряджається – горить червоний світлодіод, закінчення зарядки – синій світлодіод. Огляд тут був.


$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 біт/сек. //призначаємо сервопривід руки на пін 10 doorServo.write(pos1door);// встановлюємо в початкову позицію сервопривод кришки handServo.write(pos1hand); ()) ( 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-контактному гребінці.
  • Зовнішні переривання: Другийі третійконтакти. Ці контакти можна настроїти на запуск переривання при перемиканні на значення LOW, наростаючому/убутному фронті імпульсу або зміні значення. Докладніше читайте у статті про функцію attachInterrupt() .
  • ШИМ: третій, 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 см.

Ця плата призначена для використання у готовому пристрої. Тому цей мікроконтролер не має вбудованої мікросхеми для зв'язку по USB-UART. Так само немає і роз'ємів USB для підключення та прошивки. Це дозволяє сильно зменшити розмір плати, а також її вартість. Для підключення до комп'ютера та прошивки використовується спеціальний програматор. Існує дві версії даної плати: з живленням 3,3 і частотою 8 МГц і з харчуванням від 5 з частотою 16 МГц. У молодшій версії цієї Ардуїнка використовується чіп ATmega168. Цей чіп має менший обсяг flash-пам'яті, енергонезалежну пам'ять, а так само знижену тактову частоту. Так як ціна різних версій Arduino Pro Mini практично не відрізняється, ми поговоримо про старшу версію з чіпом ATmega328 і тактовою частотою 16 МГц.

Arduino Pro Mini 5 В

Ця версія має мікроконтролер ATmega328. На відміну від свого молодшого побратима, він має вдвічі більші обсяги енергонезалежної та flash пам'яті. І може похвалитися тактовою частотою 16 МГц. Дізнатися про способи прошивки цього мікроконтролера ви можете у статті:

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

  • Мікроконтролер: ATmega168 або ATmega328
  • Гранична напруга живлення: 3,3-12 В та 5-12 В
  • Цифрових вводів/виводів: 14
  • ШІМ: 6 цифрових пінів можуть бути використані як висновки ШІМ
  • Аналогові висновки: 8
  • Максимальна сила струму: 40 mAh з одного виводу та 400 mAh з усіх висновків.
  • Flash пам'ять: 16 кб
  • SRAM: 1 кб
  • EEPROM: 512 байт
  • Тактова частота: 8 МГц та 16 МГц

Підключення живлення до Arduino Pro Mini

Цей мікроконтролер можна живити трьома способами:

  • Перехідником FTDI, підключеного до 6 відповідних пін.
  • Подаючи стабілізовану напругу виведення Vcc. 3,3 або 5 В залежно від версії
  • Подаючи напругу виведення RAW. 3,3-12 В або 5-12 В залежно від версії

Як було написано вище, плата має 14 цифрових пінів. На платі вони позначені порядковим номером. Вони можуть бути як входом, так і виходом. Робоча напруга цих пінів становить 3,3 або 5 В.

Аналогові піни на платі позначені провідною "A". Ці піни є входами і не мають резисторів, що підтягують. Вони вимірюють напругу, що надходить на них, і повертають значення від 0 до 1024 при використанні функції analogRead(). Ці піни вимірюють напругу з точністю до 0,005.

Широтно-імпульсна модуляція (ШІМ) Arduino Pro Mini

ШИМ виходи цієї плати ніяк не помічені. Потрібно просто запам'ятати номери цифрових висновків, що підключені до широтно-імпульсного генератора. Arduino Pro Mini має 6 висновків ШІМ, це піни 3, 5, 6, 9, 10 і 11.Для використання ШІМ Arduino має спеціальну функцію .

Інші піни:

  • 0(Rx) та 1(Tx) використовуються для передачі даних за послідовним інтерфейсом.
  • Висновки 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) розраховані для зв'язку з інтерфейсом SPI.
  • Також на виводі D13 є вбудований у плату світлодіод.
  • А4 (SDA) та А5 (SCL) можуть використовуватися для зв'язку з іншими пристроями по шині I2C. Докладніше про цей інтерфейс ви можете почитати на вікіпедії. Серед розробці Arduino IDE є вбудована бібліотека «wire.h» для легшої роботи з I2C.

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

Arduino Pro Mini має такі розміри: довжина 33 мм та ширина 18 мм, а важить лише близько 10 грам. Відстань між висновками дорівнює 254 мм.




Сподобалась стаття? Поділіться їй