Conexión RS232 - Arduino UNO

Buenas,

Estoy intentando integrar una bascula de peso que tiene una salida RS-232 con mi Arduino UNO. Lo primero que he hecho es conectar la bascula al PC y ver lo que envía, después de comprobar que la bascula envía correctamente los datos he empezado a integrarlo con mi Arduino.

Para hacer la integración del RS-232 con la bascula compre este adaptador: Sparkfun - Módulo Adaptador RS232 a TTL - PRT-00449

Al realizar las conexiones y después de cargar el siguiente programa al Arduino (es para probar si recibe algo el Arduino, mas adelante desarrollare mejor el programa):

int incomingByte = 0; // para el byte leido

void setup() 
{
  Serial.begin(9600); 
}

void loop() 
{ 
  // lee el byte entrante:
  incomingByte = Serial.read();

  // dice lo que ha recibido:
  Serial.print("He recibido: ");
  Serial.println(incomingByte,DEC);
  
  delay(3000);
}

La sorpresa es que el Arduino no recibe nada. La bascula esta configurada con 8bit de batos, 1 bit stop, ningún bit de paridad.

Investigando un poco, tengo el conector RS-232 (RS-232 y USB) que se le enciende un LED cuando esta conectado, la cosa es que cuando hago la conexion USB-RS232 se le enciende el LED. O cuando solo conecto el lado del USB sin conectar el otro se le enciende el LED. Pero cuando conecto solo el RS232 a la bascula no se enciende el LED. Por lo que veo, la bascula no alimenta el RS232, por lo que tendría que alimentarlo desde el Arduino.

La cosa es, mi adaptador de RS232 a TTL no sirve? Que adaptador tendría que comprar para que el cable RS232 se alimente desde el Arduino?

Espero vuestra opinión, un saludo!

¿Podrias poner un esquema de como has conectado tu circuito?

Ten en cuenta que si quieres comunicarte con el PC a través de Serial, no puedes conectar la bascual a los pines 0 y 1. Deberías usar la librería SoftSerial para poder comunicarte con el PC por Serial y con la báscula por Softserial.

Buenas CarlosSan,

El esquema seria lo siguiente:

Bascula (rs-232) <--> ADAPTADOR RS232 / TTL <--> Arduino (5V, Gnd, Pin2, Pin3) ] <--> USB al PC

Por lo que entiendo, mi bascula envía sus datos desde rs-232 y desde mi adaptador el Arduino UNO lo recibiría en los pines 2 y 3. Y a través de los pines 0 y 1 lo recibido desde la bascula lo visualizaría en el Serial del PC.

El codigo que he probado esa el siguiente:

#include <SoftwareSerial.h>

#define rxPin 3
#define txPin 2

byte x;
byte y;
byte incomingByte;

SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);

void setup()
{
     mySerial.begin(9600);
     Serial.begin(9600);
}

void loop()
{    
  if (mySerial.available())
  {        
     incomingByte = mySerial.read();            
     Serial.print(int(incomingByte));
  }
}

Con el código que pruebo el Arduino no recibe nada. No se si es problema del hardware o software, ya que la bascula envía correctamente los datos.

Tengo dudas con el adaptador que estoy utilizando, por lo que he leído la mayoría utiliza el modulo max232 para hacer las integraciones y no se si con el mio es suficiente o no, ya que no lleva el max232.

Un saludo!

En principio el programa lo veo bien y el adaptador debería funcionar.

Yo he usado este circuito, que es muy similar al tuyo, en otras ocasiones y funciona sin problemas.

¿Has probado a intercambiar los cables de rx y tx entre si por si acaso?

Si tampoc va, prueba a cambiar los pines de MySerial a 4,5 a ver que pasa.

Si, he probado intercambiando los pines tx y rx y también cambiando los pines de MySerial unas dos veces.

He probado otra vez conectando la bascula con el ordenador y con el programa Realterm y la bascula transmite perfectamente.

No se por que no recibe nada el Arduino... No entiendo sobre esto de RS-232 pero puede ser que la bascula no transmita nada porque no tiene alimentación? Y cuando esta conectado al PC recibe desde ahí la alimentación y transmite adecuadamente?

Un saludo!

La comunicación de la bascula es la siguiente:
1 bit Start, 8 bits datos, 1 bit Stop, y ningún bit de paridad

¿Hay algún problema con la configuración de la bascula? Los pines RTS y CTS des RS-232 no los tengo que modificar para que la bascula me transmita?

BITEK:
No se por que no recibe nada el Arduino... No entiendo sobre esto de RS-232 pero puede ser que la bascula no transmita nada porque no tiene alimentación? Y cuando esta conectado al PC recibe desde ahí la alimentación y transmite adecuadamente?

¿La báscula no tiene alimentación propia?

Sí, la bascula se alimenta solo, con su fuente de alimentación.

Desde el desconocimiento que da el no tener en las manos tu montaje para hacer pruebas, tal vez sea lo que comentabas anteriormente. Si como parece que ocurre, la báscula sencillamente no transmite cuando se conecta a la tarjeta, pudiera ser porque aparte de tx/rx debas cruzar también DTR/DSR y RTS/CTS.
Prueba a ver a puentear los pines DTR con DSR y RTS con CTS (4-6 y 7-8) en el lado del arduino, que te será más sencillo, a ver si se despierta la báscula.
Saludos.

He probado haciendo las conexiones que me indicas, por si acaso he probado de formas distintas para asegurarme pero nada, no recibe nada el Arduino.

Aparte, he realizado pruebas con el polimetro, si conecto un [RS232 - USB] al PC desde el lado del RS232 hay voltios (10V en algunos pines). Pero cuando conecto un [RS232 - RS232] a la bascula no hay nada de voltios.

Gracias por vuestras respuestas.

Buenas,

Estoy haciendo otras pruebas, he pensado igual que puede ser por el protocolo que envía los datos la bascula, por lo que he leído hay tres formas de enviar, protocolo hardware, protocolo software y sin protocolo.

Probando con el Realterm, tiene una pestaña que puedes elegir el protocolo. He probado con los tres protocolos y la bascula envía de todas las formas. ¿Que quiere decir eso? Por lo que entiendo es que transmite sin protocolo la bascula... Pero el Arduino no recibe nada de nada...

Pantallazo del Realterm:

He probado también con un cable [RS232 - RS232] conectado a la bascula y en el otro lado hago puente con los pines 4-6 y 7-8. Mido con el polimetro y no hay nada de tensión...

A ver si alguien me puede echar una mano.

Me temo que tu báscula necesita que el otro dispositivo le indique que está al otro lado mediante el pin dcr. Prueba a hacer un serie "espía" de la comunicación entre ordenador y báscula. Puentea a tu tarjeta los pines rx y gnd del ordenador (o bien el tx y gnd de la báscula; lo que te resulte menos complicado). Deberías recibir los datos en ordenador y arduino simultáneamente. Si eso funciona, tu siguiente quebradero de cabeza será cómo proporcionar voltaje al pin dtr para despertar a la báscula, pero vamos paso a paso.

Buenas noter,

Eres un grande! :smiley:

He hecho lo que me decías, he hecho un puente entre la bascula y el PC, solo con los pines GND y el pin2 (transmit data) de la bascula, todo los demás no los he conectado. La sorpresa es que la bascula se comunica con el PC y el Arduino recibe PERFECTAMENTE!

Cuando he quitado el conector USB todavía seguía comunicándose y el Arduino seguía recibiendo. El problema era lo siguiente: Tenia el conector RS232-RS232 que no cruzaba los pines 2 y 3, ese dato ya lo sabia yo. Pero lo que hacia era que los cruzaba al conectarlo al Arduino y por lo que se ve ese era el problema. Ahora los cruzo antes del adaptador y el Arduino recibe perfectamente!

Ahora solo me falta adaptar el dato que recibo para que lo guarde en una variable. Por lo que veo el Arduino lo recibe en modo uint8, y el que quiero ver seria ASCII. ¿Sabéis como se podría hacer?

Pongo las capturas:

Para ver que el PC y el Arduino reciben lo mismo en modo uint8:

Para ver que lo que realmente manda la bascula es en ASCII:

Un saludo y muchas gracias!

Hola.
Me alegro de que hayas podido salir del atasco.
Lo de imprimir el carácter, depende de qué quieras hacer. En principio puedes usar un cast, por ejemplo:
Serial.println((char) incomingByte);

Buenas,

Ya he conseguido hacer la conversión, no es muy simple pero he conseguido meter en una variable.

Por curiosidad os pongo el código de la función que me devuelve el peso:

float RecibirPesoBascula ()
{
  int Peso1;
  int Peso2;
  int Decimal1;
  int Decimal2;
  int Zenbakia;  
  
  int FlagDecimal=0;
  int Amaituta=0;
  int IRTEN=0;
  
  int i=0;
  int k=0;
  
  byte incomingByte;
  
  
  while(IRTEN==0)
  {
      if (mySerial.available())
      {   
           incomingByte = mySerial.read();            
           
           //Si lo que recibe es un numero
           if((incomingByte > 47) && (incomingByte < 58))
            {                           
                if(FlagDecimal==0)
                 {                                       
                    if(i==0)
                     {                    
                       Peso1= incomingByte-48;                  
                     }
                     
                    if(i==1)
                     {
                       Peso2= incomingByte-48;                   
                     } 
                     
                   i++;   
                 }
                 
                 
                if(FlagDecimal==1)
                 {
                    if(k==0)
                     {
                       Decimal1= incomingByte-48;               
                     }
                     
                    if(k==1)
                     {
                       Decimal2= incomingByte-48;
                       Amaituta=1;
                     }   
                    k++;                               
                 }
            }
           
           //Si lo que recibe es el punto del decimal
           if(incomingByte==46)
            {
                FlagDecimal=1;
            }     
      }
        
      if(Amaituta==1)
      {  
           if(i==2)
            {
              Zenbakia=Peso1*10+Peso2;
            }
            
           else
            {
              Zenbakia=Peso1;
            }
                  
           PesoBascula=Zenbakia+(((Decimal1*10)+Decimal2)/100.0);
           Serial.print("Peso Bascula: ");       
           FlagDecimal=0;
           Amaituta=0;
           IRTEN=1;
           i=0;
           k=0;
                      
           return PesoBascula;
      }  
  }     
}

Con esto ya creo que termino, muchas gracias por la ayuda que me habéis dado!

Un saludo!

Ayuda, me pueden retroalimentar sobre la conexion y el programa que se utilizo?? Tengo el mismo problema!! :cold_sweat: se los agradeceria mucho!!! es urgente :roll_eyes:

void respuesta() {
Hola Leonardogomez: si no has podido solucionarlo con este tema, abre uno nuevo; }

No revivas hilos viejos 2014 para hacer una pregunta, que ademas ya doble posteaste en un hilo propio.
Una vez mas lee las normas del foro!!