Tyeth Gundry
Published

Bird Feed Dispenser for Floor Foragers

I just started 3d printing and love mechanisms. I also moved to a place with a nice garden and found out some birds only eat off the floor!

IntermediateWork in progress58
Bird Feed Dispenser for Floor Foragers

Story

Read more

Custom parts and enclosures

spinner plate

stick on a 2mm shaft hobby motor and mount it
File missing, please reupload.

gcode for snapmaker 2.0 A350 in PLA

File missing, please reupload.

vid

File missing, please reupload.

Code

nodered flows

JSON
import with nodered on a raspberry pi. Use GPIO22 (pin15) to trigger the spinner (via a darlington pair setup or equivalent). Have a servo connected to the 5th port (4 in code but 0 based index) of a PCA9685 servo extender. Use separate power for the pi, spinner, and servo, with grounds joined.
[
    {
        "id": "7ccbe53c2f4737c0",
        "type": "tab",
        "label": "Test Servo + Spinner",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "e8488d74b6c28338",
        "type": "tab",
        "label": "Timer with splitter - Golden Dawn-Dusk",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "0a2108261075a77e",
        "type": "tab",
        "label": "Do low power shutdown until tomorrow dawn",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b0385363eb204548",
        "type": "PCA9685",
        "deviceNumber": "1",
        "address": "64",
        "frequency": "50"
    },
    {
        "id": "f72ed53e66cb52ea",
        "type": "position-config",
        "name": "",
        "isValide": "true",
        "longitude": "0",
        "latitude": "0",
        "angleType": "deg",
        "timeZoneOffset": "99",
        "timeZoneDST": "0",
        "stateTimeFormat": "3",
        "stateDateFormat": "12",
        "contextStore": ""
    },
    {
        "id": "0c5ea76623de6595",
        "type": "PCA9685 out",
        "z": "7ccbe53c2f4737c0",
        "name": "servo#4 in %",
        "pca9685": "b0385363eb204548",
        "channel": "4",
        "payload": "msg.payload",
        "unit": "microseconds",
        "onStep": "0",
        "x": 910,
        "y": 300,
        "wires": []
    },
    {
        "id": "880c4fe3a9ffb396",
        "type": "debug",
        "z": "7ccbe53c2f4737c0",
        "name": "servo-debug",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 790,
        "y": 180,
        "wires": []
    },
    {
        "id": "ab990d68105ae920",
        "type": "rpi-gpio out",
        "z": "7ccbe53c2f4737c0",
        "name": "pin15 (bcm-gpio22-8thAlong)",
        "pin": "22",
        "set": true,
        "level": "0",
        "freq": "",
        "out": "out",
        "bcm": true,
        "x": 820,
        "y": 660,
        "wires": []
    },
    {
        "id": "d5e28e69e5cd5c22",
        "type": "trigger",
        "z": "7ccbe53c2f4737c0",
        "name": "",
        "op1": "",
        "op2": "0",
        "op1type": "pay",
        "op2type": "num",
        "duration": "5",
        "extend": true,
        "overrideDelay": true,
        "units": "s",
        "reset": "reset",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 560,
        "y": 600,
        "wires": [
            [
                "ab990d68105ae920",
                "2548b698fcfcf41b"
            ]
        ]
    },
    {
        "id": "3f20eeb23d30a0e9",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "FIRE 500s",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "delay",
                "v": "500000",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "1",
        "payloadType": "str",
        "x": 340,
        "y": 600,
        "wires": [
            [
                "d5e28e69e5cd5c22"
            ]
        ]
    },
    {
        "id": "2548b698fcfcf41b",
        "type": "debug",
        "z": "7ccbe53c2f4737c0",
        "name": "gpio22-pin15-debug",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 800,
        "y": 600,
        "wires": []
    },
    {
        "id": "1c347df.4004b82",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "120",
        "props": [
            {
                "p": "payload",
                "v": "2100",
                "vt": "num"
            },
            {
                "p": "topic",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "",
        "payload": "2100",
        "payloadType": "num",
        "x": 530,
        "y": 120,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "ec6ef0f2.d5b56",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "60",
        "props": [
            {
                "p": "payload",
                "v": "1500",
                "vt": "num"
            },
            {
                "p": "topic",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "",
        "payload": "1500",
        "payloadType": "num",
        "x": 530,
        "y": 200,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "4b72d6f3.2020e8",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "0",
        "props": [
            {
                "p": "payload",
                "v": "900",
                "vt": "num"
            },
            {
                "p": "topic",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "",
        "payload": "900",
        "payloadType": "num",
        "x": 530,
        "y": 240,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "eaa2a00e.3dfca",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "Off",
        "props": [
            {
                "p": "payload",
                "v": "0",
                "vt": "num"
            },
            {
                "p": "topic",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 530,
        "y": 280,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "8a88d4b9c0870297",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "90",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "1800",
        "payloadType": "num",
        "x": 530,
        "y": 160,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "8d72e44319c5a4f3",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "180",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "2700",
        "payloadType": "num",
        "x": 530,
        "y": 40,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "9f03c1a813f6e557",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "150",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "2400",
        "payloadType": "num",
        "x": 530,
        "y": 80,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "0af7a927a1b4ce0d",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "OFF",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "reset",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "str",
        "x": 350,
        "y": 660,
        "wires": [
            [
                "d5e28e69e5cd5c22",
                "ab990d68105ae920"
            ]
        ]
    },
    {
        "id": "5031a837d90f9158",
        "type": "trigger",
        "z": "7ccbe53c2f4737c0",
        "name": "send payload, wait 2s, send 0",
        "op1": "",
        "op2": "0",
        "op1type": "pay",
        "op2type": "num",
        "duration": "4",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 670,
        "y": 440,
        "wires": [
            [
                "880c4fe3a9ffb396",
                "0c5ea76623de6595"
            ]
        ]
    },
    {
        "id": "f28abfa0c0a367f8",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "2700",
        "payloadType": "num",
        "x": 530,
        "y": 340,
        "wires": [
            [
                "0c5ea76623de6595",
                "2609c48850d21748",
                "880c4fe3a9ffb396"
            ]
        ]
    },
    {
        "id": "dd2c13022d35f723",
        "type": "link in",
        "z": "7ccbe53c2f4737c0",
        "name": "",
        "links": [
            "b841f1aab31069ae"
        ],
        "x": 275,
        "y": 440,
        "wires": [
            [
                "aeaf01b37b6cf14f"
            ]
        ]
    },
    {
        "id": "2609c48850d21748",
        "type": "trigger",
        "z": "7ccbe53c2f4737c0",
        "name": "send 1800, wait 4s, send 900",
        "op1": "1800",
        "op2": "900",
        "op1type": "num",
        "op2type": "num",
        "duration": "4",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 2,
        "x": 660,
        "y": 380,
        "wires": [
            [
                "0c5ea76623de6595",
                "880c4fe3a9ffb396"
            ],
            [
                "5031a837d90f9158"
            ]
        ]
    },
    {
        "id": "aeaf01b37b6cf14f",
        "type": "change",
        "z": "7ccbe53c2f4737c0",
        "name": "send 1 (msg.delay=15s)",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "1",
                "tot": "num"
            },
            {
                "t": "set",
                "p": "delay",
                "pt": "msg",
                "to": "15000",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 210,
        "y": 500,
        "wires": [
            [
                "2584b29511ee35d3",
                "d5e28e69e5cd5c22"
            ]
        ]
    },
    {
        "id": "2584b29511ee35d3",
        "type": "delay",
        "z": "7ccbe53c2f4737c0",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 440,
        "y": 380,
        "wires": [
            [
                "2609c48850d21748"
            ]
        ]
    },
    {
        "id": "709add83c66128b7",
        "type": "inject",
        "z": "7ccbe53c2f4737c0",
        "name": "test",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 90,
        "y": 560,
        "wires": [
            [
                "aeaf01b37b6cf14f"
            ]
        ]
    },
    {
        "id": "c5ec2e9790e35ac8",
        "type": "within-time-switch",
        "z": "e8488d74b6c28338",
        "name": "",
        "nameInt": "",
        "positionConfig": "f72ed53e66cb52ea",
        "startTime": "goldenHourDawnStart",
        "startTimeType": "pdsTime",
        "startOffset": 0,
        "startOffsetType": "none",
        "startOffsetMultiplier": 60000,
        "endTime": "goldenHourDuskEnd",
        "endTimeType": "pdsTime",
        "endOffset": 0,
        "endOffsetType": "none",
        "endOffsetMultiplier": 60000,
        "timeRestrictions": 0,
        "timeRestrictionsType": "none",
        "timeDays": "*",
        "timeOnlyOddDays": false,
        "timeOnlyEvenDays": false,
        "timeOnlyOddWeeks": false,
        "timeOnlyEvenWeeks": false,
        "timeMonths": "*",
        "timedatestart": "",
        "timedateend": "",
        "propertyStart": "",
        "propertyStartType": "none",
        "propertyStartCompare": "true",
        "propertyStartThreshold": "",
        "propertyStartThresholdType": "num",
        "startTimeAlt": "",
        "startTimeAltType": "entered",
        "startOffsetAlt": 0,
        "startOffsetAltType": "none",
        "startOffsetAltMultiplier": 60000,
        "propertyEnd": "",
        "propertyEndType": "none",
        "propertyEndCompare": "true",
        "propertyEndThreshold": "",
        "propertyEndThresholdType": "num",
        "endTimeAlt": "",
        "endTimeAltType": "entered",
        "endOffsetAlt": 0,
        "endOffsetAltType": "none",
        "endOffsetAltMultiplier": 60000,
        "withinTimeValue": "true",
        "withinTimeValueType": "msgInput",
        "outOfTimeValue": "false",
        "outOfTimeValueType": "msgInput",
        "tsCompare": "0",
        "x": 410,
        "y": 280,
        "wires": [
            [
                "5a33c63df179fa12",
                "b841f1aab31069ae"
            ],
            [
                "95156e71838716c0",
                "db4fefcfccac0603"
            ]
        ]
    },
    {
        "id": "82643c28e114260b",
        "type": "time-inject",
        "z": "e8488d74b6c28338",
        "name": "",
        "nameInt": "timestamp 3h",
        "positionConfig": "f72ed53e66cb52ea",
        "props": [
            {
                "p": "",
                "pt": "msgPayload",
                "v": "",
                "vt": "date",
                "o": "",
                "oT": "none",
                "oM": "60000",
                "f": 0,
                "fS": 0,
                "fT": "UNIX timestamp (ms)",
                "fI": "0",
                "next": true,
                "days": "*",
                "months": "*",
                "onlyOddDays": false,
                "onlyEvenDays": false,
                "onlyOddWeeks": false,
                "onlyEvenWeeks": false
            },
            {
                "p": "isoLocalTime",
                "pt": "msg",
                "v": "",
                "vt": "dateSpecific",
                "o": "",
                "oT": "none",
                "oM": "60000",
                "f": 18,
                "fS": 18,
                "fT": "ISO date and time local",
                "fI": "18",
                "next": false,
                "days": "*",
                "months": "*",
                "onlyOddDays": false,
                "onlyEvenDays": false,
                "onlyOddWeeks": false,
                "onlyEvenWeeks": false
            }
        ],
        "injectTypeSelect": "interval",
        "intervalCount": "3",
        "intervalCountType": "num",
        "intervalCountMultiplier": 3600000,
        "time": "",
        "timeType": "entered",
        "offset": 0,
        "offsetType": "none",
        "offsetMultiplier": 60000,
        "timeEnd": "",
        "timeEndType": "entered",
        "timeEndOffset": 0,
        "timeEndOffsetType": "none",
        "timeEndOffsetMultiplier": 60000,
        "timeDays": "*",
        "timeOnlyOddDays": false,
        "timeOnlyEvenDays": false,
        "timeOnlyOddWeeks": false,
        "timeOnlyEvenWeeks": false,
        "timeMonths": "*",
        "timedatestart": "",
        "timedateend": "",
        "property": "",
        "propertyType": "none",
        "propertyCompare": "true",
        "propertyThreshold": "",
        "propertyThresholdType": "num",
        "timeAlt": "",
        "timeAltType": "entered",
        "timeAltDays": "*",
        "timeAltOnlyOddDays": false,
        "timeAltOnlyEvenDays": false,
        "timeAltOnlyOddWeeks": false,
        "timeAltOnlyEvenWeeks": false,
        "timeAltMonths": "*",
        "timeAltOffset": 0,
        "timeAltOffsetType": "none",
        "timeAltOffsetMultiplier": 60000,
        "once": false,
        "onceDelay": "5",
        "recalcTime": 2,
        "x": 200,
        "y": 180,
        "wires": [
            [
                "c5ec2e9790e35ac8"
            ]
        ]
    },
    {
        "id": "b841f1aab31069ae",
        "type": "link out",
        "z": "e8488d74b6c28338",
        "name": "",
        "mode": "link",
        "links": [
            "dd2c13022d35f723"
        ],
        "x": 665,
        "y": 220,
        "wires": []
    },
    {
        "id": "db4fefcfccac0603",
        "type": "link out",
        "z": "e8488d74b6c28338",
        "name": "",
        "mode": "link",
        "links": [
            "4ade782965d259a4"
        ],
        "x": 705,
        "y": 300,
        "wires": []
    },
    {
        "id": "5a33c63df179fa12",
        "type": "debug",
        "z": "e8488d74b6c28338",
        "name": "withinTime",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 610,
        "y": 100,
        "wires": []
    },
    {
        "id": "95156e71838716c0",
        "type": "debug",
        "z": "e8488d74b6c28338",
        "name": "outsideTime",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 690,
        "y": 420,
        "wires": []
    },
    {
        "id": "4ade782965d259a4",
        "type": "link in",
        "z": "0a2108261075a77e",
        "name": "",
        "links": [
            "db4fefcfccac0603"
        ],
        "x": 175,
        "y": 160,
        "wires": [
            [
                "2ba5b32e302b30ea"
            ]
        ]
    },
    {
        "id": "c457f10dcef6e0ab",
        "type": "inject",
        "z": "0a2108261075a77e",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "0",
        "payloadType": "num",
        "x": 130,
        "y": 100,
        "wires": [
            [
                "2ba5b32e302b30ea"
            ]
        ]
    },
    {
        "id": "2ba5b32e302b30ea",
        "type": "debug",
        "z": "0a2108261075a77e",
        "name": "shutdown suggested",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 480,
        "y": 140,
        "wires": []
    }
]

Credits

Tyeth Gundry
7 projects • 8 followers
Love solving problems
Contact

Comments

Please log in or sign up to comment.