25 July, 2020

Upgrade to Cura 4.6.2

Today, I upgraded my version of Cura to 4.6.2

After reviewing the release notes, there was no reason for me to upgrade to this version other than the habit of trying to keep the software current. 

Updating the starting and ending G-code

Today, I am making some minor tweaks to the start and end G-code within Cura. There are three changes I would like to make. The first is to have the bed and the hot-end heat up at the same time. Second, I am wondering if calling M420 right after a G29 is helpful. If it is not helpful then come up with helpful solution. The third change is to have the hot-end to have a different ending position.

Final G-code

Start G-code

M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration
M203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate
M204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration
M205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk
M220 S100 ;Reset Feedrate
M221 S100 ;Reset Flowrate

; Start Dual Nozzle/Bed Preheating
M140 S{material_bed_temperature_layer_0} ; start preheating the bed
M104 S{material_print_temperature_layer_0} T0 ; start preheating hotend
G28 ; home
M190 S{material_bed_temperature_layer_0} ; heat to Cura Bed setting 
M109 S{material_print_temperature_layer_0} T0 ; heat to Cura Hotend

G28 ;Home
G29 ;
M500 ; Save settings

G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up
G1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position
G1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line
G1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little
G1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line
G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up 

End G-code

G91 ;Relative positioning
G1 E-2 F2700 ;Retract a bit
G1 E-2 Z0.2 F2400 ;Retract and raise Z
G1 X5 Y5 F3000 ;Wipe out
G1 Z10 ;Raise Z more
G90 ;Absolute positionning

G1 X{machine_width} Y{machine_depth} ;Present print
M106 S0 ;Turn-off fan
M104 S0 ;Turn-off hotend
M140 S0 ;Turn-off bed

M84 X Y E ;Disable all steppers but Z

Research 


Change 1

Chuck Hellebuyck has a video on how to get Cura to heat up the bed and hot end at the same time. Faster Hot End & Heated Bed warm-up in Cura

Change 2

G29 - Bed Leveling (Automatic): Probes the bed and enables bed leveling compensation.
M420 - Bed Leveling State: Get and/or set bed leveling state.
M500 - Save Setting: saves all configurable settings to EEPROM

Having a start g-code that uses a G29 followed by M420, is not necessary. The G29 turns on bed leveling, probes the bed, and stores the values to RAM. The M420 turns on bed leveling and reads the values from the EEPROM. 

Options to make bed leveling more helpful
  1. Modify the start g-code to run G29 without M420
  2. Modify the start g-code to run G29 and M500 without M420
  3. Modify the start g-code to run G29, M500, and M420
  4. Modify the start g-code to run M420 and occasionally run a bed leveling that saves the data

In thinking through the options, I have settled on option 2. The build surface on my Ender 5 Plus is removable. Having the auto-leveling routine run before each print should help get a good first layer as the build surface develops imperfections over time. By saving the bed leveling data, I should get two benefits. The first benefit is the data will be present after the power is cycled on the printer. The second benefit is the plug-in 'Bed Visualizer' will have current data. 

Change 3

The ending G-code uses the variable {machine_depth} to set the 'Y' axis. This puts the hot end in the back left corner. The problem is when the printer starts up the BL Touch sensor reports an error. My solution is to change from using the variable {machine_depth} to a value of '0'. 

Update: The X0 Y0 position put the hot end in the front left corner. I am trying X{machine_width} y{machine_depth}, hopefully this puts the hot end in the back right corner. 

Before Changes

Before I get started on making any changes, I recorded the start and end G-code that my version of Cura (4.6.1) is using.

Start G-code

M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration 
M203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate 
M204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration 
M205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk 
M220 S100 ;Reset Feedrate 
M221 S100 ;Reset Flowrate 

G28 ;Home 
G29 ; 
M420 S1 Z2 ;Enable ABL using saved Mesh and Fade Height 

G92 E0 ;Reset Extruder 
G1 Z2.0 F3000 ;Move Z Axis up 
G1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position 
G1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line 
G1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little 
G1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line 
G92 E0 ;Reset Extruder G1 Z2.0 F3000 ;Move Z Axis up 

End G-code

G91 ;Relative positioning
G1 E-2 F2700 ;Retract a bit
G1 E-2 Z0.2 F2400 ;Retract and raise Z
G1 X5 Y5 F3000 ;Wipe out
G1 Z10 ;Raise Z more
G90 ;Absolute positionning

G1 X0 Y{machine_depth} ;Present print
M106 S0 ;Turn-off fan
M104 S0 ;Turn-off hotend
M140 S0 ;Turn-off bed

M84 X Y E ;Disable all steppers but Z 


04 July, 2020

Getting the first layer right

Over the past few days, I have made several attempts to level the bed of my Ender 5 Plus. I have read the manual that came with the printer, read several forums, and watched several YouTube videos. 

What I have learned
  • The first layer is very important to get right. This is the foundation that the rest of the print is built on. 
  • If a print has trouble sticking to the bed. Check the bed level is a good first step.
  • The OctoPrint plugin Bed Visualizer can help understand where there are high spots and low spots on the build plate.
  • There is the "right" amount of squish. See 'Bed Leveling Guide' image. 

I am using the model 'Bed Leveling Calibration Test Object (Parametric)' by pgreendland. The first couple of attempts turned out poorly. This caused me to relevel the bed. In looking closer at the results, I could clearly see each line the printer laid down. This got me to thinking that maybe under extrusion was the problem. I did switch some part on the extruder motor. I wanted metal parts instead of plastic. 

I performed the standard extrusion test. The hot end was heated to 200 C, I marked the filament at the 100 and 110 mm points, and extruded 100 mm. Only 94 mm of the filament was pulled in. 

To update the extruder steps, I made a back of the configuration using the OctoPrint plugin 'EEPROM Marlin Plugin'.  For my printer, the Extruder steps were 94. Using the formula (expected amount of filament * Current E-Steps) / Actual extrusion amount, I was able to calculate a new step value. 

(100 X 93) / 94 = 98.9

I set and saved the new value to the EEPROM then reran the extrusion test. This time the test hit the mark. 

Reprinting of the 'Bed Leveling Calibration Test Object' turned out better. The print stuck to the bed. The print was not as solid as I expected. I also think that the hot end may be a little high. 

For the next test, I am going with a more complex model. I am not changing any settings. I want to see if the current settings can produce a nice print. I am going with the 'CHEP Calibration Cube' for the model. 



Setting up Octoprint

When I was running my old 3D printer, I found using OctoPrint to be helpful. I think it would be good to set up a new instance of OctoPrint.

Steps
  • From the OctoPrint web site, I download OctoPi 0.17.0. 
  • Using Etcher, burned the image to a 16GB SD card. 
  • Updated the file octopi-wpa-supplicant.txt with my network credentials. 
  • ssh to the pi
  • ran raspi-config
    • changed the user password
    • change timezone
    • rebooted the pi
  • Using a browser, I navigated to the IP of the OctoPi and followed the prompts to set up the first user
At this point, I paused to explore the interface. While I was exploring, OctoPrint went ahead with checking for updates. Updates were discovered and I went ahead with installing them.

Plugins
  • Bed Visualizer
    • Displays 3D mesh of bed topography report
    • Settings
      • General
        • GCODE Commands for Mesh Update Process
          • G28
          • G29 T
  • EEPROM Marlin Editor
  • Floating Navbar
  • Heater Timeout
    • Settings
      • Enable
  • Navbar Temperature
    • Display temperatures on navbar
  • Octolaspe
    • Creates a stabilized timelapse
  • Octoslack
    • monitoring your printer and prints via Slack, Mattermost, Pushbullet, Pushover, Rocket.Chat, Discord, Riot/Matrix, or Microsoft Teams
  • Simple Emergency Stop
  • Themeify


21 June, 2020

Restarting my 3D Printing hobby

Recently, I decided that I missed playing with, working with, and modifying my 3D printer. After a bit of research, I settled on purchasing the Ender 5 Plus.

While I was waiting for the printer to arrive I spent time watching YouTube videos on how to assembly the printer. I picked up several helpful tips and tricks. The Assembly of the printer was quick and easy. 

My first challenge came in leveling the bed. The blame for the challenge is all my fault. I didn't read the documentation carefully. I am made a bad assumption about how the software worked and what steps I needed to perform. Once I did read the documentation and watched a couple of videos, it took about 20 minutes to level the bed. I went through the AUX leveling steps twice just to make sure the bed as fairly level. For leveling, I had the build plate heated to 70 C and the hot-end to 190 C. The Auto-leveling sequence was run.

For the slicing program, I am using Cura 4.6.1. For my first print, the calibration cube was used. I took the defaults that Cura has for the Ender 5 Plus and send the gcode to the SD card. 

Here is where my second challenge appeared. When I put the card into the SD slot the printer didn't find the file. Turns out that the gcode needs to placed at the root level on the SD card and the file name can't be longer than 15 characters. 

Once the file was renamed, the printer recognized the existence of the file. I was then able to get the print started. When the hot-end starting moving from the home position to the starting point of the priming line the extruder sent filament to the hot-end. The priming line printed without issue. The skirt and cube printed without issue. 

I noticed during the print that the heated build got turned off or set to 0. I didn't manually adjust the bed's temperature settings. I also noted a strange noise when the infill was being printed. 



Took several measurements on the X, Y, and Z faces. I got a reading of +/- of .05 mm for most of the cube. The exception was the first two layers which were - .2 mm in the X and Y direction. 

This seems like a reasonable first print. 



ToDo
  • Examine the gcode for purge/prime sequence, to determine if I can get rid of the line the prints from the home position to the start of the purge/prime line.
  • Examine the gcode for changes to the bed temperature to determine if the gcode is turning off the bed or if the firmware is turning off the bed. 

16 February, 2020

Rebuild my docker lab setup

Background

Over the last few weeks, I have rebuilt my Docker lab and Home Assistant set up a few times.  The heart of the setup is a Raspberry 4. Finally, all the hardware I ordered has arrived and I have a bit of time to rebuild my setup. Hopefully, I won't need to rebuild for a while.

Plan

This time I want to set up a Rasberry Pi 4 Model B (2GB) with Raspbain Buster then configure the Pi to use a 1 TB SSD. Since the Rasberry Pi 4 doesn't currently support booting from an SSD, I will use the workaround from James Chambers. Once the Rasberry Pi is set up and a basic configuration is done, I will then install IOTstack from Graham Garner. This will help me set up Docker, HASS.io, Portainer, Mosquitto, and Tasmoadmin.

What I am hoping to get out of this is a stable platform for learning and experimenting with Docker,  Home Automation, Internet of Things, and electronics.

Notes

Setting up the Raspberry Pi

  • Used balenaEtcher to flash Raspbian Buster with desktop to an 8 Gig SD Card
  • Used balenaEtcher to flash Raspbian Buster with desktop to a 1 TB SSD
  • Plugged in a monitor, keyboard, mouse, network cable and applied power
    • I waited for about 5 minutes for the system to run through its first-time power-up.
  • created an empty file named ssh and placed it the boot folder for both SD and SSD
    • created the file wpa_supplicant.conf and placed it in the boot folder for both SD and SSD
    • Set basic config values for keyboard
    • changed the pi default password
    • skipped the update
  • sudo fdisk /dev/sda
    • set the SSD PARTUUID to d34db33f
  • sudo blkid
  • made backup of /boot/cmdline.txt
  • edited /boot/cmdline.txt to use the PARTUUID that was set earlier
  • sudo reboot
  • verified the SSD is being used
    • findmnt -n -o SOURCE /
  • updated /etc/fstab 
    • changed the PARTUUID to d34db33f
  • sudo reboot
  • resizing filesystem
    • delete the partition /dev/sda2
    • create a new partition with a first sector at 532480
    • sudo resize2fs /dev/sda2
      • This takes a while
    • df -h 
      • verify /dev/root shows a size value close to the size of the drive
  • sudo reboot

Configuring the Raspberry Pi

  • set Hostname
  • boot to CLI
  • auto login: uncheck mark
  • sudo reboot
  • verified Raspberry Pi configuration
  • verified that I can ssh into the raspberry pi
  • sudo apt update
  • sudo apt upgrade

Install IOTstack

  • ensure git is installed
    • sudo apt install git
  • clone IOTstack
    • git clone https://github.com/gcgarner/IOTstack.git ~/IOTstack
  • run menu
    • cd IOTstack
    • ./menu.sh
      • installed docker
      • installed Hass.io
      • installed Portainer
      • installed Mosquitto
      • installed tasmoadmin
  • docker-compose up -d




References

Github gcgarner / IOTstack







26 January, 2020

Setting up Home Assistant on Raspberry Pi using generic Linux host method



Recently my installation of Home Assistant died. It appears that I burned up the SD card. I can no longer read the SD Card. When I run gparted against the SD card, the card mounts in read-only mode. After a bit of research, I came up with a plan.

Rough Plan


  • Install the latest Raspbian Buster image
  • Reconfigure the Pi to run from a hard drive
  • Install Home Assistant using the generic Linux host method

Steps

  • Downloaded Raspbian Buster with desktop from the Raspberry Pi website
  • Using balenaEtcher to flash Buster to an SD card (8GB)
  • Booted the Pi for the first time
  • Setup the language, keyboard, and timezone. 
    • Changed the pi user's password
    • Selected the WiFi network
    • Updated the software
  • Updated the packages
    • sudo apt update
    • sudo apt upgrade
    • sudo reboot
  • Followed the directions from the blog post 'Quick SD to SSD on the pi 4'
    • use the utility 'SD Card Copier' to copy the SD card to the hard drive
    • run 'sudo blkid' to get the UUID of the SD sard and the hard drive
    • backup the file /boot/cmdline.txt
    • edit the file /boot/cmdline.txt. Change the partuuid from using the SD card to the hard drive
    • reboot
    • Note: must leave the SD card in the Raspberry Pi
  • Changed the hostname of the Pi
  • Enabled SSH on the Pi
  • Setup ssh key on my main PC
    • ssh-keygen
    • ssh-copy -i ~/.ssh/key-name pi@ip.address
    • ssh-add
  • Disable Password Authentication on the Pi
    • sudo nano /etc/ssh/sshd_config
      • Uncommented the line 'PasswordAuthentication yes'
      • changed yes to no
  • Set a static IP for the Pi
    • edit /etc/dhcpcd.conf
      • added
        • interface wlan0
        • static ip_address=XXX.XXX.XXX.XXX
        • static routers=XXX.XXX.XXX.XXX
        • static domain_name_servers=XXX.XXX.XXX.XXX
    • reboot
  • Changed Pi Configuration to boot to cli
  • Followed the directions from the blog post 'Install Docker and Docker Compose on Raspberry pi 4(Raspbian Buster)'
    • curl -sSL get.docker.com | sh
    • sudo usermod -aG docker pi
    • sudo apt-get install libffi-dev libssl-dev
    • sudo apt install python3-dev
    • sudo apt-get install -y python3 python3-pip
    • sudo pip3 install docker-compose
  • Followed installer for a generic Linux system
    • sudo apt install bash
    • sudo apt install jq
    • sudo apt install curl
    • sudo apt install avahi-daemon
    • sudo apt install dbus
    • sudo apt install apparmor-utils
  • curl -sL https://raw.githubusercontent.com/home-assistant/hassio-installer/master/hassio_install.sh | bash -s -- -m raspberrypi4-64
  • Setup Home Assistant
There was an issue with Home Assistant connecting to the internet. I removed the changes to /etc/dhcpcd.config. This seems to have helped. 

Challenging myself to learn something new

I have recently set a big challenge for myself. I want to know about Machine Learning . To add to the challenge, I am trying out usin...