
- Цена: $1.81
Собственно, о них и хочу упомянуть.
Прежде всего надо понимать, что акселерометры бывают с цифровыми и аналоговыми интерфейсами. Первые хороши тем, что меньше подвержены помехам и позволяют подключать к единой шине множество периферийных устройств — явная экономия пинов контроллера. Минус, однако в том, что для работы с такой периферией нужно в коде реализовать протокол обмена, а это расход другого ценного ресурса — памяти.
Однако при подключении всего лишь одного датчика сэкономить выводы контроллера цифровым протоколом не получится, поскольку по количеству требуемых линий что цифра, что аналог получаются идентичными.
Поэтому я и сделал выбор в пользу аналогового акселерометра 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) Существует возможность поймать помехи на аналоговой линии.
Доклад закончил. Скоро буду писать про шорты брюки.
(c) 2015 Источник материала.