RSS блога
Подписка
К Arduino на закуску: аналоговый акселерометр ADXL335
- Цена: $1.81
- Перейти в магазин
Этот акселерометр я покупал под совершенно конкретную задачу — хотел сделать устройство, которое не дает спать на спине дольше заданного времени. Что характерно, все получилось, однако у акселерометра есть несколько интересных особенностей.
Собственно, о них и хочу упомянуть.
Прежде всего надо понимать, что акселерометры бывают с цифровыми и аналоговыми интерфейсами. Первые хороши тем, что меньше подвержены помехам и позволяют подключать к единой шине множество периферийных устройств — явная экономия пинов контроллера. Минус, однако в том, что для работы с такой периферией нужно в коде реализовать протокол обмена, а это расход другого ценного ресурса — памяти.
Однако при подключении всего лишь одного датчика сэкономить выводы контроллера цифровым протоколом не получится, поскольку по количеству требуемых линий что цифра, что аналог получаются идентичными.
. Гребеночку уже напаял, да
Поэтому я и сделал выбор в пользу аналогового акселерометра ADXL335 (даташит для любопытных). Ведь с ним можно и память сэкономить, и общаться гораздо проще — достаточно банального analogRead().
Т.е. простейший код для чтения показаний действительно прост, как амеба:
В итоге пришло ровно то, что на картинке, и я с упоением занялся макетированием, причем сначала — на полноразмерной плате Arduino Mega 2560. И сильно удивился, поскольку поведение акселерометра не очень укладывалось в рамки здравого смысла. Ну, по крайней мере, пока здравый смысл не сказал что-то вроде «окей, даташит я не читал, но будем считать, что акселерометр так и работает».
. Вот крупнее, если не верите, что это ADXL335
Иными словами, я ожидал увидеть на выходах акселерометра значения в диапазоне от 0В до верхнего предела питания, т.е. 3,3В или 5В, поскольку акселерометр работает с обоими, но об этом позже.
Вместо этого вывод в монитор показал примерно следующее. Примерно — потому что у меня не было стенда с идеальными вертикалями и горизонталями. Все вот этими вот руками.
Значения при максимуме по оси X:
Значения при минимуме по оси X:
Значения при максимуме по оси Y:
Значения при минимуме по оси Y:
Значения при максимуме по оси Z:
Значения при минимуме по оси Z:
Показания эти идентичны что для 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) Существует возможность поймать помехи на аналоговой линии.
Доклад закончил. Скоро буду писать прошорты брюки.
Собственно, о них и хочу упомянуть.
Прежде всего надо понимать, что акселерометры бывают с цифровыми и аналоговыми интерфейсами. Первые хороши тем, что меньше подвержены помехам и позволяют подключать к единой шине множество периферийных устройств — явная экономия пинов контроллера. Минус, однако в том, что для работы с такой периферией нужно в коде реализовать протокол обмена, а это расход другого ценного ресурса — памяти.
Однако при подключении всего лишь одного датчика сэкономить выводы контроллера цифровым протоколом не получится, поскольку по количеству требуемых линий что цифра, что аналог получаются идентичными.
. Гребеночку уже напаял, да
Поэтому я и сделал выбор в пользу аналогового акселерометра 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) Существует возможность поймать помехи на аналоговой линии.
Доклад закончил. Скоро буду писать про
+185 |
44042
209
|
Самые обсуждаемые обзоры
+74 |
3807
147
|
+56 |
3977
69
|
+35 |
3103
60
|
… зачем такие обзоры?
0 = ~ 260 и 10 = ~ 405? т.е. напряжение от 1.3 до 2.025 примерно (если опорное у меги 5 в)?
не на себе же такие опыты проводить
С аналоговым акселерометром канонично использовать только
теплые ламповыеаналоговые операционники и компараторы.Оказалось куча дел.
Получается, чтобы не прозевать кратковременное изменение ускорения, этот акселерометр нужно опрашивать непрерывно?
Тогда Ардуина не сможет ничем больше заниматься.
В цифровых то можно по прерыванию сделать и не опрашивать всё время.
Назачем постоянно опрашивать? Достаточно раз в 5 сек, скажем, спросить и если показания от прошлых отличаются, свет включаем, а если, допустим, 20 замеров подряд показания не меняются, значит стоим как вкопанные около пары минут уже и можно свет гасить. Остальное время ардуине можно спать или другими опросами заниматься.Это надо с ручника еще линию запрета брать, но там минус замыкается, неудобно.
А так удобнее, поехал-включились, встал-выключились, никакой лишней фигни не надо.
И кстати при прогреве вибрации будут, нужно сильно загрублять чувствительность — что см первый абзац, или гигантские тайминги делать…
Прошу прощение за оффтоп. Однозначно плюсую! И не важно для меня в чем истинный смысл поделки.
Кстати, мне тоже Ринонорм понравился. Правда, не из-за храпа пока. С другой стороны, я в конечном итоге решил, что мне подходят любые спреи с ксилометазолином.