component
Sunon MF40200V1-1000U-G99 · 5 V tachometer fan
Public Made by Adomby adom
Tachometer fan with factory flying leads, an explicit Adom connector harness and gentle GLB state demonstration.
main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
{
"schema": "adom/component-states@1",
"mpn": "MF40200V1-1000U-G99",
"kind": "fan",
"default": "off",
"variables": {
"speed": {
"type": "number",
"unit": "rpm",
"min": 0,
"max": 10000,
"default": 0,
"description": "Actual rotor speed in the declared data source, not requested supply or nominal speed."
}
},
"states": [
{
"id": "off",
"label": "Off",
"summary": "Rotor stopped. No implicit coast-down model.",
"models": {
"step": "cad/MF40200V1-1000U-G99-ai-nominal.step",
"glb": "cad/MF40200V1-1000U-G99-ai-nominal.glb"
},
"values": {
"speed": 0
},
"motion": {
"playing": false
},
"image": "artwork/fan-off.png",
"when": {
"text": "Explicit stopped state; unknown telemetry must not be presented as verified off."
}
},
{
"id": "on",
"label": "On",
"summary": "Rotating at the supplied speed variable.",
"models": {
"step": "cad/MF40200V1-1000U-G99-ai-nominal.step",
"glb": "states/fan-animated.glb"
},
"values": {
"speed": 7000
},
"motion": {
"playing": true
},
"image": "artwork/fan-on.png",
"when": {
"text": "Explicit simulated rotor speed or valid measured tachometer RPM; supply presence alone is insufficient."
}
}
],
"motion": {
"schema": "adom/component-motion@1",
"status": "proposed-extension",
"model": "states/fan-animated.glb",
"sha256": "629daff4b81acf3e45149202b41f425deffbcce23a0bbd003a48c08770d730cf",
"requiredCapability": "component-motion@1",
"nodes": {
"assembly": "Fan.Assembly",
"stationary": "Fan.Housing",
"rotor": "Fan.Rotor"
},
"bindings": [
{
"id": "rotor",
"node": "Fan.Rotor",
"animation": "Fan.Rotor.Revolution",
"variable": "speed",
"unit": "rpm",
"cycleDurationSeconds": 1,
"revolutionsPerCycle": 1,
"axisLocal": [
0,
0,
1
],
"pivotLocalMeters": [
0,
0,
0
],
"direction": "negative right-hand rotation about local Z; illustrative orientation",
"mapping": "rpm-to-cycle-rate",
"offBehavior": "pause-preserve-phase"
}
],
"presentation": {
"defaultTimeScale": 1,
"previewTimeScale": 0.02,
"labelRequiredWhenScaled": true,
"highRpmAliasingWarning": true
},
"telemetry": {
"defaultSource": "simulated",
"sources": [
"simulated",
"measured"
],
"validRequired": true,
"staleBehavior": "pause-and-label-unknown",
"doesNotControlHardware": true
}
},
"electrical": {
"supply_V": 5,
"nominal_rpm": 7000,
"tach_pulses_per_revolution": 2,
"source": "Sunon D04114960G-01 pages 3 and 8"
},
"pins": {
"supply": "1 (red lead, library convention)",
"ground": "2 (black lead)",
"tach": "3 (yellow lead)"
},
"limitations": [
"Motion extension pending ecosystem adoption",
"STEP is static mechanical geometry; playback lives in GLB/runtime",
"Rotor blades and supports are illustrative, not exact vendor geometry",
"Rotation direction requires physical verification",
"No airflow, inertia, thermal or safety proof from animation"
],
"heroPresentation": {
"schema": "adom/hero-state-presentation@1",
"status": "authored-presentation-metadata",
"model": "mf40200v1-1000u-g99-hero.glb",
"animation": "Fan.Hero.GentleStateCycle",
"node": "Fan.Rotor",
"source": "simulated",
"controlsHardware": false,
"durationSeconds": 20,
"loop": true,
"schedule": [
{
"from": 0,
"to": 4,
"state": "off"
},
{
"from": 4,
"to": 8,
"state": "spin-up",
"easing": "smoothstep velocity"
},
{
"from": 8,
"to": 12,
"state": "on"
},
{
"from": 12,
"to": 16,
"state": "spin-down",
"easing": "smoothstep velocity"
},
{
"from": 16,
"to": 20,
"state": "off"
}
],
"peakRepresentedRpm": 7000,
"peakVisualRpm": 15,
"presentationTimeScale": 0.002142857142857143,
"meaning": "Illustrative slow-motion state demonstration, not measured speed or a physical inertia model",
"animationOff": "first frame stopped",
"repeatSeam": "two complete turns; stopped at both ends",
"stationary": [
"Fan.Housing",
"Fan.Connection"
]
}
}