Arduino - полный фарш! (Uno, Nano, шилды, самопал). Контактные колодки arduino


Мишкофон [Амперка / Вики]

  • Платформы: Iskra Neo

  • Языки программирования: Arduino (C++)

  • Тэги: Детский телефон, мягкая игрушка, радионяня, общение с ребёнком.

Что это?

С помощью этого «мишкофона» можно болтать со своим ребёнком и рассказывать ему сказки, не отходя от рабочего места. Да, есть вариант научить чадо пользоваться смартфоном. Но в смартфоне нет ничего волшебного. А плюшевый медведь, говорящий папиным голосом, — самое, что ни на есть настоящее волшебство. При чём сделанное своими руками.

Что нам понадобится?

  1. SIM-карта

  2. Миниатюрный активный динамик

  3. Микрофон

  4. Мягкая игрушка

Как собрать?

Алгоритм

  • Сразу после подачи питания считываем данные с гироскопа.

  • Каждую секунду проверяем — не пришёл ли входящий звонок.

  • Повторяем весь цикл.

Исходный код

gsmbear.ino // подключаем библиотеку для работы I²C #include <Wire.h> // подключаем библиотеку для работы с модулями IMU #include <TroykaIMU.h>   // подключаем библиотеку для работы с GPRS устройством #include <GPRS_Shield_Arduino.h> // подключаем библиотеку для эмуляции Serial порта // она нужна для работы библиотеки GPRS_Shield_Arduino #include <SoftwareSerial.h>   #define GPRS_BUFFER_LENGTH 46 #define TELEPHONE_NUM_LENGTH 12   // порог скорости вращения гироскопа #define ROTATE_SPEED_TRESHOLD 10   // время задержки, после которой будет совершён исходящий вызов #define OUTCOMING_CALL_TIMEOUT 5000   // порог после которого будем звонить #define OUTCOMING_CALL_TRESHOLD 500   // индикаторный светодиод расположен на 13 пине #define INDICATOR_PIN 13   char fathersNumber[] = "+74993221317";   char incomingPhoneNumber[GPRS_BUFFER_LENGTH];   // создаём объект класса GPRS, передаём ему // номера пинов PK, ST и скорость 9600 бод GPRS gprs(6, 5, 9600);   // создаём объект для работы с гироскопом Gyroscope gyro;   unsigned long waitTime = 0;   unsigned long rotateTime = 0;   int rotateCounter = 0;   void setup() { //настраиваем пин 13 в режим выхода, pinMode(INDICATOR_PIN, OUTPUT); // подаём на пин 13 «низкий уровень» digitalWrite(INDICATOR_PIN, LOW); // включаем GPRS Shield gprs.powerUpDown();   while (!gprs.init()) { // завелся ли GPRS Shield? digitalWrite(INDICATOR_PIN, !digitalRead(INDICATOR_PIN)); // если связи нет, ждём 1 секунду // процесс повторяется в цикле, // пока не появится ответ от GPRS устройства delay(1000); } digitalWrite(INDICATOR_PIN, LOW);   // запускаем гироскоп gyro.begin(); }   void loop() { // если функция возвращает true if (gyroCall()) { // звоним на заданный в коде номер gprs.callUp(fathersNumber); // индикация звонка calling(); } // каждую секунду ожидаем входящий звонок if (millis() - waitTime > 1000) { incomingCall(); // запоминаем текущее время waitTime = millis(); } }   void incomingCall() { // ожидаем звонка if (gprs.ifcallNow()) { // если поступает входящий звонок, // подаём на пин 13 «высокий уровень», чтобы // зажечь светодиод на 13 пине digitalWrite(INDICATOR_PIN, HIGH); // считываем номер входящего звонка gprs.isCallActive(incomingPhoneNumber); if (!strncmp(incomingPhoneNumber, fathersNumber, TELEPHONE_NUM_LENGTH)) { // если звонит папа // по истечении 3 секунд берём трубку delay(3000); gprs.answer(); // индикация звонка calling(); } else { // если нет, кладём трубку gprs.callEnd(); } } }   bool gyroCall() { // считываем абсолютную скорость вращения гироскопа по трём осям float bearRotate = abs(gyro.readDegPerSecX()) + abs(gyro.readDegPerSecY()) + abs(gyro.readDegPerSecZ()); // если это не случайные помехи if (bearRotate > ROTATE_SPEED_TRESHOLD) { // запоминаем текущее время rotateTime = millis(); // увеличиваем счётчик вращения ++rotateCounter; // увеличиваем яркость светодиода analogWrite(INDICATOR_PIN, map(rotateCounter, 0, OUTCOMING_CALL_TRESHOLD, 0, 255));   } else if (millis() - rotateTime > OUTCOMING_CALL_TIMEOUT) { // если же скорость вращение была ниже порога в течении 5 секунд // гасим светодиод digitalWrite(INDICATOR_PIN, LOW); // обнуляем счётчик вращения rotateCounter = 0; } // возвращаем результат // превысил ли счётчик вращения порог срабатывания исходящего звонка return (rotateCounter > OUTCOMING_CALL_TRESHOLD); }   void calling() { while (!gprs.ifcallEnd()) { // моргаем и ждём пока абонент не положит трубку digitalWrite(INDICATOR_PIN, HIGH); delay(50); digitalWrite(INDICATOR_PIN, LOW); delay(200); digitalWrite(INDICATOR_PIN, HIGH); delay(50); digitalWrite(INDICATOR_PIN, LOW); } }

Демонстрация работы устройства

Что дальше?

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

Если воткнуть в медведя датчик шума и настроить SMS-оповещения, при превышении определённого порога, сможете звонить каждый раз, как только малыш начнёт капризничать. WOW-эффект обеспечен.

wiki.amperka.ru

полный фарш! (Uno, Nano, шилды, самопал)

Arduino — это общее название для серии аппаратных платформ (микрокомпьютеров) на основе микроконтроллеров ATmega.

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

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

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

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

По технической части Платы Arduino и их аналоги представляют собой набор из собственно платы, на которой размещён микроконтроллер ATmega (разных версий) съёмный либо впаяный, с которого разведены несколько цифровых и аналоговых (ШИМ) вводов-выводов, а также сопутствующую обвязку, как правило это: — токоограничительные резисторы на вводы-выводы — несколько светодиодов-индикаторов — резонатор (кварцевый или керамический) — кнопка сброса — стабилизатор напряжения +5в и/или +3.3в — микросхема отвечающая на соединение по USB (может не быть в зависимости от версии) — разъём USB (зависит от версии) — разъём внешнего питания (зависит от версии) — на версиях с внешним разъёмом питания — входной защитный диод от переполюсовки

По программной части Имеется собственная среда разработки, в которой можно писать программы («скетчи») на Си-подобном языке и который люто ненавидят AVR-щики, называя её «птичий язык». Это среда, конечно же, имеет свои недостатки, не даёт полного контроля над всеми возможностями процессора, но при этом очень сильно упрощает жизнь и ускоряет процесс моделирования. За удобство надо платить, да. Скажу, что совершенно не обязательно её использовать, можно писать на чём угодно, например, на том же GCC и WinAVR, благо, сердце Arduino — тот же самый AVR. А самые заядлые хардкорщики могут писать под Ардуино на Си и ассемблере.

Кому и зачем нужно? Кому? Глупый вопрос — мне конешно :) Зачем? Для реализации творческого процесса. Если серьёзно, то на основе этих платформ можно соорудить практически всё что угодно (в разумных, конечно, пределах) начиная от охранной системы с кучей функций, типа включения сирены и отправки СМС, и заканчивая разнообразными контрольно-измерительными приборами. Если несерьёзно, то при наличии фантазии и пары сервоприводов можно соорудить какую-нибудь игрушку, поворотное устройство (следящее за солнцем, например, или за фонариком), автокормилку для рыбок, механическую руку, устройство для заварки чая, наливайку для пива и многое другое :)

Преимущества Нанотехнологии для домохозяек :) Микроэлектроника для ленивых — без паяльника и пайки :) Можно действительно собрать реально действующий прототип какого либо устройства, не прибегая к пайке (правда, чтобы совсем уж не прибегать к пайке придётся покупать, покупать и покупать простейшие вещи, которые можно легко сделать вручную). Помимо простоты технической части, существует большая официальная библиотека примеров (программ, «скетчей») для Arduino с помощью которых можно делать те или иные вещи. Не говоря уже о неофициальных, любительских проектах.Однако, следует оговориться, что эта простота не отменяет наличия, хотя бы минимального количества мозгов и прямых рук. Порой приходится посидеть и серьёзно подумать над реализацией простейшей вещи, которая штатными средствами либо ну никак не хочет получаться, либо просто не предусмотрена…

Что имеем на деле (варианты, версии, плюшки, фотки) Заранее прошу прощения за качество фотографий — в отсутствие, на данный момент, нормального фотоаппарата, они сделаны вебкамерой.

Моя версия Arduino Uno куплена на Алиэкспрессе, различий с версией которая на BiC практически не имеет, разве что на фотках BiC присутствует надпись «made in Italy» (что, естественно, не так :))). Аппаратно обе версии соответствуют первой ревизии оригинальной Arduino Uno.

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

На фото может быть не очень понятно, но я поясню, мегашилд не имеет на своём борту никаких электронных компонентов (за исключением одного светодиода и пары резисторов), и представляет из себя очень удобно разведённую схему для подключения датчиков, сервоприводов и т.д. При этом все стандартные выводы так же сохранены. Плюсом является стандартизированная организация выводов — например для подключения сервоприводов не нужно делать разветвитель от «родных» контактов Arduino на питание и землю — всё уже выведено на шилде группами по 3 пина: земля-питание-сигнал.

Вот как выглядит этот «сэндвич»:

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

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

Для конечного устройства в котором не предполагается контактов с внешним миром можно использовать исключительно дешёвую плату Arduino Pro Mini. Минус этой платы в том что для её программирования нужен либо переходник USB-serial, либо ещё одна плата Arduino с USB выходом. Своей фотки нет, даю с ДХ:

Примеры использованияКонтроллер штангенциркуля + вывод на дисплей от Нокии 5510(3310) из обзора про штангенциркуль

Термометр и гигрометр на основе датчика DHT11 (фигня, DHT22 лучше, но на BiC нету) и вражеского неправославного LCD дисплея HD44780 (нет поддержки кириллицы):

Моторизированная вебкамера — управляемая с компьютера (подробности см. ниже)

[Подвал]Официальный Ардуинский сайт arduino.ccArduino Uno buyincoins.com/details/high-quality-arduino-uno-atmega328p-pu-module-atmega8u2-avr-usb-cable-board-product-10252.htmlArduino Nano buyincoins.com/details/arduino-nano-v3-0-avr-atmega328-p-20au-moudle-board-with-usb-cable-product-10178.htmlArduino Pro Mini dx.com/p/arduino-pro-mini-w-atmega328p-electronic-building-blocks-interactive-media-improved-version-104332Мегашилд buyincoins.com/details/perfect-high-quality-new-arduino-sensor-shield-digital-analog-module-servos-v4-product-9030.htmlМакетка (беспаечная) buyincoins.com/details/high-quality-mini-solderless-breadboard-bread-board-400-contacts-available-product-11082.htmlАкселерометр buyincoins.com/details/mma7361-angle-sensor-inclination-accelerometer-acceleration-module-arduino-speed-product-10248.html Двухстрочный 16тисимвольный LCD дисплей buyincoins.com/details/new-character-lcd-module-display-lcm-1602-16x2-hd44780-blue-blacklight-product-9000.htmlСервопривод SG90 (рулевая машинка) buyincoins.com/details/1x-9g-micro-servo-for-rc-helicopter-plane-futaba-hitec-product-3457.htmlДатчик температуры и влажности DHT11 buyincoins.com/details/new-dht11-digital-temperature-and-humidity-sensor-product-6732.htmlПроводки-коннекторы (40шт) buyincoins.com/details/40pcs-dupont-wire-color-connector-cable-line-1-pin-new-product-7224.html

[Интерактив] К чему всё это может привести, можно посмотреть и даже пощупать (да, да!) здесь (шибко не издевайтесь, комп старенький, при большом онлайне будет подтормаживать)Работает. Антимат потихоньку совершенствуется, не пускает матюки, заодно убирает мусор типа «тест», «111», «ололо» и прочих «ракодилов».

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

Кот, по просьбам :о)

Шедевр называется «Котэ крутен» © неизвестный автор

Дополнительная информация по просьбам

Q: Как долго собиралось?A: Железо — примерно 15 минут, программная часть 3-4 вечера, из-за своих же ошибок.

Q: Во сколько обошлось?A: С учётом всех скидок — примерно в 25$ (считая дисплей бесплатным, т.к. самоделка)

Q: Какие языки программирования использовались?A: Родной ардуинский для прошивки и вижуал басик 6.0 для web-com прокси.

Q: Можно более подробно о материальной и программной части?A: Матчасть: — ардуино уно (мегашилд можно исключить) — две сервы (рулевые машинки по ссылке из обзора) — вебкамера (любая USB) — компутерПрограммное обеспечение: — среда разработки, например родная Arduino — из программного комплекта ардуино — две библиотеки — serial и servo — если просто рулить самому — достаточно виндовс терминала — если так как у меня: апач, пхп, рамдиск (виртуальный диск в памяти для ускорения и разгрузки винчестера), веб-ком прокси (самопальная), и любая программа для вебкамеры, которая либо поток шлёт, либо сохраняет картинки на диск, либо регистриуется аккаунт на смотрикоме и транслируется видеопоток, без нагрузки на свой комп (но будет задержка секунд 7-10)

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

mysku.ru

Робот Мариачи [Амперка / Вики]

  • Платформы: Arduino Leonardo ETH

  • Языки программирования: Arduino (C++)

  • Тэги: Arduino Leonardo ETH, робот, уведомитель, маракасы, конструктор ПВХ.

Что это?

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

  • Новое сообщение в социальных сетях

  • Ваше видео набрало очередную сотню просмотров

  • Кто-то хочет добавить вас в друзья

В нашем случае Мариачи будет оповещать нас о новых заказах в магазине Амперка.

Что нам понадобится?

  1. Маракасы

  2. Конструктор ПВХ

Как собрать?

  1. Возьмите платформу Arduino Leonardo ETH и нижнюю панель кубa (7x7), соедините её с помощью винтов и гаек, так чтобы гайки располагались между панелью и платформой.
  2. Установите Troyka Shield через контактные колодки сверху на Arduino Leonardo ETH.
  3. Боковые панели куба (7x7) соедините с нижней панелью (7x7). Заднюю панель куба (7x3) закрепите между левой и правой панелями внизу, напротив разъёмов USB, Ethernet и внешнего питания платформы Arduino Leonardo ETH, заранее отделив бокорезами секции, мешающие ей устойчиво зафиксироваться.
  4. Возьмите микросервопривод FS90 и с помощью двух специальных панелей для крепления сервоприводов, двух панелей (3x3) и двух панелей (3x2) нашего конструктора сделайте домик для микросервопривода. Это будет плечо робота. Повторите процесс со вторым микросервоприводом.
  5. Из комплектации микросервопривода возьмите качельку овальной формы и через специальную панель (5x2) с вырезом для неё, закрепите к валу сервопривода болтиком также входящим в комплектацию сервомотора. Далее к этой панели с помощью двух панелей конструктора (5x2) и одной панели (6x2) соберите кисть робота. В итоге мы получили руку робота, где кисть — подвижная часть, а плечо — статичная. Повторите процесс со вторым микросервоприводом.
  6. Теперь к левой и правой боковым стенкам куба закрепите руки робота. Подключите микросервоприводы левой и правой руки через 3-проводные шлейфы к 8 и 9 пину Troyka Shield соответственно.
  7. Возьмите два красных светодиода «Пиранья» и прикрутите их с помощью акриловых болтов к панели для крепления двух Troyka-модулей.
  8. Далее используя панель с закреплёнными светодиодами, две панели (6x3) и две панели (3x3) конструктора ПВХ сделайте голову роботу, заранее подключив 3-проводные шлейфы от светодидов.
  9. Возьмите заднюю панель куба (7x2) и установите её между левой и правой панелями в верхней части. Далее возьмите панель крестиков (1x6) и установите между задними панелями (7x3) и (7x2). С помощью заранее выведенных 3-проводных шлейфов из головы робота подключите светодиоды «Пиранья» к 5 и 6 пину Troyka Shield. Установите верхнюю панель куба (7x7) на левую и правую панели.
  10. Так как регулятор напряжения, установленный на плате Arduino Leonardo ETH, не может выдавать ток, обеспечивающий стабильную работу сервомоторов, мы будем запитывать всю конструкцию от отдельного источника питания на 5V. Для этого возьмите гнездо питания 2,1 мм и с помощью проводов «папа-папа» через верхнюю панель куба соедините пин 5V Arduino с плюсом клеммника, а пин GND Arduino с минусом клеммника. В результате должна получиться такая схема:
  11. Возьмите четыре панели крестиков (1x3) и установите две из них на нижнюю часть головы робота, а другие две на верхнюю часть куба.
  12. Установите голову робота через панели крестиков (1x3) на верхнюю панель куба. Соедините переднюю панель куба (6x7) с нижней панелью.
  13. Используя две панели (3x7) и четыре панели (2x4) конструктора ПВХ сделаем ноги для робота.
  14. Поставьте робота на ноги.
  15. Какой же музыкант без инструмента и шляпы. Установите в руки робота маракасы и сделайте для своего Мариачи праздничное сомбреро

Настройка Arduino IDE на работу с платой Arduino Leonardo ETH

Из за конфликта между Arduino LLC и Arduino SRL для работы платы Arduino Leonardo ETH в стандартной Arduino IDE от Arduino.cc, надо выполнить некоторые настройки.

  1. Зайдите в директорию, где установлена Arduino IDE. В стандартной установке она находиться по адресу C:\Program Files\Arduino\.

  2. Далее зайдите в поддиректорию среды Arduino IDE по адресу \hardware\arduino\avr\.

  3. Найдите в ней файл boards.txt и откройте его с помощью любого текстового редактора.

  4. Добавьте в него текст, приведённый ниже.##############################################################   leonardoeth.name=Arduino Leonardo ETH leonardoeth.vid.0=0x2a03 leonardoeth.pid.0=0x0040 leonardoeth.vid.1=0x2a03 leonardoeth.pid.1=0x8040   leonardoeth.upload.tool=avrdude leonardoeth.upload.protocol=avr109 leonardoeth.upload.maximum_size=28672 leonardoeth.upload.maximum_data_size=2560 leonardoeth.upload.speed=57600 leonardoeth.upload.disable_flushing=true leonardoeth.upload.use_1200bps_touch=true leonardoeth.upload.wait_for_upload_port=true   leonardoeth.bootloader.tool=avrdude leonardoeth.bootloader.low_fuses=0xff leonardoeth.bootloader.high_fuses=0xd8 leonardoeth.bootloader.extended_fuses=0xcb leonardoeth.bootloader.file=caterina/Caterina-LeonardoEthernet.hex leonardoeth.bootloader.unlock_bits=0x3F leonardoeth.bootloader.lock_bits=0x2F   leonardoeth.build.mcu=atmega32u4 leonardoeth.build.f_cpu=16000000L leonardoeth.build.vid=0x2a03 leonardoeth.build.pid=0x8040 leonardoeth.build.usb_product="Arduino Leonardo ETH" leonardoeth.build.board=AVR_LEONARDO leonardoeth.build.core=arduino leonardoeth.build.variant=leonardo leonardoeth.build.extra_flags={build.usb_flags}   ##############################################################
  5. Перезапустите Arduino IDE.

Ответ веб-сервера Амперки

В данном проекте мы используем метод GET на URL Амперки. Пример ответа сервиса приведён ниже.

HTTP/1.1 200 OK Server: nginx/1.6.0 Date: Fri, 10 Jul 2015 14:27:55 GMT Content-Type: text/html; charset=utf-8 Content-Length: 1 Connection: close   2

Цифра 2 — это количество необработанных заказов. Наша задача отлавливать эту цифру в приходящих данных с сервера и фиксировать её изменения каждую минуту.

Алгоритм

  • Сразу после подачи питания устанавливаем Ethernet-соединение.

  • Соединяемся с сервером и отправляем ему HTTP-запрос.

  • Считываем все пришедшие данные и находим среди них информацию о количестве заказов.

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

  • Если текущее количество заказов больше предыдущего, то робот начнёт молотить маракасами в течении некоторого времени.

    • Если количество заказов больше нуля, зажигаем светодиоды.

    • Иначе — гасим светодиоды.

  • Повторяем HTTP-запрос и его обработку каждую минуту.

Исходный код

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

musicrobot.ino #include <SPI.h> // библиотека для подсоединения Arduino Leonardo ETH к Интернету #include <Ethernet2.h> // библиотека для работы с сервоприводами #include <Servo.h>   // интервал между отправками HTTP-запроса в миллисекундах #define INTERVAL 60000   // даём разумное имя пинам к которым подключены светодиоды #define LED_1 5 #define LED_2 6   // даём разумное имя пинам к которым подключены сервомоторы #define SERV_L 8 #define SERV_R 9   // создадим два объекта для управления сервоприводами // левая и правая рука робота Servo myservo_L; Servo myservo_R;   // MAC-адрес контроллера, напечатан на обратной стороне платы byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x01, 0x00 }; // впишите сюда адрес вашего сервера char server[] = "your.server.ru"; // переменная для хранения последнего состояния подключения boolean lastConnected = false; // количество заказов char buff[5] = {0}; // индекс массива buff[] int i = 0;   // первый для проверки первый ли раз был запуск программы boolean flag = 0; // состояние работы программы int state = 0;   // переменная для хранения времени работы программы // с последней отправки HTTP-запроса long previousMillis = 0; // переменная для хранения времени работы программы // с момента запуска функции движения руками long robotTime = 0;   // текущее количество заказов int value = 0; // предыдущее количество заказов int previous_value = 0;   // задаем статический IP-адрес // на тот случай, если у DHCP выдать IP-адрес не получится IPAddress ip(192, 168, 0, 177);   // создаём клиента, который будет подключаться // к необходимому для нас серверу и порту // портом по умолчанию для HTTP является 80 EthernetClient client;   void setup() { // очищаем буфер clearbuff(); // настраиваем пины светодиодов в режим выхода pinMode(LED_1, OUTPUT); pinMode(LED_2, OUTPUT);   // открываем последовательный порт для мониторинга действий в программе Serial.begin(9600);   // запускаем Ethernet-соединение: if (Ethernet.begin(mac) == 0) { // если не удалось сконфигурировать Ethernet при помощи DHCP Serial.println("Failed to configure Ethernet using DHCP"); // продолжать дальше смысла нет, поэтому вместо DHCP // попытаемся сделать это при помощи IP-адреса: Ethernet.begin(mac, ip); } // даем Ethernet 3 секунды на инициализацию delay(3000); // получаем и выводим локальный IP адрес Serial.print("My IP address: "); Serial.println(Ethernet.localIP());   // отправляем HTTP-запрос httpRequest(); }   void loop() { // если от сервера есть какие-нибудь байты, // считываем их и выводим в Serial-порт if (client.available()) { char c = client.read(); Serial.print(c); // отслеживаем в пришедших байтах // данных которые показывают количество необработанных заказов // в нашем случае пустой строки testSymbol(c); } // если сервер отключился и последнее состояние подключение истинно if (!client.connected() && lastConnected) { // останавливаем работу клиента client.stop(); lastConnected = false; Serial.println(); Serial.println("Disconnect"); Serial.println(); buff[i]='\0'; value = atoi(buff); state = 0; // очищаем буфер clearbuff();   // если программа выполняется впервые, то // записываем текущее количества заказов if (flag == 0) { previous_value = value; flag = 1; }   // если текущее количество заказов больше предыдущего // вызываем функцию движения руками робота if (value > previous_value) { robotHands(); } // если текущее количество заказов больше 0 if (value > 0) { // зажгём светодиоды digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); } else { // погасим светодиоды digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); } // записываем текущее количество заказов previous_value = value; }   // проверяем не прошел ли нужный интервал времени if (millis() - previousMillis > INTERVAL) { // отправляем HTTP-запрос httpRequest(); // сохраняем текущее время previousMillis = millis(); } }   // функция отправки HTTP-запроса void httpRequest() { // если подключение установлено, сообщаем об этом на Serial-порт: if (client.connect(server, 80)) { Serial.println("Connected"); // делаем HTTP-запрос: // сюда вписывайте свои данные client.println("GET /yourorders/ HTTP/1.1"); client.println("Host: your.server.ru"); // если ваш сервер не требует авторизации, следующую строчку можете пропустить client.println("Authorization: your basic access authentication"); client.println("Connection: close"); client.println(); lastConnected = true; } else { // если соединения с сервером нет, пишем об этом на Serial-порт: Serial.println("Connection failed"); } } // функция очистки буфера void clearbuff() { for (int t = 0; t < 5; t++) { // очищаем буфер, // присваивая всем индексам массива значение 0 buff[t] = 0; } // для записи с 0 индекса массива // после очистки массива i = 0; }   // функция отслеживания пустой строки void testSymbol(char c) { if (c == '\n' && state == 0) { // если новый символ «перевод строки» // и программа находится в нулевом состоянии // переходим в первое состояние state = 1; } else if (c == '\r' && state == 1) { // если новый символ «возврат каретки» // и программа находится в первом состоянии // переходим во второе состояние state = 2; } else if (c == '\n' && state == 2) { // если новый символ «перевод строки» // и программа находится во втором состоянии // переходим в третье состояние state = 3; } else if (state == 3) { // если программа в третьем состоянии // это значит что пришедшие данные // будут содержать информацию о количестве заказов // считываем их в массив buff[i] = c; i++; } else { state = 0; } }   void robotHands() { // сохраняем текущее время работы программы robotTime = millis(); // покаместь не прошла 1 секунда while (millis() - robotTime < 5000) { // подключаем сервоприводы myservo_L.attach(SERV_L); myservo_R.attach(SERV_R); // зажигаем светодиоды digitalWrite(LED_1, HIGH); digitalWrite(LED_2, HIGH); // устанавливаем угол 120 градусов myservo_L.write(120); myservo_R.write(120); // ждём 300 миллисекунд delay(300); // гасим светодиоды digitalWrite(LED_1, LOW); digitalWrite(LED_2, LOW); // устанавливаем угол 60 градусов myservo_L.write(60); myservo_R.write(60); // ждём 300 миллисекунд delay(300); } // останавливаем сервомоторы myservo_L.detach(); myservo_R.detach(); }

Демонстрация работы устройства

Что дальше?

В данном проекте можно использовать любую другую плату с выходом в интернет. Если у вас, например, уже есть Iskra Neo можно добавить к ней Ethernet Shield 2 или даже GPRS Shield, немного изменив скетч. Так как светодиоды подключены к пинам, поддерживающим ШИМ, вы можете плавно регулировать их яркость в зависимости от вашей задачи. А добавив ещё один сервопривод можно заставить робота вращать головой.

wiki.amperka.ru

схема, память, питание, подключение устройств

Плата Arduino Uno  — центр большой империи Arduino, самое популярное и самое доступное устройство Arduino. В ее основе лежит чип ATmega — в последней ревизии Арудуино Уно R3 — это ATmega328 (хотя на рынке можно еще встретить варианты платы UNO с ATmega168). Arduino Uno является самым подходящим вариантом для начала работы с платформой: она имеет удобный размер (не слишком большой, как у Mega и не такой маленький, как у Nano), достаточно доступна из-за массового выпуска всевозможных клонов, под нее написано огромное количество бесплатных уроков и скетчей. В этой статье мы рассмотрим основные особенности, характеристики и устройство платы Arduino Uno R3, требования к питанию и возможности подключения внешних устройств.

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

Микроконтроллер ATmega328
Рабочее напряжение
Напряжение питания (рекомендуемое) 7-12В
Напряжение питания (предельное) 6-20В
Цифровые входы/выходы 14 (из них 6 могут использоваться в качестве ШИМ-выходов)
Аналоговые входы 6
Максимальный ток одного вывода 40 мА
Максимальный выходной ток вывода 3.3V 50 мА
Flash-память 32 КБ (ATmega328) из которых 0.5 КБ используются загрузчиком
SRAM 2 КБ (ATmega328)
EEPROM 1 КБ (ATmega328)
Тактовая частота 16 МГц

 

Изображения плат Ардуино Уно

Плата Arduino Uno R3: схема, описание, подключение устройствПлата Arduino Uno R3: схема, описание, подключение устройствПлата Arduino Uno R3: схема, описание, подключение устройствПлата Arduino Uno R3: схема, описание, подключение устройствПлата Arduino Uno R3: схема, описание, подключение устройствПлата Arduino Uno R3: схема, описание, подключение устройств

Устройство Arduino Uno

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

Схема и распиновка платы Arduino Uno

Плата Arduino Uno R3: схема, описание, подключение устройств

Принципиальная схема:

Принципиальная схема ардуино

 

Описание элементов платы Arduino Uno R3

Плата Arduino Uno R3: схема, описание, подключение устройств

Распиновка микроконтроллера ATMega 328

Плата Arduino Uno R3: схема, описание, подключение устройств

Описание пинов Ардуино

Плата Arduino Uno R3: схема, описание, подключение устройствПины Ардуино используются для подключения внешних устройств и могут работать как в режиме входа (INPUT), так и в режиме выхода (OUTPUT).  К каждому входу может быть подключен встроенный резистор 20-50 кОм с помощью выполнения команды pinMode () в режиме INPUT_PULLUP. Допустимый ток на каждом из выходов – 20 мА, не более 40 мА в пике.Для удобства работы некоторые пины совмещают в себе несколько функций:

  • Пины 0 и 1  — контакты UART (RХ и TX соответственно) .
  • Пины c 10 по 13 – контакты SPI (SS, MOSI, MISO и SCK соответственно)
  • Пины A4 и A5 – контакты I2C (SDA и SCL соответственно).

Цифровые пины платы Uno

Пины с номерами от 0 до 13 являются цифровыми. Это означает, что вы можете считывать и подавать на них только два вида сигналов: HIGH и LOW. С помощью ШИМ также можно использовать цифровые порты для управления мощностью подключенных устройств.

Пин ардуино Адресация в скетче Специальное назначение ШИМ
Цифровой пин 0 0 RX
Цифровой пин 1 1 TX
Цифровой пин 2 2 Вход для прерываний
Цифровой пин 3 3 Вход для прерываний ШИМ
Цифровой пин 4 4
Цифровой пин 5 5 ШИМ
Цифровой пин 6 6 ШИМ
Цифровой пин 7 7
Цифровой пин 8 8
Цифровой пин 9 9 ШИМ
Цифровой пин 10 10 SPI (SS) ШИМ
Цифровой пин 11 11 SPI (MOSI) ШИМ
Цифровой пин 12 12 SPI (MISO)
Цифровой пин 13 13 SPI (SCK)

К выходу также подсоединен встроенный светодиод (есть в большинстве плат Arduino)

 

Аналоговые пины Arduino Uno

Аналоговые пины Arduino Uno предназначены для подключения аналоговых устройств и являются входами для встроенного аналого-цифрового преобразователя (АЦП), который в ардуино уно десятиразрядный.

Пин Адресация в скетче Специальное назначение
Аналоговый пин A0 A0 или 14
Аналоговый пин A1 A1 или 15
Аналоговый пин A2 A2 или 16
Аналоговый пин A3 A3 или 17
Аналоговый пин A4 A4 или 18 I2C (SCA)
Аналоговый пин A5 A5 или 19 I2C (SCL)

 

Дополнительные пины на плате

  • AREF – выдает опорное напряжения для встроенного АЦП. Может управляться функцией analogReference().
  • RESET – подача низкого сигнала на этом входе приведет к перезагрузке устройства.

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

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

digitalWrite blink

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

Фоторезистор датчик освещенности arduino

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

Варианты питания Ардуино Уно

Рабочее напряжение платы Ардуино Уно — 5 В. На плате установлен стабилизатор напряжения, поэтому на вход можно подавать питание с разных источников. Кроме этого, плату можно запитывать с USB — устройств. Источник питания выбирается автоматически.

  • Питание от внешнего адаптера, рекомендуемое напряжение от 7 до 12 В. Максимальное напряжение 20 В, но значение выше 12 В с высокой долей вероятности быстро выведет плату из строя. Напряжение менее 7 В может привести к нестабильной работе, т.к. на входном каскаде может запросто теряться 1-2 В. Для подключения питания может использоваться встроенный разъем DC 2.1 мм или напрямую вход VIN для подключения источника с помощью проводов.
  • Питание от USB-порта компьютера.
  • Подача 5 В напрямую на пин 5V. В этом случае обходится стороной входной стабилизатор  и даже малейшее превышение напряжения может привести к поломке устройства.

Пины питания

  • 5V – на этот пин ардуино подает 5 В, его можно использовать для питания внешних устройств.
  • 3.3V – на этот пин от внутреннего стабилизатора подается напряжение 3.3 В
  • GND – вывод земли.
  • VIN – пин для подачи внешнего напряжения.
  • IREF – пин для информирования внешних устройств о рабочем напряжении платы.

Память Arduino Uno R3

Плата Uno по умолчанию поддерживает три типа памяти:

  • Flash – память объемом 32 кБ. Это основное хранилище для команд. Когда вы прошиваете контроллер своим скетчем, он записывается именно сюда. 2кБ из данного пула памяти отводится на bootloader- программу, которая занимается инициализацией системы, загрузки через USB и запуска скетча.
  • Оперативная SRAM память объемом  2 кБ. Здесь по-умолчанию хранятся переменные и объекты, создаваемые в ходе работы программы. Память эта энерго-зависимая, при выключении питания все данные, разумеется, сотрутся.
  • Энергонезависимая память (EEPROM) объемом 1кБ. Здесь можно хранить данные, которые не сотрутся при выключении контроллера. Но процедура записи и считывания EEPROM требует использования дополнительной библиотеки, которая доступна в Arduino IDE по-умолчанию. Также нежно помнить об ограничении циклов перезаписи, присущих технологии EEPROM.

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

Программирование для платы Uno

Для написания программ (скетчей) для контроллер Ардуино вам нужно установить среду программирования. Самым простым вариантом будет установка бесплатной Arduino IDE, скачать ее можно с официального сайта.

После установки IDE вам нужно убедиться, что выбрана нужная плата. Для этого у Arduino IDE в меню «Инструменты» и подпункте «Плата» следует выбрать нашу плату (Arduino/Genuino Uno). После выбора платы автоматически изменятся параметры сборки проекта и итоговый скетч будет скомпилирован в формат, который поддерживает плата. Подключив контроллер к компьютеру через USB, вы сможете в одно касание заливать на него вашу программу,используя команду «Загрузить».

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

Написанная и скомпилированная программа загружается через USB-соединение (UART- Serial). Со стороны контролера за этот процесс отвечает bootloader.

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

Отличие Arduino Uno от других плат

Сегодня на рынке можно встретить множество вариантов плат ардуино. Самыми популярными конкурентами Уно являются платы Nano и Mega. Первая пойдет для проектов, в которых важен размер.  Вторая — для проектов, где у схема довольно сложна и требуется множество выходов.

Отличия Arduino Uno от Arduino Nano

Современные платы Arduino Uno и Arduino Nano версии R3 имеют, как правило, на борту общий микроконтроллер: ATmega328. Ключевым отличием является размер платы и тип контактных площадок. Габариты Arduino Uno: 6,8 см x 5,3 см. Габариты Arduino Nano: 4,2 см x 1,85 см. В Arduino UNO используются коннекторы типа «мама», в Nano – «гребень» из ножек, причем у некоторых моделей контактные площадки вообще не припаяны.  Естественно, больший размер UNO по сравнению с Nano в некоторых случаях является преимуществом, а в некоторых – недостатком. С платой большого размера гораздо удобнее производить монтаж, но она неудобна в реальных проектах, т.к. сильно увеличивает габариты конечного устройства.

На платах Arduino Uno традиционно используется разъем TYPE-B (широко применяется также для подключения принтеров и МФУ). В некоторых случаях можно встретить вариант с разъемом Micro USB. В платах Arduino Nano стандартом является Mini или Micro USB.

Естественно, различия есть и в разъеме питания. В плате Uno есть встроенный разъем DC, в Nano ему просто не нашлось места.

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

Отличия от Arduino Mega

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

  • Плата Mega использует иной микроконтроллер: ATMega 2560. Но тактовая частота его равна 16МГц, так же как и в Уно.
  • В плате Mega большее количество цифровых пинов — 54 вместо 14 у платы Uno. И аналоговых — 16 / 6.
  • У платы Mega больше контактов, поддерживающих аппаратные прерывания: 6 против 2. Больше Serial портов — 4 против 1.
  • По объему памяти Uno тоже существенно уступает Megа. Flash -память 32/256, SRAM —  2/8, EEPROM — 4/1.

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

Краткие выводы

Arduino Uno — отличный вариант платы для создания  своих первых умных устройств. 14 цифровых и 6 аналоговых пинов позволяют подключать разнообразные датчики, светодиоды, двигатели и другие внешние устройства. USB-разъем поможет подключиться к компьютеру для перепрошивки скетча без дополнительных внешних устройств. Встроенный стабилизатор  позволяет использовать различные элементы питания с широким диапазоном напряжения, от 6-7 до 12-14 В. В Arduino Uno достаточно удобно реализована работа с популярными протоколами: UART, SPI, I2C. Есть даже встроенный светодиод, которым можно помигать в своем первом скетче. Чего еще желать начинающему ардуинщику?

arduinomaster.ru

Разьемы для Ардуино

Магазин

Каталог

Личный кабинет

Ресурсы

Указывайте в ваших постах тэг #iarduino

Видео уроки

Вверх

Разъем на плату 2.54mm XH-4P, 3 штуки

В наличии: 386

Однорядный разъём, прямой 40pin (PBS-40), 4 Шт.

В наличии: 116

DC 5.5x2.5 mm Штекер питания

В наличии: 319

Однорядный штыревой соединитель 40pin (PLS-40), 5 Шт.

Разьемы

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

В наличии: 80

Коннектор power jack Папа с клемником

В наличии: 60

Штыревой соединитель 40pin 20мм, 5 Шт.

В наличии: 40

Красный штыревой соединитель 40pin, 5 Шт.

Разьемы

Набор из 5 гребенок красного цвета.

В наличии: 1

Контактные колодки Arduino MEGA/DUE

В наличии: 18

Разноцветные штыревые соединители 40pin, 3 Шт.

Разьемы

Набор из 4 гребенок разных цветов

В наличии: 98

Двойной винтовой клеммник, 3шт.

Разьемы

Двухрядный винтовой клеммник для макетных плат под пайку с шагом 2,54 мм.

В наличии:

Желтый штыревой соединитель 40pin, 5 Шт.

Разьемы

Набор из 5 гребенок Желтого цвета.

В наличии: 4

iarduino.ru

Контактные колодки Arduino, Набор из оригинальных контактных колодок (6-пин, 10-пин, 2 х 8-пин) для Arduino проектов :: SoftTrail

Найти

Точный поиск Расширенный поиск Все магазиныЛинии ЛюбвиМосковский Ювелирный ЗаводНебо в алмазахАлмаз-ХолдингАДАМАСЮвелирная сеть 585SUNLIGHTKARATOV220 ВольтМинимаксЭТМЭЛЕКСЧИП и ДИПОЛДИКотоФотоSONYERGONOVAХорошая связьКЕЙSAMSUNGМ.ВидеоЭльдорадоDNSТехнопаркСвязнойMediaMarktGarminPanasonicНоу-ХауБуквоедЛеонардоPETSHOP.RUЛе'МурррBikes&BikesДЕКАТЛОНСпортмастерINTERSPORTФИЗРАСантехМастерCastoramaЛеруа МерленObiMaxidomДомовойСатурн(Спб)TOP HOUSEСеверный лесКреп МаркетЛАРЕСМЕГАСТРОЙЧипакБатяняВОДОПАДВимосПетровичИЛЬ ДЕ БОТЭЛ’ЭтуальУлыбка радугиРИВ ГОШBaonБуду МамойINCITYKIABIБюстьеЭконикаLOVE REPUBLIC5КармаNовFUNDAY1001dresECCOТВОЕPUMAHENDERSONH&MoodjiMODISГлория Джинс1000 и одна туфелькаADIDASO′STINReebokacoolakids.ruFINN FLAREbefreeBebakidsСнежная КоролеваСвит БерриLacostePOP-MUSICSPBMUSICМир МузыкиМузторгКЛАССИКА ПЕТЕРБУРГОрматекMEBELBORAEROИКЕАНоffAskona1000 и одна сумкаПан Чемодан«Торговый Дом Книги «МОСКВА»БИБЛИО-ГЛОБУСРЕСПУБЛИКА*Северная лираСанкт-Петербургский Дом Книги«Чук и Гик»Двадцать восьмойКувалда.руВсе инструментыСеверные стрелыGameParkMothercareГород ИгрушекТД "Антошка"ДЕТСКИЙ МИРTOY.RUДочки-СыночкиДЕТКИHamleysTIMECODEМосковское ВремяВсе городаМоскваСанкт-ПетербургНовосибирскЕкатеринбургНижний НовгородСамараОмскКазаньЧелябинскРостов-на-ДонуУфаВолгоградПермьКрасноярскВоронежСаратовКраснодарТольяттиИжевскУльяновскБарнаулВладивостокЯрославльИркутскТюменьМахачкалаХабаровскНовокузнецкОренбургКемеровоРязаньТомскАстраханьПензаНабережные ЧелныЛипецкТулаКировЧебоксарыКалининградБрянскКурскИвановоМагнитогорскУлан-УдэТверьСтавропольНижний ТагилБелгородАрхангельскВладимирСочиКурганСмоленскКалугаЧитаОрёлВолжскийЧереповецВладикавказМурманскСургутВологдаСаранскТамбовСтерлитамакГрозныйЯкутскКостромаКомсомольск-на-АмуреПетрозаводскТаганрогНижневартовскЙошкар-ОлаБратскНовороссийскДзержинскШахтыНальчикОрскСыктывкарНижнекамскАнгарскСтарый ОсколВеликий НовгородБалашихаБлаговещенскПрокопьевскБийскХимкиПсковЭнгельсРыбинскБалаковоСеверодвинскАрмавирПодольскКоролёвЮжно-СахалинскПетропавловск-КамчатскийСызраньНорильскЗлатоустКаменск-УральскийМытищиЛюберцыВолгодонскНовочеркасскАбаканНаходкаУссурийскБерезникиСалаватЭлектростальМиассРубцовскАльметьевскКовровКоломнаМайкопПятигорскОдинцовоКолпиноКопейскХасавюртЖелезнодорожныйНовомосковскКисловодскСерпуховПервоуральскНовочебоксарскНефтеюганскДимитровградНефтекамскЧеркесскОрехово-ЗуевоДербентКамышинНевинномысскКрасногорскМуромБатайскНовошахтинскСергиев ПосадНоябрьскЩёлковоКызылОктябрьскАчинскСеверскНовокуйбышевскЕлецАрзамасОбнинскНовый УренгойКаспийскЭлистаПушкиноЖуковскийАртёмМеждуреченскЛенинск-КузнецкийСарапулЕссентукиВоткинскНогинскТобольскУхтаСеровВеликие ЛукиМичуринскКиселёвскНовотроицкЗеленодольскБердскСоликамскРаменскоеДомодедовоМагаданГлазовКаменск-ШахтинскийЖелезногорскКанскНазраньПушкинГатчинаСаровВоскресенскДолгопрудныйБугульмаКузнецкГубкинКинешмаЕйскРеутовУсть-ИлимскНовоуральскУсолье-СибирскоеЧайковскийАзовБузулукОзёрскБалашовЮргаКирово-ЧепецкКропоткинКлинВыборгХанты-МансийскТроицкБорШадринскБеловоМинеральные ВодыАнжеро-СудженскБиробиджанЛобняПетергофЧапаевскГеоргиевскЧерногорскМинусинскМихайловскЕлабугаДубнаВоркутаНовоалтайскЕгорьевскАсбестБелорецкБелогорскГуковоСтупиноТуймазыКстовоВольскИшимбайКунгурЗеленогорскЛысьваСосновый БорБуйнакскБорисоглебскИшимНаро-ФоминскБудённовскДонскойПолевскойЛениногорскПавловский ПосадСлавянск-на-КубаниЗаречныйТуапсеРоссошьКумертауЛабинскСибайКлинцыРжевРевдаТихорецкНерюнгриАлексинАлександровДмитровМелеузСальскЛесосибирскГусь-ХрустальныйЧистопольПавловоЧеховКотласБелебейИскитимВерхняя ПышмаКраснотурьинскАпатитыВсеволожскПрохладныйМихайловкаАнапаТихвинСвободныйИвантеевкаШуяКогалымЩёкиноКрымскВязьмаГорно-АлтайскВидноеАрсеньевИзбербашВыксаКлимовскЛискиВолжскКраснокаменскЖигулёвскФрязиноУзловаяЛыткариноНяганьРославльГеленджикТимашёвскБелореченскБоровичиСолнечногорскНазаровоКиришиЧеремховоВышний ВолочёкКраснокамскБерёзовскийБалахнаЛивныЛеснойДонецкСевероморскСаяногорскБугурусланКимрыМегионКизлярУрус-МартанСнежинскКингисеппЗаринскОтрадныйКурганинскШелеховМожгаСертоловоЯрцевоШалиТоржокРузаевкаВолховДзержинскийГрязиЧусовойНадымВерхняя СалдаСафоновоОсинникиКольчугиноГудермесКанашРассказовоСаткаМончегорскКуйбышевУсть-КутТулунКрасное СелоШебекиноСпасск-ДальнийКамень-на-ОбиБелая КалитваПечораЧебаркульРадужныйУсть-ЛабинскМценскМыскиЛомоносовКронштадтАмурскКурчатовСалехардЕфремовСтрежевойАксайПереславль-ЗалесскийАхтубинскКашираЗаинскСоветскПугачёвЛангепасБирскУрюпинскМоршанскПыть-ЯхКачканарКонаковоРтищевоВязникиКореновскУсинскТутаевКрасный СулинСаянскНоводвинскНовозыбковЛюдиновоИзобильныйМариинскЧерняховскЗаволжьеАпшеронскКрасноуфимскКоряжмаКаменкаЕлизовоФроловоУрайБольшой КаменьТосноАлексеевкаКоркиноКыштымЛянторМоздокПартизанскШарыповоСветлоградСоколИрбитГайРежАлатырьАлапаевскТемрюкЮжноуральскУчалыВичугаДальнегорскПротвиноМирныйНижнеудинскЛесозаводскБаксанБесланСестрорецкЯлуторовскМиллеровоЛугаКизилюртФурмановКраснознаменскЗеленокумскКулебакиКандалакшаТындаТайшетТавдаСердобскВалуйкиГулькевичиВятские ПоляныИстраТейковоАбинскАзнакаевоНовокубанскСухой ЛогУгличКинельЮгорскСлободскойОстрогожскДобрянкаТрёхгорныйСланцыКорсаковКасимовМуравленкоЧернушкаЮбилейныйАртёмовскийСосновоборскКондопогаШатураЩербинкаБлагодарныйБалтийскНововоронежНурлатЗимаСлавгородКотельникиПриморско-АхтарскИнтаАшаБогородицкКотовскСтарая РуссаРостовШумерляГагаринНарткалаВеликий УстюгМарксМожайскБорзяЛикино-ДулёвоДюртюлиПетровскКарабулакМалгобекУдомляХолмскГородецБогдановичДагестанские ОгниУсть-ДжегутаВерхний УфалейМалоярославецБарабинскСкопинЕманжелинскКушваГорячий КлючКиржачЛуховицыДесногорскСегежаАргунАлейскДятьковоКохмаЗнаменскДедовскСевероуральскСорочинскКарталыКарпинскКудымкарКировскТопкиКарасукКимовскКостомукшаСоль-ИлецкДивногорскГусевПохвистневоСасовоСосногорскСоветская ГаваньНефтекумскМорозовскПолысаевоДальнереченскГубахаТараМедногорскБутурлиновкаЯнаулЛабытнангиКалач-на-ДонуКамышловЗерноградУваровоНовоалександровскМайскийНовопавловскСоветскийБалабановоРодникиКрасноармейскУнечаКувандыкЖелезногорск-ИлимскийИпатовоСемилуки

softtrail.ru

Хэллоуинская тыква [Амперка / Вики]

  • Платформы: Arduino M0

  • Языки программирования: Arduino (C++)

  • Тэги: хэллоуин, тыква, фонарь Джека, дым

Что это?

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

Что нам понадобится?

  1. Многожильный монтажный провод с сечением не более 1 мм²

  2. Карта памяти microSD

  3. Аудио гнездо 3,5 мм

  4. Миниатюрный активный динамик

  5. Паяльник

  6. Глицерин

  7. Вата

  8. Крепёжные элементы: саморезы

  9. Тыква

Wireless SD Shield в данном проекте используется для подключения карты памяти microSD и считывания с неё wave-файлов, а не для подключения модулей беспроводной связи форм-фактора XBee.

Как собрать?

Для начала модернизируем Wireless SD Shield для подключения различных модулей.

Внимание!

В отличии от большинства плат Arduino, родным напряжением Arduino M0 является 3,3 В, а не 5 В. Соответственно, выходы для логической единицы выдают 3,3 В, а в режиме входа ожидают принимать не более 3,3 В. Подача большего напряжения может повредить микроконтроллер!

В связи с тем что в проекте используются 2 уровня напряжения, сделаем 3-пиновые разъёмы для подключения датчиков как с 3,3-вольтовой логикой, так и с 5-вольтовой логикой.

  1. Возьмите штырьковые соединители и контактную колодку по 3 пина и припаяйте к луженным отверстиям на Wirelees Shield.
  2. Соедините нижние 3-пиновые разъёмы с цифровыми сигналами 8, 9 и 11. Далее подключите к ним питание 5V и землю GND.

    Для эстетичности платы все провода и пайку проводите с обратной стороны Wireless SD Shield’a.

  3. Подключите к верхнему 3-пиновому разъёму цифровой сигнал пина 12, а также питание 3V3 и землю GND.
  4. Соедините два пина контактной колодки через электролитический конденсатор с пином A0, а 3 пин контактной колодки соедините с землёй GND. Конденсатор используется для отфильтровки постоянной составляющей сигнала.
  5. Вставьте microSD карту в Wireless SD Shield и установите его сверху на платформу Arduino M0.
  6. Подключите светодиоды «Пиранья» используя 3-проводные шлейфы через 3-пиновые разъёмы к 8 и 9 Wireless SD Shield.
  7. Инфракрасный датчик препятствий имеет на выходе бинарный цифровой сигнал. Если его питать напряжением 5 вольт, на выходе датчика при логической единице так же будет 5 вольт, которые спалят порт микроконтроллера. Чтобы такого не случилось подключите инфракрасный датчик препятствий через распаянный 3-пиновый разъём к пину12, рабочее напряжение которого 3,3 вольта.
  8. Теперь займёмся дымом. Возьмите паяльник, раскрутите его и достаньте металлическую трубку на которой намотана нихромовая нить.
  9. Извлеките от металлической трубки кусок нихромовой нити длинной 50–60 мм, намотайте на кусок ваты и припаяйте к обоим концам провода «папа-папа». Смочите вату глицерином, а оставшиеся по бокам части ваты поместите в ёмкость с глицерином. Таким способом при подключении на нихромовую нить напряжения питания 12 вольт, она будет греться и глицерин, которым пропитана вата, будет испаряться и создавать дым. А опущенные концы ваты в ёмкость с глицерином, будут создавать капиллярный эффект и не дадут испариться всему глицерину в области нагревания.
  10. Так как для получения дыма нам нужно подавать на нихромовую нить 12 вольт, подключим её к платформе Arduino M0 через силовой ключ:

    1. Подключите силовой ключ используя 3-проводной шлейф через 3-пиновый разъём к пину 11 Wireless SD Shield.

    2. Один провод нихромовой нити подключите к пину Vin

    3. Второй провод нихромовой нити подключите через клеммник к плюсу силового ключа.

    4. Минус силового ключа подключите к земле GND Wireless SD Shield’a.
  11. Соедините аудио разъём тремя проводами «папа-папа» через 3-пиновую контактную колодку с Wireless SD Shield:

    1. «правый канал» — через уже установленный конденсатор к пину A0 Wireless SD Shield;

    2. «левый канал» — соедините с «правым каналом», так как мы используем моно сигнал;

    3. «общий» — к пину GND. После чего подключите внешний динамик через аудио разъём.По итогу должна получиться следующая схема:
  12. Настало время гвоздя программы — страшной и ужасающей тыквы. С помощью ножа сделайте из тыквы адового монстра, чтоб ни одна душа не могла пройти спокойно мимо неё. Далее поместите всю электронику через верхнее заранее вырезанное отверстие в тыкву. Подключите импульсный источник питания через внешний разъём к Arduino M0.
  13. Инфракрасный датчик выведете через рот тыквы, чтоб он мог без препятствий сканировать окружающую местность в поиске жертвы.

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

Алгоритм

  • Сразу после подачи питания проверяем есть ли связь с microSD картой.

  • Проверяем в цикле состояния датчика препятствия

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

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

  • Ждём нового прохожего.

Исходный код

halloween.ino // подключаем библиотеку для работы SPI #include <SPI.h> // подключаем библиотеку для работы c картой microSD #include <SD.h> // подключаем библиотеку для воспроизведения музыки с помощью Arduino M0 #include <AudioZero.h>   // даём разумное имя пинам к которым подключены светодиоды #define LED1_PIN 8 #define LED2_PIN 9   // даём разумное имя пина к которому подключен силовой ключ #define MOSFET_PIN 11   // даём разумное имя для пина к которому подключен // инфракрасный датчик препятствий (infrared sensor barriers) #define ISB_PIN 12   void setup() { // начало работы с SD-картой памяти // передаём номер пина подключенного к линии CS SD-карты while (!SD.begin(4)) { // если связи нет, ждём 1 секунду // процесс повторяется в цикле // пока не появится положительный ответ от SD-карты delay(1000); }   // настраиваем пины светодиодов в режим выхода pinMode(LED1_PIN, OUTPUT); pinMode(LED2_PIN, OUTPUT); // гасим светодиоды digitalWrite(LED1_PIN, LOW); digitalWrite(LED2_PIN, LOW);   // настраиваем пин силового ключа в режим выхода pinMode(MOSFET_PIN, OUTPUT); // подаём низкий уровень на силовой ключ digitalWrite(MOSFET_PIN, LOW); }   void loop() { // если на выходе датчика логический 0 if (!digitalRead(ISB_PIN)) { // зажжём светодиоды digitalWrite(LED1_PIN, HIGH); digitalWrite(LED2_PIN, HIGH); // подаём высокий уровень на силовой ключ digitalWrite(MOSFET_PIN, HIGH);   // вызываем дважды функцию воспроизведения трека playMusic(); playMusic();   // гасим светодиоды digitalWrite(LED1_PIN, LOW); digitalWrite(LED2_PIN, LOW); // подаём низкий уровень на силовой ключ digitalWrite(MOSFET_PIN, LOW); } }   void playMusic() { // начинаем работу с библиотекой AudioZero // выставляем частоту воспроизведения AudioZero.begin(2*44100); // открываем wave-файл с карточки microSD File myFile = SD.open("scream.wav"); // если файл открывается, проигрываем его if (myFile) { AudioZero.play(myFile); } // прекращаем работу с библиотекой AudioZero AudioZero.end(); }

Работа программы во время воспроизведения музыки

В нашем проекте есть изъян, когда идёт воспроизведение музыки, программа стоит на месте и ожидает завершения трека. Если вы в этот момент хотите выполнять различные действия необходимо воспользоваться прерыванием по таймеру. Ниже представлен пример скетча, в котором во время воспроизведения музыки глаза у тыквы мигают. В скетче используются уже не только стандартные функции и методы языка Arduino (C++), а и общение с регистрами микроконтроллера на чистом «C».

halloweenInterruptBlink.ino // подключаем библиотеку для работы SPI #include <SPI.h> // подключаем библиотеку для работы c картой microSD #include <SD.h> // подключаем библиотеку для воспроизведения музыки с помощью Arduino M0 #include <AudioZero.h>   // даём разумное имя пинам к которым подключены светодиоды #define LED1_PIN 8 #define LED2_PIN 9   // даём разумное имя пина к которому подключен силовой ключ #define MOSFET_PIN 11   // даём разумное имя для пина к которому подключен // инфракрасный датчик препятствий (infrared sensor barriers) #define ISB_PIN 12   void setup() { // начало работы с SD-картой памяти // передаём номер пина подключенного к линии CS SD-карты while (!SD.begin(4)) { // если связи нет, ждём 1 секунду // процесс повторяется в цикле // пока не появится положительный ответ от SD-карты delay(1000); } // инициализация и настройка таймера timerInit(); // настраиваем пины светодиодов в режим выхода // PORT_PA06 8 пин Arduino M0 // PORT_PA07 9 пин Arduino M0 PORT->Group[0].OUTTGL.reg = PORT_PA06; PORT->Group[0].DIRSET.reg = PORT_PA07; // гасим светодиоды PORT->Group[0].OUTCLR.reg = PORT_PA06; PORT->Group[0].OUTCLR.reg = PORT_PA07;   // настраиваем пин силового ключа в режим выхода pinMode(MOSFET_PIN, OUTPUT); // подаём низкий уровень на силовой ключ digitalWrite(MOSFET_PIN, LOW); }   void loop() { // если на выходе датчика логический 0 if (!digitalRead(ISB_PIN)) { // разрешаем прерывание по таймеру TC3 NVIC_EnableIRQ(TC3_IRQn); // подаём высокий уровень на силовой ключ digitalWrite(MOSFET_PIN, HIGH); // вызываем дважды функцию воспроизведения трека playMusic(); playMusic(); // запрещаем прерывание по таймеру TC3 NVIC_DisableIRQ(TC3_IRQn); // подаём низкий уровень на силовой ключ digitalWrite(MOSFET_PIN, LOW); } }   void playMusic() { // начинаем работу с библиотекой AudioZero // выставляем частоту воспроизведения AudioZero.begin(2*44100); // открываем wave-файл с карточки microSD File myFile = SD.open("scream.wav"); // если файл открывается, проигрываем его if (myFile) { AudioZero.play(myFile); } // прекращаем работу с библиотекой AudioZero AudioZero.end(); }   void timerInit() { // тактирование таймера TC3 GCLK->CLKCTRL.reg = GCLK_CLKCTRL_CLKEN|GCLK_CLKCTRL_GEN_GCLK0|GCM_TCC2_TC3; // 16 битный счётчик и предделитель 64 TC3->COUNT16.CTRLA.reg |= TC_CTRLA_MODE_COUNT16|TC_CTRLA_PRESCALER_DIV64; // прерывание по переполнению TC3->COUNT16.INTENSET.reg |= TC_INTENSET_OVF; // запуск счётчика TC3->COUNT16.CTRLA.reg |= TC_CTRLA_ENABLE;   // настройка прерывания на таймер 3 NVIC_DisableIRQ(TC3_IRQn); NVIC_ClearPendingIRQ(TC3_IRQn); NVIC_SetPriority(TC3_IRQn, 40); NVIC_EnableIRQ(TC3_IRQn); }   // обработчик прерывания void TC3_Handler(void) { // инвертируем состояние светодиодов PORT->Group[0].OUTTGL.reg = PORT_PA06; PORT->Group[0].OUTTGL.reg = PORT_PA07; // сбрасываем флаг прерывания TC3->COUNT16.INTFLAG.reg |= TC_INTFLAG_OVF; }

Демонстрация работы устройства

Что дальше?

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

Если у вас вдруг не оказалось платформы Arduino M0, вы можете использовать, к примеру, Arduino Uno, добавить к ней Music Shield и, немного изменив скетч, воспроизводить музыку с плеера.

wiki.amperka.ru