Go Down

Topic: Como comunicar dos arduinos ? (Read 25259 times) previous topic - next topic

2tor

Hola a todos,

este es mi primer post en el foro.
Estoy empezando con arduino y quisiera implementar un sistema basado en 2 arduinos el primero le llamaremos trasmisor y el segundo receptor. Lo que quiero hacer es usar varios pines del trasmisor como input para sensores digitales (en total 9 sensores) luego establecer un  tipo de comunicación serie (entendiendo por serie una comunicación robusta sin errores con 1 ó dos hilos max) hasta el otro arduino que estará distanciado unos 50mts. El arduino receptor se encargará de recibir los datos  y habilitar los pìnes correspondientes de salida para reflejarexactamente en los mismos pines, los valores de los sensores digitales (0 ó 5V).

He estado mirando bastante en el foro pero no termino de ver como implementarlo. Mi preocupación es:
- Que comunicación serie es la mas robusta para ser usada entre los dos arduinos ?
- Puedo hacer uso de los pines 0 y 1 TX y RX a pelo  y entrecruzarlos en las placas TX a RX y RX a TX? O es mejor usar un par de pines digitales para crear una secuencia de las lecturas de los valores de los sensores?

Ando un poco dspistado y seguro que los que teneis mas experiencia podéis darme un poco de luz en este proyecto.

Un  saludo.
2tor
-

igorreal

Hola,

RS485 => Bueno, bonito y barato!!! y sencillo!!

http://real2electronics.blogspot.com/2009/09/buses-de-campo-para-arduino-rs485.html

:D



Igor R.

2tor

Gracias Igor,

cuando tenag un rato le echo un look.
Una pregunta mas.... como los arduinos van a estar separados unos 50 metros, crees que habrá algun problema con tanta tirada de cable ?, serña lo suficiente robusto ante errores de comunicacion?
Por otra parte el arduino remoto estará en un entorno de Radiofrecuencia... ves alguna limitación?

Muchas gracias por tu respuestas.

Un saludo.
2tor

igorreal

#3
Apr 23, 2010, 10:36 am Last Edit: Apr 23, 2010, 10:37 am by igorreal Reason: 1
Es un bus diferencial, no deberia haber problema.... Es un bus muy utilizado en la industria.

http://www.maxim-ic.com/app-notes/index.mvp/id/763


El bus RS485 solo define la capa fisica, tendras que hacerte tu propio protocolo. En el link puedes ver un ejemplo basado en uno profesional (un variador de frecuencia). En la practica es como manejar un puerto serie.....

Saludos


Igor R.

Cristal

Hola Igor,

Quiero probar el slave que esta en tú pagina (http://real2electronics.blogspot.com/2009/09/buses-de-campo-para-arduino-rs485.html) a traves del terminal serial del arduino, boton send de la parte superior del terminal.

Infelizmente no logro conseguir enviar nada que el slave entienda, o sea, el slave no "enciende" el led.

Hay alguna forma de enviar essos comados (0x00 0x30 0x31 0x05 0x44 0x30 0x30 0x20 0x30 0x30 0x30 0x31 0x03 0x01 0xEE) de modo que my slave entienda? Como seria?

Quiero poder probar todo (diversas subrotinas) en la parte del slave antes de ponerlo sobre una tarjeta autonoma.

saludos,

cristal

igorreal

Hola Cristal,

Si que puedes. Pero lo estas haciendo por RS485 ó por RS232???
Un poco de info...... ;)


Cristal

Hola Igor,

Quieor hacerlo por RS485, pero quiero verificar que todo me funciona dentro del Slave utilizando el terminal del Arduino (enviando la string de controle), caso contrario, tengo que sacar el Atmega a todo momento de su circuito para hacel las modificaciones necesarias.

saludos,
Cristal

igorreal

Usa el RealTerm, en vez del terminal de Arduino. Ya que el que viene con el IDE,sólo te permite enviar en ASCII.

http://realterm.sourceforge.net/

Con éste, puedes enviar dicha trama en Hexadecimal.


;)

Cristal

Fue la primera cosa que hice, pero no me funciono...selecionado el puerto com3, 9600, y en send number, envie algo tipo 00 48 49 68 48 48 32 ... y tambien probe 00484968484832...petambien no me funciona.
Qual seria la forma adecuada?

saludos,
Cristal

igorreal

#9
May 03, 2010, 09:06 pm Last Edit: May 03, 2010, 09:06 pm by igorreal Reason: 1
Has probado mandando en hexadecimal??
0x00 0x30 0x31 0x05 0x44 0x30 0x30 0x20 0x30 0x30 0x30 0x31 0x03 0x01 0xEE


Hazte un programita que el Arduino repita lo que recibe por puerto serie, asi sabes lo que le esta llegando.... son dos lineas de programación!!!

;)

Cristal

Voy a probarlo y despues te comento

Saludos,
Cristal

Cristal

Hola Igor,

No se lo que me ocurre, he porbado con el realterm y me funciona cuando estoy con el ATmega en el Arduino, cuando lo pongo en my circuito, no funciona.

He provado con un sketch muy simples, solamente para verificar la comunicacion y aun no me funciona.

Transmissor:

Code: [Select]
//transmissor
const int ledPin = 13;      // the pin that the LED is attached to
#define  pinCONTROL    02
void setup() {
 Serial.begin(9600);
 pinMode(ledPin, OUTPUT);
 pinMode(pinCONTROL,OUTPUT);
digitalWrite(pinCONTROL,HIGH);
}

void loop() {

 byte b = 0;

 Serial.write(b);
 analogWrite(ledPin, b);
 delay(1000);

 b=255;

 Serial.write(b);
 analogWrite(ledPin, b);
 delay(1000);
}


Receptor :

Code: [Select]
//receptor
const int ledPin = 13;      // the pin that the LED is attached to
#define  pinCONTROL    02
void setup() {
 Serial.begin(9600);
 pinMode(ledPin, OUTPUT);
 pinMode(pinCONTROL,OUTPUT);
digitalWrite(pinCONTROL,LOW);
}

void loop() {
 byte brightness;

 if (Serial.available()) {// check if data has been sent from the computer:

   brightness = Serial.read(); // read the most recent byte (which will be from 0 to 255):

   analogWrite(ledPin, brightness); // set the brightness of the LED:
 }
}


Mi circuito:




Cristal

#12
May 09, 2010, 06:54 pm Last Edit: May 09, 2010, 06:57 pm by Cristal Reason: 1
Hoal Igor,

aqui esta mi circuito de pruebas:

Los resistores de 4K7 son opcionales, pero con ellos o sin ellos da igual...no funciona

Los cables que utilizo son tranzados.


igorreal

#13
May 09, 2010, 07:14 pm Last Edit: May 09, 2010, 08:02 pm by igorreal Reason: 1
Y que haces con el pin de control(/RE-DE)??? Dicho pin sirve para poner el transceiver en modo Tx (transmisión,HIGH) ó Rx (recepcion).
En tu programa lo tienes que poner alto y bajo, según lo que te interese hacer.

TX
1- Pongo pin Alto
2- Transmito
3- Pongo pin Bajo

RX
Siempre pin Bajo


Cristal

Hola Igor,

Si te fijas en mi setup veras que, para pruebas, el pin de control esta siempre HIGH, y en el receptor siempre en LOW.

transmissor
...
pinMode(pinCONTROL,OUTPUT);
digitalWrite(pinCONTROL,HIGH);

receptor
...
pinMode(pinCONTROL,OUTPUT);
digitalWrite(pinCONTROL,LOW)

Go Up