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

    Обнаружилась тут для 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, но там будут сообщения в виде отчетов, а на хабр планирую выкладывать более детальные описания с разбором исходников и схем. В особенности буду рад этим заниматься, если это кому-то интересно. Есть среди аудитории люди близкие к софту, но желающие немного разобраться в самодельных железках?
    Или наоборот, рожденные с паяльником в руках, но так и не подобравшиеся вплотную к микроконтроллерам? В общем, хочется обратной связи – жду комментариев хороших и разных :)

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 4

    • UFO just landed and posted this here
        +1
        Интересная штука :) А применений можно сколько угодно найти — сенсорный выключатель и т.п.

        У меня к вам два вопроса:
        1) Существует ли Arduino, но на более мощной платформе (скажем AVR32, а не ATMega)? Или 8 бит — это значимая часть архитектуры?

        2) Что вы думаете по поводу концепции и реализации Motes и nesC (те, что в TinyOS), приходилось ли вам с ним иметь дело? Там тоже 8битный AVR (правда, модель AVRTiny: набор команд отличается несущественно, но тактовая частота может быть выше). Кто, по-вашему, имеет большие перспективы?
          0
          Подобные проектики в сети есть, и на том же сайте Arduino есть список близких по тематике:
          www.arduino.cc/playground/Main/SimilarBoards
          Но именно этот проект как я понял выше 8-битных ATmega пока не движется. Наверное это и не нужно — ведь нет цели создать лучшую платформу для всех возможных задач. Ребята успешно решают задачу понижения порога входа в электронику для начинающих.
          Из альтернативных проектов мне интереснее всего показался Sun SPOT — тут уже процессор серьезнее, и главное, распространенной архитектуры ARM. Но цена у него конечно приличнее — в 10-20 раз дороже выходит игрушка :)
          С TinyOS не сталкивался — только читал давно уже, но как я понял — это достаточно узкая разработка нацеленная на передачу данных дешевыми железками по распределенной сети устройств.
          Я так понял противопоставлять их особого смысла нет — я не удивлюсь, если кто-то Arduino в такую сеть воткнет в качестве совместимого элемента.
          0
          Хорошая статья. Если-бы ещё научиться распознавать садящегося, то можно было-бы автоматически делать анлок :)

          Only users with full accounts can post comments. Log in, please.