воскресенье, 4 декабря 2016 г.

Реверс мощного электродвигателя постоянного тока

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

Эта схема отличается от приведённой ранее в статье реверс электродвигателя постоянного тока тем что транзисторы в данной полевые с изолированным затвором и индуцируемым каналом. Каждый полумост состоит из двух транзисторов один из которых с каналом n проводимости а второй с каналом p проводимости, в идеале эти транзисторы должны быть комплементарными но опыт показывает что это не обязательно для работы схемы (см. видео ниже). Внутри каждого полевого транзистора есть паразитный диод но помимо них дополнительно поставлены быстродействующие диоды Шоттки 11DQ10 постоянный прямой ток у них небольшой но пиковый д.б. во многих случаях достаточным к тому же паралелльно им стоят внутренние паразипные диоды полевых транзисторов. Прежде чем подключать двигатель к данному драйверу убедитесь что транзисторы и диоды подходят по току и мощности иначе драйвер просто сгорит. Транзисторы можно поставить более мощные например IRF9540 вместо IRF9530 и IRF540 вместо IRF640. А также диоды например MBRF2060CT. Если мощности полевых транзисторов не хватает то их можно соединять параллельно (затвор на затвор сток на сток исток на исток), в отличии от биполярных, которые просто так параллельно соединять нельзя. Управляющие транзисторы можно поставить кт315 или лучше как на схеме bc547. Для длительной работы полевые транзисторы обязательно надо ставить на радиаторы, желательно медные и большие и обязательно на каждый транзистор нужен свой радиатор т.к. корпуса внутри соединены с каким либо выводом. Испытание с двигателем от дрели на холостом ходу данная схема прошла см. видео:

КАРТА БЛОГА (содержание)

воскресенье, 6 ноября 2016 г.

Защита от короткого замыкания

Для защиты источников постоянного напряжения с напряжением от 4.5В до 10В от короткого замыкания или перегрузки можно использовать устройство собранное по схеме:
Рисунок 1 - Устройство защиты от короткого замыкания

Последовательно с нагрузкой (Rнагр.) соединяется полевой транзистор VT1 и катушка L1. Диод VD1 нужен для сброса энергии катушки в момент когда транзистор VT1 закрывается, этот диод д.б. рассчитан на такой же ток который течёт в нагрузке но если индуктивность катушки будет небольшой то скачек тока будет короткий и поэтому достаточно будет диода для которого этот ток будет импульсный, известно что максимальный импульсный ток у диодов, как правило, больше максимального прямого постоянного тока. Выход датчика Холла подключен к инвертирующему выводу компаратора LM311. Катушку L1 надо установить так чтобы при увеличении тока через неё, магнитный поток становился таким чтобы напряжение на выходе датчика холла увеличивалось. Понять примерно как надо ориентировать катушку относительно датчика можно по картинке:
Рисунок 2 - Правильная ориентация катушки относительно датчика Холла

Если нужного эффекта не удалось добиться с первого раза то катушку можно перевернуть другой стороной к датчику или поменять полярность питания или повернуть сам датчик относительно катушки. Количество витков и диаметр провода катушки зависит от максимального и нормального токов нагрузки. Для больших токов дорожки и провода должны быть толстыми для того чтобы не перегореть.
 Работает схема так: при подаче питания на выходе компаратора устанавливается низкий уровень напряжения (т.к. транзистор внутри него открывается). При нажатии на кнопку SB1 напряжение на неинвертирующем входе компаратора увеличивается до напряжения питания и становиться больше напряжения на инвертирующем входе поэтому напряжение на выходе этого компаратора становиться высоким и открывается транзистор VT1, через нагрузку и катушку начинает идти ток. Когда в нагрузке возникает короткое замыкание или нагрузка становиться слишком большой увеличивается магнитная индукция катушки и на выходе датчика Холла увеличивается напряжение и когда оно становиться больше напряжения на неинвертирующем выводе компаратора (это напряжение установлено потенциометром) на выходе компаратора напряжение уменьшается до почти нуля и из за обратной связи оно также уменьшается на неинвертирующем выводе компаратора в следствии чего транзистор остаётся закрытым до тех пор пока снова не будет нажата кнопка.
 Если нужно устройство для защиты источника питания с напряжением больше 10В то схему на рисунке 1 можно дополнить стабилитроном или стабилизатором напряжения для питания управляющей части более низким напряжением:
Рисунок 3 - Устройство защиты от короткого замыкания с питанием более 10В



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

КАРТА БЛОГА (содержание)

воскресенье, 23 октября 2016 г.

Подключение raspberry pi к 3d принтеру

Удобство использования 3d принтера можно повысить если подключить к не нему специальный сервер. Сервер может управлять 3d принтером и передавать ему команды для печати в то время как персональный компьютер отключен. Также сервером можно управлять удалённо поэтому, в случае его применения, нет необходимости ставить 3d принтер рядом с персональным компьютером и поэтому принтер можно более удобно разместить в свободном месте, особенно это актуально при использовании самодельных громоздких 3d принтеров. Большинство 3d принтеров, особенно самодельных, можно переоборудовать для выполнения другой работы нежели печать из пластика - например лазерная гравировка. Если 3d принтер переоборудован в гравёр то появляется опасность нахождения в одной комнате с этим гравёром особенно если он самодельный или если он самостоятельно переоборудован. Опасность представляет лазерный луч который лишает человека зрения когда попадает ему на глаз, поэтому к этому надо отнестись очень серьёзно. Не все очки предназначенные для защиты от лазера могут от него защитить. Перенос гравёра в другую комнату (без окон) гарантированно защитит человека от лазерного луча а за работой гравёра можно наблюдать через веб камеру подключённую с серверу. Сервером может быть любой недорогой компьютер (с usb портом и др. необходимыми портами) на который можно установить специальную программу. Одной из таких программ является Repetier server. Подходящим компьютером может быть например Raspberry pi 3 (именно 3 т.к. у него имеется встроенный wifi который избавляет от необходимости подключать дополнительный wifi модуль или ethernet кабель). Raspberry pi 3 - это недорогой популярный одноплатный компьютер который часто используют как сервер, он простой, маленький и хорошо подходит для данной работы. Про настройку Raspberry PI 3 см. на странице "Raspberry PI 3 настройка и управление GPIO по WIFI". Подключить Raspberry PI 3 к 3d принтеру можно через тот же провод через который этот принтер подключается к персональному компьютеру. После данного подключения остаётся только установить Repetier server (на Raspberry PI) и настроить его. Есть и другие программы но в данной статье рассмотрим только эту. Для установки Repetier server подадим питание на Raspberry PI 3 и подождём пока он загрузиться после чего запустим на компьютере программу putty, введём ip адрес Raspberry PI 3 и нажмём кнопку "open"
Далее введём логин и нажмём клавишу "Enter" которая располагается на клавиатуре вашего персонального компьютера через который вы хотите соединиться с Raspberry pi. Логин по умолчанию "pi":
Далее введём пароль (при вводе он отображаться не будет но он всё равно вводиться когда вы нажимаете клавишы, зелёная штучка не двигается и кажется что ввода не происходит но всё это нужно чтобы ваш пароль никто не увидел и не воспользовался им в корыстных целях, бояться не надо, надо просто ввести пароль и нажать "Enter"). 
После ввода пароля нажмём клавишу "Enter". Пароль по умолчанию (т.е. если его не меняли) "raspberry".
После ввода пароля и успешного соединения с Raspberry PI введём команду для скачивания программы Repetier server "wget http://download.repetier.com/files/server/debian-armel/Repetier-Server-0.65.0-Linux.deb" (без кавычек)
Потом надо ввести команду для распаковывания "sudo dpkg -i Repetier-Server-0.65.0-Linux.deb"
После того как программа скачана и установлена можно зайти её в веб интерфейс через браузер на своём персональном компьютере, введя ip адрес Raspberry PI и через двоеточие номер порта 3344 в адресной строке и нажимая клавишу "Enter".
Далее необходимо настроить программу для вашего принтера, для этого нажмём кнопку "Add new printer"
в появившемся окне найдём текстовое поле в которое впишем название принтера (любое) после чего нажмём кнопку для перехода на следующий шаг
в верхнем поле выберем название прошивки 3d принтера. Если прошивка Marlin то выберем Marlin. В следующем поле выберем usb порт к которому подключен 3d принтер. Если к Raspberry PI 3 больше ничего не подключено то выбор будет только один. В следующем поле выберем скорость обмена данными, можно выбрать (точнее оставить по умолчанию) автоопределение этой скорости. Последнее поле - размер входного буфера можно оставить по умолчанию и нажать кнопку перехода на следующий шаг.
Выберем форму стола в соответствующем поле и размеры области печати. Если какие либо поля не понятны то можно оставить их как есть и настроить программу позже. После настройки нажмём кнопку для перехода на следующий шаг.
В первом поле выберем количество экструдеров, во втором диаметр пластикового шнура, последнее поле оставим по умолчанию и нажмём кнопку для перехода на следующий шаг.
Выберем подключен ли вентилятор (выбора только два Yes (да) и No (нет) варианта "не знаю" и др. подобных нет) дальше выберем подключена ли sd карта, последний переключатель (или поле) оставим по умолчанию и нажмём кнопку "Finish"
Нажмём кнопку для перехода далее (go to printer)
Мы перешли на панель управления принтером, с неё мы можем загрузить файл для печати и начать печать, если перейти по вкладке ">_Console" то появиться поле в которое можно ввести g-код и проверить работает ли принтер. 

Для того чтобы изменить настройки надо нажать значёк с тремя полосками справа вверху и выбрать "printer settings"
Если надо выйти из настроек то надо нажать синюю кнопку "Printer".






КАРТА БЛОГА (содержание)

воскресенье, 18 сентября 2016 г.

Как печатать на 3D принтере.

3D принтеры печатающие пластиковые изделия методом послойного наплавления (FDM или FFF) являются станками с ЧПУ (числовым программным управлением). Как и для всех остальных станков с ЧПУ для 3D принтеров существует специальный язык программирования, в большинстве случаев это G-код. Контроллер почти любого 3D принтера распознаёт и выполняет G-коды. G-коды занимают большой объём в памяти компьютера и слишком сложны для того чтобы создавать ими инструкции принтеру для печати изделий поэтому обычно форма будущего изделия создаётся в каком либо графическом редакторе (например Blender) после чего сохраняется в формате STL в котором храниться, передаётся и.д. а если возникает необходимость напечатать изделие то специальные программы слайсеры (например Slic3r) создают G-коды по этой модели непосредственно перед печатью. Не смотря на это знание G-кода всё таки может пригодится человеку использующему 3D принтер т.к. возможности слайсеров ограничены. Необходимо также учитывать то что для 3D принтеров наборы выполняемых ими команд, в большинстве случаев, различаются между собой. Например дельта принтеры с прошивкой Marlin не могут выполнять команду G2 т.е. нет специальной команды для того чтобы делать круги поэтому их, в таком случае, необходимо делать линиями используя команду G1 для рисования линий. Список всех команд поддерживаемых принтерами RepRap можно посмотреть на странице http://reprap.org/wiki/G-code. Теперь давайте рассмотрим простейший набор команд для печати пластиковой полоски длинной 10 мм:

M104 S220 ;установить температуру экструдера 220 градусов цельсия
M109 S220 ;не делать ничего пока не установиться температура 220 градусов
G28 ;вернуть сопло в исходное положение
G1 X0 Y0 Z0 E0 F500 ;опустить сопло к центру поверхности печати
G1 X10 Y0 Z0 E5 F200 ;напечатать полоску
M104 S220 ;отключить нагреватель экструдера
G28

В данном языке как и в большинстве остальных имеется возможность делать комментарии - надписи игнорируемые транслятором и предназначенные для пояснений. Комментарии пишутся после точки с запятой (т.е. это не конец команды а начало комментария (концом является перевод строки (как в питоне))). Назначение первых трёх команд понятно из комментариев. 
M104 -установить температуру экструдера,
M109 -не делать ничего пока не установиться температура написанная после знака "S",
S28 -возврат в исходное положение,
Четвёртую команду рассмотрим подробнее. G1 - это команда для создания линий (наиболее часто используемая). После надписи "G1", через пробелы, задаются координаты точки в которую необходимо переместить сопло из которого будет выходить пластик. В большинстве принтеров используется декартова система координат знакомая всем из школьного курса математики. Координата Z используется для вертикального перемещения, остальные две X и Y -для горизонтального. Числа стоящие после знаков X,Y или Z в миллиметрах и могут быть десятичными и/или отрицательными, при этом необходимо учитывать то что сопло может переместиться не в любую точку пространства и в случае неправильного задания координат можно сломать принтер поэтому необходимо следить за тем чтобы значения не выходили за допустимые пределы области печати и всегда держать "под рукой" кнопку аварийной остановки. После знака "E" пишется то на сколько миллиметров втянется пластиковый шнур в экструдер. Если например надо втянуть сначала 10 мм и потом тоже 10 мм то в первый раз пишется E10 а во второй E20 т.е. Е - это как ещё одна координата которая как бы указывает на то на сколько миллиметров надо переместить пластиковый шнур. После знака "F" указывается скорость перемещения сопла и втягивания шнура в миллиметрах в минуту.
По аналогии с данным простым примером G-кодами можно создавать и более сложные изделия. Также знание G кодов будет полезно для настройки 3D принтера.
Видео для данной статьи:
Проверка проводилась на 3D дельта принтере Rostock mini самостоятельного изготовления.
Пластиковые детали для были заказаны на странице http://ali.pub/py0zf
линейные подшипники
http://ali.pub/pq6m3
радиальные подшипники
http://ali.pub/uzqx3
шкивы с ремнём
http://ali.pub/hal0p
http://ali.pub/mcfve (докуплено немного ремня)
хотэнд
http://ali.pub/lhvc3
боуден экструдера (толкатель пластмассы без двигателя)
http://ali.pub/ax7ts
PLA пластик
http://ali.pub/tkpyd
Про источник питания и контроллер смотрите видео:
Как показала практика, самостоятельная сборка 3d принтера -это увлекательное и интересное занятие но оно отнимает много времени и к тому же не даёт (если вообще даёт) сколько нибудь значимого выигрыша в цене т.к. готовые 3d принтеры (на момент написания данной статьи) имеют небольшую цену а запчасти к ним высокую, поэтому покупка готового 3d принтера избавит от множества проблем. Если выбрать более простой путь то можно приобрести такой же RepRap 3d принтер как и Rostock mini, такие принтеры дёшевы (возможно из за того что их многие собирают самостоятельно) и если с ним случиться поломка то его легко можно будет отремонтировать по доступным и многочисленным инструкциям из интернета а часть деталей вообще можно напечатать на нём самом пока он работает.

 http://ali.pub/grkhq


КАРТА БЛОГА (содержание)

четверг, 4 августа 2016 г.

Raspberry Pi робот

Если уже имеются некоторые навыки работы с Raspberry PI 3 то можно попробовать сделать простейшего робота который будет передавать изображение с камеры на компьютер и выполнять посылаемые ему команды, например робот имеет возможность перемещаться в пространстве на своих колёсах и будет некоторое количество команд для управления двигателями. Raspberry PI 3 имеет встроенный WIFI модуль скорости передачи информации которого достаточно для передачи качественного изображения, однако этого не всегда получается добиться но всё же передача хоть какого то видео для начала - это уже хорошо (см. Raspberry pi камера). Если проблема с передачей видео решена то можно приступить к решению проблемы управления двигателями. У Raspberry Pi имеются выводы общего назначения которыми можно управлять через скрипты на языке "питон" (см. http://electe.blogspot.ru/2016/05/raspberry-pi-3-gpio-wifi.html) но такой способ управления не очень удобен. Для решения этой проблемы можно реализовать управление выводами через веб интерфейс, для этого на Raspberry pi нужно установить какой либо веб сервер например lighttpd или apache и интерпретатор языка php, ещё понадобиться установить wiringpi, после чего можно будет написать простой код с html тэгами и вставками php и javascript скриптов необходимых для реализации удобного управления двигателями. Веб сервер lighttpd занимает меньше места в памяти и работает быстрее чем apache но apache более популярен и распространён, поэтому если возникнет какая либо проблема (например с его установкой) то её можно будет проще решить спросив ответ у знающих людей. Установить apache и php можно по инструкции на странице https://www.raspberrypi.org/documentation/remote-access/web-server/apache.md. Перед выполнением инструкций надо выполнить команду

sudo apt-get update

(о том как отправлять команды на Raspberry pi 3 смотрите на странице http://electe.blogspot.ru/2016/05/raspberry-pi-3-gpio-wifi.html) Дальше будут всего две обязательные команды:

sudo apt-get install apache2 -y

и

sudo apt-get install php5 libapache2-mod-php5 -y

после успешного выполнения которых Raspberry pi "превращается" в сервер.
Далее необходимо установить wiringpi, если он не установлен. В полной версии Raspbian, как правило, wiringpi уже присутствует. Для того чтобы проверит наличие wiringpi нужно ввести команду

gpio readall

если после ввода этой команды появиться таблица с состоянием выводов то это значит что wiringpi уже установлен, Если такой таблицы не появилось то wiringpi можно установить по инструкциям с сайта https://thedrhax.pw/?p=1460. Далее можно прямо в терминале писать команды ля управления выводами, например командой

gpio mode 21 out

мы переводим вывод gpio 5 raspberry pi в режим выхода,
командой

gpio write 21 1

мы выводим лог. 1 на вывод gpio 5 raspberry pi.
Почему пишется 21 а выводится на 5? Это можно увидеть если ввести команду

gpio readall

и в появившейся таблице будет данное соответствие.
Двигатели можно подключить через драйверы например как на схеме:
Рисунок 1 - Подключение драйверов и двигателей к Raspberry pi 3

Вместо L6203 можно использовать какие либо другие драйверы но достаточно мощные двигатели подключать лучше к таким. Для упрощения сборки в схеме отсутствует резистор с сопротивлением 0.1 Ом между выводом 10 и землёй но при желании его можно поставить, по нему драйвер будет определять ток и в случае необходимости отключиться чтобы не перегореть (очень хорошая вещь, советую поставить, у меня просто не было такого резистора). Так же желательно поставить предохранитель по питанию.
Далее надо удалить файл index.html командой:

rm /var/www/html/index.html

и создать новый

sudo nano /var/www/html/index.php

в который вставить этот код. После чего сохранить нажатием CTRL+O и ENTER и выйти нажатиtм CTRL+X.
В строке

system("gpio write 25 0");

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

exec("gpio write 25 0");

В общем через system и exec можно выполнять в php те команды которые выполняются в консоли кроме тех что идут с sudo в начале, т.е. например если написать exec("sudo halt"); то Raspberry pi не выключиться.

В строке

xhr.open('GET', 'http://192.168.1.252/?act=1', true); xhr.send();

и ей подобных, вместо 192.168.1.252 надо поставить ip адрес вашего Raspberry PI

Тест драйв и некоторую дополнительную информацию можно посмотреть в видео

Заказать необходимые детали можно по ссылкам
Raspberry pi 3 http://ali.pub/91xb2
usb камера http://ali.pub/acv3q
повербанк для питания Raspberry pi http://ali.pub/6e170
двигатели http://ali.pub/4lurj
драйвер L6203 http://ali.pub/sltb8


КАРТА БЛОГА (содержание)

суббота, 2 июля 2016 г.

Машина на радиоуправлении

Самая выгодная цена на радиоуправляемую машину может быть только в том случае если эта машина изготовлена самостоятельно, по большей части из хлама и с небольшим количеством недорогих деталей. Ранее уже рассматривались машинки сделанные на Arduino которое имеет небольшую цену однако стоимость можно ещё уменьшить если использовать не готовую плату а самодельную с микроконтроллером ATmega8. ATmega8 были в старых версиях Arduino которые имели меньшие возможности чем новые но тем не менее, в старых версиях Arduino возможностей более чем достаточно для создания радиоуправляемой машины. Если в ATmega8 загрузить загрузчик Arduino то данный микроконтроллер "превращяется" в почти Arduino и это даёт возможность использования среды разработки Arduino IDE с библиотеками для радиомодулей nrf24l01+, серводвигателей SG09 и вообще более простого написания кода что значительно упрощает весь процесс создания радиоуправляемой машины. Во времена когда микроконтроллеры не были так широко распространены как сейчас изготовление электроники для радиоуправляемой машинки было очень солжным делом но сейчас это дело доступно гораздо большему колличеству людей. Кроме того самостоятельное создание машинки даёт возможность сделать её такой какой надо, дополнять и улучшать "на свой вкус".  Рассмотрим схему передатчика.
Рисунок 1 - Передатчик

Радиомодуль NRF24L01+ подключается к микроконтроллеру по SPI, потенциометр R2 является рулём на пульте и его средний вывод подключается к одному из выводов АЦП микроконтроллера (Arduino IDE позволяет не писать слишком громоздкий код для использования встроенного аналого цифрового преобразователя (АЦП)). Кнопки для управления движением, фарами и мигалкой подключены к цифровым входам и без дополнительных подтягивающих резисторов т.к. в микроконтроллере имеются встроенные и их проводимости хватает в данном случае. Кварцевый резонатор поставлен на 16МГц, если кварцевый резонатор на такую частоту то в ATmega8 можно загрузить загрузчик для Arduino NG. Также имеется кнопка SB2 для сброса.
Рисунок 2 - Приёмник

Для управления электродвигателем используется драйвер L293D который может выдавть до 600мА поэтому если электродвигатель потребляет больший ток то нужен другой более мощный драйвер. К выводам электродвигателя подключены два плёночных конденсатора C3, С4 ёмкостью 470нФ каждый, если эти конденсатры не поставить то двигатель будет создавать большие помехи и машинка не будет работать как надо. Также конденсаторы поставлены между плюсом питания и землёй (ноль питания, минус питания), конденсатор C6 ёмкостью 470нФ поставлен непосредственно на выводы питания радиомодуля NRF24L01+, конденсатор C7 поставлен в другом месте на плате. Питание схемы идёт от одного литий ионного аккумулятора с напряжением 3.7В который можно достать например из повербанка который также можно использовать как зарядное устройство для данного аккумулятора (главное запомнить где нужно ставить плюс аккумулятора а где минус). К одному из выходов драйвера L293D подключены красные светодиоды которые показывают движение машинки назад, если после сборки эти светодиоды загораются когда машинка движется вперёд то нужно подключить эти светодиоды к другому выходу драйвера. Для поворота передних колёс используется сервомотор SG09. Сервомотор для данной цели оказался лучше шагового двигателя т.к. для сервомотора не нужен драйвер (он внутри сервомотора), для управления серводвигателем используется только один вывод микроконтроллера (на шаговый двигатель нужно потратить 4 вывода), серводвигатель работает быстрее шагового, с ним можно сделать более удобное управление, ещё он дешевле, легче, в общем про использование шагового двигателя для поворотов можно забыть. Два белых светодиода VD1 и VD2 - это фары автомобиля которые можно включить нажатием соответствующей кнопки, для того чтобы не надо было всё время держать кнопку нажатой когда горят фары - вместо кнопки можно поставить переключатель или кнопку с фиксацией. Включаются фары через транзистор т.к. ток потребляемый двумя светодиодами слишком велик для микроконтроллера. Также в машине есть мигалка и сирена. Мигалка - это RGB светодиод который светит поочерёдно то синим то красным светом, Сирена - это маломощный пъезодинамик который подключается напрямую к выходам микроконтроллера. Динамик обязательно д.б. ПЬЕЗОЭЛЕКТРИЧЕСКИЙ и маломощный т.к. если поставить динамик с обмоткой то он может иметь слишком низкое активное сопротивление к тому же при переключении на обмотке возникают большие скачки напряжения что может привести к перегоранию микроконтроллера. Из схем приведённых выше видно что на микроконтроллерах передатчика и приёмника ещё остаются свободные выводы, а это значит что машинку ещё можно дополнить какими либо элементами, например можно поставить стреляющую башню, ковш или клешню на сервомоторах, дополнительные светодиоды и т.д. 
Скетчи можно скачать по ссылкам ниже, они длинные но не сложные.

Для передатчика:
https://yadi.sk/d/JCiASuBNsx32B

Для приёмника:
https://yadi.sk/d/4npVVN1Usx39W



КАРТА БЛОГА (содержание)

воскресенье, 5 июня 2016 г.

Raspberry PI камера

Видеонаблюдение, распознавание образов, видеосъемка (и другие подобные вещи) могут быть реализованы на Raspberry PI 3 т.к. этот компьютер обладает достаточной производительностью для того чтобы принимать, хранить, обрабатывать и передавать по wifi, на другие устройства, видео с камеры (например с usb камеры). Существуют специальные камеры для Raspberry PI которые подключаются к специальному разъёму на нём и USB камеры которые подключаются к, какому либо, порту USB на Raspberry PI. Т.к. USB камеры, как правило, гораздо дешевле чем специальные (пусть и хуже) то далее рассмотрим использование именно USB камеры с Raspberry PI. Существует некоторое количество программ для захвата видео с USB камеры или же можно написать свою но для простоты для начала рассмотрим захват и передачу видео с использованием программы motion. Для установки программы motion на Raspberry PI нужно сначала подключиться к нему через программу Putty (или любую другую программу-терминал с возможностью связи по SSH) (о том как это сделать смотрите в предыдущей статье "Raspberry PI 3 настройка и управление GPIO по WIFI"). После подключения к Raspberry PI нужно произвести обновление системы командами

sudo apt-get update

и

sudo apt-get upgrade

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

sudo apt-get install motion

При установке возможно будет задан вопрос "Do you want to continue?" после которого надо будет ввести буку "Y". После установки программы motion нужно будет внести некоторые изменения в конфигурационные файлы. Откроем файл motion.conf в редакторе nano командой

sudo nano /etc/motion/motion.conf

после чего

daemon off        

заменить на        

daemon on

далее найдём другие строки для изменения, для этого нажмём сочетание клавиш CTRL+W, впишем "stream_localhost" и нажмём enter, после этого должна найтись нужная строка, если не нашлась то переменная "stream_localhost" называется как то по другому например "webcam_localhost" или что то подобное. После того как строка с данной переменной найдена нужно

stream_localhost on

заменить на

stream_localhost off

далее нужно (хотя на самом деле не обязательно) найти строку

stream_maxrate  1

и заменить на

stream_maxrate  100

потом

framerate 2

заменить на

framerate 100

после чего

minimum_frame_time 0

заменить на

minimum_frame_time 1

Последнее делается для того чтобы кадры выводились раз в секунду - это не очень хорошо смотрится но зато видео не будет пропадать при резком изменении изображения. Назначение каждой переменной можно прочитать в комментариях.
Теперь сохраним изменения нажав CTRL+O и enter после чего нажмём CTRL+X и выйдем из редактора nano. Теперь давайте отредактируем другой файл, для этого введём команду

 sudo nano /etc/default/motion

и заменим строку

start_motion_daemon=no

на

start_motion_daemon=yes

после чего сохраним изменения нажав CTRL+O и enter а дальше нажмём CTRL+X и выйдем из редактора nano. Теперь запустить передачу видео (USB камера при этом должна быть подключена к одному из портов) можно командой

sudo service motion start

остановить командой

sudo service motion stop

Для того чтобы увидеть видео нужно открыть браузер, и вписать в адресной строке IP адрес Raspberry PI после чего поставить двоеточие и 8081 (IP адрес Raspberry PI:8081) и нажать enter после чего в браузере должно появится видео с USB камеры. Посмотреть как это всё делается, увидеть результат и кое что ещё можно в видео:

Вот так простым способом можно получить видео с USB камеры подключённой к Raspberry PI. Если это Raspberry PI 3 со встроенным wifi и питающийся от powerbank (или какого либо другого переносного источника электроэнергии)(например такой такой или подешевле такой хотя не рекомендуется использовать дешёвый, Raspberry PI нужен нормальный источник питания для использования всех его возможностей, также очень желательно поставить радиатор на процессор и другие микосхемы которые нареваются в ходе работы Raspberry, в идеале радиатор д.б. медным и порытым специальной чёрной краской) то на основе всего этого можно сделать какую либо систему видеонаблюдения, видеокамеру или что то подобное.
Заказать Raspberry PI 3 (как на фотографии выше) можно по ссылке http://ali.pub/91xb2,
USB камеру (как на фотографии выше) можно заказать по ссылке http://ali.pub/acv3q.

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


КАРТА БЛОГА (содержание)

воскресенье, 29 мая 2016 г.

Raspberry PI 3 настройка и управление GPIO по WIFI

Raspberry PI - это устройство имеющее достаточную производительность для того чтобы на его основе могли быть построены роботы способные распознавать образы, выполнять работу людей и прочие подобные устройства для автоматизации и выполнения сложных вычислительных действий. Т.к. тактовая частота процессора Raspberry PI 3 м.б. 1.2 ГГц а его разрядность 32 бита то Raspberry PI 3 значительно превосходит обычное Arduino у которого тактовая частота как правило 16 МГц а разрядность микроконтроллера 8 бит, Arduino безусловно занимает своё место в выполнении операций не требующих большой производительности но когда её уже не хватает Raspberry PI "приходит на помощь" и перекрывает такой большой диапазон возможных применений что можно быть абсолютно уверенным в целесообразности приобретения данного одноплатного компьютера Raspberry PI 3 (можно заказать по ссылке). Т.к. Raspberry PI - это компьютер то для того чтобы его использовать нужно на него установить операционную систему (хотя существуют обходные пути но всё же лучше и проще установить операционную систему (ос далее)). Существует много ос которые можно установить на Raspberry Pi но одной из самых популярных (для использования с Raspberry Pi), наиболее подходящих для начинающих является ос Raspbian. Для того чтобы установить ос на Raspberry Pi понадобиться micro sd карта с расширителем для того чтобы её можно было вставить в обычный компьютер и записать на неё ос. Sd карта должна иметь не менее 4Гб памяти при установке полной версии Raspbian и не менее 8Гб для установки минимальных версий Raspbian. Минимальные версии могут не иметь (и скорее всего не имеют) графического интерфейса и много всего остального что может считаться лишним и занимает место. Для избежания проблем с отсутствием необходимых файлов, можно поставить полную версию. Можно использовать SD карту 10го класса и с 32Гб памяти (проверено работает (как см. видео ниже)). После приобретения карты памяти её надо вставить в компьютер в соответствующий разъём, после этого посмотреть с какой буквой появился диск в разделе "мой компьютер" и запомнить, потом надо скачать ос с официального сайта https://www.raspberrypi.org/downloads/raspbian/ нажав кнопку "Download ZIP" под "RASPBIAN JESSIE" для скачивания полной версии или под "RASPBIAN JESSIE LITE" для скачивания облегчённой но, для начинающих, лучше выбрать "RASPBIAN JESSIE" т.е. полную версию. После скачивания архива "RASPBIAN JESSIE" его нужно разархивировать, потом скачать программу Win32 Disk Imager (или от сюда https://yadi.sk/d/SGGe1lMNs69YQ), установить её, открыть, далее нужно в правом верхнем углу указать букву диска (запомненную ранее), найти разархивированный образ ос
и нажать кнопку "write".
После чего выведется окно с предупреждением и в этом окне надо нажать кнопку "Yes",
после того как запись закончиться и появится окно сообщающее об успешной записи (Write Successful) нужно нажать кнопку "Ok" в этом окне.
Потом закрыть программу, вытащить SD карту безопасным способом и вставить в Raspberry Pi.
Далее можно подключить к Raspberry Pi usb клавиатуру (или ps2 через переходник), usb мышь и монитор или телевизор через hdmi кабель или можно подключить ethernet кабель (но это для опытных пользователей поэтому далее рассмотрим первый вариант). После этого надо подключить питание через micro usb например от зарядного устройства от смартфона. После подключения питания начнётся установка операционной системы. Как правило в новых (на момент написания данной статьи) версиях ос уже настроена возможность связи с Raspberry Pi по SSH и поэтому для того чтобы настроить связь с Raspberry Pi 3 по wifi достаточно настроить только wifi, Для этого в правом верхнем углу экрана есть значёк на который нужно нажать и выбрать wifi,


после чего вписать пароль от данного wifi в появившееся текстовое поле,
после этих действий wifi на Raspberry Pi 3 будет настроен и дальше можно будет не используя провода программировать Raspberry Pi 3 удалённо по wifi. После настройки Raspberry Pi 3 можно выключить вписав в командной строке (в программе LXTerminal которую можно открыть двойным кликом по иконке программы) команду sudo halt или нажав соответствующие кнопки выключения в графическом режиме, после окончательного выключения можно отключить питание и при следующей подаче питания Raspberry Pi 3 включиться с wifi. Теперь чтобы программировать Raspberry Pi 3 по wifi нужно выяснить какой у него ip адрес. Для того чтобы это сделать надо подать питание на Raspberry Pi 3, дождаться окончания загрузки ос, зайти в веб интерфейс маршрутизатора (вписав в строке браузера 192.168.1.1 или то что надо для входа в веб интерфейс, ввести логин и пароль), найти вкладку DHCP Leases или что то подобное, найти там строку с raspberry и ip адрес Raspberry Pi 3.
Далее нужно открыть программу PuTTY (если её нет то перед этим скачать (или тут https://yadi.sk/d/Oe6jToMQs6DrE) и установить) поставить порт 22, соединение по SSH, вписать в поле "Host Name (or IP Adress)" ip адрес Raspberry Pi 3,
После чего нажать кнопку "Open" внизу окна, далее появиться чёрное окно с предложением ввести логин. По умолчанию логин "pi" - его надо ввести и нажать enter. Далее надо ввести пароль, по умолчанию "raspberry". При вводе пароля он не отображается - это нормально. После того как пароль введён невидимыми буквами нужно нажать enter и если всё было сделано правильно то мы получим доступ к Raspberry Pi 3 если нет то нужно повторить действия. После того как получен доступ к Raspberry Pi 3 можно его программировать, для начала нужно войти в папку "pi" для этого надо вписать команду

cd /home/pi

и нажать enter (после cd обязательно пробел).
Теперь можно открыть текстовый редактор nano. Nano - это специальный текстовый редактор который есть на большинстве ос на подобии Linux и в котором можно написать программу для Raspberry Pi. Для открытия этого редактора и одновременно с этим создания файла с названием "first" и расширением "py" нужно вписать команду

nano first.py

и нажать enter. Откроется редактор nano и можно заметь что его интерфейс немного отличается но в основном - это то же чёрное поле в которое надо вписывать команды. Т.к. мы хотим управлять портами ввода вывода общего (GPIO) то прежде чем запустить программу по управлению этими портами, нужно подключить к ним какое нибудь устройство чтобы можно было видеть что управление получилось. Надо также отметить что пины настроенные как выходы у Raspberry Pi могут выдавать очень небольшой ток (предполагаю что до 25мА) и учитывая что Raspberry Pi это всё таки не самое дешёвое устройство то настоятельно рекомендуется позаботиться от том чтобы нагрузка на выводы не была слишком большой. Маломощные индикаторные светодиоды, как правило, могут использоваться с Raspberry Pi т.к. им для того чтобы светиться достаточно небольшого тока. Для первого раза можно сделать приспособление с разъёмом, двумя встречно параллельно включёнными светодиодами и резистором с сопротивлением 220Ом включённым последовательно со светодиодами. Т.к. сопротивление резистора 220Ом, ток обязательно проходит через этот резистор и нет параллельных путей его прохода, напряжение на выводах 3.3В то ток не будет больше чем 3.3/220=0.015А=15мА. Подключить это можно к свободным GPIO например к 5 и 13 как на схеме
(распиновка взята с https://en.wikipedia.org/wiki/Raspberry_Pi), выглядеть это может примерно так:
После того как всё аккуратно и правильно подключено и есть уверенность в том что ничего не сгорит можно скопировать в редактор NANO первую простенькую программу на языке Python

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.output(13, True)
GPIO.output(5, False)
time.sleep(1)
GPIO.output(13, False)
GPIO.output(5, True)
time.sleep(1)
GPIO.cleanup()

Далее нужно нажать

CTRL+X

потом нажать

 Y

потом

 enter

После выхода из редактора NANO можно ввести команду

sudo python first.py

после чего светодиоды помигают некоторое количество раз. Т.е. получилось управлять портами ввода вывода общего назначения по wifi! Теперь давайте рассмотрим программу и выясним как это получилось.
Строка:

import RPi.GPIO as GPIO

- это подключение библиотеки "GPIO" для управления выводами.
Строка:

import time

- это подключение библиотеки "time" для задержек.
Далее идёт установка режима GPIO:

GPIO.setmode(GPIO.BCM)

Конфигурация выводов 5 и 13 как выходы:

GPIO.setup(13, GPIO.OUT)
GPIO.setup(5, GPIO.OUT)

Установка логической единицы на выводе 13, установка логического нуля на выводе 5:

GPIO.output(13, True)
GPIO.output(5, False)

Задержка

time.sleep(1)

Установка логического нуля на выводе 13, установка логической единицы на выводе 5:

GPIO.output(13, False)
GPIO.output(5, True)

Задержка

time.sleep(1)

далее это повторяется несколько раз, при этом светодиоды мигают, после чего команда

GPIO.cleanup()

переводит все выводы в исходное состояние и программа завершается. Т.о. можно управлять любыми свободными пинами по wifi и если сделать питание 5В от аккумулятора то уже можно сделать какого нибудь автономного робота или устройство не привязанное проводами к чему либо стационарному. Язык программирования Python (питон) отличается от си подобных языков, например вместо точки с запятой, для завершения команды, в питоне используется перевод строки, вместо фигурных скобок используется отступ от левого края который делается клавишей Tab. В общем Python это очень интересный язык на котором получается легко читаемый простой код. После того как работа (или игра) с Raspberry PI 3 закончена можно его выключить командой

sudo halt

и после полного выключения убрать питание. При подаче питания Raspberry PI 3 включается и с ним снова можно работать (или играть). Заказать Raspberry pi 3 можно по ссылке http://ali.pub/91xb2. О том как делается настройка Raspberry PI 3 и управление его пинами можно посмотреть на видео:
После успешного мигания светодиодами можно приступить к полномасштабному изучению данного компьютера и созданию проектов используя возможностями Raspberry PI 3 которые ограничены лишь вашим воображением!
КАРТА БЛОГА (содержание)

воскресенье, 22 мая 2016 г.

Система автоматического включения освещения

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

Схема нарисована в таком виде для того чтобы её смогли понять как можно больше людей и по тому что используются готовые модули. С лева на схеме виден малогабаритный источник питания (см. статью Переделка миниатюрного блока питания на другое напряжение) заказать такие источники можно по ссылке ali.pub/4rk15 (на 5В, 700мА), данный источник имеет гальваническую развязку поэтому он безопасен (если не дотрагиваться до той части где высокое напряжение) также он имеет защиту от холостого хода и защиту перегрузки по току, имеет небольшие размеры и пытаться самостоятельно изготовить подобный источник будет пустой тратой большого количества времени к тому же сумма стоимости деталей для этого источника превысить стоимость готового. Ещё один модуль - это инфракрасный датчик движения hc-sr505 (заказать его можно по ссылкеhttp://ali.pub/w97xr). Остальное это - электронные компоненты. Реле нужно использовать такое которое включается от источника и при этом не перегорит, для этого напряжение обмотки реле должно совпадать с напряжением источника питания и входить в диапазон допустимых значений (например есть реле на 12В которые хорошо работают при 8В источника питания) Транзистор на схеме нарисован кт315 но можно использовать любой другой подходящий. Обратный диод для реле нужен обязательно и его предельно допустимый ток д.б. больше или равен тока который идёт через обмотку реле. Контактное реле используется по тому что не всегда известно что внутри бытового прибора и можно ли его включать твердотельным а контактным можно включать всё то что включается обычным выключателем. Про нагрузку для реле и правильное использование реле написано уже неоднократно, например в статье инфракрасный датчик движения. Также необходимо обратить внимание на то что у импортных диодов полоса располагается возле катода а у отечественных возле анода и если перепутать и поставить обратный диод неправильно то при открытии транзистора может произойти перегорание чего либо, хотя источник имеет защиту от перегрузки по току но всё равно лучше этим не злоупотреблять. В общем изготовление системы автоматического включения освещения не трудно если использовать современные готовые модули. Испытание собранного устройства и некоторую другую полезную информацию можно посмотреть на видео:

КАРТА БЛОГА (содержание)

суббота, 21 мая 2016 г.

Переделка миниатюрного блока питания на другое напряжение

Выходные напряжения готовых продаваемых импульсных источников электропитания как правило входят в ряд стандартных напряжений (3.3В, 5В, 6В и т.д.) и предназначены для какой либо одной нагрузки рассчитанной на одно напряжение. Иногда возникают ситуации когда требуется изменить выходное напряжение, например если куплена партия источников одного напряжения для применения в разных устройствах или если нужно подогнать напряжения для использования какой либо специальной нагрузки. Если источник питания импульсный обратноходовый то в нём вероятно имеется обратная связь с какой либо обмотки для корректировки выходного напряжения и в таких источниках может иметься стабилитрон TL431 с делителем. Если в источнике имеется такой или подобные стабилитроны то напряжение на выходе этого источника можно изменить путём изменения коэффициента передачи напряжения данного делителя, для этого можно например установить вместо одного из постоянных резисторов данного делителя подстроечный, путём изменения сопротивления добиться требуемого напряжения и заменить подстроечный постоянным. На данный момент в продаже имеются недорогие миниатюрные источники питания небольшой мощности ali.pub/4rk15 (на 5В, 700мА) - в таких источниках не предусмотрена возможность изменения выходного напряжения пользователем в большую сторону (для изменения в меньшую есть площадка для напаивания линейного стабилизатора на 3.3В) но рассмотренным выше способом это можно сделать:


Из фотографий видно что для доступа к резисторам делителя для TL431 нужно отпаять электролитический конденсатор на выходе. Этот конденсатор лучше заменить на другой с такой же ёмкостью но большим напряжением если требуется это напряжение повысить относительно первоначального. SMD резистор сопротивлением 2.4кОм (маркировка 2401) был заменён на резистор сопротивлением 1кОм (маркировка 102) и напряжение было изменено с примерно 5В до примерно 8В. Проверку переделанного источника с переменным резистором можно увидеть на видео:

четверг, 5 мая 2016 г.

USB клавиатура из обычной PS2 (ps/2 to usb converter).

Порт PS/2, до широкого распространения USB, устанавливался в большинстве системных боков компьютеров для взаимодействия этого блока с клавиатурой. После широкого распространения USB, порт PS/2 стал очень редко использоваться и в современных ноутбуках и компьютерах таких портов почти не осталось поэтому, в большинстве случаев, использовать клавиатуру со старым разъёмом PS/2 можно только применяя специальный переходник PS/2 - USB. Протокол PS/2 сильно отличается от протокола USB поэтому нельзя так просто взять и перепаять с разъёма PS/2 на USB и надеяться что это сработает. PS/2 - это простой синхронный последовательный интерфейс не имеющий больших вступительных и заключительных данных, можно даже сказать (не сильно ошибившись) что передача по PS/2 - это просто поток битов (примерно как по SPI). Частота импульсов синхронизации невелика с составляет несколько десятков килогерц. Уровень логической единицы в PS/2 равен 5В, логического нуля 0В. В общем интерфейс PS/2 достаточно прост для того чтобы его можно было самостоятельно реализовать программно на микроконтроллере. Интерфейс USB гораздо сложнее и его программная реализация - это задача очень нетривиальная и требующая большого объёма работы но к счастью для нас одна Австрийская фирма (Objective Development) выпустила библиотеку v-usb с лицензией GNU GPL т.е. бесплатной для коммерческого и некоммерческого использования, а это значит что библиотекой v-usb можно пользоваться бесплатно. Также существует вариант данной библиотеки для Arduino а это значит что написать код для взаимодействия с компьютером по USB можно буквально в несколько строк что сильно упрощает жизнь. Для клавиатуры PS/2 также существует библиотека и при том не одна и использовать их можно на Arduino. Одной из таких библиотек является библиотека PS2KeyAdvanced которую написал Paul Carpenter. По идее всё должно быть просто но использовать две библиотеке в одном скетче для Arduino не получается т.к. они обе используют внешние прерывания. Переделать библиотеку PS2KeyAdvanced для работы без прерываний можно но при этом коды нажатых клавиш будут определяться не всегда поэтому самым простым выходом в данном случае является использование 2х плат Arduno каждая из которых будет "заниматься своим делом" т.е. одна Arduino будет принимать данные с клавиатуры, перерабатывать их (т.к. PS/2 гораздо проще и меньше грузит микроконтроллер) и отсылать на другую которая будет отсылать коды нажатых клавиш по USB на компьютер. Теперь давайте рассмотрим схему:
Рисунок 1 - Переходник PS/2 - USB

С подключением PS/2 клавиатуры нет никаких проблем, она подключается напрямую к Arduino по стандартной схеме. Подключить USB разъём к Arduino можно двумя способами:
1) через стабилитроны,
2) с понижением питания.
Я выбрал вариант 2 т.к. при подключении через стабилитроны могут возникать и возникают часто (судя по переписках в форумах) проблемы. Стабилитроны д.б. маломощными и быстрыми и когда я ранее пытался реализовать данный способ связи то у меня ничего не вышло, пришлось использовать понижение питания диодами и всё заработало (см. статью включение светодиода через usb)! Если Arduino 3х вольтовое то никаких дополнительных мер по снижению напряжения его питания применять не надо, в противном же случае придётся "влезть" в плату паяльником и внеси необходимые изменения. В моём случае изменений вносить не пришлось т.к. я использовал самодельную Arduino на микроконтроллере ATmega8 и питание мог делать любое которое возможно с таким микроконтроллером. Для того чтобы связать две Arduino с разными логическими уровнями по последовательному интерфейсу UART пришлось использовать резисторы с большим сопротивлением т.к. это не не позволит портам микроконтроллеров перегореть.
Теперь давайте рассмотрим скетч для Ардуино работающего с клавиатурой:
#include "PS2KeyAdvanced.h"

#define DATAPIN 7
#define IRQPIN  3

uint16_t c;

PS2KeyAdvanced keyboard;

byte keys[1000];//convert ps2 to usb hid keyboard

void setup()
{
  for(byte i = 0;i<255 i="" p="">  {
    keys[i] = 0;
  }
keyboard.begin( DATAPIN, IRQPIN );
Serial.begin( 9600 );

//2ps to usb hid
keys[65]=0x4;//A
keys[66]=0x5;//B
keys[67]=0x6;//C
keys[68]=0x7;//D
keys[69]=0x8;//E
keys[70]=0x9;//F
keys[71]=0xa;//G
keys[72]=0xb;//H
keys[73]=0xc;//I
keys[74]=0xd;//J
keys[75]=0xe;//K
keys[76]=0xf;//L
keys[77]=0x10;//M
keys[78]=0x11;//N
keys[79]=0x12;//O
keys[80]=0x13;//P
keys[81]=0x14;//Q
keys[82]=0x15;//R
keys[83]=0x16;//S
keys[84]=0x17;//T
keys[85]=0x18;//U
keys[86]=0x19;//V
keys[87]=0x1a;//W
keys[88]=0x1b;//X
keys[89]=0x1c;//Y
keys[90]=0x1d;//Z
keys[49]=0x1e;//1 !
keys[50]=0x1f;//2 @
keys[51]=0x20;//3 #
keys[52]=0x21;//4 $
keys[53]=0x22;//5 %
keys[54]=0x23;//6 ^
keys[55]=0x24;//7 &
keys[56]=0x25;//8 *
keys[57]=0x26;//9 (
keys[48]=0x27;//0 )
keys[0x1e]=0x28;//Enter
keys[0x1b]=0x29;//Escape
keys[0x1c]=0x2a;//BackSpace
keys[0x1d]=0x2b;//Tab
keys[0x1f]=0x2c;//Space
keys[0x16]=0x4f;//Right Arrow
keys[0x15]=0x50;//Left Arrow
keys[0x18]=0x51;//Down Arrow
keys[0x17]=0x52;//Up Arrow
keys[0x9]=0xe4;//Right ctrl
keys[0x8]=0xe0;//Left ctrl
keys[0x7]=0xe5;//Right shift
keys[0x6]=0xe1;//Left shift
keys[0xb]=0xe6;//Right alt
keys[0xa]=0xe2;//Left alt
keys[0x61]=0x3a;//f1
keys[0x62]=0x3b;//f2
keys[0x63]=0x3c;//f3
keys[0x64]=0x3d;//f4
keys[0x65]=0x3e;//f5
keys[0x66]=0x3f;//f6
keys[0x67]=0x40;//f7
keys[0x68]=0x41;//f8
keys[0x69]=0x42;//f9
keys[0x6a]=0x43;//f10
keys[0x6b]=0x44;//f11
keys[0x6c]=0x45;//f12
keys[0x3c]=0x2d;//-_
keys[0x5f]=0x2e;//+=
keys[0x5d]=0x2f;//{[
keys[0x5e]=0x30;//}]
keys[0x5c]=0x31;//|\
keys[0x5b]=0x33;//:;
keys[0x3a]=0x34;//"'
keys[0x3b]=0x36;//<,
keys[0x3d]=0x37;//>.
keys[0x3e]=0x38;//?/
keys[0x4]=0x46;//Print Screen
keys[0x40]=0x35;//`ё
keys[0x19]=0x49;//insert
keys[0x11]=0x4a;//Home
keys[0x13]=0x4b;//Page Up
keys[0x1a]=0x4c;//Delete
keys[0x12]=0x4d;//End
keys[0x14]=0x4e;//Page Down
keys[0x3]=0x39;//Caps Lock
keys[0x2]=0x41;//Scroll Lock
keys[0x1]=0x41;//Num Lock
}


void loop()
{
  if( keyboard.available() )
  {
    c = keyboard.read();
    if( ((c >> 8) != 0x81) && ((c >> 8) != 0x80) && ((c >> 8) != 0xc0) && ((c >> 8) != 0x90) && ((c >> 8) != 0x91))
    {
      Serial.write(keys[c & 0xFF]);
    }
  }
}

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

#include "UsbKeyboard.h"

void setup() {
  Serial.begin(9600);

  TIMSK &= !(1  cli();
  usbDeviceDisconnect();
  delayMs(250);
  usbDeviceConnect();
  sei();
}

void loop()
{
  UsbKeyboard.update();

  if (Serial.available() > 0)
  {
    UsbKeyboard.sendKeyStroke(Serial.read());
  }
}

// helper method for V-USB library
void delayMs(unsigned int ms)
{
  for( int i=0; i  {
    delayMicroseconds(1000);
  }
}

Этот скетч короче но совсем не проще. В главной функции настройка прерываний и всего остального, в основном цикле обязательная функция UsbKeyboard.update() которая должна вызываться не реже чем 20 раз в секунду (иначе всё работать не будет), поэтому микроконтроллер с v-usb сильно грузить не рекомендуется но, к счастью для нас (и для этого микроконтроллера), другую серьёзную задачу выполняет другой микроконтроллер который находится в другой Ардуине. После того как по UARTу принимается байт он сразу же отправляется по USB в компьютер и всё это происходит быстрее чем за 50мс судя по тому что всё работает (см. видео ниже). Т.к. данная библиотека реализует класс HID то на компьютер к которому будет подключён данный адаптер с клавиатурой не надо устанавливать никаких драйверов всё должно заработать и на Windows и на Linux. Я же делал данный переходник (адаптер) для Raspberry pi 3 с операционной системой Raspbain и клавиатура с ними работала замечательно (см. видео ниже), с Windows 7 были некоторые проблемы т.к. она решила что нужен драйвер к неизвестному устройству, решила его найти и установить но после того как не получилось вывелось сообщение об этом и дальше клавиатурой можно было спокойно пользоваться. Теперь можно посмотреть видео с испытаниями и некоторой другой полезной информацией:




Первый скетч (ps2) можно скачать по ссылке https://yadi.sk/d/7RgFtn9ErWkXm
Второй (usb hid) по ссылке https://yadi.sk/d/b5mNkEIarWkXn

КАРТА БЛОГА (содержание)

Arduino UNO можно заказать по ссылке http://ali.pub/1v22bh, Atmega8-pu которую (можно превратить в Arduino) по ссылке http://ali.pub/qgw75, Raspberry Pi 3 (на котором испытывалась клавиатура в видео) по ссылке http://ali.pub/91xb2.