Pull to refresh

Сенсорный датчик для Arduino и жуткий девайс админа-параноика

Reading time 3 min
Views 13K
Обнаружилась тут для Arduino занятная библиотечка, организующая сенсорное управление: www.arduino.cc/playground/Main/CapSense.
Принцип работы прост — соединяем две любые ноги резистором мегаом на несколько, одна нога будет выходом, вторая входом. Ко входу цепляем провод-сенсор, а еще лучше что-то плоское и проводящее – вроде куска медной фольги. Если выход переключать из 0 в 1 и обратно, то состояние входа тоже будет переключаться, но из-за различных паразитных емкостей процесс будет происходить с некоторой задержкой, и чем больше емкость (допустим, ближе находится рука человека), тем больше эта инерционность. Вот илюстрация от автора библиотеки:

image
Библиотека прячет от нас все эти переключения и измерения времени – нам достается удобная функция:
capSenseRaw(нога_выход, нога_вход, число_измерений).
В ходе экспериментов с библиотекой и различными железками, подцепленными к Arduino, в моем воспаленном сознании админа-параноика родилась идея забавного устройства, которое я Вам и представляю.
Суть в следующем: разместить в кресле (на котором админ проводит свое рабочее время) достаточное количество проволоки и прикрыть ее материей, подсоединить проволоку к Arduino – пусть железка определяет — сидит кто-то на кресле, или нет. И вот в тот самый момент, когда админ отлучается со своего рабочего места, Arduino шлет сигнал компьютеру, а тот автоматически лочится.
… можно еще и .wav проигрывать вроде «работать, негры! солнце еще высоко»
Рассмотрим черновой вариант реализации данной идеи, который получился у меня.
Железо
Самым сложным оказалось найти резистор номиналом около 10 МОм. В хозяйстве были на 2.2 МОм — я их спаял 4 штуки последовательно – вышло около 9 МОм, но выглядело некрасиво. Заглянул в радиомагазин — там нашел на 15 МОм резисторы — взял несколько штук. Берем кусочек материи, пришиваем к ней проволоку, соединяем все в соответсвии со схемой: Я использую Freeduino — клон Arduino. Они полностью совместимы, т.е. никакой разницы ни электрически, ни программно нет.
Софт для компьютера
Выбор языка для написания ответной части, работающей на компьютере, мной сделан в пользу Python — под виндой все-равно нормального скриптового языка, идущего в комплекте нет, а уж если что-то и доставлять, то пусть это будет популярный проект, имеющий обширное сообщество, много библиотек,
кучу примеров, и нормально портированный под все более-менее живые ОС.
Для Python есть простая и удобная библиотечка pySerial для работы с COM-портом (Arduino представлена в системе именно COM портом на шине USB): pySerial.
Кроме того, под винду понадобится еще pyWin32 После этого работа с Arduino из Python упрощается до безобразия.
Как из скрипта залочить машину?
Под виндой так:
«rundll32.exe user32.dll,LockWorkStation».
Под GNOME (я проверял под Ubuntu 8.04) так:
«gnome-screensaver-command --lock» или так:
«xdg-screensaver lock».
Под KDE — не искал и не знаю как — я думаю тоже без проблем.
Итак, все необходимое у нас есть, осталось собрать все воедино.
Исходник для Arduino с коментариями лежит тут: CapSenseSrc.zip
Программка простая — при появлении человека Arduino пишет в порт «Hello!»,
а когда человек отойдет — «Bye!».
Исходный код скрипта на питоне хоть и лежит в архиве, но в силу его простоты приведу здесь:
--- AutoLock.py ---
# -*- coding: windows-1251 -*-
import serial
import os

ser = serial.Serial('COM3', 9600)	# Здесь надо свой порт поставить
while 1:
    s = ser.readline().strip()   # Читаем строку и убираем переводы строк
#    print(s)                    # раскомментируйте для отладки
    if s == 'Bye!':              # если человек ушел, блокируем систему
        os.system('rundll32.exe user32.dll,LockWorkStation')
---

Под Ubuntu успешно работало с изменениями в 2-х строчках:
порт открывается так:
ser = serial.Serial('/dev/ttyUSB0', 9600)

Машина лочится так:
        os.system('gnome-screensaver-command --lock')

Небольшой видео-ролик, демонстрирующий работу:

P.S. Про свои эксперименты с Arduino я еще пишу на блоге arduino-ru.blogspot.com, но там будут сообщения в виде отчетов, а на хабр планирую выкладывать более детальные описания с разбором исходников и схем. В особенности буду рад этим заниматься, если это кому-то интересно. Есть среди аудитории люди близкие к софту, но желающие немного разобраться в самодельных железках?
Или наоборот, рожденные с паяльником в руках, но так и не подобравшиеся вплотную к микроконтроллерам? В общем, хочется обратной связи – жду комментариев хороших и разных :)
Tags:
Hubs:
+9
Comments 4
Comments Comments 4

Articles