Посоветуйте точный акселерометр
- Войдите на сайт для отправки комментариев
Втр, 08/11/2016 - 18:25
Друзья.
Посоветуйте акселерометр, нужно мерять угол наклона до десятых градуса ( 10.3 например), cейчас пользуюсь ADXL335, но или датчик не подходит, то ли руки кривые, но десятые градуса реальности не соответствуют реальностию. Хелп
Пример кода что и спользуеться:
////////////////////////////////////////////////////////////////// //©2011 bildr //Released under the MIT License - Please reuse change and share //Simple code for the ADXL335, prints calculated orientation via serial ////////////////////////////////////////////////////////////////// //Analog read pins const int xPin = 0; const int yPin = 1; const int zPin = 2; //The minimum and maximum values that came from //the accelerometer while standing still //You very well may need to change these int minVal = 265; int maxVal = 402; //to hold the caculated values double x; double y; double z; void setup(){ Serial.begin(9600); } void loop(){ //read the analog values from the accelerometer int xRead = analogRead(xPin); int yRead = analogRead(yPin); int zRead = analogRead(zPin); //convert read values to degrees -90 to 90 - Needed for atan2 int xAng = map(xRead, minVal, maxVal, -90, 90); int yAng = map(yRead, minVal, maxVal, -90, 90); int zAng = map(zRead, minVal, maxVal, -90, 90); //Caculate 360deg values like so: atan2(-yAng, -zAng) //atan2 outputs the value of -π to π (radians) //We are then converting the radians to degrees x = RAD_TO_DEG * (atan2(-yAng, -zAng) + PI); y = RAD_TO_DEG * (atan2(-xAng, -zAng) + PI); z = RAD_TO_DEG * (atan2(-yAng, -xAng) + PI); //Output the caculations Serial.print("x: "); Serial.print(x); Serial.print(" | y: "); Serial.print(y); Serial.print(" | z: "); Serial.println(z); delay(100);//just here to slow down the serial output - Easier to read }
http://xn--d1ahbulud.xn--b1ayhe.xn--p1ai/?p=153
Пробовал, десятые градуса не соотвеисивуют реальности :(
т.е. ты хочешь мерять диапазон в 180 гр. с точностью до десятой?
Да, или в диапазон 90, но с точностью до десятой, но что для этого взять, уже запутался.
fire_on_line, откуда может взяться точность в 0.1, если Вы в скетче явно задаете погрешность в 1 градус?
Где именно? С тригонометрией у меня напряг )
Скейтч от сюда http://bildr.org/2011/04/sensing-orientation-with-the-adxl335-arduino
А вот здесь:
у Вас все вычисления в градусах - в целых числах. Меньше одного градуса так в принципе получить нельзя.
Мммммда, не обратих внимание, выдает то не ценые числа:
http://soltau.ru/index.php/arduino/item/350-kak-podklyuchit-akselerometr...
И????
"Функция map() использует целочисленные вычисления, поэтому не возвращает дробных значений, как это иногда ожидается. При этом дробная часть числа просто отбрасывается, без округления или вычисления средних значений."
Кроме того
то есть требуется калибровка, коэффициент преобразования mv\g надо знать точно.
да там в статье все описано, даже как калибровать.