Is there any limitation with Arduino Nano serial communication distance?
For that sort of difference you are better using RS-485 instead of UART. UART is really only designed for short-distance communication.
Converting UART to RS-232 will give an improvement, but switching to RS-485 instead will give you the ability to create a multi-drop bus for connecting more than two Arduinos together over a long distance.
- UART uses 5V logic level signalling (on the normal Arduinos - 3.3V on most 32-bit boards). It has a "weak drive" and is highly susceptible to induced noise over longer distances.
- RS-232 uses ±10V "Non Return to Zero" signalling. This gives far greater immunity to noise and a stronger drive for greater distances.
- RS-485 (and the associated peer-to-peer RS-422) use differential signalling. This gives the greatest immunity to noise over the longest distances.
In summary:
- RS-232 can be used if you only want to connect two devices together in a low noise environment.
- RS-422 can be used to connect two devices together in a high noise (industrial) environment.
- RS-485 can be used to connect lots of devices together in a high noise environment.
For more information on how they work there are some good Wikipedia pages:
- RS-232
- RS-422
- RS-485
For interfacing any of these to an Arduino you will need extra hardware ("Driver Chips"). For example:
- RS-232: MAX232
- RS-422: MAX1184
- RS-485: MAX485
There is also "CAN", which is a more modern replacement for RS-485 and is used in many industrial and automotive environments. As this is a newer technology than RS-485 there are fewer resources available and "initial cost to entry" can be higher.
Roughly speaking, for a given protocol and medium (cable) the data rate and the distance are inversely related, that is, a connection with half the data rate can work across twice the distance. You will eventually hit the hard limit when the total capacitance of the cable will become too much for the driver.
RS-232 standard provides this table of maximum cable lengths for standard shielded cables:
Data rate (bps) Distance (m)
2400 60
4800 30
9600 15
19200 7.6
38400 3.7
56000 2.6
So, 30 meters can be easily achieved even with RS-232, if you don't mind the 4800 bps baudrate. Even longer distances (or higher baudrates) can be achieved by running RS-232 over a twisted pair, e.g. a UTP 5 cable: these cables have lower capacitance and can run at 9600 bps over 100 m or more.
There are other protocols suitable for long-distance communication. There are Arduino shields for CAN, RS-485 and even Ethernet.