miércoles, 17 de agosto de 2016

Ejemplo GPIO en Raspberry Pi - Servo

Ahora vamos a hacer un ejemplo, donde controlaremos un servo motor. Los materiales que utilizaremos son los siguientes

a) 1 Canakit. Es un kit que contiene un paquete básico para que comiences a crear circuitos para Raspberry. De CanaKit utilizaremos el protoboard, un led, un push button, una resistencia de 220ohms, una resistencia de 10Kohms, tres cables para conectar el led y push button, el cable de conexión del raspberry al circuito con pines que se coloca en el protoboard.




 b) Ver la distribución del GPIO de tú raspberry:
c) En node red, vas a necesitar lo siguiente:
1 nodo GPIO output
2 nodo  debug
2 nodo function
2 nodo inject

Listo es todo lo que necesitas para empezar.

Paso 1. Conecta tú raspberry al protoboard, observa la imagen:


Paso 2. conecta el servo de la siguiente forma:
Cable rojo hacia la alimentación de 5VCC
Cable negro hacia GND
Cable blanco hacia GPIO 23
NOTA; Revisa distribución de GPIO de Raspberry Pi




Paso 3: Genera el siguiente flujo en Node Red:






Los nodos Inject solo etiquetalos, no importa nada adicional
Con los nodos function ingresa el siguiente código:

En uno de ellos:

var count = global.get('cuenta')||0; //Obtiene el valor de la variable global cuenta
count += 4; //Incremento su valor.

if (count>=23)
    {count=23;} //Condición de parada de acuerdo al funcionamiento de mi servo
global.set('cuenta',count); //guardo el valor dentro del flujo
msg.payload = count;//escribo el valor de payload
return msg;

 En el otro nodo:
var count = global.get('cuenta')||0;//Obtiene el valor de la variable global cuenta
count -= 4; //disminuyo su valor

if (count<=0)
    {count=0;} //Condición de parada de acuerdo al funcionamiento de mi servo
global.set('cuenta',count);//guardo el valor dentro del flujo
msg.payload = count; //escribo el valor de payload

return msg;

Paso 4. Configura la salida de GPIO


Para controlar un servo tenemos que configurar una salida PWM el cual manda un pulso de amplitud en el tiempo, entre mayor sea el valor que enviamos a payload mayor el ancho del pulso en el tiempo.










Paso 5. Despliega el flujo de NodeRed y debe verse similar a lo siguiente:


Una de las grandes ventajas de NodeRed es que puedes compartir flujos hechos por otras personas. Estos se almacenan en formato JSON y es sólo texto. Te comparto, el código de este flujo para que lo puedas probas de inmediato:

[{"id":"c92f2951.2eb738","type":"inject","z":"21821840.07b3e8","name":"","topic":"Arriba","payload":"","payloadType":"num","repeat":"","crontab":"","once":false,"x":184.1666717529297,"y":129.99996948242188,"wires":[["7ea3653d.966b24"]]},{"id":"a8e1f137.373cd","type":"inject","z":"21821840.07b3e8","name":"","topic":"Abajo","payload":"","payloadType":"num","repeat":"","crontab":"","once":false,"x":188.1666717529297,"y":302,"wires":[["2fdeef31.3fa1b8"]]},{"id":"7ea3653d.966b24","type":"function","z":"21821840.07b3e8","name":"","func":"var count = global.get('cuenta')||0;\ncount += 4;\n// store the value back\nif (count>=23)\n    {count=23;}\nglobal.set('cuenta',count);\n// make it part of the outgoing msg object\nmsg.payload = count;\nreturn msg;","outputs":1,"noerr":0,"x":348.1666717529297,"y":129.83333587646484,"wires":[["93ba49b6.bb3c48","2615b848.8317e8"]]},{"id":"2fdeef31.3fa1b8","type":"function","z":"21821840.07b3e8","name":"","func":"var count = global.get('cuenta')||0;\ncount -= 4;\n// store the value back\nif (count<=0)\n    {count=0;}\nglobal.set('cuenta',count);\n// make it part of the outgoing msg object\nmsg.payload = count;\n\nreturn msg;","outputs":1,"noerr":0,"x":348.16668701171875,"y":301.8333435058594,"wires":[["2615b848.8317e8","90f6085a.ccd8f8"]]},{"id":"93ba49b6.bb3c48","type":"debug","z":"21821840.07b3e8","name":"","active":true,"console":"false","complete":"false","x":538.1666870117188,"y":130,"wires":[]},{"id":"2615b848.8317e8","type":"rpi-gpio out","z":"21821840.07b3e8","name":"","pin":"16","set":"","level":"0","out":"pwm","x":541.1666870117188,"y":220.5,"wires":[]},{"id":"90f6085a.ccd8f8","type":"debug","z":"21821840.07b3e8","name":"","active":true,"console":"false","complete":"false","x":541.75,"y":306,"wires":[]}]
Dentro de node red, crea un flujo nuevo y en el menú selecciona importar desde el clipboard y pegas el código anterior.

Listo!!!! Ya tienes un flulo de Node Red que controla un servo motor!!!!!!!

El ejemplo listo para Watson IoT lo puedes encontrar en la siguiente ruta: <<En construcción>>

No hay comentarios:

Publicar un comentario