AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

Определение переворота

Детект переворота аппарата по акселерометру для turtle-mode.

DMC.34 · Датчики · ATmega328P

Задача

Определить, что аппарат лежит на спине (перевёрнут), по знаку оси Z акселерометра.

Алгоритм

Если проекция g на ось Z отрицательна (az<0) и велика по модулю — аппарат перевёрнут.

Исходный код (C, avr-gcc)

⇩ Скачать 34-tilt-accel.c

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>
int main(void){
  DDRB|=(1<<PB5);
  volatile int16_t az=16384;              // сырое значение оси Z
  for(;;){
    if(az < -8000) PORTB|=(1<<PB5);       // перевёрнут
    else PORTB&=~(1<<PB5);
    _delay_ms(50);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Основа turtle-mode: перевернуться реверсом моторов. Порог по |az| отсекает наклоны.