Музичний двербелл в стилі Star Wars на Arduino

Привіт всім, не так довго я сказав, і показав на відео, як ви можете спалахувати Attiny13 з Arduino, і тепер я покажу вам практичне застосування цього.

Я кажу прямо, fuzes, прошивку у вигляді шестигранного файлу, коду в C, ескіз для Arduino IDE, файли для Proteus 7 можна завантажити в кінці статті.

Я покажу вам, як це працює.



Я довго хотів музичний двербелл, щоб грати в імперію марш або Дарта Вадер тема від Star Wars, і я люблю його.


Як видно з назви відео вище, основним компонентом пристрою є мікроконтролер Attiny13, його застосування дозволило зробити розмір дошки кілька разів менше, ніж відповідна скринька:

Вартість

І ось плагін.



Діапазон живлення становить близько 2 В до 6 В, тобто від двох до чотирьох батарей АА, хоча це буде ідеальним для забезпечення напруги 3-4 В, тобто літій-іонний акумулятор від мобільного телефону або 18650 батареї ідеально підходить для цієї мети, хоча бажано, щоб він був захищений, оскільки я ще не впровадив будь-який глибокий захист розряду.

Ну, я кажу кілька слів про схему:

Схема виглядає так (Протеїсні файли кріпляться в кінці статті, можна навіть зібрати нічого на макеті):

Фарба в Протеу.



Оскільки мікроконтролер не може витягнути достатню кількість на власній мові, щоб почути дзвіницю по всьому будинку, я доданий транзистор NPN 2N3904, досить поширений транзистор, в принципі, будь-який транзистор, який тягне динамік, в моєму випадку транзистор розрахований на 100 мА.
При використанні батарейок 3 АА, транзистор трохи прогрівався, при використанні двох - обсяг залишився на гідному рівні, але транзистор був трохи теплою.
Резистор R2 - це стандартний зв'язок для мікроконтролера, служить захистом від випадкового перезавантаження мікроконтролера, в принципі слід працювати без нього, резистор R1 служить для обмеження струму на основі трансистора.
На фото також показано захисний діод, він захищає від загартування, а саме від полярності, в моєму випадку, pole зсув буде дуже швидко відключити мікроконтролер, а також піротехнічні та звукові ефекти цілком можливі. До речі, на схемі нижче я забув її уточнити, будь-який діод, який призначений для напруги 10 В і струм 200 мА буде відповідати, поміщається послідовно при вході дошки, або на мінус або на плюс, у мене є мінус.
Доповідач від старого модема Dial up Zyxel, до речі, про режими Dial up цієї компанії є один відомий жарт:

ПригодиДва хакери сидять і кішка надходить в приміщення. Один хакер просить:
- Ваша кішка?
- Так, шахта. Назва компанії Zuchel!
- Чому Zuchel?
- Подивіться на це. Займає наречену, покаже їх в коту і каже: «Зучель, підключай!» Кіт:
- Шхххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххх



Код, я покажу вам прямо, Googled, більш точно знайдений на реквізитах YouTube, тут є відео:



Ось посилання коду під відео, тут:

Код з опису відео #включає // @tartakynov//programd для ATtiny13 в Arduino IDE за допомогою core13 http:///sourceforge.net/projects/ard-core13/#define ПІН_БУЗЕР 1 #деффін COUNT_NOTES 39 [COUNT_NOTES] PROGM = {392, 392, 396250, 340, 350, 350, 340, 350, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000, 3000 (довга)timeInMilliсекти*500) / затримкаДодаткові затримки (довга i = 0; i

Як видно, є два масиви фракцій - в перекладі з англійської частоти і тривалості - тривалість, всі дані, такі як слово, ПРОГЕМ - дані зберігаються в флеш пам'яті мікроконтролера (без використання бібліотеки pgmspace.h не буде працювати) і є генератор частоти (), який займає три параметри - шпилька, яка буде генерувати частоту, другий - частота в герц, третій - тривалість в мілісекундах.
Цей код повинен бути Arduino сумісний і працювати навіть на Arduino Uno, Arduino Nano або Arduino Pro Mini і інших дуетів.

Як ви можете почути відео, звук мого відео трохи відрізняється від другого відео, той факт, що я трохи змінив тривалість нот і три рази популярний метод «науки насоса», підняв частоту, як невеликий динамік, як мені не відтворює частоти, які були спочатку, і додали кнопку, що дверний дзвінок без кнопки?

Трохи прокидається і прокоментував.================================================================================================================================================================================================================================================================ (довгий)timeInMilliсекунди * 500) / затримкаОб'єм); // 1 - шпилька для (довгий i = 0; i < loopTime; i++) // 2 - частота { // 3 - тривалість цифровогоWrite(pin, HIGH); // генерувати імпульси потрібної частотиMicroсекунди (delayAmount); цифровийWrite(pin, LOW); затримкаMicroсекунди(delayA); mount
Вибір ескізу в бінарному коді: 976 байтів (від максимум 1 024байтів)


Як видно, що додавання тригерів при натисканні кнопки перевищено 1024 байтів і довелося вставляти шматки C коду, щоб вписуватися в тонусі13.
Частота була піднята лініями buzz(PIN_BUZZER, pgm_read_word(&(frequences[i]) * 3, 2 * pgm_read_word(&(durations[i])); таким чином, помножуючи сформовані частоти, так як ви зрозуміли трьома, чисте мій зм, ви не можете розмножувати все на всіх.

Якщо ви досвідчений Arduinist, я думаю, що ви помітите в коді, який я зробив PULLUP резистор програмний ліфт до порту PB4.
Для тих, хто не знає, це робиться:
Ми покладаємо порт на вхід і подаємо логічний блок до нього. Тепер порт буде мати напругу, приблизно рівну напругу живлення, якщо цей порт скорочується до землі, він змінить його стан від логічної одиниці до логічної нулі, а мікроконтролер не постраждає, оскільки використовується внутрішній резистор, номінальна вартість якого становить 10-100 кОм.
Я зробив це чисто, щоб зберегти розмір винагороди, ви можете просто припалювати резистор 10 к Ом плюс потужність і бажаний порт, коли ви натиснете кнопку, яку ми "зберемо порт до землі" і буде логічною нуль.

Додати код на чистий AVR-C для AVR:

Код на AVR-C // @tartakynov: // http://youtu.be/5R7NeQkVS_8/// і я - vk.com/razniepodelki #define F_CPU 1200000/////////// MK in hertz #включає/info [infosters] для затримок #infoolk.com/reque #250/N,350,350,350/N,3,300/N,3,300/FLIN,4,250,0,0,0,0,0,00/FLIN,00,00,00,0,00,00/FLI,00,00,00,00,00/FLIN,00,00,0<0,00,00,0 <0,00,00,00,00 (довгий) часВнутрішня частота * 500) / затримкаВстановлення); // 1 - шпилька для (довга i = 0; i < loopTime; i++) // 2 - Частота { // 3/_gitdigitdiWriteWrite

Здається, що якщо вона повинна бути складена без проблем, але при використанні цього коду в Arduino IDE з якоїсь причини, розмір шестигранного файлу принаймні вдвічі «Розмір ескізу в бінарному коді: 1,986 байтів (від 1,024 байтів максимум)».
Як я змогла дізнатися все це через використання _delay_us(*); хоча затримка ArduinMicroсекунди (*); по суті, я думаю, що це недолік у файлах ядер для крихітних13, ось галузь на форумі буржуасів arduino з де я отримав файли ядра, хоча файли ядер були трохи поліпшені для себе, є посилання на файли ядер, які я змінився в статті прошивку Attiny13 за допомогою Arduino.
Якщо хтось допомагає боротися з цими помилками, я буде щасливий, адже чисто теоретично, Arduino IDE повинен поковтнути код C без проблем.

Ну, кілька слів прошивку - в першому відео я почав настоюватися при частоті 1,2 МГц, так як для мене, 1,2 млн операцій досить достатньо, щоб відтворити улюблену мелодію і в той же час їсти небагато, до речі, шістнадцятий файл скомпільований для цієї частоти.
Ось фузії з калькулятора fusion:

Прихований текст



Тепер, будь-який, хто має програму AVR, може відтворити цей пристрій.

Як обіцяє на початку статті, тут є всі необхідні файли.

І, нарешті, «Чи прийде влада з вами. й

Джерело: habrahabr.ru/post/234763/