Apple remote shield на arduino

Самые интересные шилды для Arduino

Если вы стали счастливым обладателем Arduino, вы наверняка слышали про платы расширения – так называемые шилды (Arduino shield), с помощью которых можете очень быстро расширить функциональные возможности вашего Arduino.

Как правило, большинство шилдов изготавливается под конкретный форм-фактор платы. В большинстве случаев – это микроконтроллеры Arduino Uno.

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

В результате вы получить многофункциональный “пирог” Arduino.

Ethernet Shield

Официальный шилд от создателей Arduino. Ethernet shield – это отличный вариант, чтобы обеспечить независимость вашего проекта от вашего персонального компьютера, так как он дает возможность наладить связь Arduino с интернет.

Интересная особенность данного шилда – наличие на нем слота для MicroSD карты.

Так что если в вашем проекте обрабатывается большой объем информации, например – mp3 файлы или видео; или вам надо хранить большие массивы данных для таких проектов как, например, светодиодный куб, хранить данные вы можете именно на SD карте.

Можно обеспечить работу хостинга для веб-сервера с использованием Ethernet шилда.

Перед тем как вы кинулись покупать Ethernet Shield, предупреждаю из личного опыта: Ethernet шилды зависимы от версий. Сначала я купил шилд v3 т оказалось, он не подходить к моему Arduino Uno v2, так как на версии платы v3 добавлено два пина. Кстати, Ethernet Shield стоит дороже чем сам контроллер Arduino, так что пришлось купить новую Arduino, а старую версию оставить для других проектов.

Так что проверяйте версию вашей платы и Ethernet шилда, который вы собираетесь покупать.

4 Relay Shield

Реле – основой узел многих устройств для домашней (и на только домашней) автоматизации. Реле используются в проетах Arduino, в которых необходимо подключения электрических цепей с большим питания.

Если вы когда-то подключали реле, вы знаете, что для его работы необходима дополнительная обвязка: транзистор, диод и т.п.

Если вам для проекта надо несколько реле, то монтажная плата (bredboard) очень быстро обрастет кучей проводников и контактов, в которых разобраться будет очень сложно.

4 Relay Shield (шилд на 4 реле) предоставляет вам все необходимые контакты для подключения 4-х периферийных устройств. Каждое реле дает возможность подключать оборудование которое работает с силой тока до 3 ампер. Конечно, можно использовать реле шилд и для маломощных электрических цепей. В таком формате их часто используют для замены переключателей.

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

Protoshield

Protoshield (протошилд) сам по себе ничего не делает. Потому он такой плоский ;). Очень полезный шилд.

После того как вы создали свой прототип с использованием монтажной платы и кучи проводов, стоит подумать о его презентабельности и удобстве. В этот момент вам пригодится протошилд.

Вы собираете всю схему на нем и садите его сверху на вашу Arduino как любой другой шилд. То есть – это отличный вариант для создания собственного шилда!

LCD Shield

Зачем вам LCD Shield? Все просто: выводить информацию с Arduino не на персональный компьютер с использованием серийного монитора, а напрямую на периферийный экран! Это реально классно! Но! При использовании внешних экранов, вам обычно требуется 7 и более контактов с Arduino.

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

В этом LCD шилде используется протокол передачи данных I2C, то есть для его подключения задействуются лишь 2 пина! Кроме того, параллельно к этим же контактам можно подключить другое оборудование, работающее по тому же протоколу передачи данных.

В добавок к экрану, на LCD шилде установлено 4 “управляющие” кнопки и кнопка “select” (выбор). Благодаря этому у вас появляется дополнительный интерактивный интерфейс и непосредственного подключения к ПК при работе с шилдом можно избежать. Если монохромный дисплей вас не впечатляет, вы можете спокойно апгрейдить шилд, установив 1.8 inch TFT 18-bit color screen.

Вот на этом этапе вы должны понять, что не все шилды 100% совместимы друг с другом. Некоторые из них надо устанавливать сверху вашего Arduino “пирога”. Именно к таким шилдам относится LCD шилд.

Energy Shield

Energy shield расширяет ваши возможности с точки зрения обеспечения питания проектов на Arduino. Шилд позволяет подключать различные источники питания и обеспечивать их работу с Arduino. Одна из самых ярких сфер применения – обеспечение подзарядки мобильных телефонов и гаджетов.

Motor Shield

Motor shield обеспечивает возможность управления множеством моторов с использованием Arduino. На шилде установлены все необходимые регуляторы, переключатели, предохранители. В общем, на motor шилде есть все для обеспечения простого управления двигателями и для их защиты.

SD Card Shield

Во многих проектах необходимо обрабатывать большие массивы информации, для хранения которой недостаточно встроенной в Arduino памяти. Именно в этом случае вам может понадобится SD Card Shield. Он совместим с картами памяти форматов SD, SDHCи MicroSD. Sd Card шилд использует простой SPI интерфейс для подключения и передачи данных.

Wifi Shield

Этот шилд предоставляет вам действительно огромные возможности, позволяя настроить передачу данных от Arduino с использованием WiFi технологий. Уверен, вы найдете ему достойное применение.

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

WiFi шилд подключается к серийному порту.

GPRS Shield

GPRS Shield дает Arduino возможность использовать сети GSM/GPRS, которые используются для мобильных телефонов. В результате вы можете делать и принимать звонки и текстовые сообщения! Как правило, GPRS шилды оснащаются антеннами.

E-Ink Shield

E-Ink shield – очень интересная разработка, которая использует технологию электронных чернил (та же технология используется в электронных книгах).

Основное преимущество E-Ink шилда – вы получаете дисплей, который требует минимум энергии для питания и предоставляет отличный формат для отображения и чтения текста.

Подобные шилды могут отобразить текст даже без использования внешнего питания!

Music Shield

Music Shield дает вам возможность воспроизводить музыку в отличном качестве чрез Arduino. Шилд поддерживает широкий диапазон музыкальных форматов для воспроизведения. Естественно, в Music шилде предусмотрен слот для SD карты. Так что вы без проблем сможете загрузить вашу медиатеку без использования дополнительного SD шилда.

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Источник: http://arduino-diy.com/arduino-interesnyye-shildy

Arduino Shields — платы расширения для ардуино

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

Такие платы, совершенно логично называемые платами расширения (другое название: arduino shield, шилд),  служат для выполнения самых разнообразных задач и могут существенно упростить жизнь ардуинщика.

В этой статье мы узнаем, что такое плата расширения Arduino и как ее можно использовать для работы с разнообразными устройствами Arduino: двигателями (шилды драйверов двигателей), LCD-экранами (шилды LCD), SD-картами (data logger), датчиками (sensor shield) и множеством других.

Плата расширения или Arduino shield?

Давайте сперва разберемся в терминах. Плата расширения Ардуино  — это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов.  Другое популярное название платы расширения – англоязычное Arduino shield или просто шилд.

На плате расширения установлены все необходимые электронные компоненты, а взаимодействие с микроконтроллером и другими элементами основной платы происходят через стандартные пины ардуино. Чаще всего питание на шилд тоже подается с основной платы arduino, хотя во многих случаях есть возможность запитки с других источников.

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

Англоязычное слово Shield переводится как щит, экран, ширма. В нашем контексте его следует понимать как нечто, покрывающее плату контроллера, создающего дополнительный слой устройства, ширму, за которой скрываются различные элементы.

Зачем нужны шилды arduino?

Все очень просто: 1) для того, чтобы мы экономили время, и 2) кто-то смог заработать на этом. Зачем тратить время, проектируя, размещая, припаивая и отлаживая то, что можно взять уже в собранном варианте, сразу начав использовать? Хорошо продуманные и собранные на качественном оборудовании платы расширения, как правило, более надежны и занимают меньше места в конечном устройстве.

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

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

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

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

Наиболее популярным примерами шилдов являются платы расширения для работы с датчиками,  двигателями, LCD-экранами, SD-картами, сетевые и GPS-шилды, шилды со встроенными реле для подключения к нагрузке.

Подключение Arduino Shields

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

Как правило, шилд предназначен для вполне конкретной версии контроллера, хотя, например, многие шилды для Arduino Uno вполне нормально работают с платами Arduino Mega. Распиновка контактов на меге выполнена так, что первые 14 цифровых контактов и контакты с противоположной стороны платы совпадают с расположением контактов на UNO, поэтому  в нее легко становится шилд от ардуино.

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

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

В скетче нужно указывать те пины, которые соединены в шилде с соответствующими контактами на плате. Как правило, производитель указывает соответствие пинов на самом шилде или в отдельной инструкции по подключению.

Если вы скачаете скетчи, рекомендованные самим производителем платы, то даже это делать не понадобится.

Чтение или запись сигналов шилдов производится тоже обычным методом: с помощью функций analogRead (), digitalRead (), digitalWrite () и других, привычных любому ардуинщику команд.

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

Тут нужно быть просто внимательным.

Arduino Sensor Shield

Как правило, эта плата расширения идет в наборах ардуино и поэтому именно с ней ардуинщики встречаются чаще всего. Шилд достаточно прост – его основная задача предоставить более удобные варианты подключения к плате Arduino.

Это осуществляется за счет дополнительных  разъемов питания и земли, выведенных на плату к каждому из аналоговых и цифровых пинов. Также на плате можно найти разъемы для подключения внешнего источника питания (для переключения нужно установить перемычки), светодиод и кнопка перезапуска.

Варианты шилда и примеры использования можно найти на иллюстрациях.

Существует несколько версий сенсорной платы расширения. Все они отличаются количеством и видом разъемов. Наиболее популярными сегодня являются версии Sensor Shield v4 и v5.

Arduino Motor Shield

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

Дополнительным возможностями платы является функция управления мощностью мотора (с помощью ШИМ) и изменения направления вращения.  Существует множество разновидностей плат motor shield.

Общим для всех них является  наличие в схеме мощного транзистора, через который подключается внешняя нагрузка,   теплоотводящих элементов (как правило, радиатора), схемы для подключения внешнего питания, разъемов для подключения двигателей и пины для подключения к ардуино.

Arduino Ethernet Shield

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

Платы расширения для прототипирования

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

Arduino LCD shield и tft shield

Данный тип шилдов используется для работы с LCD-экранами в ардуино. Как известно, подключение даже самого простого 2-строчного текстового экрана далеко не тривиальная задача: требуется правильно подключить сразу 6 контактов экрана, не считая питания.

Гораздо проще вставить готовый модуль в плату ардуино и просто загрузить соответствующий скетч. В популярном LCD Keypad Shield на плату сразу заведены от 4 до 8 кнопок, что позволяет срзау организовать и внешний интерфейс для пользователя устройства.

TFT Shield также помогает

Arduino Data Logger Shield

Еще одна задача, которую достаточно трудно реализовывать самостоятельно в своих изделиях – это сохранение данных, полученных с датчиков, с привязкой по времени. Готовый шилд позволяет не только сохранить данные и получать время со встроенных часов, но и подключить датчики в удобном виде путем пайки или на монтажной плате.

Краткое резюме

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

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

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

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

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

Решать вам, все возможности для правильного выбора у вас есть.

Источник: https://ArduinoMaster.ru/platy-arduino/shildy-i-platy-rasshireniya-arduino/

Windows Remote Arduino — управляем настольной лампой прямо из универсального приложения Windows

Завершая неделю интернета вещей на хабре и в продолжение предыдущего поста о партнерстве с Arduino, расскажу вам о подключении устройств к Windows.

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

В этих случаях самым простым решение будет использование Windows Remote Arduino.

Windows Remote Arduino – это библиотека WinRT, которая позволяет управлять цифровыми и аналоговыми каналами платы Arduino из Windows/Windows Phone приложения, с помощью привычных команд типа digitalRead/Write и analogRead/Write.

При этом сама плата может быть подключена к компьютеру по USB или Bluetooth – важно, чтобы обеспечивался последовательный канал передачи данных. Помимо простых команд включения/выключения входов/выходов, в том или ином виде предусмотрена работа с шиной I2C и (в перспективе) сервоприводами.

Для работы необходимо, чтобы на плате Arduino была запущена специальная программа, поддерживающая выполнение команд по протоколу Firmata. Библиотека Windows Remote Arduino обменивается командами с платой, предоставляя программисту высокоуровневые функции управления.

Windows Remote Arduino доступна для Windows 8.1/Windows Phone 8.1 и для универсальных приложений Windows 10. Чтобы использовать их в своем проекте, в настоящее время проще всего клонировать Git-репозиторий проекта и добавить необходимые проекты в своё решение (пример я опишу ниже).

В моём примере я буду разрабатывать интеллектуальное приложение, включающее настольную лампу. Для этой цели я использую плату Arduino Uno и реле, способное коммутировать 220В. Реле подключается к какому-нибудь цифровому выходу (например, 7). Также для обнаружения присутствия человека будем использовать инфракрасный датчик присутствия, который включим в аналоговый вход A0. Для удобства коммутации мы используем Troyka Shiled от Амперки. На приведенном выше видео смотрите подробнее про hardware setup, а также весь проект в действиии. Первым делом необходимо установить на плату Arduino стандартный скетч для выполнения команд Firmata. Такой скетч уже включен в стандартную поставку Arduino IDE – достаточно выбрать в меню File –> Examples –> Firmata –> Standard Firmata. Открывшийся при этом скетч необходимо загрузить в плату обычным образом.

На этом этапе полезно будет убедиться, что все аппаратное обеспечение настроено правильно. Для этого можно использовать специальную программу firmata_test.

exe (или любую из программ, описанных здесь) – вы должны быть в состоянии управлять лампочкой, переключая состояние цифрового выхода 7, а также на входе A0 вы должны получать значение 0, если движения вокруг сенсора нет, и большое положительное значение (около 600 и более) в противном

Чтобы использовать Windows Remote Arduino в своём проекте, необходимо подключить соответствующие библиотеки. На текущий момент технология достаточно молодая, и библиотеки существуют в виде исходных текстов.

Мы надеемся, что со временем появятся пакеты NuGet, сейчас же процесс включения библиотек выглядит следующим образом:

  1. Создайте новый проект – в нашем случае это будет универсальное приложение Windows 10
  2. Клонируйте GitHub-репозиторий проекта Windows Remote Arduino в какую-нибудь локальную папку:
    git clone https://github.

    com/ms-iot/remote-wiring/

    ВАЖНО: в репозитории имеются несколько версий библиотеки. На момент написания статьи последняя ветка master содержала много ошибок при работе с аналоговыми и цифровыми входами, поэтому я использовать наиболее стабильную ветку revert-18-develop.

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

  3. В получившемся дереве проектов есть папки Microsoft.Maker.Win10 и Microsoft.Maker.Win8_1. Мы будем использовать вариант для Windows 10, но проект поддерживает и универсальные приложения Windows 8.1
  4. В папке Microsoft.Maker.

    Win10 есть три проекта: Microsoft.Maker.Firmata, Microsoft.Maker.Serial и Microsoft.Maker.RemoteWiring. Эти три проекта нужно добавить в созданный нами проект (Add Existing Project)

  5. В результате получится следующее дерево проектов:
  6. Чтобы проекты компилировались в правильном порядке, необходимо установить правильные зависимости проектов.

    Нажмите правой кнопкой на наш проект, выберите “Зависимости сборки –> Зависимости проектов”, и установите галочки напротив всех трех добавленных проектов. Остальные зависимости должны быть уже установлены, но вы можете их проверить: проект Firmata зависит от проекта Serial, проект RemoteWiring – от проектов Firmata и Serial.

    Соответственно, на вкладке “Порядок сборки” проекты должны собираться в таком порядке: Serial, Firmata, RemoteWiring и наше приложение.

  7. В нашем основном проекте правой кнопкой нажмите на References и добавьте расширение Microsoft Visual C++ AppLocal Runtime Package for Windows UAP.

    Там же в пункте “Общие проекты” выберите все три добавленных проекта Windows Remote Arduino.

  8. ВАЖНО: Чтобы наше приложение могло использовать возможности работы с последовательным портом, необходимо в манифест приложения (файл Package.

    appxmanifest) в разделдобавить следующий код:

  9. Мы готовы к созданию нашего приложения, которое будет использовать библиотеки Windows Remote Arduino! Чтобы убедиться, что всё работает правильно, попробуйте выполнить сборку получившегося приложения.

Наше приложение будет иметь три кнопки: для включения лампочки, для выключения, и для авто-режима, в котором лампочка будет управляться датчиком присутствия. Для начала добавим на главную страницу приложения MainPage.xaml эти три кнопки, установив их в неактивное состояние:

Этот код добавляется внутрь того контейнера Grid, который уже по умолчанию есть у страницы. Также для каждой кнопки создадим функцию-обработчик на C# (кликнув дважды на каждую кнопку, или через окно свойств Visual Studio).

Для начала инициализируем объект Remote Arduino. Для этого в классе окна в файле MainPage.xaml.cs опишем две переменные:

UsbSerial usbcomm;
RemoteDevice arduino;
Для подключение к Arduino опишем функцию connect(), которую затем вызовем из конструктора MainPage():private async void connect()
{ var dev = await UsbSerial.listAvailableDevicesAsync(); usbcomm = new UsbSerial(dev[0]); arduino = new RemoteDevice(usbcomm); usbcomm.ConnectionEstablished += Comm_ConnectionEstablished; usbcomm.begin(57600, SerialConfig.SERIAL_8N1);
}
Здесь мы сначала определяем список доступных портов, куда может быть подключен Arduino, затем создаем последовательное соединение UsbSerial с этим портом, а затем поверх этого – объект RemoteDevice, который будет представлять собой виртуальный Arduino. После этого мы вызываем функцию begin, передавая параметры последовательного соединения.

ВАЖНО: Скорость последовательного канала, используемая протоколом Firmatа, задается в скетче StandardFirmata. По умолчанию она равна 57600, поэтому мы выбираем именно эту скорость в нашем приложении. Если скорости не будут совпадать, то соединение не будет работать.

При установлении соединения с платой, будет вызвана функция Comm_ConnectionEstablished, которую мы опишем следующим образом:private void Comm_ConnectionEstablished()
{ Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,new Windows.UI.Core.DispatchedHandler(() => { arduino.pinMode(14, PinMode.ANALOG); arduino.pinMode(relay_pin, PinMode.

OUTPUT); dt = new DispatcherTimer() { Interval = new TimeSpan(500) }; dt.Tick += loop; dt.Start(); on.IsEnabled = true; off.IsEnabled = true; auto.IsEnabled = true; }));
}
Основной код функции обернут в вызов диспетчера, который запускает его в потоке UI – это важно.

Далее мы устанавливаем режимы основных используемых пинов Arduino, создаем таймер, который будет вызывать каждые пол-секунды функцию loop(), а также делаем кнопки видимыми. Интересный момент – установка порта 14 в аналоговый режим. Дело в том, что аналоговые входы в Arduino нумеруются после цифровых, и входу A0 соответствует номер 14.

Режим необходимо установить именно ANALOG, а не INPUT, который означает цифровой ввод. Теперь для включения/выключения лампочки достаточно описать функции-обработчики событий кнопок следующим образом:private void on_Click(object sender, RoutedEventArgs e)
{ auto_mode = false; arduino.digitalWrite(relay_pin, PinState.HIGH);
}
Функция off_Click делается по аналогии.

Обратите внимание, что для работы с пинами удалённой платы Arduino используются привычные команды типа digitalRead/digitalWrite. Переменная auto_mode – это переменная типа bool, которую нужно описать в нашем классе. Она нужна для того, чтобы обрабатывать автоматический режим.

Кнопка AUTO будет устанавливать эту переменную в true:private void auto_Click(object sender, RoutedEventArgs e)
{ auto_mode = true;
}
Теперь дело осталось за малым – реализовать функцию loop, которая будет переключать лампу в зависимости от наличия сигнала с датчика присутствия.

Делать это надо только в том случае, если auto_mode установлен:private void loop(object sender, object e)
{ if (auto_mode) { arduino.pinMode(14, PinMode.ANALOG); var on = arduino.analogRead(0) > 512; arduino.digitalWrite(relay_pin, on ? PinState.HIGH : PinState.

LOW); }
}

ВАЖНО: Для более надежной работы прямо перед чтением порта лучше еще раз установить его режим в аналоговый. Так быть не должно, но на практике это улучшает стабильность. Также обратите внимание, что мы используем analogRead(0), хотя строчкой ранее указывали номер порта 14.

В analogRead передается номер порта от 0 до 5, при установке режима порта надо прибавить к этим номерам 14.
В нашем случае мы написали универсальное приложение, которое можем разместить на Windows Phone 10. Однако это бесполезно, поскольку подключить плату Arduino по USB к смартфону невозможно.

Однако если мы будем использовать Bluetooth вместо USB-соединения, подключив к Arduino bluetooth-плату, то мы сможем этим же приложением управлять нашей конструкцией со смартфона.

В этом случае в манифест приложения необходимо добавить следующие строчки для разрешения коммуникации по Bluetooth:

Мы не будем сейчас рассматривать использование bluetooth – это тема для отдельной статьи.

Однако заметим, что с точки зрения программирования разницы почти нет – надо использовать объект BluetoothSerial вместо UsbSerial, а все остальные конструкции остаются без изменений.
Исходный код моего проекта по традиции доступен на GitHub: https://github.com/evangelism/RemoteArduinoLamp/tree/v1.0-serial. Пожалуйста, берите его, экспериментируйте, если найдете ошибки – делайте pull requests. Windows Remote Arduino – достаточно молодая и сырая технология, но уже сейчас она может упростить решения ряда задач, в которых необходимо напрямую управлять входами/выходами платы Arduino, подключенной к компьютеру. Конечно, всё тоже самое можно запрограммировать вручную, написав свой скетч и используя последовательный канал для взаимодействия с ним, но почему бы не использовать уже готовые наработки и сложившиеся стандарты (Firmata), чтобы не изобретать велосипеды.

Я надеюсь, вы будете использовать Windows Remote Arduino в своих проектах, и если вы сделаете что-то интересное – мне будет приятно об этом узнать! Пишите в комментариях, в твиттере или вконтакте!

Источник: https://habr.com/company/microsoft/blog/262419/

Arduino Home Automation Remote Control from iOS or Android

Advertisement

For home automation, remote control or monitoring of your Arduino, Arduino Manager does it all. Here’s how to use it to control your Arduino from a mobile or tablet.

Requirements

Today, I’m testing with iOS, but the Android app functions are identical with the exception the absence of the code generator.

Introduction

Android Manager is a nice interface to control your Arduino remotely over WiFi or Ethernet.

As well as the obvious features of being able to turn on or off relays and servos, you can gather sensor data and create thresholds or alarms that react to that data.

The app consists of a grid, each section of which can have a different control module or widget. When you’re happy with the result, these can be shared too.

Not so fast though: you will need some Arduino coding skills to make the magic happen.

An example is provided and full documentation is available, but do bear in mind that any project you produce is a combination of the UI created by Arduino Manager plus some custom coding for your Arduino.

If this puts you off, know that the iOS version of the app has a single in-app purchase which will generate suitable code for you. Learning to change this code is out the scope of todays tutorial, but you can expect me to cover it again for future home automation projects.

Ensure the ArduinoManager library is installed on your system first, then open up the example code and find the following lines:

/* * * IP info * * Using DHCP these parameters are not needed */ IPAddress ip(192,168,1, 233); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0);

Edit those for your own home network.

You should also be able to use this away from home if you have port forwarding What Is Port Forwarding & How Can It Help Me? [MakeUseOf Explains] What Is Port Forwarding & How Can It Help Me? [MakeUseOf Explains] Do you cry a little inside when someone tells you there’s a port forwarding problem and that’s why your shiny new app won’t work? Your Xbox won’t let you play games, your torrent downloads refuse… Read More set up, but we won’t be covering that.

Note that if you’re running on an Arduino Uno, you will need to disable the SD card data logging support in order for the program to fit in memory. Open IOSController.h or AndroidController.h and comment out this line (place // in front)

#define SD_SUPPORT

Arduino Mega users won’t have this problem since it has more memory.

Wire in a test circuit according to the following diagram (if it’s too small, you can view a larger version of , or read the instructions below; that temperature sensor is supposed to be going to A0).

  • Connect an LED to pin 8 with suitable resistor on the negative side (short leg). This will be controllable from within the iOS app.
  • Connect another LED to pin 7, again in series with a resistor. This will turn on whenever the app is connected.
  • Put a potentiometer on A2. The middle leg is the output pin, just connect the legs at either side to +5v and ground – it doesn’t matter which.
  • Put a light sensor on A1. One pin of the light sensor should go to +5v, the other should be connected to both A1 and to ground via a 10k Ohm resistor.
  • Put a TMP36 temperature sensor to A0. The middle leg is the output pin; with flat side facing you the leftmost pin is +5v, the rightmost pin is ground.
  • Finally, put a servo on pin 9. Yours may differ, but generally speaking, the white cable is the control line, then the red and black are +5v and ground respectively.

Here’s one I made earlier.

Unzip, and email the resulting Widgets.lst to yourself, and you should be able to open my ready-made control board. You’ll also need to click the configuration button in the bottom right to set up the correct IP address first, then tap that icon to connect.

If you’d prefer to make your own interface, toggle over into edit mode on a clean board and double tap on any empty square to open up the module list.

After adding a module, tap the grey bar to label it. In the demo circuit and code, the following labels can be set:

  • T for the temperature sensor.
  • L for the light sensor.
  • L1 for one of the LEDs. The other LED turns on automatically to indicate a successful connection to your mobile device. L1 can set as both a switch and LED indicator.
  • Pot for the potentiometer.
  • Knob controls the servo (but I found a slider to be better – the actual knob module is a little fiddly. Add a slider and called it “Knob”, it will work fine)

If you want to control different things then you’ll need to adjust the Arduino code to suit your project.

Alternatives

I checked out a number of alternatives while investigating this topic and the most viable competing application is called ArduinoCommander, but sadly, all the nice features are locked behind a paywall such that it would cost you $50 or more to unlock everything; the site that supports the app is also offline. It worked for basic features when I tested it, but I’m not going to endorse that app that can’t even keep it’s support site online and chooses micropayments for everything. Arduino Manager is just better, and only has one in-app purchase for an advanced feature.

So, now we’re all set to start an Arduino Home Automation project! Do you think you can make use of Arduino Manager?

Источник: https://www.makeuseof.com/tag/arduino-home-automation-remote-control-ios-android/

iTeadStudio TFT Display for ARDUINO

INTRO

Purchased a 400×240 pixel graphic touch-capable display (new link) module plus its accompanying Arduino MEGA-compatible shield from iTead Studio. The shield has been updated to version 2. See bottom of post for more information.

The shield has, in addition to the connections to the display module, connections to a battery-backed real time clock that has been implemented in the shield. The display module consists of the display panel (the screen), a touch controller and a SD Card socket.

The iTead description says:

In reality, the ITDB02 module IS fully compatible with Arduino MEGA pins. The shield just makes it much, much easier to connect to the Arduino board. With respect to the 3.3 power,  the shield merely connects the Arduino 5V power pin to the display module’s VCC pin which feeds a local LDO regulator that generates the required 3.3V.

MEGA COMPATIBLE SHIELD

The real time clock: DS1307  I2C interface.  A clock board alone already costs as much as the entire shield.

(Update 9/7/12): The resistors in the shield are there to limit the current to the protection diodes in the display module, so they are just in series with the signal lines.

The inputs of the display must be 5V tolerant even thought the display operates at 3.3V. The better solution is to implement a level conversion 5V->3.3V and this has been done in the new version of the shield.

More information in the Arduino forums [link]

COMPONENTS OF DISPLAY MODULE

Full color, 400×240 pixel TFT screen with a 16:9 widescreen aspect ratio. S/W supports 24-bit RGB color. The ITDB02-3.2WD uses the HX8352-A controller

On the back side of the display module:

3.3v LDO regulator: CE6209. The jumper J1 is there to bypass the regulator if your VCC is already 3.3V. First time I see a Chinese-branded LDO regulator.

Note that J1 is used to pass VCC if a regulator is not used. In this case, a regulator is used and thus J1 is open. There is also opportunity to increase C1.

Touch controller: TI ADS7843 compatible: XPT2046

SD Card socket

Here is the display module and the shield stacked on top of an Arduino MEGA 2560

SOFTWARE

Check out the latest libraries here: [link]

Screen:

The library (“UTFT” for “Universal TFT”) for this display has been developed by Mr Karlsen and is available here: [link]. Support for the 240×400 pixel display is available with version 1.10 and higher as this is a new display. The software also supports the wiring of the Mega shield shown above. (The control pins are assigned through s/w, though).

The controller for this screen is HX8352-A (apparently it replaces the ILI9327 controller). You will need to enter the controller model in the code as “HX8352A”. The enclosed documentation in the code tells you more. In addition, you need to know this controller model to take advantage of “memory saving” as specified in memorysaver.h

Touch control:

The library is ITDB02-TOUCH, also developed by Mr. Karlsen: [link]. Is also compatible with the wiring of the Mega shield shown above and any other wiring configuration as the 5 interface wires are assignable through s/w.

Real Time Clock:

Here is a tutorial on how to interface to the RTC device: [link]. Here is another using a library: [link].

SD Card:

Mr. Karlsen also developed a library for the SD Card socket/reader [link]. However it is limited to FAT16 formatted SD cards up to 2GB in size and 8.3 characters file names.

There is also the Arduino SD Library [link] that supports both FAT16 and FAT32 file systems on standard SD cards and SDHC cards. It is also limited to 8.3 characters file names.

There is also a tutorial on SD Card interfacing at LadyAda [link].

PINS USED

Even though the shield takes up all the pins in the Arduino MEGA board, not all the pins are used for the display module and the real time clock. You can connect other devices (e.g. soldering wires) to the free pins.

Pin-out assignment of display module

Includes the screen, touch controller, SDCard reader and Flash. Designation to the different device interfaces are as follows:

  • Dxx: TFT screen
  • SDxx: SDCard reader
  • D_xx: Touch controller
  • F_xx: Flash (not populated in this particular module)

Here is the pin mapping of the Ardino MEGA 2560 board:

Obviously the shield matches the 40-pin output of the display module with the pins of the Arduino. In addition, the shield has a real time clock that is separate from the display module and exports the interface pins of this device as well.

These are the pins that are used by the shield. You can refer to the pin basic pin mapping [link] and the manual in pdf [link] (I saved a local copy because this is now a discontinued product: ITDB02MEGAshield_DS ):

Shield/TFT           Arduino MEGA pins (section) DB0 to DB15          22 to Digital 37 (Digital) – 16-bit data for screen RS, WR, CS, RST    38, 39, 40, 41 (Digital) – Screen control signals LED-A, VCC, GND 3.3V, 5V, GND (Power) – Power SD_OUT 50 (Digital) – SD Card reader SD_CLK 51 (Digital) – SD Card reader SD_IN 52 (Digital) – SD Card reader SD_CS 53 (Digital) – SD Card reader —— 42-49 (Digital) – Free pins D_CLK 6 (PWM -also digital) – Touch controller D_CS 5 (PWM -also digital) – Touch controller D_IN 4 (PWM -also digital) – Touch controller D_OUT 3 (PWM -also digital) – Touch controller D_IRQ 2 (PWM -also digital) – Touch controller RTC (SDA) 20 (Communication) – Real Time clock (I2C) RTC (SLC) 21 (Communication) – Real Time clock (I2C) Since the RTC is an I2C device, these pins can be used to connect other I2C devices

Here is a diagram of the pin assignments:

Note: a readier discovered an error in diagram for the SD pins. Look at the pin assignment in the following diagram from the vendor’s website. The diagram corresponds to the new V2 shield, thus there is no real time clock (which is an I2C device). However if you use the shield, you don’t have to worry about the pin assignments except to figure out which pins are free for other functions:

OPERATION

Download the latest version of the UTFT library.

Copy the UTFT folder to the arduino-1.0libraries folder

There is sample code for the 400×240 display in the arduino-1.0librariesUTFTexamplesArduino folder.  Comment the code for UNO and un-comment the code for MEGA (follow the instructions written in the code). Modify the UTFT function with the model for your controller. For the above display I used “HX8352A”

// Uncomment the next line for Arduino Mega UTFT myGLCD(HX8352A,38,39,40,41); // Remember to change the model parameter to suit your display module!

Compile with Arduino 1.0 (does not work with earlier versions of the Arduino software and upload

Here is all I can for now…

(Update 9/7/12)

NEW VERSION OF THE SHIELD

The shield has been replaced with a newer mode. It does away with the real-time clock chip and replaces the resistors with logic chips (74xx541) for buffering and voltage level conversion, which is a  better implementation. In addition it has a input voltage selection switch to make it compatible with Arduino (5v operation) or ChipKit (3.3v operation).

Possibly the buffer chip used in the new shield is a part similar to 74LCX541 which has 5V tolerant inputs and output. This design further protects the display module.

Источник: https://hifiduino.wordpress.com/2012/04/13/iteadstudio-tft-display-for-arduino/

230V Relais schalten mit Arduino und Apple Remote

Immer schon einmal wollte ich per Apple Remote einen Arduino steuern. Und nun endlich habe ich mir die Zeit dazu genommen. Nach wirklich vielen Seiten im Netz habe ich mir die verschiedenen Teile zusammengesucht und ein Beispiel gebaut, was sehr simpel ist.

Es beruht auf der Bibliothek IRremote für den Arduino, die es bei GitHub frei zum Download gibt.

Alle Beispiele, die ich im Netz fand, konnten nicht mit den aktuellen Apple Remotes umgehen, aber letztendlich war es kein Problem diese mit den Beispielen im Code „auszulesen“ und in eigenen Code zu integrieren.

Meinen Sourcecode gibt es hier zum Download. Und das beste: Er funktioniert mit mit den beiden letzten, aktuellen Apple Remotes (aus Aluminium):

Die unterschiedlichen Apple Remote Fernbedienungen (links die neuere)

Für die Hardware werden lediglich ein Arduino Uno, ein Infrarotsensor (zum Beispiel ein TSOP1736) und ein Relais benötigt. Der Aufbau ist entsprechend simpel:

Arduino Uno, Relais und Infrarotsensor

Wer es noch einfacher haben möchte, kann den IR-Sensor auch direkt in das Arduino-Board stecken. Hierbei ist ein Pin in GND zu stecken und die anderen beiden in die Digital-Ausgänge. Die Stromversorgung erhält der Sensor dabei über einen auf HIGH geschalteten Pin des Arduino. Dieses ist hier möglich, da der Sensor nur 1 mA an Strom aufnimmt. Das Ganze sieht dann so aus:

Arduino Uno, Relais und Infrarotsensor

Und hier noch einmal im Detail:

Der IR-Sensor direkt im Arduino Uno

Dazu muss dann natürlich der Code angepasst werden, damit der LED-Pin (13) hier immer HIGH ist!

Und so sieht es dann im kurzen Video beim Testen aus:

Und hier noch der Sourcecode zum Anschauen:

#include // Werte, die die Apple Remote “runder Donut, Alu” sendet unsigned long oben = 2011287637; unsigned long unten = 2011279445; unsigned long links = 2011238485; unsigned long rechts = 2011291733; unsigned long ok = 2011282005; unsigned long menu = 2011250773; unsigned long play = 2011265621; unsigned long repeat = 2011242581; // Wird bei ok und play zusätzlich gesendet /* // Werte, die die Apple Remote “flacher Donut, Alu” sendet unsigned long oben = 2011287644; unsigned long unten = 2011279452; unsigned long links = 2011238492; unsigned long rechts = 2011291740; unsigned long ok = 2011282012; unsigned long menu = 2011250780; unsigned long play = 2011265628; unsigned long repeat = 2011242588; // Wird bei ok und play zusätzlich gesendet */ const int RECV_PIN = 2; // pin for TSOP1736 IR sensor output const int LED_PIN = 13; // pin for the onboard LED const int RELAY_PIN = 5; // pin to switch a relay boolean relayState = false; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // Start the receiver pinMode(LED_PIN, OUTPUT); pinMode(RELAY_PIN, OUTPUT); } // Storage for the recorded code int codeType = -1; // The type of code unsigned long codeValue; // The code value if not raw unsigned int rawCodes[RAWBUF]; // The durations if raw int codeLen; // The length of the code int toggle = 0; // The RC5/6 toggle state // Stores the code for later playback // Most of this code is just logging void storeCode(decode_results *results) { codeType = results->decode_type; int count = results->rawlen; if (codeType == UNKNOWN) { Serial.println(“Received unknown code, saving as raw”); codeLen = results->rawlen – 1; // To store raw codes: // Drop first value (gap) // Convert from ticks to microseconds // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion for (int i = 1; i rawbuf[i]*USECPERTICK – MARK_EXCESS; Serial.print(” m”); } else { // Space rawCodes[i – 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS; Serial.print(” s”); } Serial.print(rawCodes[i – 1], DEC); } Serial.println(“”); } else { if (codeType == NEC) { // Serial.print(“Received NEC / Apple: “); if (results->value == REPEAT) { // Don't record a NEC repeat value as that's useless. // Serial.println(“repeat; ignoring.”); return; } } /* else { if (codeType == SONY) { Serial.print(“Received SONY: “); } else { if (codeType == RC5) { Serial.print(“Received RC5: “); } else { if (codeType == RC6) { Serial.print(“Received RC6: “); } else { Serial.print(“Unexpected codeType “); Serial.print(codeType, DEC); Serial.println(“”); } } } } */ // Serial.println(results->value, HEX); // Serial.println(results->value, DEC); codeValue = results->value; codeLen = results->bits; } } void loop() { // wait for IR signal if (irrecv.decode(&results)) { // LED on digitalWrite(LED_PIN, HIGH); // store result for convenience storeCode(&results); // resume receiver irrecv.resume(); //——————— // “translate” to text //——————— if (codeValue == menu) { Serial.println(“[MENU]”); } else { if (codeValue == play) { Serial.println(“[PLAY]”); } else { if (codeValue == oben) { Serial.println(“[OBEN]”); } else { if (codeValue == unten) { Serial.println(“[UNTEN]”); } else { if (codeValue == links) { Serial.println(“[LINKS]”); } else { if (codeValue == rechts) { Serial.println(“[RECHTS]”); } else { if (codeValue == ok) { // toggle relay state relayState = !relayState; // switch relay digitalWrite(RELAY_PIN, relayState); Serial.print(“Relais “); if (relayState) { Serial.println(“on.”); } else { Serial.println(“off.”); } Serial.println(“[OK]”); } } } } } } } // LED off digitalWrite(LED_PIN, LOW); } }

Nett, oder?

[4546 Aufrufe]

Источник: https://www.direcs.de/2015/01/230v-relais-schalten-mit-arduino-und-apple-remote/

Apple Remote Shield на Arduino

Вы когда-нибудь хотели сделать пульт управления для Apple устройств? К примеру, чтобы управлять при помощи Arduino – ITunes на Mac, IPod, или Apple TV? Теперь это возможно!

Раньше я работал над проектом, который позволяет включать музыку на Mac через ИК-приемник. Через некоторое время я нашел библиотеку, которая позволяет использовать Arduino как Apple Remote. Я интегрировал её в свой проект, и она работает отлично! На днях я решил сделать Apple Remote из Arduino.

Примечание: В зависимости от используемых ИК светодиодов работа устройства может сильно варьироваться.

Необходимые материалы

Элементы: – Arduino – 2 или 3 ИК светодиода – 5 кнопок без фиксации – Провода – Макетная плата – Компьютер

– А-В USB-кабель

Программное обеспечение: – Программное обеспечение Arduino

– Библиотека Apple Remote (можно скачать внизу статьи)

Сборка платы

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

Примечания: – Убедитесь, что выводы ИК-светодиодов не прикасаются к штырькам ICSP!

– Если вы хотите использовать BLS штырьки, то проденьте провода к ним через плату, как это показано на рисунке.

Шаги: – Вырежьте макетную плату. Я использовал кусок 23×18 с несколькими вырезами. – Установите кнопки – Припаяйте GND. – Проденьте провод GND через плату и обрежьте его.

   – Погните ножки ИК-светодиодов – Вставьте светодиоды в плату и припаяйте катод (короткий вывод) к GND – Согните аноде одного светодиода и припаяйте его к другому – Подсоедините левую кнопку   – Припаяйте провод к ИК светодиодах – Подсоедините нижнюю кнопку – Подсоедините среднюю кнопку – Подсоедините верхнюю кнопку – Подсоедините оставшеюся кнопку

– Готово!

BLS штырьки (опционально)

Если вы хотите использовать BLS штырьки вместо проводов для подключения к Arduino, делайте так:   – Не продевайте провода через плату второй раз – Зачистите и обрежьте провода, чтобы их можно было припаять   – Возьмите 7 BLS штырьков

– Припаяйте их

Прошивка Arduino (Windows)

Установка библиотеки:
Скачайте и распакуйте файл “AppleRemote.zip”. Скопируйте распакованное в эту папку: “/hardware/libraries/”

Загрузка кода: – Скачайте файл: 'Arduino_Apple_Remote.pde ” – Откройте его в Arduino IDE. – Подключите Arduino

– Нажмите кнопку Upload.

Прошивка Arduino (Mac OS X)

Установка библиотеки:
Скачайте и распакуйте файл “AppleRemote.zip”. Скопируйте распакованное в эту папку: “/Applications/Arduino/Contents/Resources/Java/hardware/libraries/” 

Загрузка кода: – Скачайте файл: 'Arduino_Apple_Remote.pde ” – Откройте его в Arduino IDE. – Подключите Arduino

– Нажмите кнопку Upload.

Использование и дальнейшее улучшение

Использование:
Наведите светодиоды на ИК приемник и нажмите кнопку. В зависимости от светодиодов вам может понадобиться изменять расстояние, чтобы схема заработала.  

Примечание: Сопряжение(Pairing) должно быть отключено. (Рис. 2)

Улучшение: Используйте транзисторы для управления светодиодами вместо подключения их напрямую к 13 контакту. Это должно увеличить дальность.   Используйте этот пульт в качестве пульта ДУ для робота. Добавьте ИК светодиоды.

Используйте алюминиевую фольгу для увеличения дальности.

Оригинал статьи

Прикрепленные файлы:

Касьянов А.Опубликована: 2012 г.0Вознаградить Я собрал 0 0

x

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография

Источник: http://cxem.gq/arduino/arduino41.php

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}