Этот акселерометр я покупал под совершенно конкретную задачу — хотел сделать устройство, которое не дает спать на спине дольше заданного времени. Что характерно, все получилось, однако у акселерометра есть несколько интересных особенностей.
Собственно, о них и хочу упомянуть.
Прежде всего надо понимать, что акселерометры бывают с цифровыми и аналоговыми интерфейсами. Первые хороши тем, что меньше подвержены помехам и позволяют подключать к единой шине множество периферийных устройств — явная экономия пинов контроллера. Минус, однако в том, что для работы с такой периферией нужно в коде реализовать протокол обмена, а это расход другого ценного ресурса — памяти.
Однако при подключении всего лишь одного датчика сэкономить выводы контроллера цифровым протоколом не получится, поскольку по количеству требуемых линий что цифра, что аналог получаются идентичными.
. Гребеночку уже напаял, да
Поэтому я и сделал выбор в пользу аналогового акселерометра ADXL335 (даташит для любопытных). Ведь с ним можно и память сэкономить, и общаться гораздо проще — достаточно банального analogRead().
Т.е. простейший код для чтения показаний действительно прост, как амеба:
unsigned int x, y, z;
void setup() {
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
Serial.begin(9600);
}
void loop() {
x = analogRead(A0);
y = analogRead(A1);
z = analogRead(A2);
Serial.println("xxxx | yyyy | zzzz");
Serial.print(x, DEC);
Serial.print(" | ");
Serial.print(y, DEC);
Serial.print(" | ");
Serial.print(z, DEC);
Serial.println(" | ");
delay(2000);
}
В итоге пришло ровно то, что на картинке, и я с упоением занялся макетированием, причем сначала — на полноразмерной плате Arduino Mega 2560. И сильно удивился, поскольку поведение акселерометра не очень укладывалось в рамки здравого смысла. Ну, по крайней мере, пока здравый смысл не сказал что-то вроде «окей, даташит я не читал, но будем считать, что акселерометр так и работает».
. Вот крупнее, если не верите, что это ADXL335
Иными словами, я ожидал увидеть на выходах акселерометра значения в диапазоне от 0В до верхнего предела питания, т.е. 3,3В или 5В, поскольку акселерометр работает с обоими, но об этом позже.
Вместо этого вывод в монитор показал примерно следующее. Примерно — потому что у меня не было стенда с идеальными вертикалями и горизонталями. Все вот этими вот руками.
Значения при максимуме по оси X:
X 405
Y 331
Z 344
Значения при минимуме по оси X:
X 268
Y 333
Z 344
Значения при максимуме по оси Y:
Y 400
X 338
Z 346
Значения при минимуме по оси Y:
Y 264
X 334
Z 346
Значения при максимуме по оси Z:
Z 410
X 337
Y 329
Значения при минимуме по оси Z:
Z 275
X 335
Y 331
Показания эти идентичны что для 3В, что для 5В.
Это первое, что следует иметь в виду, когда будете применять данный акселерометр в своем подсобном хозяйстве.
Второе — упомянутый выше дуализм в смысле питания. Суть в том, что ADXL335 рассчитан на диапазон напряжений от 1,8В до 3,6В. А до 5В его дотянули очень простым способом — поставили стабилизатор на 3,3В ко входу питания.
Решение несколько варварское, поскольку вне зависимости от входного напряжения, пусть даже оно и в допустимых для акселерометра 1,8-3,6В, ток пойдет через стабилизатор. А это довольно критично, если задаться целью сделать максимально экономичное устройство.
На этот случай, как выяснилось, есть более подходящие кандидаты. Именно: макетные платки с питанием от 3,3В или же гибридные, где 5В идет через стабилизатор, а 3,3В — напрямую к чипу. В любом случае, при покупке рекомендую внимательно изучать, что собрались приобретать и соотносить увиденное с желаемым.
Что касается меня, то я решил вопрос со стабилизатором просто. Так как питаться планировал от 3В, то и питающую линию подключил сразу после стабилизатора, и на этом закрыл вопрос.
. Подключился вот в эту точку
Ну а в итоге у меня получилось устройство под кодовым именем «Позиционер», которое с помощью вибросигнала предупреждает о нежелательном сне на спине, о неправильной осанке или о малой подвижности.
Выглядит не очень презентабельно, поскольку корпуса — то, что я никогда делать не умел.
. батарейка — для масштаба
.
Ничего, скоро сошью чехольчик, и будет лучше.
А вот так работает макет, где как раз видно работящий акселерометр:
По итогам общения с акселерометром (конкретно в этой модификации) хочу сообщить следующее. Штука, на мой взгляд, очень хороша для новичков сразу по нескольким причинам:
1) Безопасно для макетных плат с напряжением 3.3В и 5В, поскольку вход питания один и защищен стабилизатором;
2) Стабильность показаний;
3) Просто в использовании за счет аналогового интерфейса — analogRead() и никакой черной магии.
Что касается минусов, то они вытекают из плюсов:
1) Чтобы экономить энергию, придется поработать руками — припаяться напрямую к чипу;
2) Существует возможность поймать помехи на аналоговой линии.
Доклад закончил. Скоро буду писать про шорты брюки.
Планирую купить+21Добавить в избранноеОбзор понравился+22
+39
такое ощущение что обзор не дописан… хоть бы внутренности вашего готового устройства, результаты подпайки… ну и конечно как оно работает и как помогло вам. вот между фразами: «Подключился вот в эту точку» и «Ну а в итоге у меня получилось устройство» — похоже не хватает абзацев 5. Норма что такие значения которые вы получили или нет — непонятно. Что за логика работы контроллера…
В данной терминологии — поворот на 180 градусов по каждой оси. Например, для оси Z это как если бы сначала акселерометр лежал пинами гребенки вверх, а потом — вниз.
Будет путаться в показаниях. Насколько мне известно, с ними делают даже замочки, которые открываются по тук-тук — тук-тук-тук — тук-тук-тук-тук — тук-тук )
Ну так как интерпретировать показания то? Как я понимаю, если девайс линейно не ускорять, то на него действует наши 9,8g, которые акселерометр будет проецировать на 3 свои оси. Если выставить платку горизонтально и не дёргать, то по двум осям будет ускорение, равное нулю, а по третьей оси — ускорение 9.8g. Вот хотелось бы понять, где у вас ноль, а где почти десятка.
0 = ~ 260 и 10 = ~ 405? т.е. напряжение от 1.3 до 2.025 примерно (если опорное у меги 5 в)?
Вы все правильно поняли. Если такой диапазон кажется слишком узким, у Arduino всегда есть функция map, которая позволяет транслировать исходные данные в заданный диапазон.
Как-то катался на Як-52. Сказал пилоту: «А давай-ка по-взрослому». Ну он и дал «мертвую петлю», на выходе которой было 6,5g. Так вот, от неожиданности ручки мои со штурвала свалились, наушнички с головы сползли… Собственно говоря, кроме угасающего сознания перемежающегося с просветами зрения (в такт с ударами сердца) ничего не было. В этот момент я весил почти 650кг, и, скорее всего, имел выражение лица как у товарища на последнем фото))
А можно подробней о применении: в чем нежелателен сон на спине? Как эту штуку крепить к телу (скотчем?)? Как предполагается будить спящего на спине негодяя — электрический разряд? Не получится ли пробуждение хуже сна на спине?
Ох, ну я бы хотел сказать, что от меня всего можно ожидать, однако это было бы неправдой. Получается, что способен только на такие вот мелкие карманные подлости )
Покупать аналоговый акселерометр и потом его оцифровывать — костыль, происходящий исключительно от нежелания разбираться с I2C или SPI.
С аналоговым акселерометром канонично использовать только теплые ламповые аналоговые операционники и компараторы.
Полностью согласен. Но мне нужен был результат, и чем быстрее — тем лучше. Я и так эту штуку очень долго делал, потому что то одно, то другое. И при этом я не из того типа личностей, которые могут тратить бесконечно долгое время, делая все потихоньку, по чуть-чуть.
Когда то хотел на таком акселерометре сделать автоматическое включение ДХО в автомобиле.
Оказалось куча дел.
Получается, чтобы не прозевать кратковременное изменение ускорения, этот акселерометр нужно опрашивать непрерывно?
Тогда Ардуина не сможет ничем больше заниматься.
В цифровых то можно по прерыванию сделать и не опрашивать всё время.
На зачем постоянно опрашивать? Достаточно раз в 5 сек, скажем, спросить и если показания от прошлых отличаются, свет включаем, а если, допустим, 20 замеров подряд показания не меняются, значит стоим как вкопанные около пары минут уже и можно свет гасить. Остальное время ардуине можно спать или другими опросами заниматься.
Нет, это не ирония. Это горькая правда жизни. На этом МК космический корабль на Марс запустить можно, но ардуиновские библиотеки доводят до того, что "… не сможет больше ни чем заниматься". Это просто опрос АЦП, одного долбаного АЦП!!!
Включение ДХО от акселерометра? Старик Оккам огорчился бы. Чем не устраивает 15-я линия от замка зажигания? Включено зажигание — горят ДХО, выключено — погасли. Или вы любите ездить с горок с выключенным зажиганием?
Использую сигналку с автозапуском двигателя и если взять 15-ю шинку замка зажигания, машина ночью будет двор освещать ДХО во время прогрева.
Это надо с ручника еще линию запрета брать, но там минус замыкается, неудобно.
А так удобнее, поехал-включились, встал-выключились, никакой лишней фигни не надо.
Возможно не внимательно читал обзор или комменты, но не увидел про то, зачем нужно будить при сне на спине. Могу ошибаться, но некоторые храпят в этой позе. Все бы ничего, но у некоторых из этих некоторых бывает микроостановки дыхания. Попросту говоря иной раз можно и не проснуться. Вроде как в поликлиниках обвешиваются датчиками и во время сна проверяют на наличия этих микроостановки дыхания. Записывался на это, но не пошел. Сам грешу храпом на спине. В роли девайс служит супруга… ну еще помогают капли в нос. Опытным путем остановился на ринонорме. Нос дышит, и просыпаешься не уставшим, как будто марафон пробежал. Девайс делать не буду, тут скорее нужно хирургическое вмешательство. Но это уже личное.
Прошу прощение за оффтоп. Однозначно плюсую! И не важно для меня в чем истинный смысл поделки.
Причина была в том, что на поздних сроках беременности в этом положении высокий риск пережатия кровеносной артерии под весом плода, что довольно опасно.
Кстати, мне тоже Ринонорм понравился. Правда, не из-за храпа пока. С другой стороны, я в конечном итоге решил, что мне подходят любые спреи с ксилометазолином.
… зачем такие обзоры?
0 = ~ 260 и 10 = ~ 405? т.е. напряжение от 1.3 до 2.025 примерно (если опорное у меги 5 в)?
не на себе же такие опыты проводить
С аналоговым акселерометром канонично использовать только
теплые ламповыеаналоговые операционники и компараторы.Оказалось куча дел.
Получается, чтобы не прозевать кратковременное изменение ускорения, этот акселерометр нужно опрашивать непрерывно?
Тогда Ардуина не сможет ничем больше заниматься.
В цифровых то можно по прерыванию сделать и не опрашивать всё время.
Назачем постоянно опрашивать? Достаточно раз в 5 сек, скажем, спросить и если показания от прошлых отличаются, свет включаем, а если, допустим, 20 замеров подряд показания не меняются, значит стоим как вкопанные около пары минут уже и можно свет гасить. Остальное время ардуине можно спать или другими опросами заниматься.Это надо с ручника еще линию запрета брать, но там минус замыкается, неудобно.
А так удобнее, поехал-включились, встал-выключились, никакой лишней фигни не надо.
И кстати при прогреве вибрации будут, нужно сильно загрублять чувствительность — что см первый абзац, или гигантские тайминги делать…
Прошу прощение за оффтоп. Однозначно плюсую! И не важно для меня в чем истинный смысл поделки.
Кстати, мне тоже Ринонорм понравился. Правда, не из-за храпа пока. С другой стороны, я в конечном итоге решил, что мне подходят любые спреи с ксилометазолином.