• Making your own circuit board with the toner transfer process – 5 Methods tested. - The toner transfer process is a common method used to create printed circuit boards (PCBs) in a DIY setting or small-scale production. The process involves transferring a printed image of a circuit design onto a copper-clad board, which is then etched to remove the unneeded copper and leave the desired circuit pattern. The process of transferring toner onto a circuit board remains the same, but the methods of achieving it can differ. I conducted a brief search on YouTube and tried the top four methods, as well as creating my own approach. I utilized the test pattern from here, which posed a challenge for the toner transfer process due to its intricate design with numerous thin lines and small pads. In this experiment, I focused solely on the toner transfer and not the etching process. In general, a successful toner transfer usually ensures that the image will etch successfully as well. It is essential to have an iron for this process. Additionally, the copper-clad board must be immaculately clean, free from any residue, including fingerprints. The cleanliness of the board is crucial for the success of the transfer, as any impurities can affect the outcome. The process can only be completed with a toner based printer such as a laser printer. Inkjet printers can not be used. The Methods. 1. The OG toner transfer. Required tools This is the toner transfer process in its simplest form: 2. Vinyl backing paper. Required tools Check the original video here: This toner transfer process uses vinyl wrap as the backing material. The vinyl wrap has a shiny side and a matte side with markings, and cannot be directly fed into the printer due to its tendency to curl and become flimsy. To resolve this issue, the vinyl wrap can be taped onto a regular piece of paper and then fed through the printer. After printing, remove the vinyl wrap from the paper and place it onto the copper-clad board. Apply heat and pressure to the paper for several minutes, causing the toner to adhere to the copper. The backing paper from the vinyl wrap should then easily peel away.” 3. Acetone cocktail. Required tools Check the original video here: By diluting acetone with isopropyl alcohol, the effectiveness of the acetone is reduced, making the toner somewhat sticky and more able to adhere to the copper-clad board. Do not use acetone that contains any impurities like moisturizer. Most chemist or supermarket purchased acetone contains chemicals other than acetone. To use this process, clean both the print on the glossy paper and the copper-clad board with isopropyl alcohol. Then, coat the board with the acetone and isopropyl alcohol mixture. Place the print onto the board and after 10 seconds apply pressure on the print. Finally, immerse the board in water, and the paper should peel off, revealing the toner that has adhered to the board 4. Spray paint Required tools Check the orignal video here: The first step in this process is to apply paint containing acetone onto a copper-clad board. After the board is painted, place a print on vinal backing paper onto it, and gently rub the tracks so that the toner adheres to the paint. Next, soak the board in water to separate the paper from the board. The next step is to remove the paint that covers the areas without toner, which is where we want to etch. To do this, gently dab the paint with a small amount of isopropyl alcohol using a rag, without rubbing. Avoid using excessive amounts of IPA as it may dissolve the paint layer and disrupt the toner. If you are succsesfull the toner will be left behind while the paint has been removed. 5. Transparency film Required tools In this procedure, transparency film is utilized to transfer the toner. First, print your design onto the transparency film. Then, use an iron to apply pressure onto the transparency and the board for a few minutes. Place the board in the fridge to cool. This seems to ensure a better transfer. Carefully peel the film off the board. Conclusion For me the transparecy method had the best result. With a bit of practice all the other methods may work just as well. Check the table below for my notes on each. Method Heat Water Pressure Notes Toner transfer ✔️ ✔️ ✔️ The original verson, generally works pretty well when executed correctly. Vinyl backing paper ✔️ ✔️ ✔️ Great transfer, make sure your vinyl is not damaged as this will effect the transfer. Acetone cocktail ❌ ✔️ ✔️ I couldn’t really get this to work effectivly. Spray paint ❌ ✔️ ❌ Great transfer but removing the paint was tricky. Would work well with thick lines. Transparency ✔️ ❌ ✔️ Overall the best method so far.

    The toner transfer process is a common method used to create printed circuit boards (PCBs) in a DIY setting or small-scale production. The process involves transferring a printed image of a circuit design onto a copper-clad board, which is then etched to remove the unneeded copper and leave the desired circuit pattern.

    The process of transferring toner onto a circuit board remains the same, but the methods of achieving it can differ. I conducted a brief search on YouTube and tried the top four methods, as well as creating my own approach.

    I utilized the test pattern from here, which posed a challenge for the toner transfer process due to its intricate design with numerous thin lines and small pads. In this experiment, I focused solely on the toner transfer and not the etching process. In general, a successful toner transfer usually ensures that the image will etch successfully as well.

    It is essential to have an iron for this process. Additionally, the copper-clad board must be immaculately clean, free from any residue, including fingerprints. The cleanliness of the board is crucial for the success of the transfer, as any impurities can affect the outcome.

    The process can only be completed with a toner based printer such as a laser printer. Inkjet printers can not be used.

    1. The OG toner transfer
    2. Vinyl backing paper
    3. Acetone cocktail
    4. Spray paint
    5. Transparency

    The Methods.

    1. The OG toner transfer.

    Required tools

    • Glossy paper
    • Iron
    • Water

    This is the toner transfer process in its simplest form:

    Print you design on to glossy paper
    1. Print the circuit board layout on glossy paper, such as magazine paper.
    2. Use a hot iron to transfer the toner onto the copper-clad board by applying pressure. The toner requires heat and pressure to move.
    3. After heating the paper for a few minutes, carefully place the board in a bowl of water.
    4. Gently remove the paper, leaving the toner behind on the copper-clad board.

    2. Vinyl backing paper.

    Required tools

    • Vinyl wrap backing paper
    • Iron
    • Water

    Check the original video here:

    Print on the shiny side of the backing paper

    This toner transfer process uses vinyl wrap as the backing material. The vinyl wrap has a shiny side and a matte side with markings, and cannot be directly fed into the printer due to its tendency to curl and become flimsy. To resolve this issue, the vinyl wrap can be taped onto a regular piece of paper and then fed through the printer.

    Slowly remove the vinyl backing paper

    After printing, remove the vinyl wrap from the paper and place it onto the copper-clad board. Apply heat and pressure to the paper for several minutes, causing the toner to adhere to the copper. The backing paper from the vinyl wrap should then easily peel away.”

    3. Acetone cocktail.

    Required tools

    • Glossy paper
    • Acetone (100%)
    • Isopropyl alcohol (100%)
    • Water

    Check the original video here:

    Add the mxture to the board

    By diluting acetone with isopropyl alcohol, the effectiveness of the acetone is reduced, making the toner somewhat sticky and more able to adhere to the copper-clad board.

    Do not use acetone that contains any impurities like moisturizer. Most chemist or supermarket purchased acetone contains chemicals other than acetone.

    To use this process, clean both the print on the glossy paper and the copper-clad board with isopropyl alcohol. Then, coat the board with the acetone and isopropyl alcohol mixture. Place the print onto the board and after 10 seconds apply pressure on the print. Finally, immerse the board in water, and the paper should peel off, revealing the toner that has adhered to the board

    4. Spray paint

    Required tools

    • Spray paint (containing acetone)
    • Vinyl backing paper
    • Water

    Check the orignal video here:

    Use paint containing acetone

    The first step in this process is to apply paint containing acetone onto a copper-clad board. After the board is painted, place a print on vinal backing paper onto it, and gently rub the tracks so that the toner adheres to the paint. Next, soak the board in water to separate the paper from the board.

    This process provides a good transfer

    The next step is to remove the paint that covers the areas without toner, which is where we want to etch. To do this, gently dab the paint with a small amount of isopropyl alcohol using a rag, without rubbing. Avoid using excessive amounts of IPA as it may dissolve the paint layer and disrupt the toner.

    Dab the board with a cloth and IPA

    If you are succsesfull the toner will be left behind while the paint has been removed.

    5. Transparency film

    Required tools

    • Transparency film
    • Iron

    In this procedure, transparency film is utilized to transfer the toner. First, print your design onto the transparency film. Then, use an iron to apply pressure onto the transparency and the board for a few minutes.

    Transparency allows for easy alignment

    Place the board in the fridge to cool. This seems to ensure a better transfer.

    Carefully peel the film off the board.

    Remove the film slowly after cooling

    Conclusion

    For me the transparecy method had the best result. With a bit of practice all the other methods may work just as well. Check the table below for my notes on each.

    MethodHeatWaterPressureNotes
    Toner transfer✔️✔️✔️The original verson, generally works pretty well when executed correctly.
    Vinyl backing paper✔️✔️✔️Great transfer, make sure your vinyl is not damaged as this will effect the transfer.
    Acetone cocktail✔️✔️I couldn’t really get this to work effectivly.
    Spray paint✔️Great transfer but removing the paint was tricky. Would work well with thick lines.
    Transparency✔️✔️Overall the best method so far.
  • Tips for toner transfer with 3D printing - It is possible to transfer toner onto your 3D prints. Check the original guide on this process found here: https://www.reddit.com/r/FDM_TonerTransfer/ Here a few tips I have found in my own testing. The beauty of this process is you can alter the properties of the first layer as much as you like and it will not effect the rest of the job. Z-Offset Z-Offset lets you alter the nozzle height from your leveled bed. Being higher or lower may improve your result. By examining the image from left to right, the impact of Z-offset becomes evident. On the far left, the Z-offset is set too low and causes toner to be scraped off the transparency. However, as we progress to the right and incrementally raise the Z-offset by 0.1mm, the white vertical lines become more distinct and the image appears lighter. For my prints I was using .1mm but this really depends on your bed leveling. Temperature You will want to run the initial layer hotter than you normally would. I usually print at around 210c on the hotend and 50c on the bed. For a good result I had to move these to 220c for the hotend and 60c for the bed. Layer height This is slightly self explanatory. This is the layer height which I set to .1 for the first layer. Initial layer line width factor This is the gap between the lines on your inital layer a heigher % will increase the gap between these lines. Reducing this value increases the lines on the inital layers and have a “finer” print. I found setting this to 60% gave me a good result. Removing the transparency from the print. I found the best method is to wait for 30 mins or so after the print is completed before trying to remove the transparency from the object. Pulling it off too early I have found some toner adheres to the sheet rather than the print. If you are careful you can remove the print attached to the sheet anytime allowing you to start a new job. Placing the sheet on the bed prior to printing. Make sure there is no dust on the bed or the bed side of the transparency. The smallest particle will leave imperfections in the transfer. In my video I demonstrated not removing the outline, this is wrong. Once you tape down your transparency on one side remove anything that is on the bed.

    It is possible to transfer toner onto your 3D prints. Check the original guide on this process found here: https://www.reddit.com/r/FDM_TonerTransfer/

    Here a few tips I have found in my own testing.

    The beauty of this process is you can alter the properties of the first layer as much as you like and it will not effect the rest of the job.

    Z-Offset

    Z-Offset lets you alter the nozzle height from your leveled bed. Being higher or lower may improve your result.

    Different levels of Z offset

    By examining the image from left to right, the impact of Z-offset becomes evident. On the far left, the Z-offset is set too low and causes toner to be scraped off the transparency. However, as we progress to the right and incrementally raise the Z-offset by 0.1mm, the white vertical lines become more distinct and the image appears lighter.

    For my prints I was using .1mm but this really depends on your bed leveling.

    Temperature

    You will want to run the initial layer hotter than you normally would. I usually print at around 210c on the hotend and 50c on the bed. For a good result I had to move these to 220c for the hotend and 60c for the bed.

    Layer height

    This is slightly self explanatory. This is the layer height which I set to .1 for the first layer.

    Initial layer line width factor

    This is the gap between the lines on your inital layer a heigher % will increase the gap between these lines. Reducing this value increases the lines on the inital layers and have a “finer” print. I found setting this to 60% gave me a good result.

    Removing the transparency from the print.

    I found the best method is to wait for 30 mins or so after the print is completed before trying to remove the transparency from the object. Pulling it off too early I have found some toner adheres to the sheet rather than the print. If you are careful you can remove the print attached to the sheet anytime allowing you to start a new job.

    Placing the sheet on the bed prior to printing.

    Make sure there is no dust on the bed or the bed side of the transparency. The smallest particle will leave imperfections in the transfer.

    Spots

    In my video I demonstrated not removing the outline, this is wrong. Once you tape down your transparency on one side remove anything that is on the bed.

  • Defender Cocktail table gives new life to an old laptop - The background During a clean-out of my shed, I stumbled upon an old, discarded Dell laptop. Despite its inability to properly boot up, I saw potential in the device. I had always dreamed of owning an arcade machine that could play Defender, a classic game I used to play at the skating rink in my youth. For just 20 cents per game, I eagerly spent my allowance on it, but I never quite mastered the game. The arcade machine was unique in its design, featuring a cocktail table instead of the typical upright structure. I had learned about MAME, an arcade emulation program that allows you to play classic arcade games by loading them into the program. To truly recapture the experience, I knew I needed the same buttons and joystick found on the original cocktail table arcade machines. I was able to source these components easily, either from China or locally. I ordered the buttons, joystick, and interface board, and after wiping the laptop’s drive, I installed Lubuntu, a lightweight Linux operating system that I found through a Google search. The installation of MAME was straightforward and simple. With a quick Google search, I was able to find the ROMs and successfully play Defender on my newly installed MAME. The next challenge was to design a case to house all the components. I initially tried using an AI tool, but the results were not what I was looking for. After some reflection, I decided to pay homage to the original arcade machine that had captivated me years ago by building a smaller but respectful replica of the original. The build My first step was to remove the laptop from its original case. I wanted to eliminate any trace of the old case and retain only the minimum necessary components to make the machine work. Being a Dell laptop, I was concerned that removing parts might cause issues, but I stripped it back as far as I could. To my surprise, the motherboard booted up without any complaints when I hit the power button. One issue with stripping a laptop down to its bare components is that the original chassis often serves as a support structure for various internal components such as speakers, daughter boards, and WiFi boards. With the removal of the chassis, the hard drive was no longer securely held in place. It was not practical or reliable to use a 3D-printed clamping system, so I had to find another solution. I decided to clone the working drive over to a USB stick. This way I could do away with the HDD drive and use the USB on another computer if I wanted to. There appears to be no performance degradation when using the USB. Next, I designed the case for the arcade machine. I jotted down my ideas on paper and then transferred them to Fusion 360 to ensure accurate measurements. The old-style laptop I was using had some unique features, such as external buttons for power and audio, and a USB port and earphone socket that were connected to a daughter board via a cable. I designed holders for these buttons and ports so they would be accessible from the side of the case. I also needed to create a mount for the motherboard. I scanned the motherboard and imported it into Inkscape, then created an SVG and imported it into Fusion 360. This allowed me to carefully design a mounting bracket that lined up perfectly with the motherboard’s mounting holes. Another issue was that the control panel of the original arcade machine was huge. I found a clear photo of the control panel removed from an arcade machine on the web and used it as a reference. I copied the design and trimmed down the sides to fit the size I wanted for my machine. The button positions were identical to the original to maintain authenticity. The updated control panel was printed on an inkjet printer in two sections and glued to MDF for stability. Since it was a cocktail table, I wanted to protect the print from potential liquid damage. I placed an acrylic sheet on top for protection. Cutting acrylic can be challenging, check out my method below. I aimed to make the machine look like it was straight out of the same era, as if Williams themselves had released a home edition of Defender. To achieve this, I cut slots in the side just like the original. These slots served a practical purpose as well by keeping the laptop cool. The brackets that keep the acrylic down are the same as the orignal had. To add the final touch, I had to label the two buttons on the side of the machine for Player selection and adding credits. Instead of traditional labeling, I tried the FDM toner transfer technique. The arcade buttons had flat tops, so I designed the labels in Fusion 360 and printed them onto OHP film. The process turned out to be successful and I plan to create a video showcasing it soon. This brought the project to and end and I finally had my very own Defender!. Check the photos below for more details including “service mode”. This is a brief overview of this build. Make sure you subscribe to my channel for a full video out soon.

    The background

    During a clean-out of my shed, I stumbled upon an old, discarded Dell laptop. Despite its inability to properly boot up, I saw potential in the device. I had always dreamed of owning an arcade machine that could play Defender, a classic game I used to play at the skating rink in my youth. For just 20 cents per game, I eagerly spent my allowance on it, but I never quite mastered the game. The arcade machine was unique in its design, featuring a cocktail table instead of the typical upright structure.

    The OG Defender Cocktail table

    I had learned about MAME, an arcade emulation program that allows you to play classic arcade games by loading them into the program. To truly recapture the experience, I knew I needed the same buttons and joystick found on the original cocktail table arcade machines. I was able to source these components easily, either from China or locally. I ordered the buttons, joystick, and interface board, and after wiping the laptop’s drive, I installed Lubuntu, a lightweight Linux operating system that I found through a Google search. The installation of MAME was straightforward and simple.

    sudo apt install mame

    With a quick Google search, I was able to find the ROMs and successfully play Defender on my newly installed MAME. The next challenge was to design a case to house all the components. I initially tried using an AI tool, but the results were not what I was looking for. After some reflection, I decided to pay homage to the original arcade machine that had captivated me years ago by building a smaller but respectful replica of the original.

    The build

    My first step was to remove the laptop from its original case. I wanted to eliminate any trace of the old case and retain only the minimum necessary components to make the machine work. Being a Dell laptop, I was concerned that removing parts might cause issues, but I stripped it back as far as I could. To my surprise, the motherboard booted up without any complaints when I hit the power button.

    The heart of the matter an old DELL laptop

    One issue with stripping a laptop down to its bare components is that the original chassis often serves as a support structure for various internal components such as speakers, daughter boards, and WiFi boards. With the removal of the chassis, the hard drive was no longer securely held in place. It was not practical or reliable to use a 3D-printed clamping system, so I had to find another solution.

    There is nothing to hold the HDD in place without a chassis.

    I decided to clone the working drive over to a USB stick. This way I could do away with the HDD drive and use the USB on another computer if I wanted to.

    This USB now holds the entire OS and MAME

    There appears to be no performance degradation when using the USB.

    Next, I designed the case for the arcade machine. I jotted down my ideas on paper and then transferred them to Fusion 360 to ensure accurate measurements. The old-style laptop I was using had some unique features, such as external buttons for power and audio, and a USB port and earphone socket that were connected to a daughter board via a cable. I designed holders for these buttons and ports so they would be accessible from the side of the case.

    The luxury of external buttons and connectors.

    I also needed to create a mount for the motherboard. I scanned the motherboard and imported it into Inkscape, then created an SVG and imported it into Fusion 360. This allowed me to carefully design a mounting bracket that lined up perfectly with the motherboard’s mounting holes.

    Another issue was that the control panel of the original arcade machine was huge.

    Oriignal defender had a huge control panel.

    I found a clear photo of the control panel removed from an arcade machine on the web and used it as a reference. I copied the design and trimmed down the sides to fit the size I wanted for my machine. The button positions were identical to the original to maintain authenticity.

    The updated control panel was printed on an inkjet printer in two sections and glued to MDF for stability. Since it was a cocktail table, I wanted to protect the print from potential liquid damage. I placed an acrylic sheet on top for protection. Cutting acrylic can be challenging, check out my method below.

    I aimed to make the machine look like it was straight out of the same era, as if Williams themselves had released a home edition of Defender. To achieve this, I cut slots in the side just like the original. These slots served a practical purpose as well by keeping the laptop cool.

    Functional vents

    The brackets that keep the acrylic down are the same as the orignal had.

    mmmmmm fixings

    To add the final touch, I had to label the two buttons on the side of the machine for Player selection and adding credits. Instead of traditional labeling, I tried the FDM toner transfer technique. The arcade buttons had flat tops, so I designed the labels in Fusion 360 and printed them onto OHP film. The process turned out to be successful and I plan to create a video showcasing it soon.

    Print your own buttons

    This brought the project to and end and I finally had my very own Defender!. Check the photos below for more details including “service mode”.

    This is a brief overview of this build. Make sure you subscribe to my channel for a full video out soon.

    The original Defender tilted to the side but due to the LCD cable I could do the same
    Functional print P0RN
    My own Defender
  • Waterproofing WLED - I started out my Youtube channel with a video about WLED. Well, it was actually about a Larson scanner cap but in earnest, my videos were about WLED. The main reason being my boys wanted some sort of lighting on the trampoline for nighttime jumping. The idea for that project was that lights would stay out on the trampoline and when I wanted to use them we could just plug in the 18650 power banks. There were 12 power banks that I purchased off Aliexpress they were only a few dollars each and I sourced the 18650 (battery) locally for a few dollars also. The challenge at that point was charging 12 power banks at once which lead to the mega charger project. This worked pretty well. The batteries would work for a few days and I could then charge them all in just a few hours when they were dead. Almost perfect. I spent a bit of time trying to keep water out of the unit by creating galleries in the mating faces of the case and lid. I then filled these with silicone along with the tube holding the neopixel strip. This tube is a 10mm clear plastic that holds the strip upright. Originally I was using a plastic hose which wasn’t ideal. You can see my different iterations in my range test video. I used a regular USB male connector to connect the battery to the rest of the unit. In the photo above you can see the ESP-01 & WS2812, daughter board, with the battery (cover removed) plugged into the male USB connector. Note the small gallery running around the outside of the area containing the electronics. The problems began quite quickly with the contacts of this male plug started rusting pretty quickly. It didn’t really need rain for this to start happening. Just the regular condensation of any night would cause an issue. You could plug the battery in a few times to create a clean enough contact but this rust quickly moved to the batteries themselves. Towards the end of summer, the lights were dropping like flies with only a few functioning. Version 2 I have been putting it off for a while as I know the massive undertaking required but it is time to revisit these lights. We are already well into summer so this needs attention before winter turns up. My theory this time around is to completely seal the unit so moisture has no ability to access the electronics or battery connectors. Turning the unit on or off would also require a waterproof solution. Initially, I was looking at a toggle switch with a rubber cover. Although this might work to start with I can see it working loose and I still have a hole for moisture to work its way in. I have therefore opted for a reed switch and some small magnets on a sliding cover to turn the light on and off. My first testing found these cheap reed switches would actually stick shut when the current required to enable the LED strip was applied. I could only turn the light on but not turn it off! The only solution is to disconnect the battery. Seeing how this will eventually all be sealed this isn’t really an option. I then incorporated a MOSFET in the circuit. The little current required to activate the MOSFET meant the reed switch would now open its contacts when the magnet was removed. The power bank charger units were going to be cannibalized from the old power banks. This wasn’t really ideal as there was no easy access to the positive supply line. Also, they would need to be mounted horizontally taking up a bit of real estate. My local supplier sourced a nifty little BMS board that will charge a 18650 as well as boost the voltage to 5V. The board is really small and takes up a fraction of the space of the old BMS. This for some reason presented another issue where this board will not function with the MOSFET and reed switch combo! This BMS does come with a button which was a concern anyway as it wasn’t documented well as to what it does. Do I always have to click it to work? The workaround is to replace this switch with the reed switch directly, no need for the MOSFET anymore. If the switch is activated once the power is supplied. Double tap and the power is removed. Almost too good to be true so I will see how this pans out. The next challenge will be getting power into the unit without water. Here I intend to have two screws act as contacts and these will in turn rest on copper strips. I need a way to ensure good contact so I have created a spring-loaded type arrangement. I purchased a dozen clicky pens from K-Mart and robbed the springs from these for a few dollars. These will sit in two contacts that push up against the bottom of the unit. Looking down from above you can see where the contacts on the end unit slot in the holes to reach the contacts. It is keyed to make sure it is not possible to plug the unit in back to front. The mega charger doesn’t have the right connectors so I will either remove the Micro USB plugs or start fresh. I have a POC printing at the moment so hopefully, we will be back in production shortly!

    I started out my Youtube channel with a video about WLED. Well, it was actually about a Larson scanner cap but in earnest, my videos were about WLED. The main reason being my boys wanted some sort of lighting on the trampoline for nighttime jumping.

    The idea for that project was that lights would stay out on the trampoline and when I wanted to use them we could just plug in the 18650 power banks.

    There were 12 power banks that I purchased off Aliexpress they were only a few dollars each and I sourced the 18650 (battery) locally for a few dollars also. The challenge at that point was charging 12 power banks at once which lead to the mega charger project.

    This worked pretty well. The batteries would work for a few days and I could then charge them all in just a few hours when they were dead. Almost perfect.

    I spent a bit of time trying to keep water out of the unit by creating galleries in the mating faces of the case and lid. I then filled these with silicone along with the tube holding the neopixel strip. This tube is a 10mm clear plastic that holds the strip upright. Originally I was using a plastic hose which wasn’t ideal. You can see my different iterations in my range test video.

    I used a regular USB male connector to connect the battery to the rest of the unit.

    In the photo above you can see the ESP-01 & WS2812, daughter board, with the battery (cover removed) plugged into the male USB connector. Note the small gallery running around the outside of the area containing the electronics.

    The problems began quite quickly with the contacts of this male plug started rusting pretty quickly. It didn’t really need rain for this to start happening. Just the regular condensation of any night would cause an issue. You could plug the battery in a few times to create a clean enough contact but this rust quickly moved to the batteries themselves. Towards the end of summer, the lights were dropping like flies with only a few functioning.

    Version 2

    I have been putting it off for a while as I know the massive undertaking required but it is time to revisit these lights. We are already well into summer so this needs attention before winter turns up.

    My theory this time around is to completely seal the unit so moisture has no ability to access the electronics or battery connectors. Turning the unit on or off would also require a waterproof solution.

    Initially, I was looking at a toggle switch with a rubber cover. Although this might work to start with I can see it working loose and I still have a hole for moisture to work its way in.

    I have therefore opted for a reed switch and some small magnets on a sliding cover to turn the light on and off.

    My first testing found these cheap reed switches would actually stick shut when the current required to enable the LED strip was applied. I could only turn the light on but not turn it off! The only solution is to disconnect the battery. Seeing how this will eventually all be sealed this isn’t really an option.

    I then incorporated a MOSFET in the circuit. The little current required to activate the MOSFET meant the reed switch would now open its contacts when the magnet was removed.

    The power bank charger units were going to be cannibalized from the old power banks. This wasn’t really ideal as there was no easy access to the positive supply line. Also, they would need to be mounted horizontally taking up a bit of real estate.

    My local supplier sourced a nifty little BMS board that will charge a 18650 as well as boost the voltage to 5V.

    The board is really small and takes up a fraction of the space of the old BMS.

    This for some reason presented another issue where this board will not function with the MOSFET and reed switch combo!

    This BMS does come with a button which was a concern anyway as it wasn’t documented well as to what it does. Do I always have to click it to work? The workaround is to replace this switch with the reed switch directly, no need for the MOSFET anymore. If the switch is activated once the power is supplied. Double tap and the power is removed. Almost too good to be true so I will see how this pans out.

    The next challenge will be getting power into the unit without water. Here I intend to have two screws act as contacts and these will in turn rest on copper strips.

    I need a way to ensure good contact so I have created a spring-loaded type arrangement. I purchased a dozen clicky pens from K-Mart and robbed the springs from these for a few dollars.

    These will sit in two contacts that push up against the bottom of the unit.

    Looking down from above you can see where the contacts on the end unit slot in the holes to reach the contacts. It is keyed to make sure it is not possible to plug the unit in back to front.

    The mega charger doesn’t have the right connectors so I will either remove the Micro USB plugs or start fresh.

    I have a POC printing at the moment so hopefully, we will be back in production shortly!

  • Low polygon WLED Neopixel cement lamp completed - It took up to the wire but the lamp was completed on the 4th of December with the competition closing on the 5th. It was pretty tricky trying to get a good photo of the lamp as my camera exposure was determined to adjust for the lightness of the shade hiding the detail of the low polygon torso. There was no finishing on this casting at all. It came out very good. The seam lines are very dark but I am deciding if I am going to try and work these out or not. The problem with this low polygon version is the straight sharp edges. For the naturally shaped figure, I could just sand over the imperfections to naturally blend in. With this statue, I think the reworking will be obvious. The stand on the bottom was a last-minute edition. In fact, it didn’t even make it to the build video. The surface area around the bottom just isn’t big enough to securely stop the lamp from toppling over. I was going to paint this black but I think it complements the other white PLA in the print. I spent a good 2 hours on the weekend creating a build document in Instructables only to have it not save for some reason 😭. So quickly created another which should do for now. If Instructables do indeed reject the build I will create another build document on my site or maybe Hackaday. I really like how the wiring is all hidden from view that was a good gamble. The shade does look like it is floating. The WLED controller gives me so many options not only for effects but connectivity. I will create a follow-up video going through the configuration but I already have several videos covering different aspects of WLED.

    It took up to the wire but the lamp was completed on the 4th of December with the competition closing on the 5th.


    It was pretty tricky trying to get a good photo of the lamp as my camera exposure was determined to adjust for the lightness of the shade hiding the detail of the low polygon torso. There was no finishing on this casting at all. It came out very good. The seam lines are very dark but I am deciding if I am going to try and work these out or not.


    The problem with this low polygon version is the straight sharp edges. For the naturally shaped figure, I could just sand over the imperfections to naturally blend in. With this statue, I think the reworking will be obvious.


    The stand on the bottom was a last-minute edition. In fact, it didn’t even make it to the build video. The surface area around the bottom just isn’t big enough to securely stop the lamp from toppling over. I was going to paint this black but I think it complements the other white PLA in the print.

    I spent a good 2 hours on the weekend creating a build document in Instructables only to have it not save for some reason 😭. So quickly created another which should do for now. If Instructables do indeed reject the build I will create another build document on my site or maybe Hackaday.

    I really like how the wiring is all hidden from view that was a good gamble. The shade does look like it is floating.

    The WLED controller gives me so many options not only for effects but connectivity. I will create a follow-up video going through the configuration but I already have several videos covering different aspects of WLED.

  • Low polygon WLED Neopixel cement lamp - Instructables has a lamp competition on at the moment (probably ended by now). I am going to make a lamp from an STL found on Thingiverse. I will convert the STL to a mold using fusion 360. Cast cement in the mold as the basis for the lamp. All other fixtures will be 3D printed in clear PLA. Around the top and bottom of the lamp shade will be 20 neopixel LEDs (10 on the top and 10 on the bottom) these will then be controlled by an ESP-01 hidden in the base of the lamp. So far I have changed the design as the original STL was a bit “out there” so I have reduced the polygons making up the STL to be a little more artistic. The big issue at the moment is getting consistent results when casting the cement. After 3 attempts I got a pretty good result but this can vary and the latest low polygon version has been the worst result so far. I am not sure if it is because of the shape of the new lamp or because I didn’t spend as much time trying to get the air bubbles out of the cement. The lighting around the top and the bottom will use individual neopixels. You can purchase neopixels rings but none are available to me in the same size so I am making my own by hand. This consists of a PLA jig that holds the pixels while I solder single-core electrical wire to the contacts. So far I need to attempt another casting of the cement as the last did not go too well. Also, print all the fixtures I am running out of time to build!

    Instructables has a lamp competition on at the moment (probably ended by now). I am going to make a lamp from an STL found on Thingiverse. I will convert the STL to a mold using fusion 360. Cast cement in the mold as the basis for the lamp.

    All other fixtures will be 3D printed in clear PLA. Around the top and bottom of the lamp shade will be 20 neopixel LEDs (10 on the top and 10 on the bottom) these will then be controlled by an ESP-01 hidden in the base of the lamp.

    So far I have changed the design as the original STL was a bit “out there” so I have reduced the polygons making up the STL to be a little more artistic.

    The big issue at the moment is getting consistent results when casting the cement. After 3 attempts I got a pretty good result but this can vary and the latest low polygon version has been the worst result so far. I am not sure if it is because of the shape of the new lamp or because I didn’t spend as much time trying to get the air bubbles out of the cement.

    The lighting around the top and the bottom will use individual neopixels.


    You can purchase neopixels rings but none are available to me in the same size so I am making my own by hand.


    This consists of a PLA jig that holds the pixels while I solder single-core electrical wire to the contacts.

    So far I need to attempt another casting of the cement as the last did not go too well. Also, print all the fixtures I am running out of time to build!

  • Block bypass - A behind-the-build video will be available soon. In the meantime please enjoy the video below.

    A behind-the-build video will be available soon. In the meantime please enjoy the video below.

  • Remote cat door lock - I will be publishing a build guide through the usual channels soon. For now please enjoy the video above.

    I will be publishing a build guide through the usual channels soon. For now please enjoy the video above.

  • Sensing spider - Halloween is coming and spiders are perfect for creating a good scare. This project can be either 3D printed or made from wood. A great and challenging introduction to Arduino that demonstrates a practical use of multiple inputs and outputs. Using a PIR sensor our target is automatically detected and our spider deployed rapidly for the perfect fright. Check the video links if you get stuck on a step these are timestamped so should go directly to the place you are at. Code examples Here are the code examples shown for each sensor in my build video. Motor code PIR Code Switch code Supplies 1 × PIR sensor HC-SR501 1 × DC motor driver MX1508 1 × DC motor 1 × Arduino Uno 1 × Microswitch KW11-3Z 1 × 9v Battery and snap connector 1 × PLA or ABS for 3D print 6 × Screws 6x3mm self-tapping 2 × Scews 16x2mm 1 x Screw 50x3mm 1 × Cotton spool 1 × Toy spider approx 50-60mm wide or 3D printAdd TipAsk QuestionCommentDownload Step 1: Print STLS STLs can be found here. Print the STL files. The main chassis should not need support but I suggest you set the area around screw holes to 100% infill to prevent the filament splitting. If you are printing on an FDM printer, print the spider upside down. The spool will need support. Step 2: Install Arduino Screw the Arduino UNO into place using 4 6×3 screws. More details in the video here Step 3: Motor Installation Using a small hammer tap the drive boss onto the shaft of the motor. More details on the video here Step 4: Slide the Motor Into the Base of the Chassis. Slide the motor into the base of the chassis. Step 5: Install Microswitch The microswitch is installed into the front of the chassis with the two 2x16mm screws. One screw is fully tightened while the other is tightened just enough to hold the motor in place. More details are in the video here. Step 6: Install Limit Paddle The limit paddle stops the spider from driving too far up. The paddle is held in place by one 3×50 screw which runs across the chassis. The paddle should be able to move freely and without obstruction. When the paddle moves it should activate the microswitch. You should hear an audible click when the paddle is moved upwards. Step 7: Wire Motor Controller. Prepare the motor driver for installation. The motor driver can drive two motors but we only need to use one for this project. Add a length of wire to each of the MOTOR A outputs. These will eventually be connected to our motor. Add a length of wire to the + and – terminals of the board. Then a length of wire to IN1 and IN2. Put a header pin on all but the motor wires to make installation easier later on.  Step 8: Install the Motor Driver Board The motor driver board sits on top of the motor. There is a location for one screw and the rear of the board sits between two uprights. More details can be found here in the video. Step 9: Wire the PIR Sensor The PIR sensor has 3 connections Ground, 5V, and the signal wire. Attach a length of wire to each contact as shown below.  Step 10: Install the PIR Sensor Thread the wires from the PIR sensor through the hole in the base of the chassis next to the battery holder. Place the sensor in the sensor holder with the adjustment screws facing the holes in the sensor holder. Screw the sensor and holder into place. More details are in the video here. Step 11: Thread the Spool Thread your spider web (cotton) through the hole in the chassis and paddle below where the spool will go.  Then thread the cotton through the hole in the spool. You should be able to slide the spool over the drive boss which will keep the cotton in place. Attach your spider to the other end of the thread.  Step 12: Wiring Following the diagram below pay careful attention to the polarity (red and black wires), The colour of the signal wires isn’t important just use what you have laying around. The most important thing is to make sure you have the battery going to VIN, not to 5V otherwise you will cook your Arduino.  Step 13: Upload Sketch Copy and paste the following code into your Arduino IDE, no extra libraries are required. I am not a programmer by trade but this code seems to do the job. See if you can improve it. An interrupt would be a better choice than the do loop I have used for example. Step 14: Testing Once you upload the code the motor will probably try and drive immediately as the PIR is high when it turns on. For testing, I suggest you attach the unit to the roof somewhere to prevent the tangling of the cotton. Check my testing in the video for some tips.  Depending on the length of your thread, the weight of the spider, and the speed of the motor it might take a bit of tweaking to get the spider to drop and return to the full length of the thread. I suggest you check the principle of operation here: to get a goof idea of what is happening.  There are three main variables you can change.  frighdelay This is the time the spider waits between dropping. This value is milliseconds so 10000 is 10 seconds. Increase or decrease to your desire.  PWMvalue If the motor starts spinning at full speed the thread will double up on itself and the spider will drop a very short distance. The value is between 0 and 255. If you find the spider does not always fully unravel LOWERING this value makes the motor start slower. Keep increasing this value until you don’t have the cotton binding on itself. If the speed for the whole journey is too slow the spider will not have enough momentum to trigger the limit switch at the end of the run.  Acceleration This is how fast the Arduino will increase the speed. This is in milliseconds. Tweaking between this value and the PWMvalue you should be able to find the sweet spot for your spider. Notes about your spider Not all spiders are created equal. The weight and size of your spider will greatly affect how the project behaves. If your spider is too heavy it will unravel the web due to its weight. If it is too light it might not activate the limit switch. In my testing, the spider weighed around 6 grams.  Step 15: Install Battery and Scare Away! The 9V battery sits in the front of the unit in the box supplied. Once you have all your spiedy tweaking nailed in attach the unit above a doorway and enjoy the scares!

    Halloween is coming and spiders are perfect for creating a good scare. This project can be either 3D printed or made from wood. A great and challenging introduction to Arduino that demonstrates a practical use of multiple inputs and outputs.

    Using a PIR sensor our target is automatically detected and our spider deployed rapidly for the perfect fright.

    Check the video links if you get stuck on a step these are timestamped so should go directly to the place you are at.

    Code examples

    Here are the code examples shown for each sensor in my build video.

    Motor code

    const int motorFWD = 5; //UNO
    const int motorREV = 6; //UNO
    
    void setup() {
      // put your setup code here, to run once:
      pinMode(motorFWD, OUTPUT);
      pinMode(motorREV, OUTPUT);
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    digitalWrite(motorFWD, 1);
    digitalWrite(motorREV, 1);
    }

    PIR Code

    const int PIRpin = 2;
    const int LEDpin =13;
    int PIRstate = 0;
    
    void setup() {
      pinMode(LEDpin, OUTPUT);
      pinMode(PIRpin, INPUT);
    }
    
    void loop() {
       PIRstate = digitalRead(PIRpin);
    
      if (PIRstate == HIGH ) {
        digitalWrite(LEDpin, HIGH);
        delay(1000);
      }
    digitalWrite(LEDpin, LOW);
    }

    Switch code

    /*
      Button
    
      Turns on and off a light emitting diode(LED) connected to digital pin 13,
      when pressing a pushbutton attached to pin 2.
    
      The circuit:
      - LED attached from pin 13 to ground through 220 ohm resistor
      - pushbutton attached to pin 2 from +5V
      - 10K resistor attached to pin 2 from ground
    
      - Note: on most Arduinos there is already an LED on the board
        attached to pin 13.
    
      created 2005
      by DojoDave <http://www.0j0.org>
      modified 30 Aug 2011
      by Tom Igoe
    
      This example code is in the public domain.
    
      https://www.arduino.cc/en/Tutorial/BuiltInExamples/Button
    */
    
    // constants won't change. They're used here to set pin numbers:
    const int buttonPin = 3;     // the number of the pushbutton pin
    const int ledPin =  13;      // the number of the LED pin
    
    // variables will change:
    int buttonState = 0;         // variable for reading the pushbutton status
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin, OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
    }
    
    void loop() {
      // read the state of the pushbutton value:
      buttonState = digitalRead(buttonPin);
    
      // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
      if (buttonState == HIGH) {
        // turn LED on:
        digitalWrite(ledPin, HIGH);
      } else {
        // turn LED off:
        digitalWrite(ledPin, LOW);
      }
    }

    Supplies

    1 × PIR sensor HC-SR501

    1 × DC motor driver MX1508

    1 × DC motor

    1 × Arduino Uno

    1 × Microswitch KW11-3Z

    1 × 9v Battery and snap connector

    1 × PLA or ABS for 3D print

    6 × Screws 6x3mm self-tapping

    2 × Scews 16x2mm

    1 x Screw 50x3mm

    1 × Cotton spool

    1 × Toy spider approx 50-60mm wide or 3D printAdd TipAsk QuestionCommentDownload

    Step 1: Print STLS

    Print STLS

    STLs can be found here.

    Print the STL files. The main chassis should not need support but I suggest you set the area around screw holes to 100% infill to prevent the filament splitting. If you are printing on an FDM printer, print the spider upside down. The spool will need support.

    Step 2: Install Arduino

    Install Arduino

    Screw the Arduino UNO into place using 4 6×3 screws. More details in the video here

    Step 3: Motor Installation

    Motor Installation

    Using a small hammer tap the drive boss onto the shaft of the motor. More details on the video here

    Step 4: Slide the Motor Into the Base of the Chassis.

    Slide the Motor Into the Base of the Chassis.

    Slide the motor into the base of the chassis.

    Step 5: Install Microswitch

    Install Microswitch

    The microswitch is installed into the front of the chassis with the two 2x16mm screws. One screw is fully tightened while the other is tightened just enough to hold the motor in place. More details are in the video here.

    Step 6: Install Limit Paddle

    Install Limit Paddle

    The limit paddle stops the spider from driving too far up. The paddle is held in place by one 3×50 screw which runs across the chassis. The paddle should be able to move freely and without obstruction. When the paddle moves it should activate the microswitch. You should hear an audible click when the paddle is moved upwards.

    Step 7: Wire Motor Controller.

    Wire Motor Controller.

    Prepare the motor driver for installation. The motor driver can drive two motors but we only need to use one for this project. Add a length of wire to each of the MOTOR A outputs. These will eventually be connected to our motor. Add a length of wire to the + and – terminals of the board. Then a length of wire to IN1 and IN2. Put a header pin on all but the motor wires to make installation easier later on. 

    Step 8: Install the Motor Driver Board

    Install the Motor Driver Board

    The motor driver board sits on top of the motor. There is a location for one screw and the rear of the board sits between two uprights. More details can be found here in the video.

    Step 9: Wire the PIR Sensor

    Wire the PIR Sensor

    The PIR sensor has 3 connections Ground, 5V, and the signal wire. Attach a length of wire to each contact as shown below. 

    Step 10: Install the PIR Sensor

    Install the PIR Sensor
    Install the PIR Sensor

    Thread the wires from the PIR sensor through the hole in the base of the chassis next to the battery holder. Place the sensor in the sensor holder with the adjustment screws facing the holes in the sensor holder. Screw the sensor and holder into place. More details are in the video here.

    Step 11: Thread the Spool

    Thread your spider web (cotton) through the hole in the chassis and paddle below where the spool will go. 

    Then thread the cotton through the hole in the spool. You should be able to slide the spool over the drive boss which will keep the cotton in place.

    Attach your spider to the other end of the thread. 

    Step 12: Wiring

    Following the diagram below pay careful attention to the polarity (red and black wires), The colour of the signal wires isn’t important just use what you have laying around. The most important thing is to make sure you have the battery going to VIN, not to 5V otherwise you will cook your Arduino. 

    Step 13: Upload Sketch

    Copy and paste the following code into your Arduino IDE, no extra libraries are required. I am not a programmer by trade but this code seems to do the job. See if you can improve it. An interrupt would be a better choice than the do loop I have used for example.

    <!-- wp:preformatted -->
    <pre class="wp-block-preformatted">// constants won't change. They're used here to set pin numbers:
    const int PIRpin = 2;
    //const int LEDpin =1;  //digispark
    const int LEDpin =13; //UNO
    const int limitPin = 7;     // the number of the pushbutton pin
    //const int motorFWD = 0; //digispark
    // const int motorREV = 4; //digispark
    
    const int motorFWD = 5; //UNO
    const int motorREV = 6; //UNO
    const int frightDelay = 10000; //delay between actions
    
    const int acceleration = 25; //how fast the motor starts to int acceleration delay in ms 
    
    
    // variables will change:
    int limitState = 1;         // variable for reading the pushbutton status
    int PIRstate = 0;
    int MOTdirection = 1;
    int PWMValue = 200; // starting PWM value
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(LEDpin, OUTPUT);
      pinMode(PIRpin, INPUT);
      pinMode(motorFWD, OUTPUT);
      pinMode(motorREV, OUTPUT);
      pinMode(limitPin, INPUT_PULLUP);
    }
    
    void loop() {
    
    PIRstate = digitalRead(PIRpin);
    
      if (PIRstate == HIGH ) {
        PWMValue=200;
        digitalWrite(LEDpin, HIGH);
        do
        {
          limitState = digitalRead(limitPin); 
          driveMotor();
        } while (limitState != 0); //state is 1 button is not activated
    
          if (MOTdirection ==0){MOTdirection = 1;} else { MOTdirection = 0;}
    
    stopMotor();
    delay(500);
    lockMotor();
    delay(1000);
    stopMotor();
    delay(frightDelay);
    
     }
     digitalWrite(LEDpin, LOW);
    }
    
    void driveMotor(){
    
    if (PWMValue &lt; 255){++PWMValue;}  
    delay(acceleration);
    if (MOTdirection ==1)
    { 
    analogWrite(motorFWD, PWMValue);
    analogWrite(motorREV, 0);
    }
    else
    {
    analogWrite(motorFWD, 0);
    analogWrite(motorREV, PWMValue);
    }
    }
    
    void stopMotor(){
    analogWrite(motorFWD, 0);
    analogWrite(motorREV, 0);
    }
    
    void lockMotor(){
    digitalWrite(motorFWD, 1);
    digitalWrite(motorREV, 1);
    }</pre>
    <!-- /wp:preformatted -->
    
    <!-- wp:paragraph -->
    <p></p>
    <!-- /wp:paragraph -->

    Step 14: Testing

    Once you upload the code the motor will probably try and drive immediately as the PIR is high when it turns on. For testing, I suggest you attach the unit to the roof somewhere to prevent the tangling of the cotton. Check my testing in the video for some tips. 

    Depending on the length of your thread, the weight of the spider, and the speed of the motor it might take a bit of tweaking to get the spider to drop and return to the full length of the thread. I suggest you check the principle of operation here: to get a goof idea of what is happening. 

    There are three main variables you can change. 

    frighdelay

    This is the time the spider waits between dropping. This value is milliseconds so 10000 is 10 seconds. Increase or decrease to your desire. 

    PWMvalue

    If the motor starts spinning at full speed the thread will double up on itself and the spider will drop a very short distance. The value is between 0 and 255. If you find the spider does not always fully unravel LOWERING this value makes the motor start slower. Keep increasing this value until you don’t have the cotton binding on itself. If the speed for the whole journey is too slow the spider will not have enough momentum to trigger the limit switch at the end of the run. 

    Acceleration

    This is how fast the Arduino will increase the speed. This is in milliseconds. Tweaking between this value and the PWMvalue you should be able to find the sweet spot for your spider.

    Notes about your spider

    Not all spiders are created equal. The weight and size of your spider will greatly affect how the project behaves. If your spider is too heavy it will unravel the web due to its weight. If it is too light it might not activate the limit switch. In my testing, the spider weighed around 6 grams. 

    Step 15: Install Battery and Scare Away!

    The 9V battery sits in the front of the unit in the box supplied. Once you have all your spiedy tweaking nailed in attach the unit above a doorway and enjoy the scares!

  • ESP3D config file. - Here is the configuration settings I used for an ESP32CAM Cut and paste this in your configuration.h if you are facing issues.

    Here is the configuration settings I used for an ESP32CAM

    // This file was generated by ESP3D-Configurator V1.0.0-a14 
    /*
      configuration.h - ESP3D configuration file
    
      Copyright (c) 2014 Luc Lebosse. All rights reserved.
    
      This code is free software; you can redistribute it and/or
      modify it under the terms of the GNU Lesser General Public
      License as published by the Free Software Foundation; either
      version 2.1 of the License, or (at your option) any later version.
    
      This code is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      Lesser General Public License for more details.
    
      You should have received a copy of the GNU Lesser General Public
      License along with This code; if not, write to the Free Software
      Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    */
    #ifndef _CONFIGURATION_H
    #define _CONFIGURATION_H
    //Setup station as default, use AP mode first if not done
    //Note: need both defined to enable it
    //Uncomment and edit them to define
    //#define STATION_WIFI_SSID "yourssid"
    //#define STATION_WIFI_PASSWORD "yourssidpassword"
    
    //You can also use a different config file for SSID/password
    //Just save it in same location as this configuration.h
    //This file is ignored by github
    #if defined __has_include
    #  if __has_include ("myconfig.h")
    #    include "myconfig.h"
    #  endif
    #endif
    
    
    /************************************
    *
    * Board description
    *
    * ESP Board  using ESP3D firmware
    *
    ************************************/
    // MCU=ESP32
    // ESP flash size=4MB
    // Form factor=Original (all pins)
    
    /************************************
    *
    * Serial Communications
    *
    * Settings and protocols
    *
    ************************************/
    
    // Serial Communication protocol
    // Basic serial protocol, without data change
    #define COMMUNICATION_PROTOCOL RAW_SERIAL
    
    // Serial port
    #define ESP_SERIAL_OUTPUT USE_SERIAL_0
    
    // Serial buffer size
    // 1024 Bytes
    // Maximum size of the serial buffer
    #define SERIAL_RX_BUFFER_SIZE 1024
    
    /************************************
    *
    * Target firmware
    *
    * Targeted firmware that ESP3D will communicate with
    *
    ************************************/
    // System type=3D printer
    
    // Target firmware
    // Marlin 2.x firmware
    #define DEFAULT_FW MARLIN
    
    /************************************
    *
    * Radio mode of ESP3D
    *
    * The radio mode ESP3D communicate with the network
    *
    ************************************/
    
    // Use WiFi 
    // Enable wifi communications
    #define WIFI_FEATURE 
    
    /************************************
    *
    * Channels of ESP3D
    *
    * The way ESP3D communicate
    *
    ************************************/
    
    // Use webserver
    // Enable http server
    #define HTTP_FEATURE 
    
    // Use telnet server
    // Enable telnet light (raw tcp) communications
    #define TELNET_FEATURE 
    
    // Enable notifications
    // Allows to send notifications to the user
    #define NOTIFICATION_FEATURE 
    
    // Notification message when online
    // The message that will be sent when the ESP is online
    #define NOTIFICATION_ESP_ONLINE "Hi, %ESP_NAME% is now online at %ESP_IP%"
    
    // Notification title message
    // The title of notification
    #define ESP_NOTIFICATION_TITLE "ESP3D Notification"
    
    /************************************
    *
    * Discovery methods of ESP3D
    *
    * The discovery methods of ESP3D
    *
    ************************************/
    
    // Use captive portal 
    // Enable captive portal in AP mode
    #define CAPTIVE_PORTAL_FEATURE 
    
    // Use mDNS discovery
    // This method need `bonjour` protocol on windows, or `avahi` on linux
    #define MDNS_FEATURE 
    
    // Use Simple Service Discovery Protocol
    // It is supported on Windows out of the box
    #define SSDP_FEATURE 
    
    /************************************
    *
    * SSDP Customization settings
    *
    * Customize your ESP3D
    *
    ************************************/
    
    // Model name
    // Modele name of device
    #define ESP_MODEL_NAME "ESP32"
    
    // Model number
    // Modele number of device
    #define ESP_MODEL_NUMBER "ESP3D 3.0"
    
    // Model url
    // Modele url of device
    #define ESP_MODEL_URL "https://www.espressif.com/en/products/devkits"
    
    // Manufacturer name
    // Manufacturer name of device
    #define ESP_MANUFACTURER_NAME "Espressif Systems"
    
    // Manufacturer url
    // Manufacturer url of device
    #define ESP_MANUFACTURER_URL "https://www.espressif.com"
    
    /************************************
    *
    * Flash filesystem
    *
    * Filesystem on flash
    *
    ************************************/
    
    // File system type
    // LittleFS
    // Type of file system used by ESP3D to store files
    #define FILESYSTEM_FEATURE ESP_LITTLEFS_FILESYSTEM
    
    // Enable date/time on files
    // Set date/time on files using SNTP or last webui connection
    #define FILESYSTEM_TIMESTAMP_FEATURE 
    
    /************************************
    *
    * SD filesystem
    *
    * Filesystem on SD card
    *
    ************************************/
    
    // SD card connection
    // Only your ESP board is connected to SDCard
    // Does your system has SD card and how it is connected to your ESP3D
    #define SD_DEVICE_CONNECTION ESP_DIRECT_SD
    
    // SD card library
    // Used by SDMMC
    #define SD_DEVICE ESP_SDIO
    
    // Sdio bit mode
    // 4 bits
    #define SDIO_BIT_MODE SD_FOUR_BIT_MODE
    
    // Enable date/time on files
    // Set date/time on files using SNTP or last webui connection
    #define SD_TIMESTAMP_FEATURE 
    
    /************************************
    *
    * Update ESP3D
    *
    * Update ESP3D firmware
    *
    ************************************/
    
    // Enable Web Update
    // Update firmware using WebUI
    #define WEB_UPDATE_FEATURE 
    
    // Enable SD card Update
    // Update firmware and settings using file on SDCard
    #define SD_UPDATE_FEATURE 
    
    /************************************
    *
    * Display settings
    *
    * Rendering screens
    *
    ************************************/
    
    // Printer screen
    // Your printer has a display
    #define PRINTER_HAS_DISPLAY 
    
    /************************************
    *
    * Camera settings
    *
    * Connected camera
    *
    ************************************/
    
    // Camera type
    // AI Thinker (ESP32-Cam)
    // Camera connected to ESP board, only ones with PSRAM are supported
    #define CAMERA_DEVICE CAMERA_MODEL_AI_THINKER
    
    // Flip horizontally
    // Flip camera horizontally
    //#define CAMERA_DEVICE_FLIP_HORIZONTALY 
    
    /************************************
    *
    * Levels of security
    *
    * How commands are allowed to be sent to ESP3D
    *
    ************************************/
    
    // Enable serial commands
    // Allow commands to be sent to ESP3D via serial port
    #define SERIAL_COMMAND_FEATURE 
    
    /************************************
    *
    * Additional features
    *
    * Extra settings
    *
    ************************************/
    
    // Enable direct control pin
    // Controls pins using [ESP201]
    #define DIRECT_PIN_FEATURE 
    
    /************************************
    *
    * Default settings for ESP3D
    *
    * Do not edit them
    *
    ************************************/
    
    // Gcode Host Feature
    // This feature allows to process Gcode files like macros.
    #define GCODE_HOST_FEATURE 
    
    // Settings location
    // EEPROM
    // Location where ESP3D will save settings
    #define ESP_SAVE_SETTINGS SETTINGS_IN_EEPROM
    
    // Add serial task
    // ESP32 need to add a task to handle serial communication
    #define SERIAL_INDEPENDANT_TASK 
    
    
    
    /************************************
    *
    * Development setting 
    * Do not modify them for production 
    ************************************/
    
    //Enable debug mode
    //Do not do this when connected to printer !!!
    //be noted all upload may failed if enabled
    //DEBUG_OUTPUT_SERIAL0
    //DEBUG_OUTPUT_SERIAL1
    //DEBUG_OUTPUT_SERIAL2
    //DEBUG_OUTPUT_TELNET
    //DEBUG_OUTPUT_WEBSOCKET
    //#define ESP_DEBUG_FEATURE DEBUG_OUTPUT_SERIAL0
    
    #ifdef ESP_DEBUG_FEATURE
    #define DEBUG_BAUDRATE 115200
    #define DEBUG_ESP3D_OUTPUT_PORT  8000
    #endif //ESP_DEBUG_FEATURE
    
    //Enable benchmark report in dev console
    //#define ESP_BENCHMARK_FEATURE
    
    //Disable sanity check at compilation
    //#define ESP_NO_SANITY_CHECK
    
    
    /************************************
    *
    * Sanity checks 
    * Do not modify 
    ************************************/
    
    #if defined (SD_TIMESTAMP_FEATURE) || defined (FILESYSTEM_TIMESTAMP_FEATURE)
        #define TIMESTAMP_FEATURE
    #endif //SD_TIMESTAMP_FEATURE || FILESYSTEM_TIMESTAMP_FEATURE 
    
    #if defined(PRINTER_HAS_DISPLAY)
    #define HAS_SERIAL_DISPLAY ""
    #endif // PRINTER_HAS_DISPLAY
    
    #if defined(CAMERA_DEVICE)
    #if CAMERA_DEVICE==CAMERA_MODEL_ESP32_CAM_BOARD || CAMERA_DEVICE==CAMERA_MODEL_ESP32S2_CAM_BOARD
    #define USE_BOARD_HEARDER 1
    #endif // CAMERA_DEVICE==CAMERA_MODEL_ESP32_CAM_BOARD || CAMERA_DEVICE==CAMERA_MODEL_ESP32S2_CAM_BOARD
    #endif // CAMERA_DEVICE
    
    #if !defined(WIFI_FEATURE) && !defined(ETH_FEATURE)
    #undef HTTP_FEATURE
    #undef TELNET_FEATURE
    #undef WEBDAV_FEATURE
    #undef FTP_FEATURE
    #undef WEB_UPDATE_FEATURE
    #undef CAPTIVE_PORTAL_FEATURE
    #undef SSDP_FEATURE
    #undef MDNS_FEATURE
    #undef NOTIFICATION_FEATURE
    #endif
    
    #endif //_CONFIGURATION_H

    Cut and paste this in your configuration.h if you are facing issues.