For proof of concept it uses a pi, with an i2c servo adapter (PCA9685), and a handheld fan (for cooling your face in summer) with a 3d printed plate to spin and distribute the dropped bird food. The dropping of the food is done from a bottle reservoir via an aperture type system (intended for drones dropping seed https://www.thingiverse.com/thing:1337559 ). I have also printed adapters for different bottle necks https://www.prusaprinters.org/prints/130599-adapters-for-bird-seed-dispenser
Uses the circuit from UACER (just a Darlington pair with resistor) to safely drive the spinner from the Pi pin 15.
1 / 11
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.
nodered flows
JSONimport 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": []
}
]
Comments
Please log in or sign up to comment.