Датчик температуры и влажности и Processing
- Войдите на сайт для отправки комментариев
Пнд, 30/07/2012 - 11:21
Добрый всем день.
Такой вопрос.
Есть датчик DHT-11.,ардуино МЕГА 2560., компьютер.
Нужно написать программу на Процессинге с использованием стандарта Firmata.
Суть вопроса - как используя протокол фирмата чтобы получать данные с этого датчика. Что то сообразить не могу.
Мож ссылочка есть на пример.
В лоб - никак. У него вообщем-то другое предназначение. В нем вы работаете с "состоянием пинов", а не "датчиками и произвольными данными".
То есть вам нужно будет на стороне процессинга, реализовать библиотеку для вашего датчика. И то, это "заработает", только если логика работы датчика не подразумевает что где-то нужно "быстро дернуть ногой" (банально не хватит скорости сериал).
Ну то есть, если "очень хочется", можно конечно будет "прикрутить фирмату". На стороне ардуины, обработать датчик и как-то "прикинутся аналоговым пином". Но это, скорее всего, потребует разбирательств с протоколом и хакингом библиотеки.
Вообщем, IMHO, гораздо проще будет взять библиотеку (для ардуины) этого датчика, считать с него данные и послать их проценнигу обычным Serila.print или Serial.write, без "протоколов". Фактически сделать какой-то свой очень "упрощенный протокол".
leshak, да да, огромное спасибо - я вот уже сам к этому пришел. Буду пробовать обрабатывать сигналы с датчика на стороне процессинга. Мне просто оч нужно чтобы помимо всего прочего ардуина общалась с этим компом по фирмате. А программулину на serial уже давно испытал. немного разберусь скину код для общего пользования
Единственный вопрос теперь как вот эти вещи PINC & _BV(DHT11_PIN, DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN); в PinMode и т.д. переделать
>Мне просто оч нужно чтобы помимо всего прочего ардуина общалась с этим компом по фирмате
Честно говоря не ковырялся с фирматой. Всегда, на самом деле, как-то проще было свой протокол замутить (мне кажется фирмата нужно только когда заранее не знаешь "что будешь гонять" и "какое там железо будет"), но что-то мне думаетеся, что можно попробовать "подружить" фирмату и "свой serial". Заставить их работать "паралельно".
Для "своего" придумать какой-то маркер типа "это твои данные", и свои данные формировать таким образом что-бы фирмата воспринимала их как "шум/мусор" и игнорировала.
А можно попробовать, все-таки "впихнутся в фирмату".
Вот описание протокола http://firmata.org/wiki/Protocol
Так как он "базируется на midi", то у него есть возможности для расширения что-бы посылать кастомные команды и данные (Sysex Message и т.п.)
Попытатся добавить "поддержку вашего датчика", так же как они добавили поддержку i2c и servo
Пока для меня это оч сложно
Единственный вопрос теперь как вот эти вещи PINC & _BV(DHT11_PIN, DDRC |= _BV(DHT11_PIN);
PORTC |= _BV(DHT11_PIN); в PinMode и т.д. переделать
Что-бы "понять это".
Нужно прочитать http://arduino.ru/Tutorial/Upravlenie_portami_cherez_registry
И http://arduino.cc/en/Reference/HomePage раздел "Bitwise Operators"
Ну и поискать как определен макрос _BV
подозреваю что это _BV(No) это эквивалент 1<<No (вообщем возвращает байт с битом No установленным в 1)
Это далеко не единсвенная проблема :) Учитывая что при чтении датчика у вас есть задержки в микросекунды - это будет трудно выдержать, если логика "на стороне компа". Если размер это задержки "важен", то хош, не хоч, а прийдется ее передвигать "поближе к железу", то есть все-таки работать с датчиком из самого скетча. А компу слать уже обработанные данные. Через сериал, или как-то извернутся и впихарится в Firmata сообщения.
leshak, да с задержками действительно проблема. Но я скажу чествно с програмированием на вы, помогает мое образование в анализе но чисто на уровне разобраться как работает, нехватает ума самому что-то серьезное написать.
Вот пока надыбал скетч в котором исключено управление портами через регистры. Я все же пока попробую переделать этот код под Processing и попытаюсь устранить задержку с помощью delay.
Так вы сделалали или нет?
Очень интересуюсь даной тиматикой.