modbus para comunicar mkr con otros arduinos

Avatar de Usuario
Sigmundfreud
Mensajes: 229
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

modbus para comunicar mkr con otros arduinos

Mensaje por Sigmundfreud » Vie May 24, 2019 10:01 am

Buenos días,

hace un tiempo hice una pcb para incorporar diferentes rs485 y asi poder comunicar los diferentes arduinos entre si, el problema que a la hora de diseñarlo no caí que el voltaje de trabajo del mkr es de 3,3 y no 5v. Según he leído en internet el voltaje de trabajo de estos modulos es de 5 pero si nos conecto a 3,3 los leds funcionan (falta probar si son capaces de comunicar). El tema es si los alimento a 5v y la conexión al mkr la hago mediante un cambio de nivel lógico funcionaria? o sería mejor alimentar a 3,3 los modulos y probar si son capaces de comunicar a con los arduinos que trabajan a 5v.

Gracias
IMG_20190524_113821.jpg
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.

Juan Ramon
Mensajes: 233
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Juan Ramon » Vie May 24, 2019 12:43 pm

Hola Sigmundfreud
En primer lugar, efectivamente tienes que poner control del nivel logico en el MKR.
Lo que no entiendo es el fundamento de esa pcb, (supongo que sera para pruebas).
Yo los tengo alimentados a 5V y perfecto.
Juan Ramón.

Avatar de Usuario
Sigmundfreud
Mensajes: 229
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Sigmundfreud » Vie May 24, 2019 2:14 pm

Gracias por responder tan rápido,

pues si funciona con un modulo de nivel lógico perfecto.

El sentido de ese pcb no es de pruebas sino que quede definitivo, en mi casa tengo dos nanos, un mega, y el mkr y me gustaría que todos se conectaran a ese pcb y estos se comuniquen entra si.

Gracias

Juan Ramon
Mensajes: 233
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Juan Ramon » Vie May 24, 2019 2:30 pm

No se como lo tendrás pensado hacer, pero no me cuadra a menos que todos los módulos estén juntos.

Mi instalación por el momento se compone de 8 actuadores (Pro-mini) y cada uno esta en una habitación distinta, utilizo cable RJ45 para comunicarlos y alimentarlos.
En un par, va el bus RS485 y con dos pares mas la alimentación de los actuadores y reles.
Ya van años y sin ningún problema.
Juan Ramón.

Avatar de Usuario
Sigmundfreud
Mensajes: 229
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Sigmundfreud » Vie May 24, 2019 2:51 pm

Dos modulos están juntos, uno a unos 4-5 metros y el otro 10 m . Es mucha distancia entre rs485 y los módulos?

Juan Ramon
Mensajes: 233
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Juan Ramon » Vie May 24, 2019 3:39 pm

Si puedes haz un esquema de como lo tienes hecho y te comento.
Juan Ramón.

Avatar de Usuario
Sigmundfreud
Mensajes: 229
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Sigmundfreud » Mar May 28, 2019 2:23 pm

y una consulta Juan Ramon,
Según el pintout del mkr TX y RX corresponden al 13 y 14. estos son la I6 y Q6, una vez pregunte a excontrol y me dijeron que para estos pines sin protecciones tenia que quitar los jumpers, hasta aquí perfecto, pero para el RD,DE que usas? cualquiera o tiene que se un analógico porque no pasa por el optoacoplador?

otra opción seria poner este sheild que ya viene adatado, cómo lo ves?

https://www.arduino.cc/en/Guide/MKR485Shield


gracias

Juan Ramon
Mensajes: 233
Registrado: Mar Feb 12, 2019 7:52 pm
Ubicación: Alicante

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Juan Ramon » Mar May 28, 2019 6:57 pm

Ese modulo me parece bien, yo lo estuve viendo hace un tiempo, lo descarte porque ya tenia trabajando mi proyecto sin librería, las librerías para RS485 que vi en su momento no eran compatibles con MKR1000 o no supe buscarlas.
Yo no utilizo ninguna librería para la comunicación, supongo que eso tendrá sus ventajas y sus inconvenientes, como todo.

Sobre lo que comentas del pin de control, no seria problema que utilizaras una salida de la sheld, pese a que pase por un optoacoplador, lo importante seria no meterle 12V de esa salida al integrado MAX485 (Modulo RS485) RD, RE

Cuando pueda subiré foto y esquema de mi pasarela con MKR1000
Juan Ramón.

Avatar de Usuario
Sigmundfreud
Mensajes: 229
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Sigmundfreud » Mié May 29, 2019 7:46 pm

Ok, pues con todo lo que me has comentado lo intento conectar estos dias y comento como me va.

Como siempre gracias

Avatar de Usuario
Sigmundfreud
Mensajes: 229
Registrado: Mar Feb 12, 2019 8:23 pm
Ubicación: Girona

Re: modbus para comunicar mkr con otros arduinos

Mensaje por Sigmundfreud » Mar Jun 18, 2019 8:11 pm

buenas noches,

voy poniendo mis avances aunque no he conseguido gran cosa, mas bien nada de momento.

en el mkr para no tener que usar un pin para cambiar el valor de TX a RX he usado dos modulos RS485 conectados igual que la foto.
IMG_20190618_215919.jpg
en el nano los he conectado como en esta foto
IMG_20190618_220059.jpg
en el nano va alimentado a 5v y en el mkr mediante unos mosfet a 3,3v

el codigo del mkr es el siguiente:

Código: Seleccionar todo



//////////////////////// variables


const int huella_alarma_on =100;         // variable enviada por monitor desde el sensor de huella para identificar la alarma on
const int huella_alarma_casa =101;
const int huella_alarma_off =102;


//////////// loop
//////////// leer datos recibidos


 if(Serial.available())
  {
    if(Serial.read()=='I') //si recibimos I sensor de huella inicia trama para comunicarse
    {
       int dato=Serial.parseInt(); //recibimos el valor de una variable int
			if(dato==huella_alarma_on) //Si el valor es 100 alarma on
			{funcion_alarma_on();}		// activamos circuito alarma on
	   
			else  if(dato==huella_alarma_casa) //Si el valor es 101 alarma casa
			{funcion_alarma_casa();}		// activamos circuito alarma casa
			
			else if(dato==huella_alarma_off) //Si el valor es 102 alarma off
			{funcion_alarma_casa();}		// activamos circuito alarma off
			
	   if(Serial.read()=='F') //Si el fin de trama es el correcto
      {
		  Serial.print ("final de los datos recibidos del sensor de huella");
    }
  }
  }

//////////////////////////// funciones usuario


void funcion_alarma_on(){
	Serial.println("funcion alarma on");
 	alarma_on_serial();

}
	
void funcion_alarma_casa(){
	Serial.println("funcion alarma casa");
 	alarma_casa_serial();
	}
	
	
void funcion_alarma_off(){
	Serial.println("funcion alarma off");
	alarma_off_serial();

	}

void alarma_on_serial(){
	  Serial.print("A"); //inicio de trama
  Serial.print("1000");//100 quiere decir alarma on
  Serial.print("F"); //fin de trama
  Serial.println("");
}

void alarma_casa_serial(){
	  Serial.print("A"); //inicio de trama
  Serial.print("1010");//100 quiere decir alarma on
  Serial.print("F"); //fin de trama
  Serial.println("");	
}

void alarma_off_serial(){
	  Serial.print("A"); //inicio de trama
  Serial.print("1020");//100 quiere decir alarma on
  Serial.print("F"); //fin de trama
  Serial.println("");	
}




ahora el codigo del nano que es un detector de huella

Código: Seleccionar todo


const int mkr_alarma_on =1000;         // variable enviada por monitor desde el sensor de huella para identificar la alarma on
const int mkr_alarma_casa =1010;
const int mkr_alarma_off =1020;

void setup() {

  
  Serial.begin(9600);// put your setup code here, to run once:
}

void loop() {


  if(Serial.available())
  {
    if(Serial.read()=='A') //si recibimos A el mkr envia datos de los estados de la alarmq
    {
       int dato=Serial.parseInt(); //recibimos el valor de una variable int
     if(dato==mkr_alarma_on) //Si el valor es 1000 alarma on
      {Alarmaon=true;}   // activamos circuito alarma on
     
      else  if(dato==mkr_alarma_casa) //Si el valor es 101 alarma casa
      {Alarmacasa=true;}   // activamos circuito alarma casa
      
      else if(dato==mkr_alarma_off) //Si el valor es 102 alarma off
      {Alarmaoff=true;}   // activamos circuito alarma off
      
     if(Serial.read()=='F') //Si el fin de trama es el correcto
      {
      Serial.println ("final de los datos recibidos del mkr");
    }
  }
  delay(10);
  }





void activo_alarma_on(){
  digitalWrite(EnTxPin, HIGH); // activados modbus en modo tx
  Serial.print("I"); //inicio de trama
  Serial.print("100");//100 quiere decir alarma on
  Serial.print("F"); //fin de trama
    Serial.println("");
  digitalWrite(EnTxPin, LOW); // activados modbus en modo rx
 Alarmaon=true;
}


void activo_alarma_casa(){
    digitalWrite(EnTxPin, HIGH); // activados modbus en modo tx
  Serial.print("I"); //inicio de trama
  Serial.print("101");//101 quiere decir alarma casa
  Serial.print("F"); //fin de trama
    Serial.println("");
  digitalWrite(EnTxPin, LOW); // activados modbus en modo rx
 Alarmacasa=true;
}


void activo_alarma_off(){
    digitalWrite(EnTxPin, HIGH); // activados modbus en modo tx
  Serial.print("I"); //inicio de trama
  Serial.print("102");//102 quiere decir alarma off
  Serial.print("F"); //fin de trama
      Serial.println("");
  digitalWrite(EnTxPin, LOW); // activados modbus en modo rx
 Alarmaoff=true;
}




tanto en el mkr como en el nano creo que el codigo está bien porque cuando introduzco las cadena en el serial actua de la forma que debería, pero se veis algún error decirmelo

gracias
No tienes los permisos requeridos para ver los archivos adjuntos a este mensaje.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados