Для удобства пользования форумом и поиска информации прошу придерживаться правила: 1 тема = 1 вопрос.
К примеру, если обсуждается настройка передатчика, а у вас вопрос про подключение такого же передатчика к симулятору или вопрос про другую модель передатчика - создавайте новую тему. Если вы новичок в авиамоделизме, рекомендуется прочитать статью Новичку и ссылки с нее.
Исключение только в разделе Вопросы и обсуждения по статьям
Как выложить фото, Как опубликовать видео
С уважением,
Константин.
- Начало
- » Авторские модели
- » Моя модель
- » KolhozCopter
KolhozCopter
Re: KolhozCopter
Скетч для передатчика:
#include <VirtualWire.h>
const int transmit_pin = 9; // вывод Data передатчика подключаем к выводу 9 Arduino
const int start = 8; // кнопка старт на 8 порту
void setup()
{
vw_set_tx_pin(transmit_pin);
vw_setup(4000); // Скорость передачи
}
void loop()
{
if (digitalRead(start) == HIGH)
{
const char *msg = "0123"; // текст сообщения
vw_send((uint8_t *)msg, strlen(msg)); // отправляем сообщение
vw_wait_tx(); //
}
}
можно качнуть тут
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
Re: KolhozCopter
Как видно при нажатии кнопки Старт (8 порт) отправляется сообщение "0123", это шифр для того что бы приемник случайно не сработал от шума.
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
Re: KolhozCopter
Прошивка приемника:
#include <VirtualWire.h>
byte message[VW_MAX_MESSAGE_LEN];
byte messageLength = VW_MAX_MESSAGE_LEN;
const int receiver_pin = 11; // подключаем вывод Data приемника к 11 выводу Arduino
const int pusk_led = 12; //
const int pusk = 8; //
void setup()
{
pinMode(pusk_led, OUTPUT);
pinMode(pusk, OUTPUT);
vw_set_rx_pin(receiver_pin); // вывод Data приемника
vw_setup(4000); // скорость передачи
vw_rx_start(); // начало приема
}
void loop()
{
if (vw_get_message(message, &messageLength)) // если что-то приняли.
{
if (message[0] == 48 && message[1] == 49 && message[2] == 50 && message[3] == 51)
{
digitalWrite(pusk, LOW);
digitalWrite(pusk_led, HIGH);
delay(200);
}
}
else {
digitalWrite(pusk, HIGH);
digitalWrite(pusk_led, LOW);
}
}
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
Re: KolhozCopter
Перед запуском ракеты, добавлю схему высотомера, которую я собрал три года назад.
Высота записывается в память, потом можно посмотреть на максимальную высоту и скорость.
А так же в апогее активирует вышибной заряд.
Прошивка:
/*
* Raketa-mini или альтиметр в бюджетном варианте.
* Программа для записи летных характеристик ракеты
* Используется контролер микро ардуино,
* барометр BMP085 (лучше использовать BMP180)
* ЗУМ(6), кнопка(8) для стирания, светодиод(7) для индикации
* база транзистора (9) для вышибного заряда
* ПЗУ используется встроенное всего 1кБайт, поэтому
* высота записывается 255 раз с выборкой ttt мсек.
* в 0 адрес записывается максимальная высота
* Высота округляется до 1м.
*/
//Добавляем библиотеки
#include <EEPROM.h>
#include <Wire.h>
#include <BMP085.h>
BMP085 dps = BMP085(); // Digital Pressure Sensor
long Al1 = 0; // высота с барометра
int hmax = 0; // максимальная высота полета
int led = 7; // номер порта для светодиода
int knop = 8; // номер порта для кнопки очистки памяти
int fire = 9; // номер порта для вышибного заряда
int p = 6; // номер порта пьезодинамик
int hh = 3; // высота с которой начинается запись полета в память
// а так же высота снижения при котором сработает вышибной заряд
unsigned long tt = 0; // сюда записывает время начало полета
unsigned long t = 1; //время кратное ttt
int ttt = 80; //будем записывать каждые ttt мсек (от 20 до 1000 мсек)
//20 = 255*20=5100 это примерно 5 сек полета
//1000 = 255 секунд полета
boolean rec = 0;// 0=память чистая, 1=в памяти хранятся данные о полете
void setup()
{
pinMode(led, OUTPUT);
pinMode(p, OUTPUT); //объявляем пин как выход
pinMode(knop, INPUT);
pinMode(fire, OUTPUT);
digitalWrite(fire, LOW);
Wire.begin();
Serial.begin(9600); // запуск последовательного порта
dps.init(MODE_STANDARD, 0, true);
}
void loop()
{
digitalWrite(led, HIGH); //включаем светодиод
// Проверяем есть ли данные
if (EEPROM.read(0)>1)//если по адресу 0 есть данные подымаем флаг
{
rec = 1;
}
int h = 0;//высота полета
if (rec == 1)//если есть данные в памяти
{
vyvod();//вывод информации на экран
while (digitalRead(knop) == 0) //ждем нажатия кнопки стирания
{
delay (100);
}
digitalWrite(led, HIGH); //включаем светодиод
delay (200);
digitalWrite(led, LOW); //выключаем светодиод
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);//стираем память
// EEPROM_int_write(0, 0);
Serial.println("Clear"); // печатает в порт
rec = 0;//ставим флаг - память чистая
}else //если данных нет
{
do
{
dps.getAltitude(&Al1);//берем высоту из барометра
h=round(Al1*0.01);//округляем высоту до 1м
} while (h < hh);// ждем когда ракета подымится на высоту hh
digitalWrite(led,LOW);
tt = millis();//запоминаем сколько прошло времени с начало работы контролера
// начинаем записывать данные
for (int i=2; i<511; i++)//начиная со 2 адресса
{
if (hmax < h)//если текущая высота выше максимальной(значит идет набор высоты)
{
hmax = h;//записываем новое значение максимальной высоты
EEPROM_int_write(0, hmax);//по адресу 0 записываем макс.высоту
}
else //начинаем снижатся
{
if (hmax > (h+hh))//ждем пока не опустится ниже hh от макс.высоты
{
digitalWrite(fire, HIGH); // активируем вышибной заряд
}
}
EEPROM_int_write(i, h);//записываем текущую высоту по адресу i
while ((t*ttt)>(millis()-tt)) ;
t++;
dps.getAltitude(&Al1);
h=round(Al1*0.01);
i++;
}
t = 1;
// Serial.print(" mil="); // печатает в порт
// Serial.println(millis()-tt); // печатает в порт
rec=1;
digitalWrite(fire, LOW); // turn the LED on (HIGH is the voltage level)
while(millis()>0)// будет пищать пока есть питание
{
tone (p, 500); //включаем на 500 Гц
delay(100); //ждем 100 Мс
tone(p, 1000); //включаем на 1000 Гц
delay(100); //ждем 100 Мс
}
}
}
// запись в пямять по 2 байта
void EEPROM_int_write(int addr, int num) {
byte raw[2];
(int&)raw = num;
for(byte i = 0; i < 2; i++) EEPROM.write(addr+i, raw[i]);
}
// чтение из памяти по 2 байта
int EEPROM_int_read(int addr) {
byte raw[2];
for(byte i = 0; i < 2; i++) raw[i] = EEPROM.read(addr+i);
int &num = (int&)raw;
return num;
}
// вывод на экран результат полета
int vyvod(){
Serial.println(" Polet ="); // печатает в порт
Serial.print(" max="); // печатает в порт
Serial.println(EEPROM_int_read(0)); // печатает в порт
for (int i=2; i<512; i++)
{
digitalWrite(led, HIGH);
Serial.println(EEPROM_int_read(i)); // печатает в порт
i++;
digitalWrite(led, LOW);
delay (50);
}
}
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
- fortekom
- Владимир (СПБ)
- Пилот
- 621 Сообщений
-
- Начало
- » Авторские модели
- » Моя модель
- » KolhozCopter
Информация
- Статистика форума:
- Всего тем:
- 9948
- Всего опросов:
- 79
- Всего сообщений:
- 183174
- Всего сообщений сегодня:
- 1
- Пользователи форума:
- Всего пользователей:
- 10173
- Последним зарегистрировался:
- urus_vp
- Пользователи онлайн:
- 0
- Гостей онлайн:
- 753
- Самые активные пользователи:
- konst, carpenter, kompmen, cnyx, Dragony, maks_dg, Goby, Student, alldn, nikolaypet
- Онлайн:
- Нет пользователей онлайн