Comunicación mediante radiofrecuencia
Lorenzo M. Oliver (webmaster@todomicrostamp.com)
Usaremos una pareja de transceptores de radiofrecuencia de Parallax (un emisor y un receptor), Parallax 433 MHz RF Transceiver Package. Son unos dispositivos muy pequeños y fascinantes por cuanto en una pequeña plaquita de circuito impreso, con muy pocos componentes y una antena diminuta, encierran alta tecnología que un servidor ya hubiera deseado tener entre las manos años atrás.
 |
Estos dispositivos utilizan la frecuencia de 433,92 MHz (UHF) y trabaja en un
radio de cobertura de 150 metros (dependiendo de las condiciones de propagación
de la señal).
Conexiones en el Transmisor
El Transmisor lo insertamos en una Home Work (por ejemplo,
que es más liviana); el Receptor lo insertaremos en una Board Of Education
que la destinamos para recoger la señal que transmite la otra tarjeta
y que, conectada con cable RS232 (o USB, según la versión de la
tarjeta), nos la mostrará mediante el comando DEBUG.
Tanto el Transmisor como el Receptor son muy fáciles de instalar: las
patillas del circuito se ajustan perfectamente a los agujeros del área
de prototipos de la Home Work o BOE, están perfectamente identificadas
(en el Transmisor: PDN, DATA, 5V y GND; en el Receptor: RSSI, PDN, DATA, 5V
y GND) y para la programación del código usaremos unas pocas líneas
y los comandos del PBASIC SEROUT y SERIN.
Estas son las conexiones en el Transmisor:
|
PIN
|
NOMBRE |
FUNCIÓN |
|
1
|
PDN |
Se
usa para reducir el consumo del dispositivo, colocando al Transmisor en
un estado casi "dormido". No lo usaremos en nuestro proyecto.
|
|
2
|
DATA |
Salida
de datos |
|
3
|
5V |
Alimentación
de +5V (Vdd) |
|
4
|
GND |
Conexión
a masa (Vss) |
Y estas son las conexiones del Receptor:
|
PIN
|
NOMBRE |
FUNCIÓN |
|
1
|
RSSI |
Indicador
de la intensidad de la señal. No lo usaremos en nuestro proyecto.
|
|
2
|
PDN |
Se
usa para reducir el consumo del dispositivo, colocando al Receptor en un
estado casi "dormido". No lo usaremos en nuestro proyecto. |
|
3
|
DATA |
Entrada
de datos |
|
4
|
5V |
Alimentación
de +5V (Vdd) |
|
5
|
GND |
Conexión
a masa (Vss) |
Transmitiendo datos
Podemos obtener del sensor ultrasónico, a través
del comando PULSIN, un valor que al calcularlo lo convertíamos en la
distancia entre el sensor y un objeto cualquiera que se hallase situado enfrente
de este. Ahora este dato, la distancia en centímetros, lo transmitiremos
en formato estándar asincrónico RS-232 mediante el comando SEROUT
SEROUT Tpin{\Fpin},Baudmode,{Timeout,Tlabel,}[OutData]
Un ejemplo de lo sencillo que resulta usar este comando lo podemos ver a continuación:
SEROUT 16, 16468,[Hola Mundo]
Esta línea de código envía por el puerto de programación
16 (o cualquier otro puerto) el texto "Hola Mundo".
grados VAR BYTE
grados = 90
SEROUT 1, 16468,[La temperatura es:, dec3 grados, C]
Estas otras líneas de código sirven para envíar por el
puerto 1 el texto "La temperatura es:" y el valor de la variable grados,
con 3 dígitos de decimal, seguido del caracter "C".
El valor "16468" corresponde a 9600 de velocidad, 8 bit invertido,
según la tabla de formatos que podemos encontrar en el manual de programación
del PBASIC.
Recibiendo datos
Para recibir estos y otros datos que nos pudieran interesar, usaremos el comando
SERIN.
SERIN Rpin{\Fpin},Baudmode,{Plabel,}{Timeout,Tlabel,}[InputData]
Otro ejemplo del uso sencillo de estos comandos lo podemos ver en estas otras
líneas de código:
Dato_Recivido VAR BYTE
SERIN 1, 16468,[Dato_Recibido]
Aquí, el comando SERIN espera a recibir el dato (sin ningún formato
específico y cualquier valor ASCII de forma natural). De manera que si
enviamos el caracter "A", la variable Dato_recibido almacenará
"65", que es el valor ASCII de esa letra.
Dato_Recivido VAR BYTE
SERIN 1, 16468,[DEC Dato_Recibido]
Este segundo ejemplo es para aceptar un valor decimal.
 |
LISTADO DEL CÓDIGO
Bueno, visto todo esto, vamos a escribir el programa completo usando un sensor
ultrasónico PING de Parallax (PING))) Ultrasonic Sensor) en la Home Work con el transmisor,
para que tome algunos datos para transmitir:
' Rastreador_TX2.bs2
' {$STAMP BS2}
' {$PBASIC 2.5}
tiempo VAR Word
DO
PULSOUT 9, 5
PULSIN 9, 1, tiempo
tiempo = tiempo ** 2251
PAUSE 100
PULSOUT 8, 1200
SEROUT 8, 16468, [ "MED", tiempo]
PAUSE 10
LOOP
Hemos añadido una línea con PULSOUT, para enviar un pulso de
sincronización para el Receptor. Después empleamos el comando
SEROUT con lo que hará posible el envío del valor almacenado en
la variable tiempo. La etiqueta "MED" (podría ser cualquier
otra) la usamos para identificar ese envío de datos, de manera que el
receptor pueda filtrarlo de cualquier otra fuente espúrea de datos recibidos
por rediofrecuencia en la banda que opera.
La BOE con el Receptor y un LED de estado:
' Rastreador_RX2.bs2
' {$STAMP BS2}
' {$PBASIC 2.5}
tiempo VAR Word
DO
LOW 0
SERIN 7, 16468, [WAIT("MED"), tiempo ]
HIGH 0
DEBUG HOME, DEC4 tiempo
LOOP
Vemos de que forma el comando SERIN lo empleamos en la forma de que reciba,
en la variable tiempo, los datos enviados en cada momento, pero filtrados, puesto
que únicamente tendrá en cuenta las ráfagas identificadas
con la etiqueta "MED". Interesante ¿verdad? El sistema se presta
para transmitir y recibir envíos discriminados.
Además, hemos añadido un LED en nuestro circuito, conectado en
serie con su correspondiente resistencia, al puerto 0. En el programa, permanecerá
apagado (LOW 0) hasta que se ejecute el comando SERIN (que lo hará si
recibe datos) y por lo tanto se encenderá (HIGH 0). Sólo es una
forma sencilla de visualizar el momento en que el receptor recibe datos, aunque
mediante el comando DEBUG y nuestra BOE conectada a nuestro ordenador, será
posible visualizar los datos.
También es posible hacer uso de la patilla "RSSI" si queremos
obtener una respuesta analógica para leer la intensidad de la señal
recibida.
|