Documentos de Académico
Documentos de Profesional
Documentos de Cultura
● Comunicación serial.
● Protocolos.
● Lectura de datos.
https://www.electricaltechnology.org/wp-content/uploads/2020/05/Difference-Between-Serial-Parallel-Communication.png
https://www.youtube.com/watch?v=u1pKHLy4yxk
Comunicación serial
La comunicación entre humanos es vital, de manera similar lo es en sistemas
digitales que comparten y transmiten datos, mediante algún protocolo común.
En general existen dos categorías: paralelo o serial.
Paralelo: Serial:
- Transmiten múltiples bits al mismo tiempo. - Transmiten un bit a la vez.
- Necesita de buses de datos con varios - Necesita de un solo cable, generalmente no
cables. más de cuatro.
- Los datos se transmiten en enormes - Los datos se transmiten a menor velocidad.
cantidades de 0s y 1s, a gran velocidad.
transmisión en
baudios: 9600 bps
https://learn.sparkfun.com/tutorials/serial-communication/rules-of-serial
Protocolos
● RS-232
● SPI
● I2C
● …
https://techgeekbuzz.com/blog/iot-applications/
TTL, RS-232
https://learn.sparkfun.com/tutorials/serial-communication
https://www.youtube.com/watch?v=G7aQB6x0LHc
TTL serial
RS-232
Comunicación Serial I2C (Inter-Integrated Circuit)
http://howtomechatronics.com/tutorials/arduino/how-i2c-communication-works-and-how-to-use-it-with-arduino/ 8
I2C y SPI sobre Arduino
SPI pins:
• SCK = serial clock (13)
• MISO = master in, slave out(12) Serial Peripheral Interface (SPI)
• MOSI = master out slave in (11)
• SS = slave select (10)
I2C pins:
• SDA = data line (A4) ICSP (In Chip Serial Programmer)
• SCL = clock line (A5) 9
I2C sobre Arduino Función Detalle
La dirección de los ejes está indicado en el módulo el cual hay que tener en cuenta para no
equivocarnos en el signo de las aceleraciones.
Los rangos de valores con los que está configurado nuestro MPU6050 pueden ser
2g/4g/8g/16g para el acelerómetro y 250/500/1000/2000(°/s) para el giroscopio. Los rangos
por defecto son 2g y 250°/s
Para trabajar con el dispositivo se utiliza la Tenemos dos direcciones I2C para poder
siguiente librería: trabajar:
https://github.com/jrowberg/i2cdevlib/tree/master/
Pin AD0 Dirección I2C
Arduino/MPU6050
Esta librería trabaja con una librería adicional
AD0=HIGH (5V) 0x69
para la comunicación I2C:
https://github.com/jrowberg/i2cdevlib/tree/master/
Arduino/I2Cdev AD0=LOW (GND o NC) 0x68 13
Escaner I2C para el MPU6050
• Cada componente que conectamos al bus I2C tiene una dirección única. Para establecer la
comunicación es necesario conocer esa dirección. Si no fuera posible conocerla (no hay
datasheet) existe un programa para Arduino, que nos informa, de lo que hay en nuestro bus y
con qué dirección.
14
MPU6050: Lectura de Valores
15
Ejercicio: MPU6050 + Servo
Se controla un servomotor utilizando el sensor MPU6050
(acelerómetro y giroscopio). Al mover el sensor hacia arriba/ abajo,
nos da valores de -17000 a 17000. Vamos a asignar estos de 0 a
180 para mover el servomotor. Cuando movemos el sensor hacia
arriba, la salida del sensor será 180. Cuando movemos el sensor
hacia abajo, la salida del sensor será 0.
16
Comunicación entre Arduinos por I2C
I2C pins:
• SDA = data line (A4)
• SCL = clock line (A5)
17
Comunicación serial SPI
• SPI (Serial Peripheral Interface Bus) utilizado para
comunicar circuitos integrados
• Desarrollado por Motorola, ahora freescale
• Velocidad=1-100 MHz (limitado por el reloj/dispositivo)
• Bus de 4 líneas: SCLK, MOSI, MISO, SS.
• Utiliza un pin de chip select, que conecta o desconecta la
operación del dispositivo con el que uno desea
comunicarse. no es necesario usar direccionamiento
SCLK o SCK : Serial Clock • El maestro y el esclavo envían datos por cables
diferentes (full duplex)
MISO(Master Input Slave • Múltiples esclavos pueden compartir el mismo bus (pero
Output) cada uno necesita un SS dedicado)
MOSI Master Output Slave
Input)
SS o CS: Chip Select o Slave
Select
SCLK o SCK : Señal de reloj del bus. Esta señal rige la velocidad a la que se transmite cada bit.
MISO: Es la señal de entrada a nuestro dispositivo, por aquí se reciben los datos desde el otro integrado.
MOSI: Transmisión de datos hacia el otro integrado.
SS o CS: Habilita el integrado hacia el que se envían los datos.
18
Proceso de comunicación Serial SPI
• Se habilita el chip al que hay que enviar la
información mediante el SS (Opcional).
• Se carga en el buffer de salida el byte a enviar.
• La línea de Clock empieza a generar la señal
cuadrada donde normalmente por cada flanco de
bajada se pone un bit en MOSI.
• El receptor normalmente en cada flanco de subida
captura el bit de la linea MISO y lo incorpora en el
buffer.
• Se repite el proceso 8 veces y se ha transmitido
un byte. Si se ha terminado de transmitir se vuelve
a poner la linea SS en reposo.
• Hay que tener en cuenta que a la vez que el
Master está enviando un dato también lo recibe
así que si el Slave ha depositado algún byte en el
buffer de salida, este también será enviado y
recibido por el Master, comunicación full-duplex.
• La señal de reloj es generada por el master y la
línea SS normalmente se mantiene HIGH y se
activa con LOW, lo que despierta al esclavo
seleccionado. Cuando se termina la transferencia
la línea se levanta a HIGH y el esclavo se
desactiva.
19
Comunicación serial SPI sobre arduino
Instrucción Función
• La librería para manejar el
SPI.begin() Inicializa el bus SPI, configurando los pines SCK, MOSI y SS como
bus SPI en Arduino es salidas, establece los pines SCK y MOSI en bajo y el pin SS en
SPI.end() Deshabilita el bus SPI (sin cambiar el modo de los pines). En caso
permite comunicar con SPI de que necesite usar los pins 10-13 nuevamente
al Arduino con otros SPI.setBitOrder(order) Configura el orden de los bits enviados como el menos significativo
dispositivos, ya que primero o el más significativo primero.
order = {LSBFIRST, MSBFIRST}
contiene las funciones SPI.setClockDivider(divider) Configura del divisor de reloj en el bus SPI. ES decir configura la
necesarias para controlar el velocidad del bus.
divider = {2, 4, 8, 16, 32, 64, 128}
hardware integrado. SPI clock speed = 16 MHz/divider
SPI.setDataMode(mode) Configura el modo de datos del bus SPI, es decir, polaridad y fase
del reloj.
mode = {SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3}
Nota: Se debe incluir la librería SPI SPI_MODE0: clock normalmente LOW, muestreo en flanco subida
#include <SPI.h> SPI_MODE1: clock normalmente LOW, muestreo en flanco bajada
SPI_MODE2: clock normalmente HIGH, muestreo en flanco subida
SPI_MODE3: clock normalmente HIGH, muestreo en flanco bajada
Nota: No es necessario utilizar pinMode ()
cuando se usa SPI. Es automáticamente byteIn = SPI.transfer(byteOut) Transfiere un byte sobre el bus SPI, tanto de envío como de
recepción. Devuelve el byte recibido
configurado con SPI.begin().
SPI.attachInterrupt(función) Activa la interrupción SPI y conecta la función que será ejecutada
cuando se complete la transferencia SPI 20
Serial Peripheral Interface (SPI)
https://www.electronicshub.org/basics-serial-peripheral-interface-spi/
Servidor Web con Arduino
22
Servidor Web con Arduino
23
Servidor Web con Arduino - Código
24
Lectura de datos.
Función
Serial
https://youtu.be/WD0na5tTUnM?t=120
SerialEvent
Lectura de
datos
ingresados
por el
Función
serialEve
nt()
Lectura
de
carácte
r
ingresa
do por https://youtu.be/HW85aErntnU?t=31
Comunicación serie con
sensor de proximidad y visualizador
LCD
https://www.tinkercad.com/things/ir14p3Zqm0S-sensor-de-distancialcd
Analo
g
Read
Serial
Otro ejemplo
Read Analog
Voltage.
https://www.youtube.com/watch?v=LoyOqPAblVg
Trabajo en equipo
● Informe de investigación sobre el uso del Monitor Serie
del IDE de la plataforma Arduino en la lectura de señales
digitales, utilizando un ejemplo real.
https://docs.arduino.cc/built-in-examples/