К Arduino на закуску: аналоговый акселерометр ADXL335

Опубликовал | 21.07.2015

Этот акселерометр я покупал под совершенно конкретную задачу — хотел сделать устройство, которое не дает спать на спине дольше заданного времени. Что характерно, все получилось, однако у акселерометра есть несколько интересных особенностей.

Собственно, о них и хочу упомянуть.

Прежде всего надо понимать, что акселерометры бывают с цифровыми и аналоговыми интерфейсами. Первые хороши тем, что меньше подвержены помехам и позволяют подключать к единой шине множество периферийных устройств — явная экономия пинов контроллера. Минус, однако в том, что для работы с такой периферией нужно в коде реализовать протокол обмена, а это расход другого ценного ресурса — памяти.

Однако при подключении всего лишь одного датчика сэкономить выводы контроллера цифровым протоколом не получится, поскольку по количеству требуемых линий что цифра, что аналог получаются идентичными.

. Гребеночку уже напаял, да

Поэтому я и сделал выбор в пользу аналогового акселерометра 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 Источник материала.

Рекламные ссылки