Yeah that’s true, flexible filament may be tricky, especially if there is too much tension on it. I think continuing the project with what you originally spec’ed out, using the light sensor, might be the best course of action. That way you can implement the project without feature creep complications, and fully investigate the benefits & drawbacks (if any) of using the light sensor. You could always look into the hall sensor if the light sensor doesn’t suit your needs.
Regarding the LCD screen: I have my raspberry pi with a Adafruit motor hat to control 12V fans and lights, mounted underneath the tabletop of my printer. I created an enclosure for the LCD (http://www.amazon.com/gp/product/B008HWTVQ2), rotary encoder (http://www.amazon.com/gp/product/B00KHTLWU6) , and buttons (https://www.adafruit.com/products/1010) mounted to the 20x20 framing of my enclosure.


I have a custom Python script running as a service on my RPi that displays a custom GUI using pygame to the LCD. It also connects to octoprint through octoprint’s API to check on the status of the printer, tool head temperature, and send commands to the printer. The GUI displays the printer status (waiting, printing, print complete), print job info (time remaining, file being printed), ambient enclosure temperature & y motor temperature (through 2 temp probes), fan & light statuses, and actions.
The actions can be cycled through and selected with the rotary encoder. Actions like:
[] Flash E3D, in which the script will stop octoprint, flash the printer with my E3D firmware, then start octoprint.
[] Purge nozzle, which will home axis, then move to the far right of bed, bring up to 240C, purge about 30mm of filament, then wipe excess filament off the side of the bed.
The buttons allow me to manually set the extruder/motor fans, case fans, lights, cancel a print and lift nozzle immediately (red button), or (re)print the currently selected print job. The script automatically controls the case fans and extruder fans based on print temperature, ambient temperature, and what is being printed. So I only need to manually change those in case I want to purposely turn off/on the fans in case of emergency or dreaded clogs.


I also have the lights and fans controllable through octoprint, in case I want to remotely turn on/off lights and fans. I created a custom enclosures for the RPi and the LCD/buttons. But wiring up the LCD and buttons was a lot of work. Also, running a GUI takes up about 17% of the RPi’s resources, which can slow down the print job if you’re going really fast, so I have the script automatically sleep the display after inactivity or during a print. If I had to do it again, I would keep a tablet at my printer that I could access octoprint to flash firmware and run commands. I may keep a couple push-buttons for canceling a print or turning on lights. If you want more info on the script or stl files I can share those too.
