3 акселерометра mma7660 на i2c
- Войдите на сайт для отправки комментариев
Втр, 14/10/2014 - 19:04
Добрый день! Пишу работу по теме "трение при ударе", для этого решил собрать 3 акселерометра на одной i2c, поставить их в разные места (на то чем буду ударять, и куда буду ударять), затем смотреть скачки на графиках в момент удара и делать выводы. Установка с маятниками и всем прочим имеется. Вопросы по шине и акселерометрам mma7660 (http://www.seeedstudio.com/depot/Grove-3Axis-Digital-Accelerometer15g-p-...):
Можно ли с ними снять единомоментные показания?
Я пытался и читал, но не смог осилить подключение. Узнал что для слейвов в даташите указаны адреса с 8 по 19, но далее не смог продвинуться, как заставить их работать? Ранее только в ознакомить лётных целях работал с Ардуино.
одновременно не получится точно
но возможно это будет очень быстрое поочередное опрашивание. но хз какая скорость опроса акселерометра
Может быть тогда проще на каждую Ардуино по одному акселерометру? И потом просто графики наложить?
Я конечно с акселерометрами не сталкивался лично, но наверное должны быть те, которые без I2C работают. Которые работают напряму вполне можно подключить параллельно, лишь бы выводов хватило
самые точные с сожалению получатся только с 3 ардуинами. причем 2 из них будут синхронизироваться по первой. чтобы были одни временные точки
У меня есть три ардуино Уно и акселерометры, с удовольствием откажусь от одной шины, но тогда вопоос : как их вместе заставить работать? Я попробовал запустить уно-акс и уно-акс, постукать, покидать, из значений график построить, но без синхронизации это просто туфта (
сделай просто. объедени земли ардуин. выбери любой пин с которого будешь подавать сигнал остальным
подключать к остальным на пин 2 или 3. использовать прерывание короче
главная отправляет сигнал и начинает измерять. остальные по этому сигналу тоже начинают измерять. получится одновременно
на главной можно еще часы повесить. она будет хранить временные метки. наверно это нужно
далее просто собрать данные и все. черти графики и т.д.
а можно, пожалуйста, несколько подробнее? есть стандартынй скетч вывода показаний акселерометра, есть 3 ардуино, на каждую подключен акселерометр и вставлен кусок кода, отвечающий за их работу. на этом работа с самими акселерометрами закончена и теперь задача только объеденить ардуино все вместе, так? Земли объеденил.
давай код
еще есть сами библиотеки для mma7660:
и еще один код для mma7660
есть еще, когда по i2c и второй акселерометр слейв: (но он уже видимо не нужен)
во первых когда вставляешь код больше 10 строк ставь галочку сворачивать код по умолчанию
насколько быстро работает этот код? только убери все про отправку в сериал в лупе. с помощью millis() измерь время опроса датчика, чтобы понять на что рассчитывать и если ли смысл продолжать
на это код
показал значения:
а delay то зачем оставил?
и используй micros()
поставив микрос и закомментировав delay(500)
1 сек = 1\4 000 000 от полученного значения?
т.е. в моем случае время прохода один раз составляет 0.000304 секунды?
получил:
Time: 1216
проверь так. сразу разница будет. и переменные каждый раз объявлять глупо
вот так вот получилось(значение в 50 тыс. через каждые 90 строк повторяется):
ну такие значения приемлимы. можно и поизмерять
Отлично! каждый по отдельности у меня измеряет, а вместе как? я просто очень поверхностно знаком с тем как это работает!
почитай про прерывания. не буду за тебя все делать. а принцип уже описал
понял! к концу недели постараюсь разобраться!
я пока таким образом научился принимать сигнал со второй на первую ардуино:
передает:
получает:
перепутал местами, но смысл правильный. только теперь на прерываниях
если я использую rx tx для считывания значений с одной ардуино на другую, то какими командами к ним обращаться, serial, как я понял, не работает, потому что в это же время используется подключение по юсб! с лампочкой понятно - там либо лоу либо хай, а как записать данные и отправить на ногу я не понял!
прерывание мне нужно ставить каждый раз, когда посылающая ардуинка отпраила сигнал и что бы принимающая могла его успевать каждый раз записывать?
по прерыванию две остальные измеряют и например хранят данные в оперативной памяти. а после измерений как хочешь. можешь в eeprom в конце измерения записать и считать с каждой (для 500 измерений нужно всего 1кбайт оперативки), можешь на sd карту записывать или в uart отправить. короче как хочешь и как сможешь
я написал для передачи времени, но почему то значения разнятся с теми, что были раньше
получает:
передает:
выдает около
я правильно понимаю, что по поводу прерываний надо использовать http://arduino.ru/Reference/AttachInterrupt в отправляющем контроллере в void setup() поставть? или нет? Подскажи пожалуйста!
нет. должно быть в приемных. приемные должны по прерыванию начать измерять. а передающей не надо. она сама говорит когда начинать
сделал для принимающей вот так вот: но все равно не работает.
http://arduino.ru/Reference/AttachInterrupt
посмотри пример как нужно правильно оформлять
подумал и решил сделать таким вот образом: подключить на каждый ком порт по ардуино и через процессинг записывать показания в один файл, что думаешь? с одной пока что все работает!
а как синхронизировать будешь?
то что процессинг будет собирать и строить графики хорошо, но тебе же нужна привязка ко времени процессов или неважно если показания одного из датчиков будут отставать?
вот так вот выглядит код для процессинга:
а вот так вот выглядят выводы:
как видно он не совсем последовательно выводит. кто быстрее того и вывел. тут тоже получается надо синхронизировать, но я не понимаю как(
да писал уже. как по другому сделать сам придумывай
через прерывания. но я не разобрался что было не так с тем. http://arduino.ru/forum/apparatnye-voprosy/3-akselerometra-mma7660-na-i2c#comment-85759 тут я включаю прерывание priem, затем это прерывание должно при условии получения чего либо записывать эту информацию в файл.
а в
http://arduino.ru/forum/apparatnye-voprosy/3-akselerometra-mma7660-na-i2...
я писал что посмотри как правильно оформлять
у меня ошибка в том, что я не правильно задаю function? "function: функция, вызваемая прерыванием, функция должна быть без параметров и не возвращать значений"
программа для ведущей ардуино с акселерометром должна выглядеть так: ардуино получает значения от акселерометра и записывает их, но, если на цифровом порту есть сигнал, то включается прерывание и он должен записать полученные данные с цифрового порта?
пока не поставил на установку думаю что оба(ускорение смотрю, а перемещение может быть пригодится), потом будет убрана одна ось и даже может быть и вторая.
проверь. скорость 115200. мне нужно последнее число
589 выдал, а что он считает?
это сколько занимает передача числа с плавающей запятой в uart на скорости 115200
0,59 мс неплохо. как часто нужно измерять?
50-100-200 милиссекунд
чем чаще - тем лучше, там маятник бьет по вагонетке, которая на пружинах калеблется туда-сюда.
попробуй так. на 2 пин подавай сигнал от второй ардуины. при сигнале первая должна провести измерения и отправить в uart
минимум около 10 мс чтобы точно установилось. а это 100 раз в секунду
я попробовал подававать 1 на второй вход через равные промежутки времени - ничего не произошло!
так же попробовал залить код который был у нас ранее для передачи значений - тоже ничего не вышло!
а ты как смотришь? в терминале ардуины или сразу в процессинг шлешь?
в терминале ардуины! надо просто любое чредование 0 и 1 подавать, верно?
ну да. попробуй с частотой 1гц для начала
я взял стандартное мигание светодиодом на 13 порту - там как раз 1 Гц, соеденил 13 порт со 2-ым на главной и ничего не происходит.
попробуй еще раз
ничего не происходит!
ничего не происходит!