ArduCopter Mega: порт на обычную Arduino (тестим)
- пытаюсь выдрать драйвер сонара из пирата для multiwii 😃
загружаю MegaPirateNG_2.0.49_Beta4 скетч, сонар пашет отлично… выношу в отдельный скетч не дышит… помогите разобраться гуру программинга под Атмегу 😃
вот скетч
//#include <FastSerial.h>
// variables to take x number of readings and then average them
// to remove the jitter/noise from the DYP-ME007 sonar readings
const int numOfReadings = 10; // number of readings to take/ items in the array
int readings[numOfReadings]; // stores the distance readings in an array
int arrayIndex = 0; // arrayIndex of the current item in the array
int total = 0; // stores the cumlative total
int averageDistance = 0; // stores the average value
// setup pins and variables for DYP-ME007 sonar device
int echoPin = 10; // DYP-ME007 echo pin (digital 2)
int initPin = 9; // DYP-ME007 trigger pin (digital 3)
unsigned long pulseTime = 0; // stores the pulse in Micro Seconds
unsigned long distance = 0; // variable for storing the distance (cm)
//setup
void setup() {
pinMode(initPin, OUTPUT); // set init pin 3 as output
pinMode(echoPin, INPUT); // set echo pin 2 as input
// initialize the serial port, lets you view the
// distances being pinged if connected to computer
Serial.begin(115200);
// create array loop to iterate over every item in the array
//for (int thisReading = 0; thisReading < numOfReadings; thisReading++) {
//readings[thisReading] = 0;
//}
// Sonar INIT
//=======================
//D48 (PORTL.1) = sonar input
//D47 (PORTL.2) = sonar Tx (trigger)
//The smaller altitude then lower the cycle time
// 0.034 cm/micros
//PORTL&=B11111001;
//DDRL&=B11111101;
//DDRL|=B00000100;
PORTH&=B10111111; // H6 -d9 - sonar TX
DDRH |=B01000000;
PORTB&=B11101111; // B4 -d10 - sonar Echo
DDRB &=B11101111;
//PORTG|=B00000011; // buttons pullup
//div64 = 0.5 us/bit
//resolution =0.136cm
//full range =11m 33ms
// Using timer5, warning! Timer5 also share with RC PPM decoder
TCCR5A =0; //standard mode with overflow at A and OC B and C interrupts
TCCR5B = (1<<CS11); //Prescaler set to 8, resolution of 0.5us
TIMSK5=B00000111; // ints: overflow, capture, compareA
OCR5A=65510; // approx 10m limit, 33ms period
OCR5B=3000;
}
// Sonar read interrupts
volatile char sonar_meas=0;
volatile unsigned int sonar_data=0, sonar_data_start=0, pre_sonar_data=0; // Variables for calculating length of Echo impulse
ISR(TIMER5_COMPA_vect) // This event occurs when counter = 65510
{
if (sonar_meas == 0) // sonar_meas=1 if we not found Echo pulse, so skip this measurement
sonar_data = 0;
PORTH|=B01000000; // set Sonar TX pin to 1 and after ~12us set it to 0 (below) to start new measurement
}
ISR(TIMER5_OVF_vect) // Counter overflowed, 12us elapsed
{
PORTH&=B10111111; // set TX pin to 0, and wait for 1 on Echo pin (below)
sonar_meas=0; // Clean "Measurement finished" flag
}
ISR(PCINT0_vect)
{
if (PINB & B00010000) {
sonar_data_start = TCNT5; // We got 1 on Echo pin, remeber current counter value
} else {
sonar_data=TCNT5-sonar_data_start; // We got 0 on Echo pin, calculate impulse length in counter ticks
sonar_meas=1; // Set "Measurement finished" flag
}
}
// execute
void loop() {
//digitalWrite(initPin, HIGH); // send 10 microsecond pulse
//delayMicroseconds(10); // wait 10 microseconds before turning off
//digitalWrite(initPin, LOW); // stop sending the pulse
//pulseTime = micros();
// pulseTime = pulseIn(echoPin, HIGH); // Look for a return pulse, it should be high as the pulse goes low-high-low
// distance = pulseTime/58; // Distance = pulse time / 58 to convert to cm.
if ( (sonar_data < 354) && (pre_sonar_data > 0) ) { //wrong data from sonar (3cm * 118 = 354), use previous value
sonar_data=pre_sonar_data;
} else {
pre_sonar_data=sonar_data;
}
distance = (sonar_data / 118); // Magic conversion sonar_data to cm
Serial.println(distance, DEC); // print out the average distance to the debugger
/*total= total - readings[arrayIndex]; // subtract the last distance
readings[arrayIndex] = distance; // add distance reading to array
total= total + readings[arrayIndex]; // add the reading to the total
arrayIndex = arrayIndex + 1; // go to the next item in the array
// At the end of the array (10 items) then start again
if (arrayIndex >= numOfReadings) {
arrayIndex = 0;
}
averageDistance = total / numOfReadings; // calculate the average distance
*/
(averageDistance, DEC); // print out the average distance to the debugger
delay(100); // wait 100 milli seconds before looping again
}
помогите разобраться гуру программинга под Атмегу
у тебя не прописан инит PCINT - прерывания по входу ECHO 😃
PCMSK0 = B00010000; // sonar port B4 - d10 echo
PCICR |= 1; // PCINT activated for PORTB
Проверил, автоматически. Причем, неплохо настраивают. Раньше я выкидывал нафиг и делал вручную калибровку, но сейчас авто неплохо работает. Авто-сохранение модификации каждую минуту. Чтобы получилось что-то близкое к норма, достаточно покрутить плату туда-сюда. После первого полета уже почти в идеале.
Спасибо!
у меня 5883 компас отдельный… возможно с осями напутал… если мотреть по чипу ось Y должна смотреть вперед, а X вправо?
Спасибо Syberian. Я думал что твоя прошивка пойдет НО
То-ли лыжи не едут, то-ли я совсем…
- Качаю это Mission Planner 1.0.68.zip … распаковываю на диск С
- Качаю это MegaPiratePlanner.zip … распаковываю с заменой туда-же
- В ардуину с заменой скидываю исходники прошивки… Ну там настраваю под свое (трикоптер GPS плата датчиков)
компилю и заливаю через ардуину в проц готовый ХЕКс
Запускаю миссионпланер
в мисионпланере половина пидов “Лоадинг” и не меняються…
если во вклакдке Фирмаваре тыкнуть setup мисонпланер висит.
Что я не так делаю…
Чорд… страница в вики безбожно устарела.
качается планнер 1.1.9 code.google.com/p/ardupilot-mega/…/detail?name=Mis…
распаковывается и запускается. Везде выбираем ардукоптер2.
В ардуине меняется только плата датчиков
Всё. Дальше сетап-ресет в планнере, калибровка радио в нем же и в путь. Перед калибровкой радио можешь залить мой param-файл.
Расположение моторов и каналов приемыша - как я писал в письме.
АААА, заработала… )))) Спасибо.
Да как-то нужно с вики разобраться… а то новичкам (вроде меня ) тяжело разобраться… уж очень много разных вариантов. что откуда качать
Про моторы и приемник я уже посмотрел и сравнил файлы… deff
Попробую их подмахнуть в 49 beta5. там у меня gps лучше
у тебя не прописан инит PCINT - прерывания по входу ECHO PCMSK0 = B00010000; // sonar port B4 - d10 echo PCICR |= 1; // PCINT activated for PORTB
не пашет 😦
в консоли строчит zero с бешенной скоростью не смотря на delay
0
0
0
0
там delay не причем, где то в моторах/приемнике счетчик тикает, если память не изменяет, если эти либы разорвать, то работать не будет
там delay не причем
я имелл ввиду что стандартный delay не пашет, даже если выставить в 1сек… loop строчит с бешенной скоростью
но в обшем это не важно, т.е. надо понять почему дривер не пашет…
loop строчит с бешенной скоростью
обработка внтури прерывания, там delay не действует - как пришел сигнал, так и отработалась команда, а то что нули выходят - это счетчик надо выковырять из другой либы
обработка внтури прерывания, там delay не действует - как пришел сигнал, так и отработалась команда
это понятно что на само прерывание delay (который внутри loop) ни как не влияет… НО вот диррективы (или как их назвать) самого драйвера влияют на delay внутри loop, т.е. delay игнорится и loop на бешенной скорости
Нисибе чего!!!😃
Олег, у квада размерчик то мужской!
ДВС планируется?
Всем привет! Есть вот такой аппарат, плата Руссокоптер, регули I2C, перешитые из HobbykingSS. Мне не нравится, как Руссокоптер летает именно в конфигурации Y6 (постоянная перекомпенсация). Аппарат задумывался для съемки с воздуха, есть активный подвес. В связи с этим несколько вопросов:
- Регуляторы нужны PWM, HobbykingSS 25-30 пойдут? (Слышал, что требуется перепрошивка) просто есть в наличии.
- Сонар победили таки? Есть такой, как на фото, с виду тоже самое. Есть еще Maxbotix MaxSonar-EZ0 (вроде тоже на ардуине работал).
- Есть Arduino Mega 2560, нужно купить AllinOne и всё? И стоит ли покупать с GPS, если есть GPS от ИглТрии?
- Реально кто из наших летал по GPS? Каков порядок а точности в метрах?
Почитал ветку, и проект мне понравился, тем более Олега знаю по другим проектам. В общем охота замутить 😒
- регули любые PWM
- сонар победили
- надо 1280 или 2560 ардиунку, нужно докупить allinone, гпс любой с UART выходом
- хз
тут еще allinone новый вроде (или другая платка с датчиками) как вылез с новым барометром, хз работает он или нет и тестилили его, но должен на порядо лучше высоту узнавать
Чорд… страница в вики безбожно устарела.
А какая на текуший момент супер стейбл версия прошивки?
Мне не нравится, как Руссокоптер летает именно в конфигурации Y6 (постоянная перекомпенсация)
Это не проблема мозгов, это проблема оптимального соотношения тяги двигателей и полного веса аппарата… достаточно загрузить его камерой или еще чем и все будет пучком. Мегапират еще хуже будет летать, к сожалению.
Пробовал грузить, но не особо помогает. Там еще один интересный момент: на свежих батареях колбасит, а подсядут - и он успокаивается. Кстати, здесь где-то мысль промелькнула, что Y6 стабильнее, чем X6 - я так не считаю, кроме того, он еще и жрет больше. Вообще, Руссокоптер мне нравится, кстати, было изготовлено пять аппаратов в разных конфигурациях, барометр там очень неплохо работает. Жаль, что проект погас что-то последнее время. Что привлекает в Мегапирате - это возможность использования GPS и открытый код в плане гибкости использования сенсоров и т.п.
Мегапират еще хуже будет летать, к сожалению.
Вы считаете, что код Руссокоптера более оптимален? Или более гибкий в настройках? Или просто мегапират глючит?
Я считаю что руссокоптер более плавно летает, там все сделано с умом, мегапират и ардукоптер летают хуже (но по гпс, а гибкость в выборе датчиков только ухудшает плавность полета). А перекомпенсация это вообще не о мозгах, если загруз коптера не помогает, значит надо играть с длинной лучей, размером пропеллеров.
Тов. Пираты
Я раскопал настройку, которая сильно увеличила стабильность моей трешки с последним зазубренным винтом 😃
В библиотеках открыть AP_ADC/AP_ADC_ADS7844.cpp
Найти строку ( №125 )
i2c_write(0x18+4); // Internal Sample Rate 1kHz, 1…6: 1=200hz, 2-100,3-50,4-20,5-10,6-5
Заменить на
i2c_write(0x18+2); // Internal Sample Rate 1kHz, 1…6: 1=200hz, 2-100,3-50,4-20,5-10,6-5
Больше никаких настроек менять не надо.
Проверьте кто-нить пжл?
Подходит для любой версии мегапирата от В8 до 49. Проверялось на 49 BV beta GPS OK
Как-то чуть не год назад попробовал полетать на квадрике morpheusa с какой-то нашей переделкой “немца” в режиме гир. Я хорошо запомнил эту плавность в управлении. Теперь, похоже, нашел ее и тут.
попробовал полетать на квадрике morpheusa
Так morpheus вроде и есть на aircam.ru (ака Руссокоптер)
Morpheus
Активный участник
34 лет
Омск
Дата рождения: Июнь-10-1977
Так morpheus вроде и есть
Здесь он тоже есть.
Значит, это действительно был рускоп.
Юрий, если надумаете стать пиратом, для самолетов на то же железо тоже порт есть. По точкам уже полетали с автовзлетом и RTH.
===
Видно, не судьба мне от мультироторов скрыться 😁
Придется продолжать прерванную линию мегапирата, начиная с 49 версии.