Diferencia entre revisiones de «HackPoints»
(typo error) |
|||
(No se muestran 13 ediciones intermedias de 4 usuarios) | |||
Línea 1: | Línea 1: | ||
− | A diferencia de otras placas de entrada salida, la placa USB4butiá persigue como objetivo ser una placa de fácil utilización y robusta en lo referente a la conexión de dispositivos (sensores u actuadores). Es por ese motivo que la placa dispone de 6 puertos a los cuales se pueden conectar dispositivos, no siendo necesario ninguna etapa de configuración ni existiendo ninguna diferencia entre cada uno de los puertos. Desde el punto de vista del usuario se manejan entidades de gran nivel de abstracción como ser actuador led, sensor de grises, sensor de distancia, actuador motor, etc. A los cuales se le pueden invocar servicios, como ser cambiar la dirección de giro, iniciar movimiento del motor, etc. Por el contrario otras placas manejan otro enfoque en el que se controla directamente el pin del microcontrolador brindando menos poder de abstracción lo cual atenta contra los fines del Butiá en el que se busca utilizarlo como una plataforma con el fin de enseñar programación, | + | A diferencia de otras placas de entrada salida, la placa USB4butiá persigue como objetivo ser una placa de fácil utilización y robusta en lo referente a la conexión de dispositivos (sensores u actuadores). Es por ese motivo que la placa dispone de 6 puertos a los cuales se pueden conectar dispositivos, no siendo necesario ninguna etapa de configuración ni existiendo ninguna diferencia entre cada uno de los puertos. Desde el punto de vista del usuario se manejan entidades de gran nivel de abstracción como ser actuador led, sensor de grises, sensor de distancia, actuador motor, etc. A los cuales se le pueden invocar servicios, como ser cambiar la dirección de giro, iniciar movimiento del motor, etc. Por el contrario otras placas manejan otro enfoque en el que se controla directamente el pin del microcontrolador brindando menos poder de abstracción lo cual atenta contra los fines del Butiá en el que se busca utilizarlo como una plataforma con el fin de enseñar programación. Pero por otro lado el manejar directamente los pines del microcontrolador desde un lenguaje de alto nivel, brinda mayor control de aspectos de bajo nivel el cual puede ser útil cuando se quiere de forma rápida prototipar alguna prueba o controlar varios pines de datos. Por este motivo y dado que sobraron 8 pines digitales luego de realizar el circuito de la placa USB4butiá es que el diseño actual de la placa se incluye un puerto para manejar 8 pines digitales. Los mismos pueden ser utilizados en modo entrada como en modo salida. |
Esto permite que usuarios avanzados que quieren dar un paso más puedan hackear la placa cambiando la funcionalidad original de la misma agregando nuevos servicios manejando directamente los pines de un puerto desde un lenguaje de alto nivel. | Esto permite que usuarios avanzados que quieren dar un paso más puedan hackear la placa cambiando la funcionalidad original de la misma agregando nuevos servicios manejando directamente los pines de un puerto desde un lenguaje de alto nivel. | ||
− | Su ubicación en la placa '''USB4butia''' es la siguiente: | + | Su ubicación en la placa '''USB4butia''' es la siguiente ('''Nota: en la versión actual de la placa 1.9.0, los hackpoint han sido cambiados de lugar para lograr el encastre con el shield de motores CC'''): |
− | [[Archivo:hackp5.png | | + | [[Archivo:hackp5.png|500px]] [[Archivo:usb4butia4.jpg|500px]] |
== Firmware y bobot == | == Firmware y bobot == | ||
Línea 34: | Línea 34: | ||
− | * Un ejemplo sencillo de seguidor de línea, donde se utilizan 4 pines y a los cuales se conectan dos motores de continua (ver [[Tutorial de armado de butiá con motores de corriente Continua]] para más información). | + | * Un ejemplo sencillo de seguidor de línea (la pista es un lienzo blanco con un círculo negro que es el camino), donde se utilizan 4 pines y a los cuales se conectan dos motores de continua (ver [[Tutorial de armado de butiá con motores de corriente Continua]] para más información). |
<br><syntaxhighlight lang="lua"> | <br><syntaxhighlight lang="lua"> | ||
-- Example of simple line follower with hackpoints and dc motors | -- Example of simple line follower with hackpoints and dc motors | ||
local ERROR = -1 | local ERROR = -1 | ||
− | local GREY_TRESHOLD = 35000 -- this value must be calibrated. In this example values under | + | local GREY_TRESHOLD = 35000 -- this value must be calibrated. In this example values under 35000 correspond to white |
local socket = require("socket") | local socket = require("socket") | ||
Línea 67: | Línea 67: | ||
while true do | while true do | ||
if tonumber(send(msg_g)) > GREY_TRESHOLD then | if tonumber(send(msg_g)) > GREY_TRESHOLD then | ||
− | send("CALL hackp writePort 144") -- turn | + | send("CALL hackp writePort 144") -- turn left |
else | else | ||
send("CALL hackp writePort 160") -- forward | send("CALL hackp writePort 160") -- forward | ||
Línea 77: | Línea 77: | ||
== Tortubots == | == Tortubots == | ||
− | Desde tortubots podemos manejar estos pines mediante bloques individuales que nos permiten cambiar el modo (''IN/OUT'') y el nivel (''HIGH/LOW'') de los mismos. Estos bloques se encuentran en la paleta extra de butiá: | + | Desde tortubots podemos manejar estos pines mediante bloques individuales que nos permiten cambiar el modo (''IN/OUT'') y el nivel (''HIGH/LOW'') de los mismos. Estos bloques se encuentran en la paleta extra de butiá [[Archivo:butExtra.png]] |
<br>[[Archivo:hackp1.png]]<br> | <br>[[Archivo:hackp1.png]]<br> | ||
''Notar que los pines los nombramos desde 1 a 8.'' | ''Notar que los pines los nombramos desde 1 a 8.'' | ||
+ | |||
+ | Se corresponden con los pines digitales 19 al 22 y 27 al 30 del pic 18F4550, es decir, el pin 19 del micro es nuestro hackpin 1, el 20 es nuestro 2 y así hasta que el pin 30 pasa a ser nuestro pin 8 en tortubots. Para mayor claridad, tenemos la correspondencia mapeada en la siguiente imagen. | ||
+ | |||
+ | [[Archivo:hackpNumb.png]] | ||
Línea 109: | Línea 113: | ||
− | Para ver aplicaciones que hacen uso de estos pines: [[Tutorial de armado de butiá con motores de corriente Continua]] | + | == Aplicaciones == |
+ | |||
+ | Para ver aplicaciones que hacen uso de estos pines: <br> | ||
+ | |||
+ | [[Tutorial de armado de butiá con motores de corriente Continua]] <br> | ||
+ | |||
+ | Parpadeo de Led:<br> | ||
+ | |||
+ | <youtube>8ZFJCNoOfnA</youtube> | ||
+ | |||
+ | Control de Led RGB:<br> | ||
+ | <youtube>BA_jiqhvLZE</youtube> | ||
+ | |||
+ | Juego de luces:<br> | ||
+ | <youtube>YiBZfZPDtTs</youtube> | ||
+ | |||
+ | Control de motor de continua:<br> | ||
+ | <youtube>Zm9LvH18vHQ</youtube> | ||
+ | <youtube>wxUgKcM2sas</youtube> | ||
− | + | Control de motor stepper: <br> | |
+ | <youtube>JHgjbBuSzTw</youtube> |
Revisión actual del 11:14 2 feb 2014
A diferencia de otras placas de entrada salida, la placa USB4butiá persigue como objetivo ser una placa de fácil utilización y robusta en lo referente a la conexión de dispositivos (sensores u actuadores). Es por ese motivo que la placa dispone de 6 puertos a los cuales se pueden conectar dispositivos, no siendo necesario ninguna etapa de configuración ni existiendo ninguna diferencia entre cada uno de los puertos. Desde el punto de vista del usuario se manejan entidades de gran nivel de abstracción como ser actuador led, sensor de grises, sensor de distancia, actuador motor, etc. A los cuales se le pueden invocar servicios, como ser cambiar la dirección de giro, iniciar movimiento del motor, etc. Por el contrario otras placas manejan otro enfoque en el que se controla directamente el pin del microcontrolador brindando menos poder de abstracción lo cual atenta contra los fines del Butiá en el que se busca utilizarlo como una plataforma con el fin de enseñar programación. Pero por otro lado el manejar directamente los pines del microcontrolador desde un lenguaje de alto nivel, brinda mayor control de aspectos de bajo nivel el cual puede ser útil cuando se quiere de forma rápida prototipar alguna prueba o controlar varios pines de datos. Por este motivo y dado que sobraron 8 pines digitales luego de realizar el circuito de la placa USB4butiá es que el diseño actual de la placa se incluye un puerto para manejar 8 pines digitales. Los mismos pueden ser utilizados en modo entrada como en modo salida. Esto permite que usuarios avanzados que quieren dar un paso más puedan hackear la placa cambiando la funcionalidad original de la misma agregando nuevos servicios manejando directamente los pines de un puerto desde un lenguaje de alto nivel.
Su ubicación en la placa USB4butia es la siguiente (Nota: en la versión actual de la placa 1.9.0, los hackpoint han sido cambiados de lugar para lograr el encastre con el shield de motores CC):
Firmware y bobot
En el firmware están implementadas las correspondientes funciones para manejar los pines de forma individual, o en forma general cambiando la configuración de los 8 pines en una sola llamada.
El correspondiente driver en bobot para interactuar con los pines se encarga de solicitar y enviar los datos a la placa. Podemos fácilmente escribir nuestro programa en lua invocando a las funciones definidas en el driver mencionado:
read(pin) write(pin,value) setMode(pin,mode) changePortDir(mode) writePort(value)
read
Recibe como parámetro el pin cuyo valor nos interesa consultar. Retorna el valor del pin en ese instante. El pin debe estar seteado como entrada.
write Recibe como parámetro el pin cuyo valor nos interesa actualizar, y el valor propiamente dicho que queremos que adopte (0 ó 1). Retorna -1 en caso de error, 0 sino. El pin debe estar seteado como salida.
setMode Recibe como parámetro el pin cuya dirección nos interesa modificar, y el modo que queremos que adopte (0=SALIDA ó 1=ENTRADA). Retorna -1 en caso de error, 0 sino.
changePortDir Similar a la función anterior pero se actualiza el modo de todos los pines del puerto, pasando a ser 0 ó 1, según se haya indicado en el parámetro que recibe. Retorna -1 en caso de error, 0 sino.
writePort Al igual que la función write, actualiza el valor de cada uno de los pines del puerto, según lo interpretado en el parámetro recibido, el mismo puede ser cualquier valor entre 0 y 255. Retorna -1 en caso de error, 0 sino.
- Un ejemplo sencillo de seguidor de línea (la pista es un lienzo blanco con un círculo negro que es el camino), donde se utilizan 4 pines y a los cuales se conectan dos motores de continua (ver Tutorial de armado de butiá con motores de corriente Continua para más información).
-- Example of simple line follower with hackpoints and dc motors
local ERROR = -1
local GREY_TRESHOLD = 35000 -- this value must be calibrated. In this example values under 35000 correspond to white
local socket = require("socket")
local host, port = "localhost", 2009
local client = assert(socket.connect(host,port))
local function send(msg) -- auxiliary function to send a msg to the board and receive the response
client:send(msg.."\n")
local ret = client:receive()
return ret
end
send("CALL hackp writePort 0") -- init
-- find grey sensor connected
list = send("LIST")
_, pos = string.find(list, "grey:")
if pos == nil then
print("ABORTING :: No grey sensor is connected.\n");
return ERROR
end
port = string.sub(list,pos+1,pos+1) -- get grey port number
local msg_g = "CALL grey:"..port.." getValue"
-- main loop
while true do
if tonumber(send(msg_g)) > GREY_TRESHOLD then
send("CALL hackp writePort 144") -- turn left
else
send("CALL hackp writePort 160") -- forward
end
end
Tortubots
Desde tortubots podemos manejar estos pines mediante bloques individuales que nos permiten cambiar el modo (IN/OUT) y el nivel (HIGH/LOW) de los mismos. Estos bloques se encuentran en la paleta extra de butiá
Notar que los pines los nombramos desde 1 a 8.
Se corresponden con los pines digitales 19 al 22 y 27 al 30 del pic 18F4550, es decir, el pin 19 del micro es nuestro hackpin 1, el 20 es nuestro 2 y así hasta que el pin 30 pasa a ser nuestro pin 8 en tortubots. Para mayor claridad, tenemos la correspondencia mapeada en la siguiente imagen.
- Para cambiar el modo a entrada (IN) o salida (OUT) utilizamos el siguiente bloque:
Recibe como parámetros el pin con el que deseamos trabajar, y un modo, SALIDA ó ENTRADA.
- Si tenemos seteado el modo del pin como SALIDA, para setear el nivel (0 o 1) utilizamos el bloque:
El mismo recibe como parámetros el número de pin que queremos modificar y el valor que nos interesa, ALTO (= 1) ó BAJO (= 0). Previamente tenemos que haber seteado el modo como SALIDA.
- Si tenemos seteado el modo del pin como ENTRADA, para consultar el valor del pin utilizamos el bloque:
Como parámetro recibe el número de pin, y si no hay error, nos devuelve su valor.
- Un ejemplo sencillo de seguidor de línea, similar al anterior, donde se utilizan 4 pines y a los cuales se conectan dos motores de continua (ver Tutorial de armado de butiá con motores de corriente Continua para más información).
Aplicaciones
Para ver aplicaciones que hacen uso de estos pines:
Tutorial de armado de butiá con motores de corriente Continua
Parpadeo de Led:
Control de Led RGB:
Juego de luces:
Control de motor de continua:
Control de motor stepper: