Просмотр полной версии : Arduino
Здравствуйте!
Есть мысль, что на arduin можно сделать управление радиостанцией.
Скажем в режиме Маяка или попугая.
Нет ли где то готовых схемок и ПО по данной идеи?
Может имеется в виду Аппаратная платформа Arduino | Arduino.ru (http://arduino.ru) ?
Про arduin я не слышал.
Для начала надо четко решить что хочешь сделать, а уж потом искать или придумывать "схемки и ПО".
А так разговор пустой.
Так ТС же написал - хочет сделать "маяк или попугая" :s11:
Схем и прошивок более чем навалом. Ищем "радиолюбительский репитер схема". (И где еще можно маяк встретить? :) )
Написать программу маяка - школьная задачка по программированию.
А разве GOOGLE поиск отменили ? beacon radio arduino - (http://www.google.ru/search?sclient=tablet-gws&num=20&newwindow=1&site=&source=hp&q=beacon+radio+arduino&oq=beacon+radio+arduino&gs_l=tablet-gws.3..0i22i30k1.81535.95413.0.97041.20.19.0.1.1.0.277.3793.0j11j8.19. 0....0...1c.1.64.tablet-gws..0.20.3786...0j0i131k1j0i19k1j0i22i30i19k1j0i22i10i30k1j0i8i13i30k 1.LiJXip9yXi8)
Так ТС же написал - хочет сделать "маяк или попугая"
В основе его сообщения все же "управление радиостанцией".
И заметьте, он не писал что хочет сделать ;) просто у него появилась мысль, что это можно сделать.
Мы например делали управление двумя радиостанциями для ОЗЧР, с переключением антенного коммутатора, блокировками, индикацией и т.п.
Т.е. конкретная задача - конкретная реализация.
А чего конкретно хочет ТС "маяк или попугая", хочет ли он это сделать или просто поговорить об этом - хз :)
А вот и словоблуды налетели.
А вот и словоблуды налетели.
Вы цель поставьте конкретную и вопросов не будет.
"Попугаи" (на сколько знаю) вообще запрещены.
Если радио маяк, то цели/задачи какие?
Такой пойдет? (http://forklg.ru/viewtopic.php?f=98&t=1147)
Управление радиостанцией это что? САТ? Удаленное управление? Включение/выключение по хлопку в ладоши?
Нет ли где то готовых схемок и ПО по данной идеи?
Всё есть.
Нужно заставить себя напрячься, понять, что же всё таки хочется и тогда искать/спрашивать.
Есть мысль, что на arduin можно сделать управление радиостанцией.
Скажем в режиме Маяка или попугая.
Так управление радиостанцией или маяк? Наверное, надо сначала понять, что хочется сделать, так как сделать можно всё.
У меня на ардуино реализовано "управление радиостанцией". Пока простенькая версия, которая включает:
- антенный коммутатор с автоматическим переключением антенн по диапазонам и переключением антенн из N1MM;
- контроллер поворотки для спайдера на простом TV Rotator;
- контроллер "поворотки" для Spitfire (по факту переключает направления используя стандартный интерфейс ротатора);
- переключение BPF по диапазонам;
- управление усилителем с подстройкой по диапазонам и передающим антеннам (пока в процессе отладки);
Для маяков в гугле полно информации, для более сложных вещей - надо думать самому.
Вы цель поставьте конкретную и вопросов не будет.
"Попугаи" (на сколько знаю) вообще запрещены.
Если радио маяк, то цели/задачи какие?
Такой пойдет? (http://forklg.ru/viewtopic.php?f=98&t=1147)
Управление радиостанцией это что? САТ? Удаленное управление? Включение/выключение по хлопку в ладоши?
Всё есть.
Нужно заставить себя напрячься, понять, что же всё таки хочется и тогда искать/спрашивать.
Думалось, что вдруг ардуин умеет рацию переводить в режим передачи и в микрофон тон давать.
Думалось, что вдруг ардуин умеет рацию переводить в режим передачи и в микрофон тон давать.
Рацию... да на передачу... Эка задачка...
Ничего не мешает сделать любой генератор звуковой с необходимыми посылками, в трансивере включить VOX и всё...
Забыл спросить... а какую рацию нужно на передачу приручить?
Думалось, что вдруг ардуин умеет рацию переводить в режим передачи и в микрофон тон давать.
Умеет. Напишите более подробно при каком условии нужно переводить рацию в режим передачи, какой частоты тон давать, сколько по времени должна длиться передача.
И еще хороший вопрос - зачем?
А то вдруг мне тоже надо такое, а я и не в курсе
Рацию... да на передачу... Эка задачка...
Ничего не мешает сделать любой генератор звуковой с необходимыми посылками, в трансивере включить VOX и всё...
Забыл спросить... а какую рацию нужно на передачу приручить?
Для теста воки токи рублей за 500 а там посмотрим
Умеет. Напишите более подробно при каком условии нужно переводить рацию в режим передачи, какой частоты тон давать, сколько по времени должна длиться передача.
Надобности нет, просто думал коллеги подскажут ссылки на темы или сайты где ардуины используют именно в радиолюбительской плоскости.
А то вдруг мне тоже надо такое, а я и не в курсе
Лёша, создание "маякопопугаев", это возрастное.
Год назад, у меня, был наплыв спрашивающих как это осуществить? Причем, почему именно ко мне обращаются... мне не ведомо.
Разделил бы желание собрать маяк на три стадии.
1. Начинающие. А слышно меня будет если я зайду за забор/гараж/дом/в соседнем микрорайоне? Чисто любопытство.
2. Опытные радиолюбители. Знают как проверить/увеличить дальность связи без извращений. Нет желания делать не нужное.
3. Совсем совсем опытные. Надо поставить себе в QTH маяк. Осчастливить мир. Вдруг, кто то, жаждет и плачет, что не получается QSO провести.
Услышал мой маяк - шанс есть. Лови меня везунчик.
------------------------------------------------------------------------
Сеть маяков/репитеров/WEB SDR/Reverse beacon достаточно развита. Не вижу смысла городить огород.
Потому, нам с тобой, остается ждать третьей стадии.:s10:
P.S.
Для теста воки токи рублей за 500 а там посмотрим
1 стадия.:s10:
Надобности нет, просто думал коллеги подскажут ссылки на темы или сайты где ардуины используют именно в радиолюбительской плоскости
И снова получилось что я как в воду глядел :)
все же многолетний опыт пребывания на форуме дает о себе знать...
Здравствуйте!
Есть мысль, что на arduin можно сделать управление радиостанцией.
Скажем в режиме Маяка или попугая.
Нет ли где то готовых схемок и ПО по данной идеи?
Зачем плодить новые темы, поиск по форуму вроде нормально работает.
http://forum.qrz.ru/search.php?searchid=2114309
И нельзя ли более информативное название темы придумать? Arduin - это вообще что?
Маяк на Arduino это элементарная задача.
Топикстартер, напишите четкий алгоритм что нужно получить на выходе и тогда мы поможем со схемой и скетчем.
Без четкого Т.З. ни кто Вам ни чего не скажет, потому что вариантов масса.
Arduin - это вообще что?
ТС уже объяснил ранее:
ардуин умеет рацию переводить в режим передачи и в микрофон тон давать
Век живи - век учись.:s10:
Надобности нет, просто думал коллеги подскажут ссылки на темы или сайты где ардуины используют именно в радиолюбительской плоскости.
Вам и дали, в посту №5 Но вам видимо лень читать....
А вот и словоблуды налетели.
Эти люди вам дали всю необходимую информацию по вашим вопросам, а вы так... Негоже. Лучше бы чётче формулировали свою задачу.
Маяк на Arduino это элементарная задача.
Топикстартер, напишите четкий алгоритм что нужно получить на выходе и тогда мы поможем со схемой и скетчем.
Без четкого Т.З. ни кто Вам ни чего не скажет, потому что вариантов масса.
Хотел потренироваться самостоятельно скетчи писать.
Хотел потренироваться самостоятельно скетчи писать.
Возьмите готовый (ранее ссылку давал), поиграйтесь, поменяйте текст передачи, цикл...
Проще начинать, понять что как и почему...
Хотел потренироваться самостоятельно скетчи писать.
Тогда Вам сюда: http://www.123avr.com/
Тогда Вам сюда: http://www.123avr.com/
Из пушки по воробьям. Это как человек про программу ТВ спросил, а вы ему статью про принципы телевидения, с развертками, синхронизацией и т.п.
Встроенных примеров достаточно. С того же Blink можно начать. Поменять режим мигания, вплоть до текста морзянкой. Если поменять номер порта, и подключить к нему транзисторный ключ, то этот ключ сможет управлять рацией абсолютно таким же образом.
Попробовал сделать маячок на досуге ))) При наличии комплектующих и софта заняло минут 10 )))
https://www.youtube.com/watch?v=1gxn0BUOI-M
Уважаемые коллеги, напишите пожалуйста скетч для меги2560, сам.... ну не могу, ни чо не работает.
Надо:
на Serial1 приходит A>B:xyzC
на Serial2 должно уйти xyz
где
A,B,C,> и : - всегда одно и тоже, и на этих же местах,
x,y и z - всегда разные и их количество разное тоже.
напишите пожалуйста скетч для меги2560, сам.... ну не могу, ни чо не работает.
/**
*
*/
const int SERIAL_DATA_DELAY = 5;
/**
* Startup events.
*/
void setup() {
init_serial();
}
/**
* Init serial port communication.
*/
void init_serial() {
Serial.begin(9600);
Serial1.begin(9600);
}
/**
* Main loop procedure.
*/
void loop() {
serial_forward();
}
/**
* Read data from serial port 0, parse string and send over serial 1.
*/
void serial_forward() {
String read_data;
String send_data;
int read_data_len;
while (Serial.available() > 0) {
delay(SERIAL_DATA_DELAY);
char c = Serial.read();
read_data += c;
}
do {
read_data_len = read_data.length();
int endIndex = read_data.indexOf("C");
if (read_data.startsWith("A>B:") && endIndex >= 0) {
send_data = read_data.substring(4, endIndex);
read_data.remove(0, endIndex + 1);
}
Serial1.println(send_data);
if (read_data_len == read_data.length()) {
read_data.remove(0, 1);
}
} while (read_data_len != read_data.length());
}
Примерно так, но я не тестировал. Если с пол пинка не запустится - пишите на что ругается.
Ok, спасибо, буду пробовать.
Я не спец, пытаюсь... быдлокодить. :)
Написал как то так: (как пример)
String Str="55:12y;3";
char buffer[110];
int s1, s2;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Str.toCharArray(buffer,110);
s1=atoi(strtok(buffer,":"));
s2=atoi(strtok(NULL,";"));
// s3=atoi(strtok(NULL," "));
Serial.print(s1);
Serial.print(" ");
Serial.println(s2);
//Serial.print(" ");
// Serial.println(s3);
delay(5000);
}
и... наверное бы устроило, довел бы до конца, но посылает только цифру, если вставить типа 55:12y3, то всё плохо.
[CODE]
/**
Примерно так, но я не тестировал. Если с пол пинка не запустится - пишите на что ругается.
Запускается и работает, но кое что не понятно.
В Serial1.println(send_data); убрал ln, иначе, пока нет данных, непрерывно гонит в порт 0D 0A...
Serial1.print(send_data); выдает ДВОЙНУЮ последовательность xyz
У меня данные приходят из другого порта, и в этом случае Serial1.println(send_data); выдает аж ЧЕТВЕРНУЮ последовательность xyz.
Почему, не пойму. :(
Ниже, то что у меня:
#include <AltSoftSerial.h>
AltSoftSerial altSerial;
/**
*
*/
const int SERIAL_DATA_DELAY = 5;
/**
* Startup events.
*/
void setup() {
init_serial();
}
/**
* Init serial port communication.
*/
void init_serial() {
Serial.begin(9600);
Serial1.begin(9600);
altSerial.begin(9600);
}
/**
* Main loop procedure.
*/
void loop() {
serial_forward();
}
/**
* Read data from serial port 0, parse string and send over serial 1.
*/
void serial_forward() {
String read_data;
String send_data;
int read_data_len;
while (altSerial.available() > 0) {
delay(SERIAL_DATA_DELAY);
char c = altSerial.read();
Serial.print(c);
read_data += c;
}
do {
read_data_len = read_data.length();
int endIndex = read_data.indexOf("C");
if (read_data.startsWith("A>B:") && endIndex >= 0) {
send_data = read_data.substring(4, endIndex);
read_data.remove(0, endIndex + 1);
}
Serial1.print(send_data);
Serial.print(send_data);
if (read_data_len == read_data.length()) {
read_data.remove(0, 1);
}
} while (read_data_len != read_data.length());
}
В Serial1.println(send_data); убрал ln, иначе, пока нет данных, непрерывно гонит в порт 0D 0A...
Serial1.print(send_data); выдает ДВОЙНУЮ последовательность xyz
У меня данные приходят из другого порта, и в этом случае Serial1.println(send_data); выдает аж ЧЕТВЕРНУЮ последовательность xyz.
Почему, не пойму.
А зачем вам AltSoftSerial и три сериал порта
void init_serial() {
Serial.begin(9600);
Serial1.begin(9600);
altSerial.begin(9600);
}
Зачем тут Serial.print?
while (altSerial.available() > 0) {
delay(SERIAL_DATA_DELAY);
char c = altSerial.read();
Serial.print(c); // Зачем вам это?
read_data += c;
}
И тут вы шлёте в два порта. Вы в портах не запутались :) :)
Serial1.print(send_data);
Serial.print(send_data);
наверное бы устроило, довел бы до конца, но посылает только цифру, если вставить типа 55:12y3, то всё плохо.
Лучше не надо так делать....
Тем более, что вы сами делаете перевод в цифру :)
Ваш код можно дописать, но он не предусматривает,
1. Обработку, если в буфере будет два или три нужных вам стринга
2. Обработку, если в буфере будет "мусор"
убрал ln, иначе, пока нет данных, непрерывно гонит в порт 0D 0A...
Скорее всего Serial.print(c);
или оберните отправку проверкой на наличее данных (хотя дико сомневаюсь, что это там)
if (send_data.length() > 0) {
Serial1.println(send_data);
}
А зачем вам AltSoftSerial и три сериал порта
Зачем тут Serial.print?
while (altSerial.available() > 0) {
Serial.print(c); // Зачем вам это?
И тут вы шлёте в два порта. Вы в портах не запутались :) :)
[CODE]
Serial1.print(send_data);
Serial.print(send_data);
- Почему AltSoftSerial? - так сложилось, раньше писал для UNO, а там нет Serial1 2, 3. Если это принципиально то уберу, заменю на Serial2
- Нужны данные только на железных портах и в этом смысле просто Serial не подходитэ
- Serial.print везде добавил чтобы посмотреть, что идет в этих местах. Когда заработает - конечно уберу.
- С портами пока вроде не запутался.
Скорее всего Serial.print(c);
Нет, именно Serial1
или оберните отправку проверкой на наличее данных
Ну, так я вроде это и сделал дописав
Serial1.print(send_data);
Serial.print(send_data);
Или нет? Как сделать?
Думаю( может не прав), что вы не видите бесконечное 0D 0A потому что Serial монитор IDE не показывает, а Serial1 - железный и терминал видит.
Но это мне не так страшно, плохо, что идёт дублирование.
...Есть подозрение, что исходная A>B:xyzC на самом деле может на конце иметь 0D 0A или 0D 0A 0D 0A. Проверю.
Думаю( может не прав), что вы не видите бесконечное 0D 0A потому что Serial монитор IDE не показывает, а Serial1 - железный и терминал видит.
Но это мне не так страшно, плохо, что идёт дублирование.
Ну на самом деле я ничего вообще не вижу, так как написал этот код в слепую и не проверял его. Я об этом написал в самом начале.
Если я не ошибаюсь, Mega имеет 4 UART порта: Serial, Serial1, Serial2, Serial3. Используя AltSoftSerial вы можете сделать ещё на свободных пинах эмуляцию дополнительных портов. Но лучше использовать готовые UART.
Согласно вашему коду, вы слушаете altSerial и побайтно транслируете, то что получаете в Serial.
Потом парсите данные (вырезаете лишнее) и шлёте данные в Serial и Serial1.
Вопрос: какой порт вы мониторите? Если Serial, то там и будет двойной набор данных.
Если бы в конце были бы получены 0D 0A - то парсер их как раз должен был бы вырезать. Скорее всего, это какие-то служебные символы. Их мониторинг (отображение) зависит от настроек COM PORT терминала, которым вы смотрите данные.
P.S. Ещё в терминале может быть включено echo, тогда вы будете тоже видеть двойной набор данных.
или оберните отправку проверкой на наличее данных
Ну, так я вроде это и сделал дописав
Serial1.print(send_data);
Serial.print(send_data);
Или нет? Как сделать?
Нет, не обернули.
Двойная отправка, на самом деле, мой косяк - там do-while делает ещё один проход после отправки, а send_data не обнуляется. Извините.
Вот так будет правильно:
/**
*
*/
const int SERIAL_DATA_DELAY = 5;
/**
* Startup events.
*/
void setup() {
init_serial();
}
/**
* Init serial port communication.
*/
void init_serial() {
Serial.begin(9600);
Serial1.begin(9600);
}
/**
* Main loop procedure.
*/
void loop() {
serial_forward();
}
/**
* Read data from serial port 0, parse string and send over serial 1.
*/
void serial_forward() {
String read_data;
String send_data;
int read_data_len;
while (Serial.available() > 0) {
delay(SERIAL_DATA_DELAY);
char c = Serial.read();
read_data += c;
}
do {
read_data_len = read_data.length();
int endIndex = read_data.indexOf("C");
if (read_data.startsWith("A>B:") && endIndex >= 0) {
send_data = read_data.substring(4, endIndex);
read_data.remove(0, endIndex + 1);
}
if (send_data.length() > 0) {
Serial1.print(send_data);
send_data = "";
}
if (read_data_len == read_data.length()) {
read_data.remove(0, 1);
}
} while (read_data_len != read_data.length());
}
Ok, спасибо , шас попробую.
И еще. Как обычно :) изменились условия. Действительно реально последовательность оказалась с 0D 0A на конце. И именно это надо также обрезать, а С оставить. То есть на входе (на altSerial) A>B:xyzC.. (где две точки это 0D 0A), а на выход( с Serial1) должно уйти xyzC
Как это прописать... видимо в int endIndex = read_data.indexOf("С"); ?
Как это прописать... видимо в int endIndex = read_data.indexOf("С"); ?
Простейший вариант да, заменить C на нужную вам последовательность символов окончания. Должно работать, правда не оптимально, так как парсер сделает дополнительно несколько прогонов do-while по количеству символов. Но в вашем случае, это не будет являться проблемой, если, конечно, траффик по com port не сильно большой (десятки сообщений в секунду).
Лучше подправьте ещё одну строчку:
было: read_data.remove(0, endIndex + 1);
надо: read_data.remove(0, endIndex + 4);
Т.е. увеличили длину конечного стринга.
Лучше подправьте ещё одну строчку:
было: read_data.remove(0, endIndex + 1);
надо: read_data.remove(0, endIndex + 4);
Т.е. увеличили длину конечного стринга.
Проверил, работает как надо, всё устраивает. Я правда подправил в другом месте: int endIndex = read_data.indexOf(";")+1;
Только вот, если не трудно, напишите как именно прописать вместо С эти самые 0D 0A, так сказать... на будущее.
Я правда подправил в другом месте: int endIndex = read_data.indexOf(";")+1;
Где и почему вы так сделали - я не понимаю. У вас в стринге не было ";" как разделителя данных, если только входные условия опять не поменялись :)
0D 0A - это carriage return. Можно на него в принципе не обращать внимания.
напишите как именно прописать вместо С эти самые 0D 0A, так сказать... на будущее.
"\r\n"
Powered by QRZ.RU