Управление устройствами на 220в через LPT порт
Схема устройства
За исходную схему была взята одна из схем, найденных в
Internet и выглядела она вот так:
Но только с небольшим изменением: между 1-ым пином оптопары 4N25 и 2-ым пином
LPT был добавлен резистор на 390 Ом, и еще добавлен светодиод для индикации
включения. Схема была собрана в тестовом режиме, т.е. просто соединена проводами
так как нужно и проверена. В этом варианте она просто включала и выключала
старый советский фонарик.
Было решено, что если уже делать управление, то не для одного устройства, а
минимум на 4 устройства (из расчёта: одна лампа на столе, люстра на два
выключателя, запасная розетка). На данном этапе стало необходимо построение
полной схемы устройства, начался выбор различных программ.
Были установлены:
- PBC
- KiCAD
- gEDA
- Eagle
Посмотрев все их них я остановился на Eagle, так как в его библиотеке были «похожие»
детали. Вот что получилось в нем:
На схеме использован порт DB9
т.е. обычный COM порт, это сделано из соображений экономии как места на плате,
так и самих разъёмов (COM'вские у меня были), а так как мы будем использовать
только 5 проводников, то этого нам хватит с запасом. Таким образом делаем еще и
переходник с DB25 (LPT) на DB9 (COM), в моем случае делается он следующим
образом:
LPT 2-9 pin = COM 1-8 pin — это управляющие пины данных;
LPT 18-25 pin (зачастую они соединены между собой) = COM 9 pin — это наша
земля.
Так же в схеме используется дополнительное питание на 12В для питания реле, по
плану это будет простое китайское зарядное или может быть крона на 9В (одно
реле срабатывает нормально, надо проверить на 4 одновременно). Отдельное
питание и гальваническая развязка с помощью оптопары используется для того
чтобы обезопасить порт компьютера. При желании можно конечно запитаться от 12В
блока питания компьютера, но это каждый делает сам и на свой страх и риск.
Необходимые детали для создания устройства
- COM порт — 1 шт
- коннектор питания — 1 шт
- светодиод зелёный — 4 шт
- оптопара 4n25 — 4 шт
- посадочное место под
оптопару (у меня было только на 8 ног) — 4 шт
- резистор 390 Ом — 4 шт
- резистор 4,7 кОм — 4 шт
- транзистор КТ815Г — 4 шт
- реле HJR-3FF-S-Z — 4 шт
- зажимы на 3 контакта — 4 шт
- фольгированный текстолит
Программная часть
Естественно для управления LPT портом нужно какое-то ПО, но так как у меня дома
linux, то было решено просто написать простейшую программку самому, а в
последствии её уже дописать и адаптировать как надо. Выглядела она примерно
так:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/io.h>
#define BASE 0x378
#define TIME 100000
int main ()
{
int x = 0x0F;
int y = 0x00;
if (ioperm (BASE, 1, 1))
{
perror ("ioperm()");
exit (77);
}
outb (x, BASE);
return 0;
}
Данная программка отправляет в LPT порт 0x0F = 00001111, т.е. подает 1 на 2-5
пины (Data0-Data3), а это и есть наше управляющее напряжение между 2-5 пинами и
землей (18-25 пины), таким образом будут включаться все четыре реле. Точно так
же действует программа для отправки 0x00 в порт для отключения, просто вместо x
отправляется y — outb (y, BASE). Еще можно прочитать состояние порта:
#define BASEPORT 0x378 /* lp1 */
...
printf("статус: %d\n", inb(BASEPORT));
...
Единственный нюанс этой программки в том, что её необходимо выполнять от root,
так как простому пользователю не доступна функция ioperm. Думаю, как решать
такую проблему можно не рассказывать, каждый выберет более подходящий ему
вариант.
В последствии программа была доработана так, что бы передавая ей параметры
командной строки можно было указывать с каким устройством и что сделать.
Вывод «sw --help»:
Программа для управления реле через LPT
порт.
У программы может быть один или два параметра.
Формат параметров: sw [номер устройства] [действие]
номер устройства - от 1 до 8
действие - "on", "off", "st" - включение,
выключение, статус
Пример: "sw 2 on" для включения второго устройства или "sw
--help" для вывода помощи
Архив с программой и печатрная плата в формате LAY
здесь.
Источник:
http://habrahabr.ru/post/112511/