Настройка акселерометра MMA7361

Jeka778
Offline
Зарегистрирован: 07.06.2015

Всем привет.

Подключил акселерометр к Arduino Uno, появилась необходимость его настроить.

Когда трясу устройство, на экран должен выводиться текст. Ещё раз трясу, выводится другой текст и так далее. Если не трясу или слабо трясу, ничего не меняется.

Вот скетч на то, что есть:

  #include <Wire.h>
  #include <LiquidCrystal.h>
  
  String phrases[] = /* Known phrases */{"Ask again later", "It is certain", "Without a doubt", "Yes - definitely", "As I see it, yes", "Most likely", "Outlook good", "Yes", "My reply is no", "Very doubtful", "No", "Not a chance", "No way", "Absolutely not", "I doubt it", "Ask again", "I'm uncertain"};
  String output;

  LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
  int backLight = 13;    // pin 13 will control the backlight

  int x; // выходная переменная по оси x
  int y; // выходная переменная по оси y
  int z; // выходная переменная по оси z
  int numberofphrases = 17;
  
  void setup()
  {
  pinMode(backLight, OUTPUT);
  analogWrite(backLight, 150);
  randomSeed(analogRead(5));
  lcd.begin(16, 2);
  Serial.begin(9600); 
  }
  void loop()
  {
  int z = analogRead(2);
  if (z > 600|| z < 15);
  {
  lcd.clear();
  output = phrases[random(numberofphrases)]; //Chooses phrase
  lcd.print(output); //Displays it
  }
  Serial.print("Z = "); // выводим значение по z
  Serial.println(z);
  delay(2000);
  }

 

Jeka778
Offline
Зарегистрирован: 07.06.2015
int STABILITY = 10;
  int x; // выходная переменная по оси x
  int y; // выходная переменная по оси y
  int z = ((STABILITY-1)* z + analogRead(A2)) / STABILITY; // выходная переменная по оси z

Нашёл такое решение. Если кто-то может предложить лучше, буду благодарен.

Jeka778
Offline
Зарегистрирован: 07.06.2015

Теперь ещё вопрос: "Как зафиксировать значение?"

Я имею ввиду, что если я наклоню акселерометр, то значение "Z" всегда будет больше заданного числа (в моём случае - 200), а ответы будут сменять друг друга, каждые две секунды, как это заданно в программе (delay(2000));

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

Jeka778 пишет:

Теперь ещё вопрос: "Как зафиксировать значение?"

Я имею ввиду, что если я наклоню акселерометр, то значение "Z" всегда будет больше заданного числа (в моём случае - 200), а ответы будут сменять друг друга, каждые две секунды, как это заданно в программе (delay(2000));

Вы уверены, что это так и что у Вас акселерометр? Если мне не изменяет память, то акселерометр - это штука для измерения ускорения, а не угла наклона. Угл наклона измеряет датчик магнитного поля или как-то так.

Ну а если по существу, то введите переменную oldZ, например, и сравинвайте не Z а разность Z-oldZ, после чего в oldZ кладите значение Z.

Jeka778
Offline
Зарегистрирован: 07.06.2015

Всё, верно по поводу акселерометра.

MMA7361  - трёхосевой акселерометр (он выдаёт сигнал во время свободного падения, а также выдаёт сигнал о положении осей - x,y,z).

Хм, сейчас более подробно почитал о нём, буду экспереметнировать с датчиком свободного падения. Просто смотрел в интернете подобные "проекты", везде используют оси.

Спасибо Вам.