Hola chicos, aqui vengo con la segunda parte del control de dispositivos REALES, y para ello traigo un ejemplo al que seguro que todos le veis alguna que otra increible utilidad.
Se trata de una implementación de un mando a distancia, solo he hecho interfaz de 1 boton de los 12, a modo breve y explicativo del funcionamiento
Bueno vamos al grano:
Para el que tenga alguna experiencia en microcontroladores, crear un puente usb-serie o serie-serie con el pc no será nada complicado, para los mas profanos, existen dispositivos muy sencillos de usar y que incorporan una serie de potentes capacidades de entrada/salida.
En este caso he utilizado un UBW: http://www.sparkfun.com/products/762
Al modico precio de 18 euros, dispones de una diminuta placa con unas cuantas entradas y salidas, presta y dispuesta para actuar como puente entre tu software->usb->serie->dispositivos externos
Existe una ampliiiiiiisima gama de actuadores externos que se pueden acoplar a este cacharro, os dejo unna interesante colección aqui: http://www.ucontrol.com.ar/wiki/index.p ... ada/salida
Os invito a preguntar en este hilo cualquier duda que pueda surgir para fabricar alguno de estos cacharros.
Por lo general, vamos casi siempre a querer controlar cargas, con lo que un elemento como un rele nnor sirve de maravilla, ya que es como un interruptor pero activado electronicamente, en la pagina anterior teneis algun diagrama de conexion de reles, he de decir que el UBW esta limitado a la tension que puede entregar el usb, que es mas bien poquita, por lo que recomiendo encontrar alguna fuente de alimentacion externa, como cables sacados de la propia fuente del pc para conectar algo que consuma mas que un led, y aconsejo optoisolar la salida (buscar rele optoisolado)
Recomiendo disponer de una placa de prototipos como la que muestro en el video para hacer pequeñas pruebas sin soldar nada
El sistema de mando a distancia usado es este: http://www.virtualvillage.com/12-channe ... 1-031.html Antes lo usaba para controlar la subida y bajada de varios grupos de motores para espectaculos y cosas asi...
La parte de AMS es mas bien... sencillisima.
-Descargar luaRS232: http://github.com/ynezz/librs232/downloads
-Colocar la dll en la carpeta scripts de nuestro proyecto
Una vez hecho esto, por ejemplo dejo el codigo del programa que veis en el video:
Una vez abierto el puerto y configurado en velocidad, todo esta listo para usar las funciones :read(longitud_a_leer, timeout) y :write(cadena_a_escribir,timeout)
Tan sencillo como eso. no hay complicadas cosas que hacer ni nada de nada.
Aqui dejo el ejemplo oficial de luars232 que enseña un poquito mas la funcionalidad y el chequeo de errores, cosas mas opcionales pero que nunca vienen mal:
En unas horas publico una aplicacion para controlar el UBW con la mayor parte de sus caracteristicas, entradas (digitales y analogicas) y salidas
Estos post no son un tutorial, sino un punto de partida y un sitio para que quien quiera, pueda escribir acerca de lo que quiere hacer y yo le pueda asesorar en el diseño y construcción
Se trata de una implementación de un mando a distancia, solo he hecho interfaz de 1 boton de los 12, a modo breve y explicativo del funcionamiento
Bueno vamos al grano:
Para el que tenga alguna experiencia en microcontroladores, crear un puente usb-serie o serie-serie con el pc no será nada complicado, para los mas profanos, existen dispositivos muy sencillos de usar y que incorporan una serie de potentes capacidades de entrada/salida.
En este caso he utilizado un UBW: http://www.sparkfun.com/products/762
Al modico precio de 18 euros, dispones de una diminuta placa con unas cuantas entradas y salidas, presta y dispuesta para actuar como puente entre tu software->usb->serie->dispositivos externos
Existe una ampliiiiiiisima gama de actuadores externos que se pueden acoplar a este cacharro, os dejo unna interesante colección aqui: http://www.ucontrol.com.ar/wiki/index.p ... ada/salida
Os invito a preguntar en este hilo cualquier duda que pueda surgir para fabricar alguno de estos cacharros.
Por lo general, vamos casi siempre a querer controlar cargas, con lo que un elemento como un rele nnor sirve de maravilla, ya que es como un interruptor pero activado electronicamente, en la pagina anterior teneis algun diagrama de conexion de reles, he de decir que el UBW esta limitado a la tension que puede entregar el usb, que es mas bien poquita, por lo que recomiendo encontrar alguna fuente de alimentacion externa, como cables sacados de la propia fuente del pc para conectar algo que consuma mas que un led, y aconsejo optoisolar la salida (buscar rele optoisolado)
Recomiendo disponer de una placa de prototipos como la que muestro en el video para hacer pequeñas pruebas sin soldar nada
El sistema de mando a distancia usado es este: http://www.virtualvillage.com/12-channe ... 1-031.html Antes lo usaba para controlar la subida y bajada de varios grupos de motores para espectaculos y cosas asi...
La parte de AMS es mas bien... sencillisima.
-Descargar luaRS232: http://github.com/ynezz/librs232/downloads
-Colocar la dll en la carpeta scripts de nuestro proyecto
Una vez hecho esto, por ejemplo dejo el codigo del programa que veis en el video:
ONSHOW:
rs232 = require("luars232")
port_name = "COM3"
e, p = rs232.open(port_name)
if e ~= rs232.RS232_ERR_NOERROR then
Dialog.Message('',string.format("can't open serial port '%s', error: '%s'\n",
port_name, rs232.error_tostring(e)))
return
end
assert(p:set_baud_rate(rs232.RS232_BAUD_9600) == rs232.RS232_ERR_NOERROR)
assert(p:set_data_bits(rs232.RS232_DATA_8) == rs232.RS232_ERR_NOERROR)
assert(p:set_parity(rs232.RS232_PARITY_NONE) == rs232.RS232_ERR_NOERROR)
assert(p:set_stop_bits(rs232.RS232_STOP_1) == rs232.RS232_ERR_NOERROR)
assert(p:set_flow_control(rs232.RS232_FLOW_OFF) == rs232.RS232_ERR_NOERROR)
p:write([[c,0,0,0,0
]])
Application.Sleep(100);
ex,ec=p:read(20,100)
Dialog.Message('',ec)
Page.StartTimer(100, 10);
ON TIMER:
ex,ec=p:read(20,100)
if (ec~=nil) then
Label.SetText("Label2", ec);
ecx = String.DelimitedToTable(ec, ",");
--Dialog.Message('',tostring(ec))
if (ecx[3]=="000") then
Shape.SetFillColor("Plugin1", 255);
else
Shape.SetFillColor("Plugin1", 65280);
end end
p:write("i\n")
Tan sencillo como eso. no hay complicadas cosas que hacer ni nada de nada.
Aqui dejo el ejemplo oficial de luars232 que enseña un poquito mas la funcionalidad y el chequeo de errores, cosas mas opcionales pero que nunca vienen mal:
rs232 = require("luars232")
port_name = "COM1"
--local out = io.stderr
-- open port
local e, p = rs232.open(port_name)
if e ~= rs232.RS232_ERR_NOERROR then
-- handle error
Dialog.Message('',string.format("can't open serial port '%s', error: '%s'\n",
port_name, rs232.error_tostring(e)))
return
end
-- set port settings
assert(p:set_baud_rate(rs232.RS232_BAUD_115200) == rs232.RS232_ERR_NOERROR)
assert(p:set_data_bits(rs232.RS232_DATA_8) == rs232.RS232_ERR_NOERROR)
assert(p:set_parity(rs232.RS232_PARITY_NONE) == rs232.RS232_ERR_NOERROR)
assert(p:set_stop_bits(rs232.RS232_STOP_1) == rs232.RS232_ERR_NOERROR)
assert(p:set_flow_control(rs232.RS232_FLOW_OFF) == rs232.RS232_ERR_NOERROR)
Dialog.Message('',string.format("OK, port open with values '%s'\n", tostring(p)))
-- read with timeout
local read_len = 1 -- read one byte
local timeout = 100 -- in miliseconds
local err, data_read, size = p:read(read_len, timeout)
assert(e == rs232.RS232_ERR_NOERROR)
-- write without timeout
err, len_written = p:write("test")
assert(e == rs232.RS232_ERR_NOERROR)
-- write with timeout 100 msec
err, len_written = p:write("test\n", timeout)
assert(e == rs232.RS232_ERR_NOERROR)
Estos post no son un tutorial, sino un punto de partida y un sitio para que quien quiera, pueda escribir acerca de lo que quiere hacer y yo le pueda asesorar en el diseño y construcción