USB Con Arduino
USB Con Arduino
USB Con Arduino
PUERTO SERIE
Los puertos serie son la forma principal de comunicar una placa Arduino con un
ordenador. Gracias al puerto serie podemos, por ejemplo, mover el ratón o simular la
escritura de un usuario en el teclado, enviar correos con alertas, controlar un robot
realizando los cálculos en el ordenador, encender o apagar un dispositivo desde una
página Web a través de Internet, o desde una aplicación móvil a través de Bluetooth.
Existen un sin fin de posibilidades en las que se requiere el empleo del puerto
serie. Por tanto el puerto serie es un componente fundamental de una gran cantidad
de proyectos de Arduino, y es uno de los elementos básicos que debemos aprender
para poder sacar todo el potencial de Arduino.
Un puerto serie envía la información mediante una secuencia de bits. Para ello se
necesitan al menos dos conectores para realizar la comunicación de datos, RX
(recepción) y TX (transmisión). No obstante, pueden existir otros conductores para
referencia de tensión, sincronismo de reloj, etc.
Por otro lado, también podéis oír el término TTL (transistor-transistor logic). Esto
significa que la comunicación se realiza mediante variaciones en la señal entre 0V y Vcc
(donde Vcc suele ser 3.3V o 5V). Por el contrario, otros sistemas de transmisión emplean
variaciones de voltaje de -Vcc a +Vcc (por ejemplo, los puertos RS-232 típicamente
varían entre -13V a 13V).
Antes de conectar dos sistemas debemos comprobar que los voltajes empleados son
compatibles. En caso de no serlo, necesitaremos un subsistema que adapte los niveles de
la señal, o podemos dañar alguno de los dispositivos.
Los puertos serie están físicamente unidos a distintos pines de la placa Arduino.
Lógicamente, mientras usamos los puertos de serie no podemos usar como entradas
o salidas digitales los pines asociados con el puerto serie en uso.
En Arduino UNO y Mini Pro los pines empleados son 0 (RX) y 1 (TX). En el caso de
Arduino Mega y Arduino Due, que tienen cuatro puertos de serie, el puerto serie 0 está
conectado a los pines 0 (RX) y 1 (TX), el puerto serie 1 a los pines 19 (RX) y 18 (TX) el
puerto serie 2 a los pines 17 (RX) y 16 (TX), y el puerto serie 3 a los pines 15 (RX) y 14
(TX).
1 int cont=0;
2
3 void setup(){
4 //iniciamos el puerto serie
5 Serial.begin(9600);
6 }
7
8 void loop(){
9 //Imprimimos el valor del contador
10 Serial.print("Contador: ");
11 Serial.println(cont);
12
13 //incrementamos el contador y esperamos un segundo
14 cont++;
15 delay(1000);
16 }
ENVIAR INFORMACIÓN AL ARDUINO
En este ejemplo empleamos el puerto serie para encender o apagar el LED
integrado en la placa Arduino. Para ello enviamos un carácter a la placa Arduino,
empleando el monitor serial. En caso de enviar 'a' la placa Arduino apaga el LED, y en
caso de enviar 'b' lo enciende.
1 int option;
2 int led = 13;
3
4 void setup(){
5 Serial.begin(9600);
6 pinMode(led, OUTPUT);
7 }
8
9 void loop(){
10 //si existe datos disponibles los leemos
11 if (Serial.available()>0){
12 //leemos la opcion enviada
13 option=Serial.read();
14 if(option=='a') {
15 digitalWrite(led, LOW);
16 Serial.println("OFF");
17 }
18 if(option=='b') {
19 digitalWrite(led, HIGH);
20 Serial.println("ON");
21 }
22 }
23 }
1 int option;
2 int led = 13;
3
4 void setup(){
5 Serial.begin(9600);
6 pinMode(led, OUTPUT);
7 }
8
9 void loop(){
10 //si existe información pendiente
11 if (Serial.available()>0){
12 //leeemos la opcion
13 char option = Serial.read();
14 //si la opcion esta entre '1' y '9'
15 if (option >= '1' && option <= '9')
16 {
17 //restamos el valor '0' para obtener el numeroenviado
18 option -= '0';
19 for(int i=0;i<option;i++){
20 digitalWrite(led, HIGH);
21 delay(100);
22 digitalWrite(led, LOW);
23 delay(200);
24 }
25 }
26 }
27 }
A partir de la versión 1.6.6 del IDE de Arduino se agrega una ventana para hacer
gráficos con los valores recibidos por el puerto serie, llamada "Serial Plotter", para
visualizar información enviada desde Arduino por el puerto serie.
1 void setup() {
2 Serial.begin(9600);
3 }
4
5 void loop() {
6
7 float value;
8 value = random(100,300)/100.0;
9
10 Serial.println(value);
11
12 delay(100);
13 }
El resultado que obtendréis es similar al de la siguiente imagen.
Por supuesto, en una aplicación real el valor mostrado sería una variable
supervisada como, por ejemplo, la medición realizada mediante algún sensor.
SoftwareSerial LIBRARY
El hardware Arduino tiene soporte incorporado para comunicación en serie
en los pines 0 y 1 (que también va a la computadora a través de la
conexión USB). El soporte serial nativo ocurre a través de una pieza de
hardware (integrada en el chip) llamada UART. Este hardware permite
que el chip Atmega reciba comunicación en serie incluso mientras trabaja
en otras tareas, siempre que haya espacio en el búfer en serie de 64
bytes.
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Native USB only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(38400);
mySerial.println("Hello, world?");
}