Дигитайзер на arduino uno

Дигитайзер на arduino uno

Предисловие

В данной статье я хотел бы поделиться своим опытом работы с сенсорным дисплеем и ардуино уно с аппаратной стороны и с Node.js с программной стороны компьютера.

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

Так как я веб разработчик, то соответственно на стороне ПК я решил использовать веб технологии, но с таким же успехов можно использовать все что угодно. Я расскажу и покажу как передавать на арудуино через serial port данные в простом и удобном формате JSON.

Аппаратная часть

Нам потребуется:

  • Arduino UNO
  • Touch TFT LED display 320 x 480 ( или меньшее, так как максимальное разрешение для 32 кбайт памяти Ардуинки)

Экран с 9.7 см x 6.9 см , 3.95 дюйма был заказан на aliexpress. Обрабатывает также силу нажатия, что мы потом будем использовать для отрисовки. Занимает все порты, так что если нужны будут, то придется параллелить и так красиво на ардуино не “встанет” . Экран заточен под арудино, поэтому он легко становится, из-за высокого разрешения, он занимает все пины.

Необходимые библиотеки для работы с дисплеем и тачем:

  • Adafruit-GFX-Library
  • MCUFRIEND_kbv
  • TFTLCD
  • Touch-Screen-Library

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

Основная идея состоит в том, что в левом углу мы отрисовываем 6 квадратов цветов, при нажатии на которые выбирается соответственный цвет. При касании “рабочей” области рисуем круг с радиусом в зависимости от силы нажатия. При очень сильном нажатии – чистим экран. При каждом касании экрана формируем json и отправляем его на ПК.

Собственно код основной функции с  комментариями(весь код прикреплен файлом и его можно найти по ссылке в репозитории):

void loop()
{ uint16_t xpos, ypos; //координаты экрана tp = ts.getPoint(); //tp.x, tp.y являются значения АЦП // мы имеем некоторое минимальное давление, которое считаем “действительным” // если 0 то нет касания if (tp.z > MINPRESSURE && tp.z < MAXPRESSURE) { // если не портретный режим if (SwapXY != (Orientation & 1)) SWAP(tp.x, tp.y); //здесь нужно было вывести свои мат функции зависимости, т.к. считывается значения АЦП  //а графическая библиотека рисует по координатам соответствующим от 0 до 320 по оси x  // и 0 до 480 по оси Y xpos = -80*(tp.x -516) /23 + 320; ypos = -5*(tp.y -187)/7 +480; ypos-= 55; // если мы "зашли" на полоску цветов if (ypos < BOXSIZE) { //нарисовать белую рамку на выбранном цвете oldcolor = currentcolor; if (xpos < BOXSIZE) { currentcolor = RED; // запоминаем для дальнейшей отрисовки новый цвет colorForSerial = 0;// запоминаем код для передачи на пк tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 2) { currentcolor = YELLOW; colorForSerial = 1; tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 3) { currentcolor = GREEN; colorForSerial = 2; tft.drawRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 4) { currentcolor = CYAN; colorForSerial = 3; tft.drawRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 5) { currentcolor = BLUE; colorForSerial = 4; tft.drawRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, WHITE); } else if (xpos < BOXSIZE * 6) { currentcolor = MAGENTA; colorForSerial = 5; tft.drawRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, WHITE); } if (oldcolor != currentcolor) { убираем предыдущую белую рамку if (oldcolor == RED){ tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED); return; } if (oldcolor == YELLOW){ tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW); return; } if (oldcolor == GREEN){ tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN); return; } if (oldcolor == CYAN){ tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN); return; } if (oldcolor == BLUE){ tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE); return; } if (oldcolor == MAGENTA){ tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA); return; } } } if (((ypos - PENRADIUS) > BOXSIZE) && ((ypos + PENRADIUS) )) { tft.fillCircle(xpos, ypos, getPressure(tp.z), currentcolor); // каждое нажатие рисует круг, чем сильнее нажатие, тем больше радиус String jsonString = “{“x”:””; // формируем json строку вида {x:1,:y:2,z:3,color:2} jsonString += xpos; jsonString +=””,”y”:””; jsonString += ypos; jsonString +=””,”z”:””; jsonString += getPressure(tp.z); jsonString += “”,”c”:””; jsonString += colorForSerial; jsonString +=””}
“; Serial.print(jsonString); // отправляем по serial port'у } // при очень сильном нажатии очищаем экран if (tp.z { //ищем в в массиве запрошенный порт if(item === nameOfPort){ listenSerialport = new sp.SerialPort(nameOfPort,{baudRate:19200,parser: sp.parsers.readline('
')}); // создаем listenSerialport.on('open', function () { console.log(“OPEN port” + nameOfPort); }); listenSerialport.on('data', function (data) { // при приходе данных с порта try{ var serialData = JSON.parse(“” +data); socket.emit('data',serialData); // посылаем их клиенту в браузер } catch (SyntaxError){ //обязательно ловим здесь исключения, потому console.log(“Error”);//что бывают неприятные артефакты, когда приходит не вся json строка , а только часть } }); } }); res.send({status:”OK”}); } else if(!res.finished) res.send({status:”ERROR”}); }); sp.list(function(err, ports) { // получаем список последовательных портов на компьютере ports.forEach((item)=>{ serialports.push(item.comName); }); console.log(serialports);
});

В принципе все достаточно просто и очевидно. Никакой особенной логики тут нету. Запускается командой  node server.js. (До этого необходимо собрать клиентскую часть)

Клиентская часть  (React,Webpack,Paper.js):

Начнем с зависимостей:

package.json:

Источник: http://cxem.net/arduino/arduino190.php

Самая лучшая arduino uno для ценителей и коллекционеров

Подписка

  • Магазины Китая
  • ITEAD.CC
  • Радиотовары
  • Игрушки и подарки
  • Пункт №18

Самая продуманная ардуино уно, которую я когда-либо держал в руках.

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

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

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

упаковка

Теперь о плате, в нее чертовски удобно подключать сервоприводы, если раньше для этого пользовался шилдом, то теперь стало немного прощеА самое приятное, что плата меньше греется благодаря выполненному на плате dc dc преобразователю. Благодаря ему же нагрузку по току на плату можно увеличить, предел выяснять не стал, поскольку плата мне дорога не только как «рабочая лошадка» но и как экспонат коллекции. НО, 4 мотора с редуктором, что обычно ставят на ардуиновские акриловые шасси плата питает без напряга и ощутимого нагрева, хотя раньше для этого мне приходилось использовать отдельный дс-дс из 12В в 5В, т.е. запитать драйвер двигателе можно без проблем, да и входное напряжение можно подавать до 20В вместо 12. Еще очень кстати сделали отдельные выводы для I2C и UART с питанием, теперь без макетки к I2C можно подцепить на одно устройство больше.

Фото платы поближе

USB-UART переходник выполнен на второй атмеге, что делает плату наиболее универсальной в плане подключения к ПК, я имею в виду линукс и мак операционные системы.ДС-ДС, для тех, кто понимает в железе больше меняатмега328 — душа и сердце ардуино
Теперь о том, как эту радость получить. Как регистрироваться на сайте я рассказывать не буду, но об одном моменте предупрежу — это доставка, она не очень гуманная.Вот пример одного из моих заказов
Некоторые товары у продавца, например все те же дисплеи вообще почти не имеют достойных аналогов, к тому же пошла уже вторая ревизия с часами реального времени и восемью ногами gpio на борту, т.е. тенденция к развитию есть. В качестве особенностей платы: крепление аналогично оригиналу, но габариты чуть шире за счет возможности впаять ряды дублирующих выводов.

Вот для сравнения еще один не самый распространенный клон, обзор на него я как-то уже делал

На сайте производителя есть подробная документация:

Схема

Документ с полным описанием
Вики Теперь кратко по всем плюсам и минусам: + Полноценная atmega16 в качестве usb-uart переходника, что обеспечивает намного большую стабильность и кросплатформенность платы. + Дополнительные выводы для I2C + питание + Дополнительные выводы UART + питание + Дублируются все остальные выводы в паре с питанием, что очень удобно для подключения всяческих датчиков и сервоприводов + Встроенный dc-dc преобразователь, который дает больший диапозон по питанию и больший максимальный ток при минимальном нагреве части питания + Качество сборки, непропаянных мест или остатков флюса я не заметил -+ Габариты платы чуть превышают стандартные, на совместимость не влияет — Цена +Не знаю пользуется кто прогой для моделирования ардуино FRITZING, но вся продукция по данной тематике от этого магазина поддерживается, библиотеки лежат на вики производителя. Вот такая интересная плата, Что касается Купленных на свои кровные дисплеев, то брал я их для дела, поэтому вероятнее всего будет не обзор, а применение на практике. Всем удачи!

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

Планирую купить +40 Добавить в избранное Обзор понравился +13 +37

Источник: https://mysku.ru/blog/china-stores/42464.html

Arduino.ru

Arduino Uno контроллер построен на ATmega328 (техническое описание, pdf).

Платформа имеет 14 цифровых вход/выходов (6 из которых могут использоваться как выходы ШИМ), 6 аналоговых входов, кварцевый генератор 16 МГц, разъем USB, силовой разъем, разъем ICSP и кнопку перезагрузки.

Для работы необходимо подключить платформу к компьютеру посредством кабеля USB, либо подать питание при помощи адаптера AC/DC или батареи.

В отличие от всех предыдущих плат, использовавших FTDI USB микроконтроллер для связи по USB, новый Ардуино Uno использует микроконтроллер ATmega8U2 (техническое описание, pdf).

“Uno” переводится как один с итальянского и разработчики тем самым намекают на грядущий выход Arduino 1.0. Новая плата стала флагманом линейки плат Ардуино. Для сравнения с предыдущими версиями можно обратиться к полному списку плат Arduino. 

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

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

Схема и исходные данные

Файлы EAGLE: arduino-duemilanove-reference-design.zip

Принципиальная схема: arduino-duemilanove-schematic.pdf

Питание

Arduino Uno может получать питание через подключение USB или от внешнего источника питания. Источник питания выбирается автоматически.

Внешнее питание (не USB) может подаваться через преобразователь напряжения AC/DC (блок питания) или аккумуляторной батареей. Преобразователь напряжения подключается посредством разъема 2.1 мм с центральным положительным полюсом. Провода от батареи подключаются к выводам Gnd и Vin разъема питания.

Платформа может работать при внешнем питании от 6 В до 20 В. При напряжении питания ниже 7 В, вывод 5V может выдавать менее 5 В, при этом платформа может работать нестабильно. При использовании напряжения выше 12 В регулятор напряжения может перегреться и повредить плату. Рекомендуемый диапазон от 7 В до 12 В.

Выводы питания:

  • VIN. Вход используется для подачи питания от внешнего источника (в отсутствие 5 В от разъема USB или другого регулируемого источника питания). Подача напряжения питания происходит через данный вывод.
  • 5V. Регулируемый источник напряжения, используемый для питания микроконтроллера и компонентов на плате. Питание может подаваться от вывода VIN через регулятор напряжения, или от разъема USB, или другого регулируемого источника напряжения 5 В. 
  • 3V3. Напряжение на выводе 3.3 В генерируемое встроенным регулятором на плате. Максимальное потребление тока 50 мА.
  • GND. Выводы заземления.

Память

Микроконтроллер ATmega328 располагает 32 кБ флэш памяти, из которых 0.5 кБ используется для хранения загрузчика, а также 2 кБ ОЗУ (SRAM) и 1 Кб EEPROM.(которая читается и записывается с помощью библиотеки EEPROM).

Входы и Выходы

Каждый из 14 цифровых выводов Uno может настроен как вход или выход, используя функции pinMode(), digitalWrite(), и digitalRead(), . Выводы работают при напряжении 5 В. Каждый вывод имеет нагрузочный резистор (по умолчанию отключен) 20-50 кОм и может пропускать до 40 мА. Некоторые выводы имеют особые функции:

  • Последовательная шина: 0 (RX) и 1 (TX). Выводы используются для получения (RX) и передачи (TX) данных TTL. Данные выводы подключены к соответствующим выводам микросхемы последовательной шины ATmega8U2 USB-to-TTL.
  • Внешнее прерывание: 2 и 3. Данные выводы могут быть сконфигурированы на вызов прерывания либо на младшем значении, либо на переднем или заднем фронте, или при изменении значения. Подробная информация находится в описании функции attachInterrupt().
  • ШИМ: 3, 5, 6, 9, 10, и 11. Любой из выводов обеспечивает ШИМ с разрешением 8 бит при помощи функции analogWrite().
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Посредством данных выводов осуществляется связь SPI, для чего используется библиотека SPI.
  • LED: 13. Встроенный светодиод, подключенный к цифровому выводу 13. Если значение на выводе имеет высокий потенциал, то светодиод горит. 

На платформе Uno установлены 6 аналоговых входов (обозначенных как A0 .. A5), каждый разрешением 10 бит (т.е. может принимать 1024 различных значения). Стандартно выводы имеют диапазон измерения до 5 В относительно земли, тем не менее имеется возможность изменить верхний предел посредством вывода AREF и функции analogReference(). Некоторые выводы имеют дополнительные функции:

  • I2C: 4 (SDA) и 5 (SCL). Посредством выводов осуществляется связь I2C (TWI), для создания которой используется библиотека Wire.

Дополнительная пара выводов платформы:

  • AREF. Опорное напряжение для аналоговых входов. Используется с функцией analogReference().
  • Reset. Низкий уровень сигнала на выводе перезагружает микроконтроллер. Обычно применяется для подключения кнопки перезагрузки на плате расширения, закрывающей доступ к кнопке на самой плате Arduino.

Обратите внимание на соединение между выводами Arduino и портами ATmega328.

Связь

На платформе Arduino Uno установлено несколько устройств для осуществления связи с компьютером, другими устройствами Arduino или микроконтроллерами. ATmega328 поддерживают последовательный интерфейс UART TTL (5 В), осуществляемый выводами 0 (RX) и 1 (TX).

Установленная на плате микросхема ATmega8U2 направляет данный интерфейс через USB, программы на стороне компьютера “общаются” с платой через виртуальный COM порт.

Прошивка ATmega8U2 использует стандартные драйвера USB COM, никаких стороних драйверов не требуется, но на Windows для подключения потребуется файл ArduinoUNO.inf.  Мониторинг последовательной шины (Serial Monitor) программы Arduino позволяет посылать и получать текстовые данные при подключении к платформе.

Светодиоды RX и TX на платформе будут мигать при передаче данных через микросхему FTDI или USB подключение (но не при использовании последовательной передачи через выводы 0 и 1). 

Библиотекой SoftwareSerial возможно создать последовательную передачу данных через любой из цифровых выводов Uno.

ATmega328 поддерживает интерфейсы I2C (TWI) и SPI. В Arduino включена библиотека Wire для удобства использования шины I2C.

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

Платформа программируется посредством ПО Arduino. Из меню Tools > Board выбирается «Arduino Uno» (согласно установленному микроконтроллеру). Подробная информация находится в справочнике и инструкциях.

Микроконтроллер ATmega328 поставляется с записанным загрузчиком, облегчающим запись новых программ без использования внешних программаторов. Связь осуществляется оригинальным протоколом STK500.

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

Автоматическая (программная) перезагрузка

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

Одна из линий DTR микросхемы ATmega8U2, управляющих потоком данных (DTR), подключена к выводу перезагрузки микроконтроллеру ATmega328 через 100 нФ конденсатор. Активация данной линии, т.е. подача сигнала низкого уровня, перезагружает микроконтроллер.

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

Функция имеет еще одно применение. Перезагрузка Uno происходит каждый раз при подключении к программе Arduino на компьютере с ОС Mac X или Linux (через USB). Следующие полсекунды после перезагрузки работает загрузчик.

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

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

На Uno имеется возможность отключить линию автоматической перезагрузки разрывом соответствующей линии.   Контакты микросхем с обоих концов линии могут быть соединены с целью восстановления. Линия маркирована «RESET-EN». Отключить автоматическую перезагрузку также возможно подключив резистор 110 Ом между источником 5 В и данной линией.

Токовая защита разъема USB

В Arduino Uno встроен самовостанавливающийся предохранитель (автомат), защищающий порт USB компьютера от токов короткого замыкания и сверхтоков.

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

 Предохранитель срабатыват при прохождении тока более 500 мА через USB порт и размыкает цепь до тех пока нормальные значения токов не будут востановлены.

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

Длина и ширина печатной платы Uno составляют 6.9 и 5.3 см соответственно. Разъем USB и силовой разъем выходят за границы данных размеров. Четыре отверстия в плате позволяют закрепить ее на поверхности. Расстояние между цифровыми выводами 7 и 8 равняется 0,4 см, хотя между другими выводами оно составляет 0,25 см.

Источник: http://arduino.ru/Hardware/ArduinoBoardUno

8-битный компьютер с BASIC и VGA-выходом на Arduino

C помощью Arduino можно собрать 8-битный ретро-компьютер с Basic (похожий на ZX Spectrum) с выводом цветного изображения на VGA-монитор. Кроме того, этот проект можно использовать как простой способ вывода текстовых сообщений на монитор.

Сама по себе, идея использовать Arduino для создания компьютера с BASIC не нова, но насколько я знаю, все они не поддерживают вывод цветного изображения. В некоторых проектах использовались LCD-мониторы, а в других — библиотека TVout, которая выводит чёрно-белое изображение.

Кроме того, многие из этих проектов требуют дополнительные модули и специальные платы расширения. Тут же нужно всего-то иметь два Arduino, несколько резисторов, плюс разъёмы для PS/2 клавиатуры и VGA-монитора.

Для проекта нужно две платы Arduino: один будет основным (или «мастером»), в нём работает интерпретатор Tiny Basic Plus (это порт Tiny Basic на языке Си, адаптированный для поддержки Arduino). Также этот Arduino управляет PS/2 клавиатурой. Вывод из первого Arduino через последовательный порт отправляется на второй Arduino, который с помощью библиотеки VGAx генерирует VGA-сигнал.

Программу на языке BASIC в собранный нами компьютер можно будет ввести с помощью PS/2 клавиатуры, а результат можно будет посмотреть на VGA-мониторе: разрешение получившегося изображения 24 столбца на 10 строк, размер символов — 5х6 пикселей, доступно 4 цвета. После введения программы, её можно будет сохранить в энергонезависимой памяти самого Arduino, а также код программы предусматривает управление I/O пинами Arduino.

1. Подключаем основной Arduino с интерпритатором TinyBasic и с PS/2 клавиатурой

TinyBasic Plus и библиотека VGAx работают с Arduino IDE 1.6.4.
Если у вас уже установлена более новая версия, то лучшее решение — загрузить эту версию с официального сайта в формате .

zip, и распаковать в отдельную папку. Здесь можно загрузить эту версию для Windows.

Потом нам понадобится библиотека PS2keyboard, её можно загрузить отсюда.

После скачивания просто распакуйте архив, и скопируйте его содержимое в «arduino-1.6.4libraries».

Дальше, загрузите файл TinyBasicPlus_PS2_VGAx.ino, и прошейте его в основной Arduino.

Это версия обычного TinyBasic Plus, где была добавлена поддержка библиотеки PS/2.

Больше информации о TiniBasic Plus и руководства (на английском языке) можно найти тут.

Если на этом этапе нет проблем (в том числе, проблем с совместимостью), то Tiny Basic будет автоматически запущен при включении Arduino. И его можно будет протестировать с помощью последовательного порта на вашем ПК. Для этих целей я использую PuTTY, но вы можете использовать и другую подобную программу, по вашему вкусу.

В настройках нужно правильно установить COM-порт (тот же, что используется в Arduino), и скорость передачи = 4800.

И тут уже можно протестировать нашу систему, набрав какую-нибудь программу на Basic с клавиатуры вашего ПК (позже мы подключим PS/2 клавиатуру напрямую к Arduino).

Для примера, можно набрать:10 PRINT “Hello, World!”
20 GOTO 10
RUNПрервать бесконечный цикл этой программы можно с помощью комбинации клавиш Ctrl+C (это не сработает, если мы будем делать это с клавиатуры PS/2). Теперь подключим PS/2 клавиатуру.

2. Подключаем PS/2 клавиатуру к основному Arduino

Информация и библиотека были взяты из этого материала. По существу, вам нужно соединить следующие четыре контакта: Data клавиатуры к Arduino pin 8, IRQ (clock) клавиатуры к Arduino pin 3; а также подключить землю (GND) и питание +5V, соответственно. Я использовал PS/2 разъём cо старой нерабочей материнской платы, его можно легко сдуть с помощью фена. Распиновка PS/2 разъема есть на рисунке:

3. Загружаем библиотеку VGAx и код во второй Arduino, и соединяем его с основным

Для начала, загрузите код VGAx-PC.ino и скопируйте его к себе на компьютер в папку с таким же именем.

Потом — загрузите с GitHub бибилиотеку VGAx. Её нужно поместить в подпапку «libraries» Arduino IDE.

ВАЖНО! Эта бибилиотека работает с Arduno IDE 1.6.4 и может быть не совместима с другими, более новыми версиями.

Теперь загрузите VGAx-PC.ino во второй Arduino (я тестировал на Arduino Nano, но с Arduino Uno тоже не должно быть проблем).

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

Для этого нужно:

  • два Arduino Uno Rev.3, или два Arduino Nano 3.x (на основе ATmega328)
  • разъем DSUB15, т.е. гнездо VGA или кабель с таким гнездом, который не жалко отрезать
  • резисторы: 2 на 68 Ом и 2 на 470 Ом
  • разъем PS2
  • провода
  • необязательно: макетная плата

Источник: https://habr.com/post/348380/

Arduino Uno. Устройство и применение. Особенности. Плюсы и минусы

Когда кто-нибудь говорит об Ардуино, он, скорее всего, имеет ввиду электронную монтажную плату, которая называется Arduino Uno.

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

Ардуино можно сравнить с материнской платой компьютера, которая также имеет процессор, находящийся под кулером. Материнская плата с процессором выполняет те же функции, что и Arduino Uno. К ней подключаются другие устройства: дисплей, дисководы, жесткие диски, и вся остальная периферия. Также можно подключить много различных устройств.

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

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

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

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

Конструктивные особенности  arduino Uno

Разберем устройство на наиболее популярной модели Arduino Uno. Она является ярким представителем этого семейства плат.

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

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

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

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

Выводы устройства

У Arduino не все выводы одинакового типа. Имеются аналоговые и цифровые выводы. Разница заключается в том, что на аналоговых выводах диапазон значений может быть разделен от единицы до ноля на несколько маленьких участков.

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

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

Сфера применения

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

В настоящее время в мире наблюдается «ардуиномания». Этому миниатюрному устройству посвящено множество статей и форумов в интернете.

Вот некоторые популярные области использования этого устройства:

  • Система «умный дом».
  • Всевозможные датчики.
  • Робототехника.
  • Автоматические вентиляторы.
  • Светофоры.
  • Охранные системы.
  • Мини метеостанции.
  • Мультитестеры.
  • Квадрокоптеры.

Достоинства и недостатки

В работе имеются как достоинства так и недостатки. Рассмотрим их подробнее.

Преимущества

  • Открытые схемы оборудования и спецификации. Arduino Uno выполнен на популярных микропроцессорах Amtel и ATMEGA. Квалифицированные специалисты могут спроектировать на основе имеющихся схем собственный вариант модуля для определенных задач.
  • Открытый код программы. Кодирование программы может расширяться на платформе С++.
  • Простая и удобная среда программирования. Оболочка программы является легкой в применении для начинающих программистов, однако имеет достаточную гибкость для работы профессионалов. Она наиболее удобна для среды обучения студентов, которым легко будет разобраться в работе этой платформы.
  • Программирование, подключение и питание выполняется одним USB-кабелем, либо кабелем, имеющим адаптер на микросхеме.
  • Возможность функционирования на различных видах систем. Программное обеспечение успешно функционирует на Линукс, Макинтош, Ява и других системах, так как имеет открытый код. Однако наиболее популярной системой для Ардуино стала система Windows.
  • Приемлемая цена. В больших городах Arduino Uno можно приобрести по цене менее 1000 рублей. Это цена за готовое законченное устройство, не требующее вспомогательного оборудования, дорогих программаторов, платных программ.

Недостатки

  • Слишком убогая оболочка программы. Это очень неудобный редактор кода. Для программирования придется переходить на более удобный редактор, но кодовый редактор Arduino IDE все равно необходимо оставлять открытым.
  • Малая частота микропроцессора. Нет возможности ее изменить.
  • Малый объем памяти для сохранения программ.

Похожие темы:

Источник: https://electrosam.ru/glavnaja/slabotochnye-seti/oborudovanie/arduino-uno/

Урок 13. Подключение клавиатуры 4*4 и пьезоизлучателя к Arduino

Теперь научимся подключать устройство ввода к Ардуине. В этом примере разберемся, как подключить мембранную клавиатуру 4*4

Данный пример будет выполнять две задачи:

  1. Первая задача: определяет, какая из клавиш была нажата на клавиатуре и передать информацию по сериал порту на компьютер, где в “мониторе последовательного порта “.
  2. Вторая задача: при каждом нажатии клавиш издавать звуковой сигнал. У каждой клавиши звуковой сигнал будет разный.

В данном уроке нам понадобится:

Для реализации проекта нам необходимо установить библиотеки:

  • Библитетка keypad для клавиатуры 4×4

Сборка:

1) Клавиатуру удобнее всего подключить к Ардуине проводками Папа-Папа.

Контакты на клавиатуре отсчитываются слева на право.

Клавиатура 4*4Arduino (uno)
Контакт 1 pin 11
Контакт 2 pin 10
Контакт 3 pin 9
Контакт 4 pin 8
Контакт 5 pin 7
Контакт 6 pin 6
Контакт 7 pin 5
Контакт 8 pin 4

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

byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4};

2) Звуковой сигнал будет издаваться с помощью зуммера, его подключаем следующим образом:

ЗуммерArduino
GND GND
IO pin 3
VCC 5V или 3V

Контакт Pin3 так же может быть изменен на любой удобный вам цифровой выход. Настраивается здесь:

tone(3, (int)key*10, 300); // 3 – это и есть номер цифрового порта

Скетч:

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

#include // Подключаем библиотеку const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'}
}; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){ Serial.begin(9600);
}
void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); // Передаем название нажатой клавиши в сериал порт tone(3, (int)key*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд }
}

Скачать скетч можно по этой ссылке

Видео:

Источник: https://lesson.iarduino.ru/page/urok-13-podklyuchenie-klaviatury-4-4-i-pezoizluchatelya-k-arduino

ARDUINO UNO ДЛЯ НАЧИНАЮЩИХ

Источник: http://radioskot.ru/publ/nachinajushhim/arduino_uno_dlja_nachinajushhikh/22-1-0-1055

Arduino — описание выводов на примере Arduino UNO

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

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

На рисунке ниже приведены платы Arduino UNO и Arduino MEGA:

Arduino MEGA совместима с версией UNO в области основных выводов. Дополнительные выводы MEGA расположены отдельно, что позволяет сохранить совместимость с Arduino UNO.

Распиновка Arduino Uno

Рядом с USB разъемом есть кнопка “RESET”. Он позволяет вернуться к исходному состоянию программы, которое бывает при включении питания. После нажатия кнопки “RESET” данные в ОЗУ микроконтроллера сбрасываются и Arduino начинает выполнять программу с самого начала.

Интерфейс USB позволяет программировать Arduino и взаимодействовать и поддерживать связь с Serial монитором. Кроме того, непосредственно через USB вы можете запитать плату.

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

Для этого в Arduino имеет разъем для подключения внешнего источника питания. Напряжение питания может составлять от 5 до 20 В. Фактически, оптимальное напряжение должно находиться в диапазоне 7-12 В.

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

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

Arduino оснащена одним или двумя шестиконтактными разъемами, которые используются для программирования микроконтроллера. Разъемы обозначаются как ICSP1 и ICSP2.

Разъем ближе к основному микроконтроллеру позволяет загружать BOOTLOADER, а разъем ближе к USB-порту позволяет загружать программу USB-UART преобразователя.

Второй разъем используется только в платах Arduino, где в качестве USB-UART преобразователя используется микроконтроллер Atmega. Если установлен FT232, то второй разъем на плате отсутствует.

Плата Arduino оснащена группой, по крайней мере, из 4 светодиодов. Два из них помечены как «RX» и «TX» расположены рядом с микросхемой FT232 или Atmega.

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

По их свечению вы можете визуально определить, происходит ли передача данных (программирование) или нет.

Еще один светодиод, обозначенный как «ON», является индикатором питания платы. Последний светодиод, как правило, – это светодиод, анод которого подключен к выводу 13, а катод к минусу питания. Поэтому высокий логический уровень на выводе 13 приведет к включению светодиода, в то время как низкий уровень приведет к его выключению.

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

Левая часть (POWER) обеспечивает доступ к питанию и управлению:

  • IOREF – указывает каким напряжением питается процессор Arduino (это важно для некоторых шилдов)
  • RESET – сброс Arduino
  • 3V3 – система питание модулей, требующих 3,3 В
  • 5V – система питания TTL
  • GND – масса
  • GND – масса
  • VIN – напряжение питания от внешнего источника

Правая часть (ANALOG IN) обеспечивает считывание аналоговые сигналов. Аналого-цифровой преобразователь (АЦП) позволяет считывать значения напряжения от 0 до AREF или 0…5 В.

Считанное значение может быть 8-битным или 10-битным. Аналоговые входы подписаны как A0, A1, A2, A3, A4, A5. Несмотря на их основное предназначение, выводы A0 – A5 так же могут быть использованы как цифровые входы или выходы.

Верхний ряд контактов также разделен на две части. Правая часть пронумерована от 0 до 7, левая от 8 до 13. Этот ряд содержит контакты цифрового входа/выхода.

Контакты 0 и 1 являются специальными выводами, на которые дополнительно выведены линии последовательного порта (RX и TX). Их можно использовать для последовательной связи с другой платой.

Контакты 3, 5, 6, 9, 10, 11 обозначаются как «~» или PWM. Они могут работать в режиме ШИМ, иногда называемым аналоговым выходом. Конечно же, это не реальные аналоговые выходы. Они только позволяют контролировать ширину импульса, которая часто используется в цифровой электронике для изменения «аналогового» сигнала.

И последние два вывода – это GND и AREF, которые используется для подключения внешнего опорного напряжения для аналого-цифрового преобразователя.

В итоге Arduino UNO имеет 14 цифровых линий входа/выхода и 6 аналоговых входов (которые могут служить в качестве цифровых входов/выходов).

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

Допустимое входное напряжение не должно превышать 5В или 3,3В (у плат с питанием от 3,3В). В случае если необходимо обработать сигнал напряжением больше 5В (3,3В для Arduino Pro Mini), то следует воспользоваться делителем напряжения.

Нагрузочная способность выходов при питании от 5 В составляет 40мА, при питании от 3,3 В – 50 мА. Это означает, что к одному выходному контакту можно подключить, например, до двух светодиодов, предполагая, что рабочий ток каждого из них составляет 20 мА.

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

Источник: http://www.joyta.ru/10674-arduino-opisanie-vyvodov-na-primere-arduino-uno/

Ссылка на основную публикацию
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}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

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

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

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

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

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

Создание всей системы в целом невозможно без знания электроники.

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

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

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

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

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

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

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

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

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

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

Кроме приведенных выше вариантов, существует и третий путь – использование вычислительной платформы Arduino. Ее основой является специальная плата с микроконтроллером, а также специализированная среда разработки Wiring, созданная на основе языка C++.

Программное обеспечение полностью бесплатное, его можно скачать с официального сайта производителя. Имеются версии для всех основных операционных систем Windows, Linux, MacOS.

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

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

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

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

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

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

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

Нам важно как тот или иной блок реагирует на определенные сигналы и воздействия, но не принципиально его внутренне устройство. Фактически узлы Arduino являются, с точки зрения кибернетики, «черными ящиками».

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

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

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

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

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

Описание аппаратной части Arduino

Физически Arduino представляет собой небольшую печатную плату. Самой распространенной на данный момент версией является Arduino UNO с габаритами 75×55 мм.

На плате располагается микроконтроллер ATMega328, этот микроконтроллер имеет 2 кб оперативной памяти и 32 кб памяти флэш-памяти для программ.

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

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

программное обеспечение Arduino играет роль «защиты от дурака», защищая микроконтоллер от неверных действий начинающего пользователя. Кварцевый резонатор задает тактовую частоту работы микроконтроллера 16 МГц. Так же в микроконтоллере имеется внутренний кварцевый резонатор на частоту 8 МГц, но его обычно не используют.

Для связи с компьютером на плате имеется разъем USB-BF. На платах разных производителей в этой части возможны существенные различия, кроме USB-BF автору встречались платы с micro-USB, на старых и самодельных платах, скорее всего, будет 9-контактный разъем COM-порта.

На плате Arduino UNO установлен специальный преобразователь, поэтому подключенная к компьютеру плата, определяется как новый COM-порт.

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

Подключенная к компьютеру плата Arduino питается через USB-порт. Если плата используется отдельно, то необходимо подключить к плате блок питания с выходным постоянным напряжением 7-12 В, разъем питания, вероятно, типа DS-210.

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

В автономных условиях подходит 9 В батарея типа «Крона», или две последовательно соединенные батареи типа 3R12 (3336).

На плате располагается 14 цифровых портов ввода-вывода, 6 из которых поддерживают широтно-импульсную модуляцию (помечены на плате знаком «~»).

Кроме цифровых на плате есть 6 аналоговых портов. Аналоговые порты подключены в 10 битному аналогово-цифровому преобразователю, при необходимости их также можно использовать в качестве цифровых портов. 

На плате имеются четыре светодиода – индикатор питания (обозначен, как ON), светодиод, подключенный к 13 порту (L), два светодиода индикации обмена данными через последовательный порт (TX и RX). Также на плате имеется кнопка для перезагрузки микроконтроллера. 

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

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

Шилды позволяют подключать к Arduino электродвигатели, обеспечивают выход в компьютерные сети по протоколу Ethernet или WiFi, передачу информации по сети сотовой связи GSM, и выполняют многие другие функции. Для работы с такими платами существуют готовые программные библиотеки.

Плата Arduino UNO

Плата Arduino UNO хорошо подходит для отладки программ на стадии разработки и настройки конструкций.

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

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

Для использования в готовых изделиях выпускаются платы ArdinoNano и ArdinoMini, они имеют меньшие физические размеры, и несколько меньшую стоимость. Эти платы совместимы программно с Arduino UNO, но не позволяют непосредственно подключать к ним шилды.

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

ArdinoMini – еще более уменьшена, по сравнению с ArdinoNano, на плате отсутствует разъем для прямого подсоединения к компьютеру, для программирования требуется специальный переходник.

Если возможностей Arduino UNO недостаточно, можно применить расширенную версию ArdinoMega. Эта плата имеет расширенные возможности 54 цифровых порта из них 15 поддерживают ШИМ,16 — аналоговых портов, 128 кб (в поздних версиях 256 кб) — флэш-памяти для программ, 8 кб оперативной памяти.

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

Основной стандарт плат Arduino, тоже изменялся со временем. Более подробно с различными версиями плат можно познакомиться на сайте разработчика. На данный момент самым современным вариантом является Arduino Leonardo. Однако на данный момент Arduino UNO распространена наиболее широко, так что в дальнейшем остановим свое внимание именно на Arduino UNO.

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

Вообще проект Ардуино полностью открытый, авторским правом охраняется только сам термин «Arduino», поэтому множество сторонних производителей выпускают свои конструкции: Freeduino, Japanino, Seeeduino, CraftDuino, Diavolino и т.п.

Существуют платы, как полностью повторяющие оригинальные, так и собственные разработки, часть из которых совместима с Arduino только программно, из-за того, что платы имеют отличную конфигурацию.

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

Если плата заявлена как копия Arduino UNO, то, скорее всего, все сказанное о Arduino UNO будет относиться и к ней, хотя конечно за конкретного китайского производителя поручиться нельзя.

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

Не смотря на сомнительное происхождение, ни каких нареканий к качеству самой платы автор предъявить не может. С вами был Denev.

   Форум по Ардуино