Передача между ардуинами по rs485/ Проблема с пониманием основ.
- Войдите на сайт для отправки комментариев
Здравствуйте. Есть такая задачка. Имеется 2 кнопки и 1 переменный резистор на пульте управления.
Необходимо будет передать сигнал о нажатии этих кнопок и изменении сопротивления переменного резистора на расстояние 30-40 метров. На другой стороне должны срабатывать реле (от кнопок) и менять свою яркость светодиод (от переменника)
Собственно как я все это вижу:
Планирую собрать все это на 2-х ардуинах. Ардуино Уно будет собирать информацию о кнопках и переменниках, каким-то образом пересылать это на 2-ю ардуину (уно или мега), где будет происходить расшифровка и выполняться соответствующее действие.
(пример упрощен, в реальности будет 8-10 кнопок и 4-5 переменников)
Предпочтение отдаю rs485, но прочитав статьи и посмотрев похожие проекты - совсем запутался.
За отправную точку взял статью http://rln.nnov.ru/index.php?ind=reviews&op=entry_view&iden=227 ,
Вопрос:
Нет-ли более простого кода, чтобы передать состояние кнопки или значение переменника? А то разобраться в таком коде мне пока тяжело. (но если ничего другого не придумать- буду курить мануалы)
(Я не совсем дилетант- но далеко не все пока знаю)
В примере реализация протокола, для обмена командами и данными мастера с несколькими слейвами.
Вам достаточно просто периодически получать данные
Посмотрите эту библиотеку, достаточно простое и понятное API:
http://www.mathertel.de/Arduino/DMXSerial.zip
правильно-ли я понял, что этот протокол поддерживает передачу до 512 каналов, и для передачи моих 10-15 каналов его хватит с избытком?
И не могу понять, какие пины заберутся с ардуины под нужды преобразователя rs485
правильно-ли я понял, что этот протокол поддерживает передачу до 512 каналов, и для передачи моих 10-15 каналов его хватит с избытком?
И не могу понять, какие пины заберутся с ардуины под нужды преобразователя rs485
Если ты имеешь ввиду адресацию, то он поддерживает 32 устройства в одном сегменте (<1200метров). Для увеличения количества устройств или дальности нужны дополнительные примочки.
И не могу понять, какие пины заберутся с ардуины под нужды преобразователя rs485
Глядя как ты будешь организовывать, Какой конвертер и куда вешать , стандартно, пины сериалпорта.
подробнее о протоколе:
http://www.mathertel.de/Arduino/DMXSerial.aspx
о подключении:
http://www.mathertel.de/Arduino/DMXShield.aspx
Допустил большую ошибку, не указав главное. Для передачи информации между ардуинами имеется в распоряжении 4-проводной неэкранированый UTP кабель. 2 жилы уже заняты под передачу видеосигнала. Осталось всего 2 жилы для связи. А в DMX требуется вроде как 3.
насколько я могу полагать, здесь http://www.youtube.com/watch?v=S9FSQaToVZ4&feature=endscreen&NR=1 представлено что-то похожее. Вроде собрано на микросхемах MAX485. Но не могу найти, как именно их подключить к ардуино. (без доп шилдов.)
Может где есть простой пример, как одна ардуина увидела нажатие кнопки или вращение переменника. отправила его по кабелю, а другая приняла и выполнила действие в зависимости от значения переменной.
Сижу и туплю, как баран на новые ворота, уже 2 дня. (интерфейсы, переменые ко мне уже во сне приходят) Понимаю что нужно больше опыта иметь, но даже не знаю с чего подступиться.
-----------------------------------
Позже нашел по ссылке такой-то пример. Это может как-то помочь?
http://arduino-info.wikispaces.com/RS485-Brick
Код для мастера сети:
Код для слейва А
Код для слейва Б
//Here is the code for the slave CB:
/* YourDuino RS485 Slave Node B Example
terry@yourduino.com */
/*-----( Declare Variables )-----*/
int ledPin=13;
int EN = 2;
int Val;
void setup()/****** SETUP: RUNS ONCE ******/
{
pinMode(ledPin, OUTPUT );
pinMode(EN, OUTPUT );
Serial.begin (19200);
}//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
// receive Data
digitalWrite (EN, LOW ); // enable receive
Val = Serial.read ();
if (-1 != Val)
{
if ( 'B' == Val)
{
digitalWrite (ledPin, HIGH );
delay (500);
digitalWrite (ledPin, LOW );
delay (500);
}
}
}//--(end main loop )---
Для передачи информации между ардуинами имеется в распоряжении 4-проводной неэкранированый UTP кабель. 2 жилы уже заняты под передачу видеосигнала. Осталось всего 2 жилы для связи. А в DMX требуется вроде как 3.
Не требует, как и не требует протокол 485 это раз, во вторых если вы передаете по одной паре простой видеосигнал, то у него один провод земля. То есть, можете использовать его в DMX.
Сам еще не разбирался, да и железа нужного под рукой нет. Но я бы шагал так.
1 шаг) Соеденил бы две ардуины напрямую по серийному порту. RXпервой к TXвторой, TXпервой к RX второй, и земли у них обоих.
2 шаг) Написал бы скетчи в котором после нажатия кнопки на первой ардуине, загорался светик на второй. И наоборот.
3шаг) Добавил бы на пины №2 по светодиоду, и дописл бы скетч так что бы при нажатии кнопки, загорается светодиод, только после этого передаются данные, после передачи светодиод гасится.
4шаг) Вместо прямого соединения прикрутил бы например MAX485, RXардуины к ROмакс, TXардуины к DIмакс, пин 2 к RE и DE. землю с землей, ну и питание( у MAX485 оно 12в) к питанию.
5шаг) Соеденил бы устройства между собой линия A c A,ну а B c B., и запустил бы скетчи, теперь при нажатии кнопки, пин 2 переключает микрасхему на передачу, после передачи опять переключает в прием. Вторая дуина находящаяся на приеме, получит данные ну и зажгет светодиод.
6шаг) Начал бы прописывать адресацию. Ну или залил бы код, как в приводимой выше статье http://rln.nnov.ru/index.php?ind=reviews&op=entry_view&iden=227
видеосигнал по 2 проводам будет прокинут через видеобалуны- они как-то хитро передают сигнал, так что земли там не взять. За последовательность действий спасибо. буду пробовать.