Você está na página 1de 15

Práctica 2

“SoftwareSerial.h UART/USART
Arduino ”
Microcomputadoras Automotrices I

UPIITA-IPN
Equipo:
Martinez Sanchez Pedro
Torres Alcaraz Edgar Alejandro
Velasco Silva Omar Oswaldo
13 de marzo de 2019

1
Índice
1. Objetivos 3

2. Material 3

3. Marco Teórico 4
3.1. UART en Arduino . . . . . . . . . . . . . . . . . . . . . . . . 4
3.2. Transmisión y recepción de datos serie . . . . . . . . . . . . . 4
3.3. Biblioteca Software Serial . . . . . . . . . . . . . . . . . . . . 5
3.3.1. FUNCIONES . . . . . . . . . . . . . . . . . . . . . . . 6

4. Desarrollo de la práctica 7

5. CONTADOR-MAESTRO-UART 8

6. CONTADOR-ESCLAVO-UART 9

7. TECLADO-MATRICIAL-MAESTRO-UART 11

8. TECLADO-MATRICIAL-ESCLAVO-I2C 12

9. POTENCIOMETRO-MAESTRO-UART 13

10.POTENCIOMETRO-ESCLAVO-UART 14

11.Conclusiones 15

2
1. Objetivos
Desarrollar tres programas con la libreia ¡SoftwareSerial.h¿cuya funcion sea
la comunicacion entre dos Arduinos (Maestro y Esclavo) mediante el puerto
serie UART.

2. Material
1. 2 Arduinos Uno.

2. Push Boton.

3. Potenciometro.

4. Teclado Matricial.

5. Protoboard y cables Jumper .

3
3. Marco Teórico
3.1. UART en Arduino
UART, son las siglas en inglés de Universal Asynchronous Receiver-
Transmitter, en español: Transmisor-Receptor Ası́ncrono Universal, es
el dispositivo que controla los puertos y dispositivos serie. Se encuentra
integrado en la placa base o en la tarjeta adaptadora del dispositivo.

3.2. Transmisión y recepción de datos serie


El controlador del UART es el componente clave del subsistema de co-
municaciones series de una computadora. El UART toma bytes de datos
y transmite los bits individuales de forma secuencial. En el destino, un
segundo UART reensambla los bits en bytes completos. La transmisión
serie de la información digital (bits) a través de un cable único u otros
medios es mucho más efectiva en cuanto a costo que la transmisión en
paralelo a través de múltiples cables. Se utiliza un UART para convertir
la información transmitida entre su forma secuencial y paralela en cada
terminal de enlace. Cada UART contiene un registro de desplazamiento que
es el método fundamental de conversión entre las forma secuencial y paralela.

El UART normalmente no genera directamente o recibe las señales externas


entre los diferentes módulos del equipo. Usualmente se usan dispositivos de
interfaz separados para convertir las señales de nivel lógico del UART hacia
y desde los niveles de señalización externos.

Las señales externas pueden ser de variada ı́ndole. Ejemplos de estándares


para señalización por voltaje son RS-232, RS-422 y RS-485 de la EIA.
Históricamente se usó la presencia o ausencia de corriente en circuitos
telegráficos.

4
Algunosgunos esquemas de señalización no usan cables eléctricos; ejemplo
de esto son la fibra óptica, infrarrojo (inalámbrico) y Bluetooth (inalámbri-
co). Algunos esquemas de señalización emplean una modulación de señal
portadora (con o sin cables); por ejemplo, la modulación de señales de audio
con módems de lı́nea telefónica, la modulación en radio frecuencia (RF) en
radios de datos y la DC-LIN para la comunicación de lı́nea eléctrica.

1.jpg

Figura 1: Conexión UART

3.3. Biblioteca Software Serial


El hardware Arduino ha incorporado soporte para la comunicación serie en
los pines 0 y 1 (que también va al ordenadora través de la conexión USB). El
soporte nativo serie pasa a través de un componente de hardware (integrado
en el chip) llamado UART. Este hardware permite el chip ATmega recibir
la comunicación serie incluso mientras trabaja en otras tareas, siempre que
haya espacio en la memoria intermedia serie de 64 bytes.

La biblioteca SoftwareSerial ha sido desarrollada para permitir la comuni-


cación serie en otros pines digitales del Arduino, usando el software para
replicar la funcionalidad (de ahı́ el nombre de ”SoftwareSerial”). Es posible
tener múltiples puertos serie de programas con velocidades de hasta 115200
bps. Un parámetro permite la señalización invertida para dispositivos que
requieren ese protocolo.

5
3.3.1. FUNCIONES
SoftwareSerial(rxPin, txPin, inversel ogic)

Descripción:
SoftwareSerial se utiliza para crear una instancia de un objeto SoftwareSerial,
cuyo nombre es necesario proporcionar al igual que en el ejemplo siguiente.
El argumento inverse logic es opcional y por defecto es false. Véase más
abajo para más detalles acerca de lo que hace. Con SoftwareSerial pueden
ser creados objetos múltiples, sin embargo, sólo uno puede estar activo en un
momento dado.Es necesario llamar a SoftwareSerial.begin () para permitir
la comunicación.

Parámetros:
rxPin: el pin en que se desea recibir datos serie TxPin: el pin en el que se
transmiten los datos serieinverse logic: se utiliza para invertir el sentido de
los bits entrantes (el valor por defecto es de lógica normal). Si se activa,
SoftwareSerial pone un nivel LOW (0 voltios) en el pin Rx como 1 bit
(estado de reposo) y un nivel HIGH (5 voltios) como 0 bits. También afecta
a la forma en que se escribe en el pin Tx. El valor por defecto es false.

6
4. Desarrollo de la práctica
Se realizo la conexion de los Arduinos Uno de la siguiente manera como se
muestra en los siguientes circuitos.
Utilizando dos pines, Definiendo Tx y Rx en ambos Arduinos conectando sus
tierras entre si.

UART.jpg

Figura 2: CONEXION UART/USART

2.jpg

Figura 3: PUSH BOTON CONTADOR

7
5. CONTADOR-MAESTRO-UART

Listing 1: Codigo-Maestro
# include < SoftwareSerial .h >
SoftwareSerial Trans (2 ,3); // TX =2 RX =3
int estadoboton =0;
int estadoboton1 =0;
5 int salida =0;
char i ;
void setup ()
{
pinMode (4 , INPUT );
10 Trans . begin (9600);
}

void loop () {
estadoboton = digitalRead (4);
15 if (( estadoboton == HIGH )&&( estadoboton1 == LOW )){
salida =! salida ;
}
estadoboton1 = estadoboton ;
if ( salida == HIGH ){
20 serialEvent ();
delay (30);
}
}

25 void serialEvent () {
Trans . print ( i );
i ++;
if ( i ==256) { i =0;}
delay (30);
30 }

8
6. CONTADOR-ESCLAVO-UART

Listing 2: Codigo-Esclavo
# include < LiquidCrystal .h >
# include < SoftwareSerial .h >
SoftwareSerial Trans2 (6 ,7);
LiquidCrystal lcd (2 ,3 ,4 ,5 ,11 ,12);
5 int i ;
void setup ()
{
lcd . begin (16 ,2);
Serial . begin (9600);
10 Trans2 . begin (9600);

void loop () {
15 if ( Trans2 . available ()){
i = Trans2 . read ();
lcd . print ( i );
Serial . println ( i );
delay (30);
20 lcd . clear ();
}
}

9
4.jpg

Figura 4: TECLADO MATRICIAL

10
7. TECLADO-MATRICIAL-MAESTRO-
UART

Listing 3: Codigo-Maestro
# include < SoftwareSerial .h >
SoftwareSerial Trans (2 ,3); // TX =2 RX =3
# include < Keypad .h >// L i b r e r a para el control del keypad
const byte filas = 4;
5 const byte columnas = 4;
char teclado [ filas ][ columnas ]={
{ ’1 ’ , ’2 ’ , ’3 ’ , ’A ’} ,
{ ’4 ’ , ’5 ’ , ’6 ’ , ’B ’} ,
{ ’7 ’ , ’8 ’ , ’9 ’ , ’C ’} ,
10 { ’* ’ , ’0 ’ , ’# ’ , ’D ’}
}; // variable teclado
byte filaPines [ filas ]={11 ,10 ,9 ,8};
byte columnaPines [ columnas ]={7 ,6 ,5 ,4};
Keypad calcu = Keypad ( makeKeymap ( teclado ) ,
15 filaPines , columnaPines , filas , columnas );
void setup (){
Trans . begin (9600);
}
void loop () {
20 char c = calcu . getKey ();
if ( c != NO_KEY && ( c == ’1 ’ || c == ’2 ’ || c == ’3 ’ ||
c == ’4 ’ || c == ’5 ’ || c == ’6 ’ || c == ’7 ’ || c == ’8 ’ || c == ’9 ’
|| c == ’0 ’ || c == ’A ’ || c == ’B ’ || c == ’C ’
|| c == ’D ’ || c == ’* ’ ||
c == ’# ’))
25 { Trans . print ( c );
delay (30);
}
}

11
8. TECLADO-MATRICIAL-ESCLAVO-I2C

Listing 4: Codigo-Esclavo

# include < LiquidCrystal .h >


// ESCLAVO
# include < SoftwareSerial .h >
5 SoftwareSerial Trans2 (6 ,7); // TX =4 RX =5
LiquidCrystal lcd (12 ,11 ,5 ,4 ,3 ,2);
char c ;
void setup ()
{
10 lcd . begin (16 ,2);
Serial . begin (9600);
Trans2 . begin (9600);
}

15 void loop () {
Serial . flush ();

if ( Trans2 . available ()){


char c = Trans2 . read ();
20 lcd . clear ();
lcd . print ( c );
Serial . print ( c );
delay (300);

25 }
}

12
3.jpg

Figura 5: POTENCIOMETRO

9. POTENCIOMETRO-MAESTRO-UART

Listing 5: Codigo-Maestro
// maestro pot
# include < SoftwareSerial .h >
SoftwareSerial Trans (2 ,3); // TX =2 RX =3
char sen ;
5 int sensorValue = 0;

void setup (){


pinMode ( A0 , INPUT );
Trans . begin (9600);
10 Serial . begin (9600);
}

void loop (){


sensorValue = analogRead ( A0 );
15 sen = sensorValue /4.01;
Trans . print ( sen );
Serial . println ( sen );
delay (10);
}

13
10. POTENCIOMETRO-ESCLAVO-UART

Listing 6: Codigo-Esclavo
# include < LiquidCrystal .h >
# include < SoftwareSerial .h >
SoftwareSerial Trans2 (6 ,7); // TX =2 RX =3
LiquidCrystal lcd (12 ,11 ,5 ,4 ,3 ,2);
5 int c ;
void setup ()
{
lcd . begin (16 ,2);
Serial . begin (9600);
10 Trans2 . begin (9600);
}

void loop () {

15 if ( Trans2 . available ()){


c = Trans2 . read ();
lcd . print ( c );
Serial . println ( c );
delay (10);
20 lcd . clear ();
}
}

14
11. Conclusiones
Se realizaron tres circuitos con sus respectivos codigos utilizando un pulsador,
un potenciometro y un teclado matricial logrando la comunicacion entre dos
Arduinos Uno, utilizando la libreria Softwareserial.h mediante la transmision
UART.

Referencias
[UART y USB en Arduino] ttps://aprendiendoarduino.wordpress.com/2016/11/09/uart-
y-usb-en-arduino/

[USB to Serial] ttps://aprendiendoarduino.wordpress.com/tag/uart/

[Softwareserial.h LIBRARY] ttps://www.arduino.cc/en/Reference/SoftwareSerial

15

Você também pode gostar