Здравствуйте. Поставил перед собой задачу собрать устройство, которое будет сигнализировать о изменении своего положения. Подключил акселерометр ADXL335 к ардуино, написал код, который при инициализации устройства считывает начальные значения акселерометра, фильтрует низкую от него и при отклонении текущего значения акселя от начального на определенную величину, зажигает светодиод, все работает как нужно. Усложняю схему. Добавляю туда GSM шилд. И тут начинаются свистопляски. Допустим, при инициализации, аксель выдает следующие значения: x=366, y=366, z=415. Двигаю акселерометр (x=369, y=367, z=415), код высчитывает, что отклонение в текущем значении больше допустимого и дает команду GSM шилду начать звонок на определенный номер. И тут акселерометр зашкаливает в показаниях, x=450, y=450, z=500. И так пока звонок не будет завершен. И если момент звонка я знаю и могу как-то обработать, то GSM шилд живет своей жизнью и время от времени, выполняет какие-то действия, и наводит помехи на акселерометр, заставляя его выдавать не правильные значения, что приводит к ложным срабатываниям. Думал, что это наводки от радиосигнала, но ни экранирование, ни удаление датчика от антенны на значительное расстояние нисколько не повлияло на выходные значения. Плюс к этому. Хотелось создать устройство с определенной автономностью. Приобрел аккумулятор на 5v и специальный зарядник. Он либо питает плату от источника 5V либо переключается на аккумулятор, если источник отключен. Так вот, если запустить ардуино с источника, а потом переключить на аккум, то акселерометр тоже начинает врать. Пришел к выводу, что проблема в опорном напряжении питания для акселерометра. Так вот собственно, что делать? 1. Как сделать обратную связь по питанию? 2. Можно ли сделать это программно, узнать например о изменении входного напряжения и скорректировать показания датчика? 3. Помогут ли два источника питания для датчика и gsm шилда? А как тогда быть с переключением на батарею, входное напряжение-то все равно будет меняться? Буду благодарен за любую информацию и помощь.
первое, что в голову приходит - измерять напряжение на батарейке АЦПом контроллера и как-то ловить изменения. это к первым двум вопросам. другое дело - скорость реакции системы в таком случае. GSM-шилд, как и любой gsm-девайс, штука "шумная" в плане наводок, и собственной жизнью живет всегда, пока питание есть - связь так устроена. а массово применяемые акселерометры реагируют даже на "чих Кощея бессмертного в соседней области" (с)
Как это можно сделать? У меня была мысль подключить 5V через резистор на аналоговый вход и мерять уровень напряжения, но что-то не знаю как правильно это сделать и есть ли вообще смысл, какой резистор брать? Это звучит как приговор(.
У меня тоже похожее было. Этот акселерометр меняет свои показания при изменении входного напряжения, а от gsm шилда походу идут помехи на ардуиновскую ацп, или же gsm очень много жрет, и дуиновский стабилизатор не справляется со своей обязанностью. Думаю,что надо попробовать вывести gsm shield на длинных проводах, и подключить его вход к VIn, но при условии, что питание будет не больше 5v! Или же просто подключить акселерометр через стабилизатор на 5v
вот здесь - делитель напряжения, чтобы получить сигнал меньше 5 вольт - http://wiki.amperka.ru/схемотехника:делитель-напряжения вот здесь - работа с аналоговым входом - http://wiki.amperka.ru/сенсоры:аналоговые в двух словах - analogRead() вернет значение от 0 до 1023 (0..5 вольт соответственно) от просадки питания при подключении GSM-шилда спасет заведомо более мощный источник с хорошей стабилизацией, от наводок - только экранирование и вынос шилда "куда подальше"
Спасибо все кто ответил. Я просто перевел ардуино на 3,3V и все заработало стабильно. Дело в том что питание от usb было 4,6V, от батареи 4,8V, работа GSM-шилда просаживала еще на 0,3V, поэтому акселерометр начинал врать, так же врал когда питание переключалось с usb на батарею. Устройство проработало в тестовом режиме сутки, радионаводок от GSM-шилда не замечено (смонтированы впритык друг к другу). Попробую еще по следующему рецепту считать входное напряжение и запустить все от ~5V, ну это так для спортивного интереса.