The ToDoList is a general wish list for the entire project. This FirmwareWishList is the section dealing with the Arduino firmware.
See the firmware provide more feedback to the PC that's running it. The only feedback that occurs firmware->PC is the "ok" that acknowledges each GCODE sent, and the T:XXX that advises the current temperature of the extruder hot zone.
We also need the host PC to be advised ( and thus advise the user) when :
- any of the end-stops are "in error" state ( or "homed", if you prefer that term ). It's really common for new users to struggle with their endstop signals reporting incorrectly or not at all, and for it to cause firmware grief, etc ( eg: entire machine appears broken if an endstop is logically inverted )
- which GCODE is actively being processed "right now" ( as apposed to the queue'd gcode/s )
- whether the extruder is in a "refuse to move" state of not ( usually as a result of the temperature being to low). Users struggle when they try to manually turn the extruder on , and it simply "refuses to work" without any feedback. I've seen a lot of smart people bitten by this, because they don't realise what the firmware is doing.
- for DC extruders ( becomming less of a problem ), they have a "current speed" setting, and it defaults to zero in most firmwares, but doesn't tell the user that. Turning an extruder on which is still set at a zero speed, happens too.
Some people have taken the option of adding a LCD ( on the rapman? ) to get extra info, but we have a nice big PC LCD for that, don't we?
That sort of thing would be great, so long as the "host" has the capability to interpret it and then give the user adequate feedback on what's happening inside their machine.
I was just thinking of a simple solution, like the Temperature sensor currently uses ( where it constantly tells you where it's at, irrespective of your request/s ).
Eg: if we told the "host" software to treat any line/s being sent back to it that start with a "#" character ( or whatever) as meaning "please update the screen with this info", then it could be simple key-value pairs of info that the host understands.
Just like we have T:XX for temperature, we could have:
- T:123 (means extruder is at 123 degrees)
- E:X ( means endstop X reporting a tirggered state )
- C: [some gcode line here] ( means we just started executing this actual gCode now)
- S:100 ( extruder is now set to run at speed 100 )
- W:ET ( machine is waiting for Extruder Temperature to come within bounds )
- W:CC ( machine is waiting in a Cooling Cycle )
- W:NG ( machine is waiting for user to send the Next Gcode )
Obviously, there could be a whole bunch of these, so having the option (like you suggested) to explicity "poll" the machine occasionally and have it tell you all of them at once would be especially useful immediately after the host software first connects to a firmware, so they don't disagree on what to tell the user. :-)
Temperature Sensitive Safety Checks
Also, lets have a sensible temperature control system that is more safe. I think it would be wise to check if temperature actually goes up when a current is applied and turn the current off if something is wrong with the measurement and/or heating. A (resettable) fuse would also seem like a wise thing to have there.
Perhaps measure the current through the Nichrome heater element:
- This gives us immediate feedback (0 current) if the heater ever gets disconnected/broken.
- Some people may be interested in the peak power and total "energy per extruded kg" used by the heater. Measuring this directly lets them see if various Hot End modifications make any significant difference.
- The increasing resistance as it warms up tells us the heater is actually getting hot, even if the thermistor is disconnected/broken.
- Is it possible to calibrate the Nichrome resistance vs. temperature accurately enough that we don't need a thermistor/thermocouple? Simpler is better, right? ("using the resistance of the Nichrome ... to measure its temperature")
Web Enabled Controller/PC
I want to make the controller with web-server control, so that it can remotely be controlled.