Yip Yau Keanyk
Created December 18, 2019

Alexander - speech to sign language humanoid arm

An articulated robot arm which translate speech to sign language to bridge the communication gap between normal person and the deaf.

AdvancedWork in progress5 days82
Alexander - speech to sign language humanoid arm

Things used in this project

Hardware components

Mindstorms EV3 Programming Brick / Kit
LEGO Mindstorms EV3 Programming Brick / Kit
×3
EV3 medium motor
×9
EV3 large motor
×2
EV3 IR remote
×1
Technic power functions XL motor
×2
Technic power functions IR remote
×1
Technic power functions IR receiver
×1
Technic power functions battery box
×1
Technic power functions extension cable
×1
LEGO technic bricks according to LEGO Digital Designer 3D model
×1
Amazon Alexa Echo Dot
×1
Edimax EW-7811UN Wi-Fi adapter
×3
Raspberry Pi 3 Model B
Raspberry Pi 3 Model B
×1

Software apps and online services

Python
Visual studio code
Node-RED
Node-RED
MQTT
MQTT

Story

Read more

Custom parts and enclosures

Right Arm main assembly 3D

3D assembly file of the complete right arm modelled in LEGO Digital Designer.

Bicep assembly

3D assembly file of the Bicep subassembly modelled in LEGO Digital Designer.

Hand assembly

3D assembly file of the Hand subassembly modelled in LEGO Digital Designer.

Lower arm assembly

3D assembly file of the Lower arm subassembly modelled in LEGO Digital Designer.

Upper arm

3D assembly file of the Upper arm subassembly modelled in LEGO Digital Designer.

Schematics

Alexander Schematic

Code

index.js

JavaScript
// This sample demonstrates handling intents from an Alexa skill using the Alexa Skills Kit SDK (v2).
// Please visit https://alexa.design/cookbook for additional examples on implementing slots, dialog management,
// session persistence, api calls, and more.
const Alexa = require('ask-sdk-core');
const Util = require('./util');
const Common = require('./common');

// The namespace of the custom directive to be sent by this skill
const NAMESPACE = 'Custom.Mindstorms.Gadget';

// The name of the custom directive to be sent this skill
const NAME_CONTROL = 'control';

// --------------------------------- Launch Request Handler-------------------- //
const LaunchRequestHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
    },
    handle: async function(handlerInput) {

        let request = handlerInput.requestEnvelope;
        let { apiEndpoint, apiAccessToken } = request.context.System;
        let apiResponse = await Util.getConnectedEndpoints(apiEndpoint, apiAccessToken);
        if ((apiResponse.endpoints || []).length === 0) {
            return handlerInput.responseBuilder
            .speak(`I couldn't find an EV3 Brick connected to this Echo device. Please check to make sure your EV3 Brick is connected, and try again.`)
            .getResponse();
        }

        // Store the gadget endpointId to be used in this skill session
        let endpointId = apiResponse.endpoints[0].endpointId || [];
        Util.putSessionAttribute(handlerInput, 'endpointId', endpointId);

        return handlerInput.responseBuilder
            .speak("Alexander is here. Doing Sign language is a piece of cake")
            .reprompt("Awaiting commands")
            .getResponse();
    }
};

// --------------------------------- set number function -------------------- //
const SetNumberIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'SetNumberIntent';
    },
    handle: function (handlerInput) {
        
        // Number around (1-9)
        let number = Alexa.getSlotValue(handlerInput.requestEnvelope, 'Number');
        number = Math.max(1, Math.min(9, parseInt(number)));
        Util.putSessionAttribute(handlerInput, 'number', number);
        
        const attributesManager = handlerInput.attributesManager;
        const endpointId = attributesManager.getSessionAttributes().endpointId || [];
        
        const directive = Util.build(endpointId, NAMESPACE, NAME_CONTROL,
        {
            type: 'number',
            number: number
        });
        
        return handlerInput.responseBuilder
            .speak(`This is number ${number}.`)
            .reprompt("awaiting command")
            .addDirective(directive)
            .getResponse();
    }
};

// --------------------------------- set alphabet function -------------------- //
const SetAlphabetIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'SetAlphabetIntent';
    },
    handle: function (handlerInput) {

        // alphabet around (1-9)
        let alphabet = Alexa.getSlotValue(handlerInput.requestEnvelope, 'Alphabet');
        alphabet = Math.max(1, Math.min(9, parseInt(alphabet)));
        Util.putSessionAttribute(handlerInput, 'alphabet', alphabet);

        return handlerInput.responseBuilder
            .speak(`This is alphabet ${alphabet}.`)
            .reprompt("awaiting command")
            .getResponse();
    }
};

// --------------------------------- Help Intent Handler-------------------- //
const HelpIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.HelpIntent';
    },
    handle(handlerInput) {
        const speakOutput = 'You can say hello to me! How can I help?';

        return handlerInput.responseBuilder
            .speak(speakOutput)
            .reprompt(speakOutput)
            .getResponse();
    }
};

// --------------------------------- Cancel And Stop Intent Handler-------------------- //
const CancelAndStopIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && (Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.CancelIntent'
                || Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.StopIntent');
    },
    handle(handlerInput) {
        const speakOutput = 'Goodbye!';
        return handlerInput.responseBuilder
            .speak(speakOutput)
            .getResponse();
    }
};

// --------------------------------- exports handler -------------------- //
// The SkillBuilder acts as the entry point for your skill, routing all request and response
// payloads to the handlers above. Make sure any new handlers or interceptors you've
// defined are included below. The order matters - they're processed top to bottom.
exports.handler = Alexa.SkillBuilders.custom()
    .addRequestHandlers(
        LaunchRequestHandler,
        SetNumberIntentHandler,
        SetAlphabetIntentHandler,
        Common.HelpIntentHandler,
        Common.CancelAndStopIntentHandler,
        Common.IntentReflectorHandler, // make sure IntentReflectorHandler is last so it doesn't override your custom intent handlers
    )
    .addErrorHandlers(
        Common.ErrorHandler,
    )
    .lambda();

AlexanderLEGO_nodeRed

JavaScript
[
    {
        "id": "7f90c263.227ffc",
        "type": "tab",
        "label": "Flow 1",
        "disabled": false,
        "info": ""
    },
    {
        "id": "68bd1003.45f0e",
        "type": "mqtt out",
        "z": "7f90c263.227ffc",
        "name": "RH",
        "topic": "out/motor/RH",
        "qos": "",
        "retain": "",
        "broker": "88c86b8a.f203f8",
        "x": 615,
        "y": 260,
        "wires": [],
        "l": false
    },
    {
        "id": "4b97e4d3.64c5cc",
        "type": "mqtt in",
        "z": "7f90c263.227ffc",
        "name": "",
        "topic": "in/motor/#",
        "qos": "2",
        "datatype": "auto",
        "broker": "88c86b8a.f203f8",
        "x": 260,
        "y": 100,
        "wires": [
            [
                "1cf83d1b.849953"
            ]
        ]
    },
    {
        "id": "1cf83d1b.849953",
        "type": "debug",
        "z": "7f90c263.227ffc",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "x": 550,
        "y": 100,
        "wires": []
    },
    {
        "id": "10d1fe69.808782",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A homing",
        "topic": "Q",
        "payload": "{\"motorH\":1,\"dir\":200,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 340,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "f63ba6c7.144648",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "home",
        "topic": "Q",
        "payload": "{\"home\":1,\"dir\":200,\"speeddt\":190,\"delayf\":1,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 250,
        "y": 220,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "dc704c27.3d8cf",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "stop all",
        "topic": "Q",
        "payload": "{\"stop\":1}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 250,
        "y": 260,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "c1b8efbd.e4ad1",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A outing",
        "topic": "Q",
        "payload": "{\"motorH\":1,\"dir\":-200,\"speeddt\":-195,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 270,
        "y": 380,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "c9b73d8c.ec3ee",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B homing",
        "topic": "Q",
        "payload": "{\"motorH\":2,\"dir\":220,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 440,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "a0a364ef.f03018",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B outing",
        "topic": "Q",
        "payload": "{\"motorH\":2,\"dir\":-200,\"speeddt\":-190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 480,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "52242220.48fb2c",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C homing",
        "topic": "Q",
        "payload": "{\"motorH\":3,\"dir\":200,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 540,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "4e3a5c9a.8b7d74",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C outing",
        "topic": "Q",
        "payload": "{\"motorH\":3,\"dir\":-200,\"speeddt\":-190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 580,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "f23fc0b7.1942b",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D homing",
        "topic": "Q",
        "payload": "{\"motorH\":4,\"dir\":200,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 640,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "8c2aab33.9ea678",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D outing",
        "topic": "Q",
        "payload": "{\"motorH\":4,\"dir\":-200,\"speeddt\":-190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 280,
        "y": 680,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "9232fc87.cfb36",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":1,\"pos\":-200,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 330,
        "y": 760,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "75129ab6.f86614",
        "type": "mqtt out",
        "z": "7f90c263.227ffc",
        "name": "RH",
        "topic": "out/motor/RH",
        "qos": "",
        "retain": "",
        "broker": "88c86b8a.f203f8",
        "x": 515,
        "y": 800,
        "wires": [],
        "l": false
    },
    {
        "id": "2ccf7971.f0f6c6",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":2,\"pos\":-200,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 290,
        "y": 840,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "ec8965ed.230038",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":3,\"pos\":-200,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 290,
        "y": 920,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "a6db96cd.94f8f8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":4,\"pos\":-200,\"speed\":800}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 330,
        "y": 1000,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "a273db3f.aba988",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":4,\"pos\":-2500,\"speed\":800}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 330,
        "y": 1040,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "560d07cb.4c63a8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":1,\"pos\":-2200,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 330,
        "y": 800,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "da664e25.3a1bb",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B abs out",
        "topic": "Q",
        "payload": "{\"motorAbs\":2,\"pos\":-2900,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 300,
        "y": 880,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "4315fd.93f0da04",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":3,\"pos\":-2200,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 290,
        "y": 960,
        "wires": [
            [
                "75129ab6.f86614"
            ]
        ]
    },
    {
        "id": "f80f82c1.139f3",
        "type": "mqtt out",
        "z": "7f90c263.227ffc",
        "name": "RH",
        "topic": "out/motor/RW",
        "qos": "",
        "retain": "",
        "broker": "88c86b8a.f203f8",
        "x": 1095,
        "y": 880,
        "wires": [],
        "l": false
    },
    {
        "id": "f2e195f7.46f028",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":1,\"pos\":-5,\"speed\":200}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 870,
        "y": 860,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "a8ab2ef5.fee72",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":2,\"motor\":2,\"pos\":-5,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 830,
        "y": 900,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "77054a59.d92a14",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":4,\"pos\":-200,\"speed\":200}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 870,
        "y": 1120,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "5d6b2bb3.738ed4",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":4,\"pos\":-4000,\"speed\":200}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 870,
        "y": 1160,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "d00509f5.06f568",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":1,\"pos\":-1500,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 870,
        "y": 820,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "c947b488.8a58d8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":2,\"motor\":2,\"pos\":-800,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 830,
        "y": 940,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "eea191ef.d79e7",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C abs",
        "topic": "Q",
        "payload": "{\"motorAbs\":3,\"motor\":3,\"pos\":0,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 830,
        "y": 1060,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "974557e2.912178",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A homing",
        "topic": "Q",
        "payload": "{\"motorH\":1,\"dir\":200,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 340,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "f9fbb345.ceaaa",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "home",
        "topic": "Q",
        "payload": "{\"home\":1,\"dir\":200,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 810,
        "y": 220,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "446ab456.64646c",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "stop all",
        "topic": "Q",
        "payload": "{\"stop\":1}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 810,
        "y": 260,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "7a0f898f.c390f8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor A outing",
        "topic": "Q",
        "payload": "{\"motorH\":1,\"dir\":-200,\"speeddt\":-195,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 830,
        "y": 380,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "e7f199b3.4184e8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B homing",
        "topic": "Q",
        "payload": "{\"motorH\":2,\"dir\":220,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 440,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "a2f4387e.71d8c8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor B outing",
        "topic": "Q",
        "payload": "{\"motorH\":2,\"dir\":-200,\"speeddt\":-400,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 480,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "79da407a.45abf",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C homing",
        "topic": "Q",
        "payload": "{\"motorH\":3,\"dir\":200,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 540,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "c2b1bae.fdf1248",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C outing",
        "topic": "Q",
        "payload": "{\"motorH\":3,\"dir\":-200,\"speeddt\":-190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 580,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "47fe8464.d7cc0c",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D homing",
        "topic": "Q",
        "payload": "{\"motorH\":4,\"dir\":300,\"speeddt\":190,\"delayf\":1.5,\"delay\":0.08}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 640,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "87848d99.1aeac",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor D outing",
        "topic": "Q",
        "payload": "{\"motorH\":4,\"dir\":-200,\"speeddt\":-190,\"delayf\":1.5,\"delay\":0.2}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 840,
        "y": 680,
        "wires": [
            [
                "940812a9.50ee8"
            ]
        ]
    },
    {
        "id": "940812a9.50ee8",
        "type": "mqtt out",
        "z": "7f90c263.227ffc",
        "name": "RW",
        "topic": "out/motor/RW",
        "qos": "",
        "retain": "",
        "broker": "88c86b8a.f203f8",
        "x": 1075,
        "y": 260,
        "wires": [],
        "l": false
    },
    {
        "id": "4e13d9dc.8ba5f8",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "RO open",
        "info": "",
        "x": 660,
        "y": 440,
        "wires": []
    },
    {
        "id": "8185895a.122c18",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "RR left",
        "info": "",
        "x": 650,
        "y": 540,
        "wires": []
    },
    {
        "id": "43550425.c3815c",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "RF open",
        "info": "",
        "x": 660,
        "y": 640,
        "wires": []
    },
    {
        "id": "771657f5.aa5e58",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "R1 close",
        "info": "",
        "x": 660,
        "y": 340,
        "wires": []
    },
    {
        "id": "2accf3f3.8de2dc",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "R1 close",
        "info": "-700 mix",
        "x": 660,
        "y": 860,
        "wires": []
    },
    {
        "id": "cf7c260d.392828",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "RO open",
        "info": "",
        "x": 660,
        "y": 900,
        "wires": []
    },
    {
        "id": "f7769488.9a6d08",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "RR left",
        "info": "",
        "x": 670,
        "y": 1060,
        "wires": []
    },
    {
        "id": "616ad611.58b7b8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "Test",
        "topic": "Q",
        "payload": "{\"motorCmd\":1,\"1\":{\"pos\":-2000,\"speed\":200,\"delay\":5},\"2\":{\"pos\":10,\"speed\":200,\"delay\":5},\"3\":{\"pos\":-2000,\"speed\":200,\"delay\":5},\"4\":{\"pos\":-1000,\"speed\":200,\"delay\":5}}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 450,
        "y": 180,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "a6dcb963.01a2a8",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "alphabet",
        "topic": "Q",
        "payload": "{\"alphabet\":\"b\"}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 460,
        "y": 140,
        "wires": [
            [
                "68bd1003.45f0e"
            ]
        ]
    },
    {
        "id": "98c2308e.90848",
        "type": "comment",
        "z": "7f90c263.227ffc",
        "name": "RF left",
        "info": "-4000 is around mildder\n-9000 mix",
        "x": 650,
        "y": 1140,
        "wires": []
    },
    {
        "id": "624b56e5.616018",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "motor C abs Mid",
        "topic": "Q",
        "payload": "{\"motorAbs\":3,\"motor\":3,\"pos\":-2000,\"speed\":500}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 860,
        "y": 1020,
        "wires": [
            [
                "f80f82c1.139f3"
            ]
        ]
    },
    {
        "id": "4bf363fa.f0454c",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "a",
        "topic": "Q",
        "payload": "{\"alphabet\":\"a\"}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 1390,
        "y": 240,
        "wires": [
            [
                "3d04ff99.14cdb"
            ]
        ]
    },
    {
        "id": "3d04ff99.14cdb",
        "type": "mqtt out",
        "z": "7f90c263.227ffc",
        "name": "RH",
        "topic": "out/motor/RH",
        "qos": "",
        "retain": "",
        "broker": "88c86b8a.f203f8",
        "x": 1555,
        "y": 360,
        "wires": [],
        "l": false
    },
    {
        "id": "b5f2b229.fc847",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "b",
        "topic": "Q",
        "payload": "{\"alphabet\":\"b\"}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "x": 1390,
        "y": 280,
        "wires": [
            [
                "3d04ff99.14cdb"
            ]
        ]
    },
    {
        "id": "4e377014.c049",
        "type": "inject",
        "z": "7f90c263.227ffc",
        "name": "d",
        "topic": "Q",
        "payload": "{\"alphabet\":\"d\"}",
        "payloadType": "str",
        "repeat": "",
        "crontab": "",
        "once": false,
...

This file has been truncated, please download it to see its full contents.

AlexanderLEGO_robotArm

Credits

Yip Yau Kean

Yip Yau Kean

1 project • 4 followers
yk

yk

0 projects • 0 followers
Thanks to Barman.

Comments