Поворотная вебкамера на arduino

Télécharger la vidéo, regarder gratuitement

8:35

Will Smith Bungee Jumps Out of a Helicopter!

Vues 12 170 752 88%

14:34

Vues 688 519 99%

2:21

New Pokémon Discovered: Introducing Meltan!

Vues 2 312 998 93%

2:49

BTS and Jimmy Fallon Do the Fortnite Dance Challenge

Vues 2 320 704 99%

8:59

Hasan Minhaj's Groupon Proposal Fail

Vues 446 499 97%

7:33

Archery Trick Shots 2 | Dude Perfect

Vues 6 654 981 99%

11:22

Billie Eilish Reacts To Teens React To Billie Eilish

Vues 2 026 424 99%

13:15

Steelers vs. Buccaneers Week 3 Highlights | NFL 2018

Vues 1 649 521 94%

7:05

Why colleges tolerate fraternities

Vues 997 543 77%

10:16

$10 QUEER EYE TRANSFORMATION (w/ Jon Cozart)

Vues 625 548 93%

20:25

Game Theory: How PewDiePie LOST YouTube to T Series

Vues 2 224 679 90%

14:27

Vues 4 168 294 96%

7:22

DIY 7 INGREDIENT SANDWICH STADIUM

Источник: https://frvid.com/video/%D0%BF%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82%D0%BD%D0%BE%D0%B5-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE-%D0%B4%D0%BB%D1%8F-%D0%BA%D0%B0%D0%BC%D0%B5%D1%80%D1%8B-%D0%BD%D0%B0-3d-%D0%BF%D1%80%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%B5-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%D0%BE%D0%B5-%D0%B4%D0%B6%D0%BE%D0%B9%D1%81%D1%82%D0%B8%D0%BA%D0%BE%D0%BC-%D0%BD%D0%B0-arduino-uno-P7IXDIJDk-0.html

Web камера поворотная



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

  • Фото/название
  • Цена
  • Описание

Срок поставки :
Смотрите в карточке товара

Уличный фонарь с видео-наблюдением “Видео-сфера VN-1″Освещение двора и придомовой территории – один из важнейших элементов оснащения участка. От удачного расположения источников света, будет зависеть  ваша безопасность, а расположение …

Подробнее

Срок поставки :
Смотрите в карточке товара

Уличный фонарь с видео-наблюдением “Видео-сфера VN-1″Освещение двора и придомовой территории – один из важнейших элементов оснащения участка. От удачного расположения источников света, будет зависеть  ваша безопасность, а расположение …

Подробнее

Срок поставки :
Смотрите в карточке товара

Уличный фонарь с видео-наблюдением “Видео-сфера VN-1″Освещение двора и придомовой территории – один из важнейших элементов оснащения участка. От удачного расположения источников света, будет зависеть  ваша безопасность, а расположение …

Подробнее

Срок поставки :
Смотрите в карточке товара

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

Подробнее

Срок поставки :
Смотрите в карточке товара

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

Подробнее

Срок поставки :
Смотрите в карточке товара

Настенный видео моноблок “ARGO” 17-19Настенный видео моноблок “ARGO” специальное решение для организации системы видеонаблюдения для небольших помещений, такие как коридор, прихожая, подсобное помещение.  При создании домашней сис…

Подробнее

Срок поставки :
Смотрите в карточке товара

Видео – моноблок “VISUAL”Wall-wide”Настенный видео моноблок “VISUAL”Wall-wide” имеет Металлический корпус с закругленными боками. Крепится к стене и может использоваться в узких коридорах, прихожих, подсобных помещениях. Удобство …

Подробнее

Срок поставки :
Смотрите в карточке товара

Видео – моноблок “VISUAL”Wall-wide”Настенный видео моноблок “VISUAL”Wall-wide” имеет Металлический корпус с закругленными боками. Крепится к стене и может использоваться в узких коридорах, прихожих, подсобных помещениях. Удобство …

Подробнее

Срок поставки :
Смотрите в карточке товара

Настенный видео моноблок “ARGO” 32-42Настенный видео моноблок “ARGO” специальное решение для организации системы видеонаблюдения для небольших помещений, такие как коридор, прихожая, подсобное помещение.  При создании домашней сис…

Подробнее

Доставка курьером или транспортной компанией

Послепродажное сопровождение

Гарантия на все товары

Источник: http://video-in.ru/info/vidcam2/web-kamera-povorotnaya.html

ИК-управление камерой с помощью Ардуино

— ИК-сигнал поворачивает камеру влево и вправо. — Можно использовать для привязки камеры к какому-то объекту, или для селфи снимков. — Работает на 5V, например, Power Bank. — Может использоваться с большинством ИК-пультов для ТВ.

— Дизайн и код просты насколько возможно, но с сохранением максимальной эффективности.

Что ожидать от этого видео

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

Список оборудования:

  • Ардуино  (Магазин на Aliexpress, Banggood).
  • Серво мотор
  • Держатель камеры
  • 2 ИК-приемника
  • 1 трубочка
  • Термоусадка
  • Провода
  • Паяльная плата
  • Соединительные пины

Разрежьте паяльную плату, чтобы она подходила по размеру. Я использовал размер 15 х 20 отверстий.

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

Возьмите питьевую трубочку и отрежьте от неё 2 куска, примерно 10 мм и 30 мм.

Наденьте отрезанные куски трубочки на сенсоры, сверху наденьте термоусадку и нагрейте ее со стороны ножек ИК-ресиверов.

Разрежьте «носок» пополам вдоль и вырежьте треугольник на конце.

Подсоедините один провод к «+» ИК-ресиверов, другой провод к «» ИК-ресиверов. Еще один провод соедините с «Out» ИК-ресиверов.

Склейте 2 носка спинами друг к другу.

Плата

Приклейте серво мотор к плате и припаяйте 3 провода в любом месте на плате. Желтый провод будет передавать сигнал, он будет соединен с пином 11.

Средний провод — это «+«, он будет соединен с пином 5V.

Коричневый провод — Земля, он должен быть соединен с Землей.

Плюсы ИК-приемников соединяются с пином 5V. Минусы соединяются с Землей.

2 сигнальных провода соединяются с пинами A3 и A5.

Прикрепите держатель камеры к мотору.

Приклейте сенсор к держателю камеры. Убедитесь, что он приклеен под углом 90°.

Теперь загружаем код в Ардуино.

Код для Ардуино

Принцип работы сенсора

Следящий сенсор состоит из 2 ИК-приемников, отделенных друг от друга. Когда они оба получают ИК-сигнал, это означает, что они направлены на источник сигнала. Если только один из них получает ИК-сигнал, это означает, что мотору надо развернуться налево или направо так, чтобы оба ИК-приемника одновременно получали ИК-сигнал.

ИК-сигнал может быть очень сильным и / или отражаться от других объектов. Чтобы уменьшить этот эффект мы использовали черный материал и сделали фигурный вырез, так что ИК-приемники могут получать сигнал только с определенного направления.

Изменения в коде

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

Переменную smoothness лучше оставить равную 10. Чем меньше значение, тем быстрее мотор поворачивает, но тем менее стабильным он становится.

Пред пост

Поворотники для велосипеда. 1 год от батарейки 9V.

След пост<\p>

Как использовать FT232RL для загрузки программ в Atmega328

Источник: https://diy-life.ru/ik-upravlenie-kameroj-s-pomoshhyu-arduino.html

Управляемая веб-камера или же web-cam-бот

Не так давно я уже , что мою(и -а) статью про — «Веб-камера на сервоприводах» опубликовали в журнале . Статья уже выложена на их сайте и её можно прочитать . Вкратце расскажу про создание такой камеры.

Как видно на фотографии, я собрал поворотную основу для камеры из самых простых и дешёвых маленьких — .

Камера крепится прямо к качалке верхней сервы, которая привинчивается к Г-образной загогулине, вылепленной из ПКЛ ( — замечательный пластик для моделирования и прототипирования!). Эта же загогулина другим концом крепится к качалке второй сервы. Основу я недолго думая вырезал из пластиковой бутылки 🙂 Хотя можно было бы вылепить из того же пластика ПКЛ 😉

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

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

Далее обе сервомашинки напрямую подключаются к 7 и 8 портам контроллера Arduino/CraftDuino:

В данном случае Arduino/ играет роль шлюза, т.е.

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

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

Вот какая программа для Arduino у нас получится (фактически — это немного модифицированный пример, поставляемый с библиотекой Firmata)#include #include Servo servo7; Servo servo8; void analogWriteCallback(byte pin, int value) { if(pin == 7) servo7.

write(value); if(pin == 8) servo8.write(value); } void setup() { Firmata.setFirmwareVersion(0, 2); Firmata.attach(ANALOG_MESSAGE, analogWriteCallback); servo7.attach(7); servo8.attach(8); Firmata.begin(9600); } void loop() { while(Firmata.available()) Firmata.

processInput(); }Вот и всё — механика и электроника готовы и остаётся только написать программу для управления этим мини-роботом!

Так как дальнейшие планы научить этого мини-web-cam-бота самостоятельно обнаруживать объекты и следить за ними, то для работы с камерой я воспользуюсь библиотекой .

Управляющая программа довольно простая.

к web-камере и показывам её картинку. Так же выведем в окошко с картинкой пару , с помощью которых будем управлять положением сервомашинок.

Так как в моей конструкции робота web-камеру пришлось закрепить на боку, то в программе приходится это исправлять (поворачивать картинку на 90 градусов против часовой стрелки).

Эта процедура реализуется функцией rotate(), которая является обёрткой вокруг функции OpenCV: (), которая и выполняет поворот изображения ().

// // программа для управления // сервомашинками мини-web-cam-бота // // robocraft.ru #include #include #include #include #include “serial.h” Serial sg; // для работы с COM-портом // положение 1-й сервы int A = 0; int Amax = 180; // положение 2-й сервы int F = 0; int Fmax = 180; IplImage* dest = 0; // // функции-обработчики ползунков // void myTrackbarA(int pos) { A = pos; // Firmata char buf[3]; buf[0] = 0xE0 | 7; buf[1] = A & 0x7F; buf[2] = (A >> 7) & 0x7F; sg.Send(buf, 3); Sleep(100); } void myTrackbarF(int pos) { F = pos; // Firmata char buf[3]; buf[0] = 0xE0 | 8; buf[1] = F & 0x7F; buf[2] = (F >> 7) & 0x7F; sg.Send(buf, 3); Sleep(100); } // функция поворота изображения на заданный угол void rotate(IplImage* _image, double _angle=90) { // матрицы трансформации CvMat* rot_mat = cvCreateMat(2,3,CV_32FC1); // вращение относительно центра изображения CvPoint2D32f center = cvPoint2D32f(_image->width/2, _image->height/2); double angle = _angle; double scale = 1; cv2DRotationMatrix(center,angle,scale,rot_mat); IplImage* Temp = 0; Temp = cvCreateImage(cvSize(_image->width, _image->height) , _image->depth, _image->nChannels); // выполняем вращение cvWarpAffine(_image,Temp,rot_mat); // сохраняем результат cvCopy(Temp, _image); cvReleaseImage(&Temp); cvReleaseMat(&rot_mat); } int main(int argc, char* argv[]) { // получаем любую подключённую камеру CvCapture* capture = cvCaptureFromCAM(CV_CAP_ANY); assert( capture ); // устанавливаем ширину и высоту кадра cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);//1280); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);//960); IplImage* frame=0; // окно для вывода изображения cvNamedWindow(“capture”, CV_WINDOW_AUTOSIZE); // инициализация COM-порта int port=19; // номер виртуального COM-порта Arduino printf(“[i] try to open COM-port %d
“, port); bool b = sg.Open(port, 9600); if(!b) { printf(“[!] Error open COM-port!
“); return 1; } printf(“[i] ok
“); // добавляем ползунки для управления положением сервомашинок cvCreateTrackbar(“A”, “capture”, &A, Amax, myTrackbarA); cvCreateTrackbar(“F”, “capture”, &F, Fmax, myTrackbarF); // цикл обработки кадров с камеры while(true){ // получаем кадр frame = cvQueryFrame( capture ); // копируем изображение dest = cvCloneImage(frame); // поворачиваем картинку на 90 градусов rotate(dest); // показываем cvShowImage(“capture”, dest); // освобождаем изображение cvReleaseImage(&dest); char c = cvWaitKey(33); if (c == 27) { // нажата ESC break; } } // освобождаем ресурсы sg.Close(); cvReleaseCapture( &capture ); cvDestroyWindow(“capture”); return 0; }Вот и всё! Главное — желание и хорошая идея! 😉 исходники к статье можно скачать по адресу:

Источник: http://robocraft.ru/blog/projects/345.html

TTL-модуль видеокамеры для Ардуино со стандартом NTSC

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

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

Она пригодится как для написания умных нейросетей, так и для простого отслеживания того, что происходит у вас в квартире, когда вы не дома.

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

Основным производителем таких камер сейчас является компания – adafruit.com.

Пример модуля камеры: OV7670 300KP VGA Camera Module

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

TTL Serial JPEG камера с NTSC видео от Adafruit

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

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

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

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

И, наконец, авто-контраст и авто-яркость прекрасно подходят для отслеживания движений даже в тёмных помещениях, что позволяет устанавливать их вместо соответствующих датчиков. Но, конечно, без соответствующего софта это просто груда железа. Благо, найти подходящие библиотеки, благодаря доступности Ардуино, не так и сложно, достаточно просмотреть пару тематически англоязычных форумов.

Но не заблуждайтесь, такие модули не предназначены для профессиональной фотографии, ведь их максимальное разрешение не выходит за пределы 630 на 480, предоставляемых даже самой дешёвой веб-камерой. Пример того как выглядит итоговое изображение:

При этом, у неё есть куда более значимые достоинства, перекрывающие все недостатки, например:

  1. Камеры чувствительны к ИК излучению, что не только даёт обнаружить любые изменения в цветопередаче, но и позволяет отслеживать движения в полной темноте. Учитывайте, что каждый модуль индивидуален, и подбирать его стоит по вашим требованиям, в данном случае мы рассмотрим именно систему видеонаблюдения.
  2. Размеры в 32 мм квадратных при фотоматрице CMOS в четверть дюйма.
  3. Соответственно разрешению, и мегапикселей немного – всего 0.3.
  4. А вот формат выходных данных зависит от камеры; если вам нужен простой модуль для видеонаблюдения, то подойдёт и стандарт M-JPEG, который будет выдавать не более 30 кадров в секунду.
  5. Все параметры, будь то баланс белого или экспозиция, автоматически подстраиваются в зависимости от программы.
  6. Максимальное усиление – 16 Дб, а вот динамический диапазон – все 60 Дб.
  7. Угол обзора небольшой – всего 60 градусов, учитывайте это, когда будете выбирать место для установки. Но его можно значительно расширить, прикупив специальные фишай линзы.
  8. Фокусное расстояние – от 10 до 15 метров.
  9. Битрейт установлен изначально 38400, менять его вроде бы и можно, с помощью АТ+ команд, но на деле это не работает или же попросту бесполезно.
  10. Потребляют такие модули в среднем 75 мА, учитывайте это, если собираетесь сделать автономную камеру видеонаблюдения.
  11. Работает в функциональном напряжении 5В, а подключается по 3.3 В TTL через три проводника.

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

Подключение и настройка

Зачастую камера для Ардуино приходит без коннекторов, поэтому вам необходимы специальные проводники, которые придётся подпаивать к пинам отдельно. Благо контакты расположены приблизительно в 2-х мм друг от друга, что упрощает подключение видео с Аrduino к МК.

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

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

  1. Для 5В пина подключаем красный проводник.
  2. На заземление отправляем черный.
  3. Белый идёт на пин для получения данных.
  4. Зеленый – на TX, предназначенный для передачи картинки.

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

Соединение деталей, схема

Теперь соединим всё вместе. Эта схема предоставлена самим производителем таких камер – Adafruit:

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

Так как мы говорим о простейшей реализации, то предполагаем, что у вас нет навыков работы с С++, а соответственно, сгодится любая библиотека из общественного источника.

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

Для камеры нужно использовать приложение Windows Comm Tool. Нужно использовать серийный протокол. Сами производители рекомендуют переходник для FTDI или USB/TTL конвертер. Для Arduino можно брать серийный чип (FTDI) и загрузить скетч в мк:

// empty sketch

void setup()  

{

}

void loop()

{

}

Но это не подойдет для плат вроде Leonardo!

Для плат типа Leonardo нужно брать этот код:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

//Leo_passthru

// Allows Leonardo to pass serial data between

// fingerprint reader and Windows.

//

// Red connects to +5V

// Black connects to Ground

// Green goes to Digital 0

// White goes to Digital 1

void setup() {

  Serial1.begin(57600);

  Serial.begin(57600);

}

void loop()

{  

  while (Serial.available())

    Serial1.write(Serial.read());

  while (Serial1.available())

    Serial.write(Serial1.read());

}

Соединение такое:

Теперь нужно скачать и настроить библиотеку от производителя:

VC0706 Comm Tool

Обнаружение движения

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

Когда телефон удаляется настолько, что NTSC перестаёт работать, информация и СМС будут передаваться по беспроводному интернету и наоборот.

Связка: камера, Ардуино и Андроид

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

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

Использование видеокамеры с Arduino

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

  1. Видеонаблюдение за квартирой.
  2. Автоматизированные фермы и теплицы, в которых есть микроклимат, и, дабы его не нарушать, наблюдение стоит вести удалённо.
  3. Замена датчику движения, при соответствующем софте.

Более подробное описание модуля и настройки Comm Tool вы найдет на сайте производителя – adafruit.com.

Источник: https://ArduinoPlus.ru/arduino-kamera/

Ссылка на основную публикацию
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}