воскресенье, 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.

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

Инфракрасный датчик движения.

На данный момент в продаже имеются недорогие миниатюрные модули с пироэлектрическими датчиками, линзами, микросхемами и всеми остальными деталями необходимыми для удобного использования такого модуля в качестве датчика движения. Один из таких модулей - это HC-SR505 (можно заказать по ссылке 5шт.), такой модуль имеет небольшие размеры и три вывода, два из них для питания (+4.5...+20В) и один - выход (лог.0 примерно  0В, лог.1 примерно  3.3В):
На самих модулях подписано какой вывод чем является поэтому для правильного подключения не обязательно смотреть документацию. Питать модули можно источником с напряжением от 4.5В до 20В, потребляет модуль не больше 60мА тока. На модуле стоит микросхема-линейный стабилизатор которая делает 3.3В для питания модуля. На датчик надета специальная линза которая фокусирует излучение в нужное место (в окошко пироэлектрического датчика), когда в зоне видимости датчика происходит изменение тепла он выдаёт на выходе примерно 3.3 В - это напряжение будет постоянное без всяких импульсов и т.д. и будет поддерживаться пока в зоне видимости этого датчика происходит изменение тепла, когда это изменение закончится произойдёт задержка максимум в 15 секунд после чего напряжение снизится до нуля и опять произойдёт задержка после которой датчик снова начнёт реагировать на изменение тепла в зоне его видимости, при этом линза д.б. надета правильно. Дальность видимости датчика 3 метра, угол "конуса" в котором датчик "видит" 100 градусов. Можно использовать этот датчик для Ардуино или сразу для включения нагрузки через транзистор. Причём скетч для Ардуино не будет сложным. Например HC-SR505 можно использовать для автоматического включения освещения в помещении где есть люди или для охранной сигнализации. Рассмотрим простой вариант с автоматически включающимся малогабаритным светодиодным фонарём:
Рисунок 1 - Малогабаритный светодиодный фонарь с датчиком движения

Схема на рисунке 1 простая и не имеет специальных дополнительных плат для корректировки выходных импульсов т.к. всё это уже есть на самом модуле HC-SR505, вместо светодиодов с резисторами можно поставить реле с обратным диодом и уже контактами реле коммутировать мощную нагрузку например лампу, обогреватель, холодильник и т.д.
Рисунок 2 - Датчик движения с реле

 Обратный диод д.б. на тот же ток что и транзистор, мощность источника питания д.б. не меньше чем его напряжение умноженное на ток обмотки реле + ток модуля.
<60 -="" 1.5="" 1.92="" 100="" 12="" 2="" 60="" p="">1) Сопротивление обмотки реле д.б. больше чем напряжение источника делённое на максимальный ток коллектора транзистора (у кт315 этот ток = 100мА)
или максимальный ток коллектора транзистора д.б. больше чем напряжение источника делённое на сопротивление обмотки реле которое можно замерить омметром, мультиметром или сразу посмотреть ток обмотки в документации и он д.б. меньше максимального (предельно допустимого) тока коллектора транзистора. Можно также использовать полевой транзистор с изолированным затвором у него аналогичный параметр называется не ток коллектора а ток стока.
2) Максимальный ток контактов реле д.б. больше мощности прибора (который включает это реле) или суммарной мощности приборов делённой на напряжение сети (обычно 220В).

Для схемы на рисунке 1 устройство собрано и проверено см. картинки и видео ниже:







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


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


Заказать 5шт. таких модулей по низкой (на момент написания статьи) цене можно по ссылке http://ali.pub/w97xr