tag:blogger.com,1999:blog-43398135310329791962024-03-02T17:29:58.354+00:00HydraRaptorMy attempts to make a rapid prototyping machine that I will use to make parts for a machine that will be able to make parts for a copy of itself.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.comBlogger318125tag:blogger.com,1999:blog-4339813531032979196.post-28136013749514440432023-12-01T21:20:00.006+00:002023-12-04T11:39:09.276+00:00Pulled a blinder and then curtains.<p>We have a roller blind behind plantation shutters in our bedroom to block out the light. To get a better light seal I mounted it back to front, close to the frame of the shutters. That means the ball chain chord that raises and lowers it is a bit awkward to use as it partly behind the blind.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFUIVXVl1e5CB0KrA4piPK4APU2r2eTenNNxBJC1OK1uWs_ces4VEEFJlYaChJNw-5HNP6q7Z2wuusxzA2nKVhMzMzWv3sv1C2q6SI3l-1qoSMRuwwSt1wewC9EAlVb80tRdddBvwftu9-IB36WfOPKnppomXZqr8kQ7jTJfSiBcliRZyH0VK2xZd07Vf1/s3425/IMG_20231006_091004951.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3425" data-original-width="2415" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFUIVXVl1e5CB0KrA4piPK4APU2r2eTenNNxBJC1OK1uWs_ces4VEEFJlYaChJNw-5HNP6q7Z2wuusxzA2nKVhMzMzWv3sv1C2q6SI3l-1qoSMRuwwSt1wewC9EAlVb80tRdddBvwftu9-IB36WfOPKnppomXZqr8kQ7jTJfSiBcliRZyH0VK2xZd07Vf1/w453-h640/IMG_20231006_091004951.jpg" width="453" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Some blinds are geared, so that the pulling force required is less, but ours isn't. It is six foot long and I also added some steel balls to the tube that runs along the bottom to make it hang straighter. Therefore it needs quite a strong pull to raise it, so I always had a plan in the back of my mind to automate it and in August I finally started working on a design.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I have a random collection of gearmotors, so I pulled out one that seemed about the right speed and torque and printed a pulley to mesh with the ball chain and fit the shaft.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh7Zcwv8-za6VzLtTA4nvmyS_05F0SDKg7O201vEIsttlVrZPLAtXwXtLXQaHpe5eavfijGGCsnvJgRUZGLJ1t18pLPY3ng8JzA_2MkSElTOLnba_UVVTKoKum1y9z6f5ClwYYqNyPZ5sLzgEnO_mknc_HZS7oFkt1rW_U3rjAYVzpFCD0RPMPE6lnG63ki" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="223" data-original-width="387" height="368" src="https://blogger.googleusercontent.com/img/a/AVvXsEh7Zcwv8-za6VzLtTA4nvmyS_05F0SDKg7O201vEIsttlVrZPLAtXwXtLXQaHpe5eavfijGGCsnvJgRUZGLJ1t18pLPY3ng8JzA_2MkSElTOLnba_UVVTKoKum1y9z6f5ClwYYqNyPZ5sLzgEnO_mknc_HZS7oFkt1rW_U3rjAYVzpFCD0RPMPE6lnG63ki=w640-h368" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhqr_2RI_T_rYPIxIw2weuFjgMW10DaYVP5yAT7hFRv7BCsE3zDlrSzPvTuU5RmYgvuKEhmsgtOyhuPAIQyHHGZUvfKC78oejgFLx7LwaYQlRMw6BBBdnCrwBU3vewieM8ABJQt1rzT8F2QvBOqafzKZWmSnU_uO8nvyTsULx2UjO9LhkEIeVscLBUj_Ja-" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="897" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEhqr_2RI_T_rYPIxIw2weuFjgMW10DaYVP5yAT7hFRv7BCsE3zDlrSzPvTuU5RmYgvuKEhmsgtOyhuPAIQyHHGZUvfKC78oejgFLx7LwaYQlRMw6BBBdnCrwBU3vewieM8ABJQt1rzT8F2QvBOqafzKZWmSnU_uO8nvyTsULx2UjO9LhkEIeVscLBUj_Ja-" width="274" /></a></div><br /><div style="text-align: left;">Short Heatfit inserts that I bought from Stefan at <a href="https://cnckitchen.store/">CNC Kitchen</a> are great for printed gears and pulleys.</div><div style="text-align: left;"><br /></div></div>A quick test with a battery showed it easily had enough torque to raise the blind, taking only about 200mA at 12V, but the ball chain likes to jump out of the pulley. It would need an impractical amount of tension on the chain to keep it in, pretty obvious really given the shape of the pulley teeth.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">My solution was to trap the chain between two such pulleys and use the second to drive a threaded shaft with a nut that slides along it and triggers limit switches. The up limit switch is adjustable on a slide mount to fine tune the opened stopping position. The down switch is fixed but I can adjust the idler pulley on the shaft to adjust that limit first.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">My original plan was to use 6mm studding in 6mm bearings but I found that it was a very loose fit, so I use 8mm studding and turned shoulders on each end to fit the bearings with my CNC lathe. I used a collet in the spindle nose to avoid marring the thread.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh12xNIQ5bWGG69wsec4tvRsm3SR19gZR2TuRQj25ym8JGaHdy5ufOxYdxuWiW-X2O9U-GiOJjy64L9KYlLDxjdkxtCf_EsEynsIMVilsOEm6HOQHGxmyoDM0e51Ky09o5JFgGkUgL_hcjFfrZeyYDIWocI8wElTx2UlsbsZ9yUbSneOs0HDsHXIIrCfSr-/s1024/rod_assembly.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="642" data-original-width="1024" height="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh12xNIQ5bWGG69wsec4tvRsm3SR19gZR2TuRQj25ym8JGaHdy5ufOxYdxuWiW-X2O9U-GiOJjy64L9KYlLDxjdkxtCf_EsEynsIMVilsOEm6HOQHGxmyoDM0e51Ky09o5JFgGkUgL_hcjFfrZeyYDIWocI8wElTx2UlsbsZ9yUbSneOs0HDsHXIIrCfSr-/w640-h402/rod_assembly.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgSYpluPaBOCRvWy71DHQkAqQ5wpPBM2fiKBhRfbe4mRBZws8Z6Lpoe7Zig7iWdN3UulRkiMxmeo7FJts9syWS3RF7DTWfiuYSQi8rUQ2j72JnbP-fGfloPYpXJR-htWtAaR9ma7GwVwqhI-8gwzA52xktCu-rXR0ooG9flTdqoiJnIpwLahLxbRxCz5lT3" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="853" height="462" src="https://blogger.googleusercontent.com/img/a/AVvXsEgSYpluPaBOCRvWy71DHQkAqQ5wpPBM2fiKBhRfbe4mRBZws8Z6Lpoe7Zig7iWdN3UulRkiMxmeo7FJts9syWS3RF7DTWfiuYSQi8rUQ2j72JnbP-fGfloPYpXJR-htWtAaR9ma7GwVwqhI-8gwzA52xktCu-rXR0ooG9flTdqoiJnIpwLahLxbRxCz5lT3=w640-h462" width="640" /></a></div><br /><br /></div>I tested this with a two way / two pole toggle switch to set the motor direction and the limit switches wired in series with diodes to bypass them, so that the motor can only back away from either switch once triggered. I mounted it to the wall with a printed bracket and was able to test the mechanism worked mechanically and seemed reliable.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhuJ1vmu-qEMO9K4zNUjQAcXF6e-UMTf8if8MoOpqV-XclM8SeVK74VzLmQhTcQ5GvwYVNkas3CX40x7132XYnLY9KTqlGcyiVMCoy6Sx5TpdpMTJV-S_hEPp0wTqEDb2pwA8I1qQKaE1NuNphh25MzUUHKAQ-SSCP6hvihRMGD-hHagVX9PVbb_S1KE047" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="649" height="607" src="https://blogger.googleusercontent.com/img/a/AVvXsEhuJ1vmu-qEMO9K4zNUjQAcXF6e-UMTf8if8MoOpqV-XclM8SeVK74VzLmQhTcQ5GvwYVNkas3CX40x7132XYnLY9KTqlGcyiVMCoy6Sx5TpdpMTJV-S_hEPp0wTqEDb2pwA8I1qQKaE1NuNphh25MzUUHKAQ-SSCP6hvihRMGD-hHagVX9PVbb_S1KE047=w640-h607" width="640" /></a></div><br /><div style="text-align: left;">For the electronics I decided to use an ESP8266 module running Tasmota firmware and control it from my Home Assistant server that runs on a Raspberry Pi MK4. In Home Assistant the blind just looks like two switches, open and close. I set up automations to open it at 8 AM and close it at sunset. Tasmota is configured with two interlocked relay outputs with timeouts and two buttons for manual operation. </div><div style="text-align: left;"><br /></div><div style="text-align: left;">To drive the motor I had an L6203 full bridge driver chip lying around from RepRap days but I can't even remember where it came from. It's rated to 3A, so overkill in this application but I haven't had any use for it in about 14 years, so I thought I might as well use it up. The only problem was its package is a Multiwatt11 that doesn't have its pins on a 0.1" grid. I found I could fit it on a perfboard at 45° but it was looking like the electronics were going to be embarrassingly large compared to the mechanism. </div><div style="text-align: left;"><br /></div></div></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgU6qydpV25dg00077-E1S9wPQEbZqxWbGNOJxSb2ljoc0BZUaCo14Cduuta3BFZ_ZT2s01InyRRQrEVleVO-dlVPB2HH7o40AKjICvoeu3UdodthKKsFj6I03PydhpHfJP0x2fYMf4ngHNHft-5YIhQS4JLBmW56A6yx-eVxh4lKNZz_3d9DLn3PQorzc5" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="115" data-original-width="147" height="240" src="https://blogger.googleusercontent.com/img/a/AVvXsEgU6qydpV25dg00077-E1S9wPQEbZqxWbGNOJxSb2ljoc0BZUaCo14Cduuta3BFZ_ZT2s01InyRRQrEVleVO-dlVPB2HH7o40AKjICvoeu3UdodthKKsFj6I03PydhpHfJP0x2fYMf4ngHNHft-5YIhQS4JLBmW56A6yx-eVxh4lKNZz_3d9DLn3PQorzc5" width="307" /></a></div>Around the time I was thinking about this a member of the marketing department of <a href="https://www.pcbway.com/">PCBWay</a> coincidentally left a message on my blog offering free PCBs in return for a review, so I decided to take them up on their offer and use a PCB to make the electronics much smaller than I could make it on perfboard.<div><br /></div><div>It is about 10 years since I last designed a PCB. For one off projects I normally just scribble a schematic on paper and then use perfboard, or for mains projects I use Veroboard and remove all the unused tracks to get enough creepage clearance. It is a lot quicker than designing a PCB with CAD and getting it manufactured and shipped but most of that is waiting time. So PCBs are worth while for more complex projects or ones like this where I might need more than one.<br /><br />I downloaded the latest version of KiCad, which was more than 1GB! It must have changed a lot since I last used it but seemed fairly easy to use.</div><div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgd2Kafg9izgxeMpdlZ80YfaCaikpMGRvUTkGOhh78oRiSF-sE1W7NUIrHiSLtIcehtUz82Mqk98IN0-QU40GRsHnRYi5vhIxeq5JPybvBFKK0QjBU0KZvn_6U0iV2xbDPrLJ-A3P0Dg92B3jyBB9yFZGT0JMjJHs0WwNH0bYRf7ABcSm0iX5IfC3YHykTr" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="677" data-original-width="1078" src="https://blogger.googleusercontent.com/img/a/AVvXsEgd2Kafg9izgxeMpdlZ80YfaCaikpMGRvUTkGOhh78oRiSF-sE1W7NUIrHiSLtIcehtUz82Mqk98IN0-QU40GRsHnRYi5vhIxeq5JPybvBFKK0QjBU0KZvn_6U0iV2xbDPrLJ-A3P0Dg92B3jyBB9yFZGT0JMjJHs0WwNH0bYRf7ABcSm0iX5IfC3YHykTr=s16000" /></a></div><br />It is powered by a separate 12V power supply, so the cable to the window is just figure of 8 flex and it actually fitted through a gap under the shutter's frame. A tiny buck regulator from AliExpress provides 3.3V for the ESP-12F module. </div><div><br /></div><div>The limit switches cut the inputs to the H-bridge, so it doesn't rely on the firmware to not crash the blind. In fact, the Tasmota firmware just turns the outputs on for a fixed time that is just a bit longer than it takes to open the blind, about 30 seconds.<br /><p>I thought it would be a good idea for the state of the blind to be discoverable remotely, so I used the normally open contact of the limit switches to pull two spare ports low. This was a mistake however because the GPIO2 port is connected to the blue LED on the ESP12-F module and is defined as an output, at least during start up. As these connections actually allow the firmware to crash the blind I decided to not connect them and two pin connectors could be used.</p><p>The buttons allow manual control of the blind. Pressing once starts the blind moving in the specified direction and pressing again stops it, so you can manually position the blind anywhere on its travel.</p><p>The programming connector is only needed once to load the Tasmota firmware because it can be updated over the air after that. So I don't solder it to the board and in fact there isn't room for it in the case.</p><p>The PCB design is an odd mix of through hole and surface mount because those are the parts that I had to hand. </p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiVgJt4P0VgeTN3RyKkHSd3yObO_kZLPFO7fKfd9irHLa22CqWkdHjeKSwdcZPma5rVSUycdbMzOFb4FjAJyKtHj6wEHCXeoEFxXbLpSVHr0zejw4Vq4MH2kV_PtsesryxQ6bBUuoaT0n33D93ICZwjbcL2D3rWncefxKyyh9FnC3kXO99yA_xlLk5mXpP2" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="644" data-original-width="680" height="607" src="https://blogger.googleusercontent.com/img/a/AVvXsEiVgJt4P0VgeTN3RyKkHSd3yObO_kZLPFO7fKfd9irHLa22CqWkdHjeKSwdcZPma5rVSUycdbMzOFb4FjAJyKtHj6wEHCXeoEFxXbLpSVHr0zejw4Vq4MH2kV_PtsesryxQ6bBUuoaT0n33D93ICZwjbcL2D3rWncefxKyyh9FnC3kXO99yA_xlLk5mXpP2=w640-h607" width="640" /></a></div><p>Because I wasn't paying for it I used four layers to simplify the routing. The inner layers are ground and 12V.</p><p>I also went for a routed outline because space was so limited that I needed a cut-out in the corner to miss the limit switch. I also only had space for one screw hole, so I printed rails in the case to hold the left side and the front right corner, so rounded corners make it easier to slide into place.</p><p>This is how tight the packaging got:</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjP0mvdFleUOE40F9vzNcR13Ull2FiTLnJ2YhG-dPL2ZNS5CHbZqBKDhffqemIgZKWdvvMGIr9mW2jv0lolh9SpEtK_SC--F8lUmrqlPgdtmdtVD-8aNmN75kQhqK7MePcnkuIz7e6Pgewht8JcuA5XXeQwUnTH2lgNMCvRa13-iWArMBUi-XfnDndLhE6d" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="762" height="517" src="https://blogger.googleusercontent.com/img/a/AVvXsEjP0mvdFleUOE40F9vzNcR13Ull2FiTLnJ2YhG-dPL2ZNS5CHbZqBKDhffqemIgZKWdvvMGIr9mW2jv0lolh9SpEtK_SC--F8lUmrqlPgdtmdtVD-8aNmN75kQhqK7MePcnkuIz7e6Pgewht8JcuA5XXeQwUnTH2lgNMCvRa13-iWArMBUi-XfnDndLhE6d=w640-h517" width="640" /></a></div><br />I modelled the board in OpenSCAD because the 3D model from KiCad didn't have the switch positions at the correct height from the board. I could only import it as an STL file whereas with an OpenSCAD model I can query the hole and component positions.<p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg3a1S131Mc1xPCNLoidxROqRuYvVz07gwE4Xt9Qc6LLT4TG04M50ZTqlb1NcLszwfnPZF3GraqOjWCjVUw_hKam7SrosYIFzqIuqO8ujcsYauLp1UmkMsWiPoYaUHY2h2OBuMewInJ32tazCJn8O05YPujZNk27nqDtXdirfwhCY-SefDh8WLOV1F51LrJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="650" data-original-width="768" height="541" src="https://blogger.googleusercontent.com/img/a/AVvXsEg3a1S131Mc1xPCNLoidxROqRuYvVz07gwE4Xt9Qc6LLT4TG04M50ZTqlb1NcLszwfnPZF3GraqOjWCjVUw_hKam7SrosYIFzqIuqO8ujcsYauLp1UmkMsWiPoYaUHY2h2OBuMewInJ32tazCJn8O05YPujZNk27nqDtXdirfwhCY-SefDh8WLOV1F51LrJ=w640-h541" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjXEO71t-hP5eZAshYkDZ6iTIYUbT8eJijI1obrwuCV1Mc5D3449Q9MraIYIBWqLLgcOTsCU6imI5jMcmLxkZtV4ACREPEq_DVXlvP1Q_2WCZik5AgWWkxdLkf31aMuUZzGaTWobUHc__4Z8DgdkDojuAHtg2D0-1FEf4S396f_sLmM9KdD22be8CmC8A8k" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="853" height="462" src="https://blogger.googleusercontent.com/img/a/AVvXsEjXEO71t-hP5eZAshYkDZ6iTIYUbT8eJijI1obrwuCV1Mc5D3449Q9MraIYIBWqLLgcOTsCU6imI5jMcmLxkZtV4ACREPEq_DVXlvP1Q_2WCZik5AgWWkxdLkf31aMuUZzGaTWobUHc__4Z8DgdkDojuAHtg2D0-1FEf4S396f_sLmM9KdD22be8CmC8A8k=w640-h462" width="640" /></a></div><br />I extracted the component placement data from the footprint positions file that KiCad produced using a python script. This needs a lot more work to make it general though because through hole PCB footprints have the origin on pin one, whereas NopSCADlib has the origin in the centre.<p></p><p>I did all this modelling and the case design while the boards were being manufactured by <a href="https://www.pcbway.com/">PCBWay</a>. </p>I uploaded the design to <a href="https://www.pcbway.com/">PCBWay</a> on the 12th of September and impressively they were dispatched on the 15th. The quoted build time was 4-5 days. I really liked the way the website shows you which stage they are at in the process as they progress. Four layers involve extra steps. </div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgTp5PFwMS2Z385SB0wsvFrjpT3pYn7JnoYLvSYzyaoOF0Dc6S6odKiZXoxSH3rgXsS6BGMEFtsTBKXkLiVSBmZMu2NI6NA2WRhuhPrn1Av8-iIfnyu3cuv3Okxcu2VPPVjDDziHxcpUGOYozp3G5eflYsNzZxihPnIChna1OHnvMzCU5fdoPgv9yChJlo5" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="622" data-original-width="628" height="635" src="https://blogger.googleusercontent.com/img/a/AVvXsEgTp5PFwMS2Z385SB0wsvFrjpT3pYn7JnoYLvSYzyaoOF0Dc6S6odKiZXoxSH3rgXsS6BGMEFtsTBKXkLiVSBmZMu2NI6NA2WRhuhPrn1Av8-iIfnyu3cuv3Okxcu2VPPVjDDziHxcpUGOYozp3G5eflYsNzZxihPnIChna1OHnvMzCU5fdoPgv9yChJlo5=w640-h635" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEg9hnkkXXNhNoGCERXR1-iJPkmbJIT3PVqzyNH0JoSQwP_kqso3iNg314y3a42LZBTAj1wNAcOS86njVzf0OwXH7xggBukZSXXoDENIunWZlcXl_v1EVrJ56tESKaTxa0SK0I-iko4mrCOUc5NXSLa8c6lf0OMfzSx1m1QLgPM3bJREjSwcDV3pkVE1qVDi" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="223" data-original-width="623" height="230" src="https://blogger.googleusercontent.com/img/a/AVvXsEg9hnkkXXNhNoGCERXR1-iJPkmbJIT3PVqzyNH0JoSQwP_kqso3iNg314y3a42LZBTAj1wNAcOS86njVzf0OwXH7xggBukZSXXoDENIunWZlcXl_v1EVrJ56tESKaTxa0SK0I-iko4mrCOUc5NXSLa8c6lf0OMfzSx1m1QLgPM3bJREjSwcDV3pkVE1qVDi=w640-h230" width="640" /></a></div></div></div><div class="separator" style="clear: both; text-align: left;">Clicking on the "View Details" links shows videos explaining each process step.</div><div><div class="separator" style="clear: both; text-align: center;"><br /></div></div><div>I also ordered a solder paste stencil for the surface mount parts and this was made as the last step. I expected it to be made in parallel but it didn't add much to the time as it seems to a be fast process.</div><div class="separator" style="clear: both; text-align: center;"><span style="text-align: left;"><br /></span></div>The package was picked up in Shenzhen by FedEx on the 16th and delivered in the UK on the 20th, so only 8 days from order to delivery. The minimum order was five PCBs but I actually received six. I think probably they make an extra one in case one fails the quality checks but if they all pass they send you it. I vaguely remember that used to happen sometimes when we ordered prototype PCBs at work.<div><br /></div><div>The PCBs are great quality. All the features are well aligned and the outline was very accurate as it fitted my 3D printed case perfectly. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVDI9sZW-FmHtrikfh8wPlkAla-chD8TdREJXBrwdBD0k5p1wcD8tyGtt3HSWjdCYIsr2VNv_xJnJpQyBRYkFiXeFLMiz7jAOYnmbnQiWm2og61Zb9cPjb22hZRkypKiZfTLASjwQgemPnOPQMxfEByu-KEcEPUF7HVRhLVb_-2AdFWygbN47YHE9US6b6/s1871/IMG_20231003_182901311.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1871" data-original-width="1845" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVDI9sZW-FmHtrikfh8wPlkAla-chD8TdREJXBrwdBD0k5p1wcD8tyGtt3HSWjdCYIsr2VNv_xJnJpQyBRYkFiXeFLMiz7jAOYnmbnQiWm2og61Zb9cPjb22hZRkypKiZfTLASjwQgemPnOPQMxfEByu-KEcEPUF7HVRhLVb_-2AdFWygbN47YHE9US6b6/w632-h640/IMG_20231003_182901311.jpg" width="632" /></a></div><div><br /></div><div>The solder stencil worked well. I forgot that the apertures might need to be smaller than the pads, depending on the stencil thickness, to get the correct amount of solder paste. I just used the default file exported from KiCad and it seemed to give the correct amount of solder.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFYV5P3TvcwR9n2NXwZRPb15-LCypHX6LuL8FkwnwD8nNbjJT2uz7Zl0D9HOWGqVV8yDy95BWejCXn4FVsiAw9BFE6koCgaorQI9HM1-wjZOV7uWrBq7mBxiOvt8GRC-BnANdkhT0GOGMoxKQN0pqsW7RvHQoeEma2dNIIhjEO3NtS7iuPnmiQ0ii1bp_9/s2094/IMG_20231013_201907737.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1814" data-original-width="2094" height="554" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFYV5P3TvcwR9n2NXwZRPb15-LCypHX6LuL8FkwnwD8nNbjJT2uz7Zl0D9HOWGqVV8yDy95BWejCXn4FVsiAw9BFE6koCgaorQI9HM1-wjZOV7uWrBq7mBxiOvt8GRC-BnANdkhT0GOGMoxKQN0pqsW7RvHQoeEma2dNIIhjEO3NtS7iuPnmiQ0ii1bp_9/w640-h554/IMG_20231013_201907737.jpg" width="640" /></a></div><div><br /></div><div>Here it is populated:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJUZjX2FAksGuWw-FFKx_B11vgxiKXKVE6s0Gr3VMM_05Wrm91CPAS2sPa7tmX050OMgo6kdRJiOb9lZH3RqpjaHU8u8PiThvyxR0z5G3jw3yH7eSMCljCdO21XeYNdTCUAViKtIgtsTTxEAekv5RhviqgjcJU4r-9DwnaK63fhkf9vlwddGpY5glLzvQ8/s1081/IMG_20231013_191000024.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1081" data-original-width="1037" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJUZjX2FAksGuWw-FFKx_B11vgxiKXKVE6s0Gr3VMM_05Wrm91CPAS2sPa7tmX050OMgo6kdRJiOb9lZH3RqpjaHU8u8PiThvyxR0z5G3jw3yH7eSMCljCdO21XeYNdTCUAViKtIgtsTTxEAekv5RhviqgjcJU4r-9DwnaK63fhkf9vlwddGpY5glLzvQ8/w614-h640/IMG_20231013_191000024.jpg" width="614" /></a></div><br /><div>I chose a white solder mask to match the white PLA I used to print the case in case any of it was visible but that wasn't really necessary, green would have been fine.</div><div><br /></div><div>I used a T-962 reflow oven to solder the surface mount components. It was the first time I had used it since buying it from Elektor a year ago, so I had to apply the upgrades detailed here:</div><div> <div class="separator" style="clear: both; text-align: center;"><iframe allowfullscreen="" class="BLOG_video_class" height="266" src="https://www.youtube.com/embed/bgVey2O3W2k" width="320" youtube-src-id="bgVey2O3W2k"></iframe></div><br />This was replacing the masking tape with Kapton tape, adding a cold junction sensor for the thermocouples and replacing the firmware with an open source version.</div><div><br /></div><div>I used leaded Chip Quik solder paste on the default oven profile for leaded solder and it worked great without any calibration. I mainly use leaded solder at home because it gives better results. In this case it has the advantage of not reflowing the internal parts of the ESP-12F module, which I assume uses lead free solder.</div><div><br />Here is the finished unit installed. I used white PLA, so hopefully it wont melt in the summer sun.<p></p></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzHcxfh85w1m6na7xXoJSY3hZ8KousRRt8cr3fJdbpkPLyGFYmrkjZGhKuQDWaXRso39pXqNcuZwpw8fqJagzRBPU-sv-TAwX9tOcjU5gbKo2WoR-ReBkqc0u-tSOXaE3zM5kujngl-0_kP6xk7u2_m8JFhTz25w2ImMrtVP888PYO7eAj2m0nYSs_SgL3/s3858/IMG_20231006_090943499.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3858" data-original-width="2592" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzHcxfh85w1m6na7xXoJSY3hZ8KousRRt8cr3fJdbpkPLyGFYmrkjZGhKuQDWaXRso39pXqNcuZwpw8fqJagzRBPU-sv-TAwX9tOcjU5gbKo2WoR-ReBkqc0u-tSOXaE3zM5kujngl-0_kP6xk7u2_m8JFhTz25w2ImMrtVP888PYO7eAj2m0nYSs_SgL3/w430-h640/IMG_20231006_090943499.jpg" width="430" /></a></div><div><br /></div><div>Flushed with success of this project, my wife wanted me to automate some curtains to keep the house warmer in winter. It was a race against time to get it working before our last holiday.</div><div><br /></div><div>The gearmotor I used (Nidec GMAG 404 327) was nice because the motor has a transorb mounted on the armature to stop the back EMF from the coils causing sparks, which generate wide band RF interference. I looked it up and found out it now costs £162.36 from RS components, so I looked for a cheaper alternative for the curtains.</div><div><br /></div><div>I found this DF-ROBOT FIT0492-A from PiHut for £11.40:</div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiRz9dyjkeLofyTbfzeOo6cv2IMt-I0KlUaIdieCYuvbRVlw26uVWtB9qchycN19yCz_1M1pkV97mn7gQ4T3QTAXPZtYONczSmTiuwQk0B-VXvlLBsz4prM-TU0pHX6XnsuBsPj8mQ6S9nY3mgiLwxGMwrKguaXKMmkJLkdwBepwsf48JhIWDq3ivQPD0fn" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="280" data-original-width="811" height="220" src="https://blogger.googleusercontent.com/img/a/AVvXsEiRz9dyjkeLofyTbfzeOo6cv2IMt-I0KlUaIdieCYuvbRVlw26uVWtB9qchycN19yCz_1M1pkV97mn7gQ4T3QTAXPZtYONczSmTiuwQk0B-VXvlLBsz4prM-TU0pHX6XnsuBsPj8mQ6S9nY3mgiLwxGMwrKguaXKMmkJLkdwBepwsf48JhIWDq3ivQPD0fn=w640-h220" width="640" /></a></div>It was a challenge to make a gear_motor class in NopSCADlib that can draw both but I manged to do it, with a lot of parameters.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhYc7nnOn2E04hKYpQuWdT2bIr7C7WfCk2UttJh2DlmpYhji15TuG46QX10U-e-g_aSOkX7OG_vGjehtKfTbzXhBiI83RG4UkAavr9gKoV_7P1eVra7JdMSxcrNWv7oTopyyZi2ehaTaJ0WtC1rbsjbZtfp6m5uMYDCd9aVHzqjQNyRzI3aiuexreTDPujE" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="620" data-original-width="481" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEhYc7nnOn2E04hKYpQuWdT2bIr7C7WfCk2UttJh2DlmpYhji15TuG46QX10U-e-g_aSOkX7OG_vGjehtKfTbzXhBiI83RG4UkAavr9gKoV_7P1eVra7JdMSxcrNWv7oTopyyZi2ehaTaJ0WtC1rbsjbZtfp6m5uMYDCd9aVHzqjQNyRzI3aiuexreTDPujE=w496-h640" width="496" /></a></div><br />So it is possible to make the blind controller with the cheaper motor, although making the design handle both motors was also tricky because the clash avoiding constraints are different for each motor because their shapes are so different.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhKpkzmvozxbKOISoPR8f9UmZpYUbFNnqtDWKorP8hxtePicl_xwqpc5mwB9TyvcWWgWupWjaMnXfeNjSVHyh0Rsyt7f7gWX6Qb2CyvnJXG6xE3zF3dc_LgvA8LAjRKfhhaAjY-OSRwm9Ih36Z2RCyiYISpMxLAY3UfR4EX9nPMA_mdLXBWqLxJza4iPkDR" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="762" height="517" src="https://blogger.googleusercontent.com/img/a/AVvXsEhKpkzmvozxbKOISoPR8f9UmZpYUbFNnqtDWKorP8hxtePicl_xwqpc5mwB9TyvcWWgWupWjaMnXfeNjSVHyh0Rsyt7f7gWX6Qb2CyvnJXG6xE3zF3dc_LgvA8LAjRKfhhaAjY-OSRwm9Ih36Z2RCyiYISpMxLAY3UfR4EX9nPMA_mdLXBWqLxJza4iPkDR=w640-h517" width="640" /></a></div><br />I haven't tested this version but it should work. I published the design as a <a href="https://github.com/nophead/NopSCADlib">NopSCADlib</a> project here: <a href="https://github.com/nophead/Blinder">github.com/nophead/Blinder</a>.</div><div><br /></div><div>I designed a curtain puller around this new motor.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgA8n8NDqMX8SMSE9fr4v3XNFYY1zw9KkoE-oH9C2MKhWLf4cqr_PmaQ99ljJdPvQ2kQI82jF_MtDqjxeLk4hbWo2VYEwkzCYRWYwephk1QjiHXamyf612ZgV4s9iH5sbP_3XSQrjXHTMRL0HEoKiTd1_JXr_3WfV1MRZC-JPROxoo3qrqU0kBMs_rO-Xh_" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="696" height="567" src="https://blogger.googleusercontent.com/img/a/AVvXsEgA8n8NDqMX8SMSE9fr4v3XNFYY1zw9KkoE-oH9C2MKhWLf4cqr_PmaQ99ljJdPvQ2kQI82jF_MtDqjxeLk4hbWo2VYEwkzCYRWYwephk1QjiHXamyf612ZgV4s9iH5sbP_3XSQrjXHTMRL0HEoKiTd1_JXr_3WfV1MRZC-JPROxoo3qrqU0kBMs_rO-Xh_=w640-h567" width="640" /></a></div><br />It clamps around the curtain pole, which has a hole drilled through it for the shaft. A length of picture cord goes from one bobbin, around the idler pulley clamped to the other end of the pole and back again to the other bobbin. The curtain rings at the open ends of the curtains are each attached to the forward or return cord so that they move in opposite directions.</div><div><br /></div><div>The motor shaft has a printed spur gear to drive the threaded rod which activates the limit switches. It also acts as a coupler for an extension shaft to drive the bobbins.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjJnlWx9xKEbVKaszC7lUllrpqWK0eM3uj-aWj7MKIXLfR4sQNKK9l364ndENB1Uzl4xsi9ooBE9dbPo56LQMgwgGqoAj_WPP9WSU3dIaZFA7eOVPXkxkvFfeRr96hAe2tWHF7ggkG3YNmWcdx0T23aQWxftMBQ5VFuX-UZOsfjcHOMltzz4RE5n0ifXGdu" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="696" height="567" src="https://blogger.googleusercontent.com/img/a/AVvXsEjJnlWx9xKEbVKaszC7lUllrpqWK0eM3uj-aWj7MKIXLfR4sQNKK9l364ndENB1Uzl4xsi9ooBE9dbPo56LQMgwgGqoAj_WPP9WSU3dIaZFA7eOVPXkxkvFfeRr96hAe2tWHF7ggkG3YNmWcdx0T23aQWxftMBQ5VFuX-UZOsfjcHOMltzz4RE5n0ifXGdu=w640-h567" width="640" /></a></div><br />It nearly worked but I ran out of time to finish it before going on holiday. I couldn't get enough grip with the 3mm grub screws because the heads would strip first. I need to replace them with M4 to get more grip. Hopefully it will work then, with perhaps some guides to stop the cords tangling.</div><div><br /></div><div>I built 12V power supplies using some potted modules cased in a short piece of aluminium box section for fire safety.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiSna8O5xeiq6CLk3j75LsH-PaX2fUYrInjy-icaicCQidTT9YOFqTKxdZgLpQy77Fmzu5GXlZkuLMwucIxXM0nhMh94dJf-I5-UIP4b6oFe5FbSVscxStVAqWplEfsvHBHHrRjhs9Uq5U38tt-vzaQtDVVTMfBChwyCxC0MqEDSdRmrldPpKrMSjPS-f6o" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="853" height="462" src="https://blogger.googleusercontent.com/img/a/AVvXsEiSna8O5xeiq6CLk3j75LsH-PaX2fUYrInjy-icaicCQidTT9YOFqTKxdZgLpQy77Fmzu5GXlZkuLMwucIxXM0nhMh94dJf-I5-UIP4b6oFe5FbSVscxStVAqWplEfsvHBHHrRjhs9Uq5U38tt-vzaQtDVVTMfBChwyCxC0MqEDSdRmrldPpKrMSjPS-f6o=w640-h462" width="640" /></a></div><div><br /></div>To turn the module into a PSU you need to add a mains filter, a transorb and fuse to the AC end and a couple of filter capacitors to the DC end.</div><div><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhkP3ZrwUxZh-yArF5ScimuwWtCci_sf7EJiITac4O2TTxYuDNkUIhbRUsZFC1S7qet-4U9W7LScakVNzJ5fdcr5IAgB52mGkajJvhHZ9n3_9uHYWSS05LNj0pYPgqUX1a5hqx5HMRFP5kd8Mdy5j5NPpLIDpvNtWEqehHFGtBPQeBr-eHf-hecj-w95pTO" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="616" data-original-width="853" height="462" src="https://blogger.googleusercontent.com/img/a/AVvXsEhkP3ZrwUxZh-yArF5ScimuwWtCci_sf7EJiITac4O2TTxYuDNkUIhbRUsZFC1S7qet-4U9W7LScakVNzJ5fdcr5IAgB52mGkajJvhHZ9n3_9uHYWSS05LNj0pYPgqUX1a5hqx5HMRFP5kd8Mdy5j5NPpLIDpvNtWEqehHFGtBPQeBr-eHf-hecj-w95pTO=w640-h462" width="640" /></a></div><div style="text-align: left;"><br /></div><div style="text-align: left;">In summary, I populated three of the PCBs and they all worked first time. The PCBs were only \$25.97 for 5 pieces in 4-5 days, if I had been paying for them. The solder mask was \$10 in 1-2 days. FedEx shipping \$22.89.</div><div style="text-align: left;"><br /></div><div style="text-align: left;">Now that I have got my reflow oven set up I will make more use of PCBs and SMT parts. <a href="https://www.pcbway.com/">PCBWay</a> make it very quick and easy to get good quality PCBs for a good price. They also offer PCB assembly, CNC machining, sheet metal fabrication, 3D printing and injection moulding but I haven't explored those. Hopefully I can do my own 3D printing!</div></div></div>nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com4tag:blogger.com,1999:blog-4339813531032979196.post-56706524312656146702022-07-27T22:28:00.000+01:002022-07-27T22:28:26.053+01:00DIY repair nightmareAfter returning from a long holiday over winter our Bosch dishwasher worked once and then failed during its second use. It came up with this error at the start of the drying cycle and the dishes were cold and not as clean or dry as usual.<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0c4D9vIdjjJNwU_q0wau8bKuDkSPqj2IZZQUJAKlQWuD0Hxx8d-wFvhbI2Iea1pztl6mPVhXXNwm6QFxOierGc8vqx5s7JsSdO2Qt7SPMYws-3PV0Q-DSKndoGxXPoxGAmA7Z6-l0fvLOCdSWu0vsxjvtIYDrsbK2GOWPShTIEy4T3XpdhSzFw7_FmA/s4608/IMG_20220310_091538352_HDR.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1494" data-original-width="4608" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0c4D9vIdjjJNwU_q0wau8bKuDkSPqj2IZZQUJAKlQWuD0Hxx8d-wFvhbI2Iea1pztl6mPVhXXNwm6QFxOierGc8vqx5s7JsSdO2Qt7SPMYws-3PV0Q-DSKndoGxXPoxGAmA7Z6-l0fvLOCdSWu0vsxjvtIYDrsbK2GOWPShTIEy4T3XpdhSzFw7_FmA/w640-h208/IMG_20220310_091538352_HDR.jpg" width="640" /></a></div>
I am normally able to diagnose and fix our electronic or electrical appliances, so I set about trying to fix it myself rather than following the advice on the display to contact customer service, perhaps a mistake! I did turn it off and on a few times but it then came up with a communication error.<div><br /></div><div>The model number is SMS88TW01G/01 and we bought it in 2015 for £749 delivered. It was expensive at the time but it normally does a good job washing and drying, is very quiet and energy efficient, so I didn't feel like replacing it. </div><div><br /></div><div>It turned out to be the longest and hardest repair I have ever done and even involved plenty of 3D printing, so I thought I would document it here in case it helps somebody else. Obviously only attempt something like this yourself if you understand the dangers and do so at your own risk.</div><div><br /></div><div>I could find lots of YouTube videos for repairing Bosch dishwashers but none for models like this that have the Zeolite drying system. Either they are not very common or don't often break, or are too new to have broken yet.</div><div><br /></div><div><div>Googling fault code E02 gives this unhelpful hit on the official Bosch website.</div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirDljVAUfZSs26StL8q6_9xpVi4HoVSihqKm8J7wZUsA8Rxi_PMmNULgbDcQF5chjbHocfqsISJtmADNr9J068bxtQh4NZi9C7Go9lZJzmY9RcUKYLdpTKDBMZBJEYdFvbmo-C-UV0XTG7nklHmR_Wv96ubEdGumr61pYjQLridsBn30IeQjgTavxrSQ/s562/fault.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="330" data-original-width="562" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirDljVAUfZSs26StL8q6_9xpVi4HoVSihqKm8J7wZUsA8Rxi_PMmNULgbDcQF5chjbHocfqsISJtmADNr9J068bxtQh4NZi9C7Go9lZJzmY9RcUKYLdpTKDBMZBJEYdFvbmo-C-UV0XTG7nklHmR_Wv96ubEdGumr61pYjQLridsBn30IeQjgTavxrSQ/w400-h235/fault.png" width="400" /></a></div><p>Unofficial repair guides indicate this error is a problem with the heating element, wiring, thermostat or the control board, in particular "the relay". This matched the symptoms as the machine ran cold but the communication error was still a mystery, so I decided to investigate the heating system. I removed the top and side panels simply by unclipping them.</p><p>The main electronic control unit is easily accessible at the bottom back right corner of the machine after removing its clip on cover.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhegr5YGGzw7Cif6Q5yNwGFD2ohEw3jN0vL-IYN1f0_c3KAM_WU8kjokxu8hxq8RGGib2NMQ8XnLgo4-b2lMm8gtGEUpkl30JzR6k8IC6u1ngdrYy0dwHS8YBM3zCKqelp1m4fl8Yn5ctMZW4e1jZFO3rm2nqE_KjfARsbkCx4w6vWkJgOR2ym48U7VQ/s4608/IMG_20220311_145450142_HDR.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3456" data-original-width="4608" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhegr5YGGzw7Cif6Q5yNwGFD2ohEw3jN0vL-IYN1f0_c3KAM_WU8kjokxu8hxq8RGGib2NMQ8XnLgo4-b2lMm8gtGEUpkl30JzR6k8IC6u1ngdrYy0dwHS8YBM3zCKqelp1m4fl8Yn5ctMZW4e1jZFO3rm2nqE_KjfARsbkCx4w6vWkJgOR2ym48U7VQ/w640-h480/IMG_20220311_145450142_HDR.jpg" width="640" /></a></div><p>The heater connections are the thick red wires and can be probed by removing the connector and inserting 6.4mm spades into the female connector slots. The other connectors are edge connectors directly onto pads on the PCB. They can be probed by putting them over a piece of veroboard as they have the same 0.1" pitch as the tracks.</p><p>Research with Google informed me that there are two generations of heating system in Bosch dishwashers. The original heater was like a kettle element that the water flows around.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn0_nMus8Diw5kes1HrEGvp2Ibrf_k3echGcGbVzg8F0xTUYM-yY7zey-INCAQXKhGLqI5xb6LSstwPkJXVxQoOuoOmegU2JU9HMpCG8vEKA4ybPI1yUP1wo-QzxRJdL9zKtiX91SIHIzroyTq4CSi61-u2xTZp8yjwfBPWfOq_PdvSucKGp5SxoLzsw/s149/element.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="143" data-original-width="149" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhn0_nMus8Diw5kes1HrEGvp2Ibrf_k3echGcGbVzg8F0xTUYM-yY7zey-INCAQXKhGLqI5xb6LSstwPkJXVxQoOuoOmegU2JU9HMpCG8vEKA4ybPI1yUP1wo-QzxRJdL9zKtiX91SIHIzroyTq4CSi61-u2xTZp8yjwfBPWfOq_PdvSucKGp5SxoLzsw/w400-h384/element.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;">The thermostat was a separate unit that contained a thermistor and a thermal cutout:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihSf_MYs43F8d9cQyDKE3Hkn6rmvxoQVMdkCScbkEHUWasz129UkUFXKr7dLpr40CCOmYFuZQCapYxYTsvGEUF-GvC5dAzK65NiyP2eqbHQbwDemJ9g1gFLQjKozot71wm2tvy6tVkF4Fa_1LQSMpk9mRZtzKAsSs31AX3xqZdMXptdwMrkr2L_uN8IQ/s145/thermostat.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="145" data-original-width="128" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihSf_MYs43F8d9cQyDKE3Hkn6rmvxoQVMdkCScbkEHUWasz129UkUFXKr7dLpr40CCOmYFuZQCapYxYTsvGEUF-GvC5dAzK65NiyP2eqbHQbwDemJ9g1gFLQjKozot71wm2tvy6tVkF4Fa_1LQSMpk9mRZtzKAsSs31AX3xqZdMXptdwMrkr2L_uN8IQ/w282-h320/thermostat.png" width="282" /></a></div>The control unit had a single relay and the thermal cutout was wired in series with the element to prevent the water getting too hot in the event of a failure. Simple and straightforward and each component could be replaced separately. However, later models like mine are far more complicated!<div><br /></div><div>The heater is a metal cylinder that the water flows through and has a thick film element printed around the outside. There is no thermal cutout, so for safety it has two thermistors printed or maybe surface mounted onto the cylinder. You can't get just a replacement heater from Bosch, you have to get the whole assembly, which includes the wash pump.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5MURjr-SNu4MqgskyYOvBos9Y_KOQyPxvl0vVxNDDfns--3BFzWw8NuQhj-MjdtET112M-UPEMy3YDzIRO8kO5XPv9Vu0Jhc8xtsWn_yusRTLP89qo8FQwDmd_B95MIoAlAG_26RZ6xZX09M71_h8GZbfumvvmatJ8Dr-g2KvXrvlgzMAtoAlwuPbuw/s146/pump.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="123" data-original-width="146" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5MURjr-SNu4MqgskyYOvBos9Y_KOQyPxvl0vVxNDDfns--3BFzWw8NuQhj-MjdtET112M-UPEMy3YDzIRO8kO5XPv9Vu0Jhc8xtsWn_yusRTLP89qo8FQwDmd_B95MIoAlAG_26RZ6xZX09M71_h8GZbfumvvmatJ8Dr-g2KvXrvlgzMAtoAlwuPbuw/w320-h270/pump.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;">The two thermistors are identical but they have different pullup resistor values at the control unit inputs that feed two analogue inputs on the MCU with two different voltages for the same temperature. So it can detect a faulty thermistor or wiring by working out the temperature two ways and checking they agree. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Instead of a single relay it has two relays, one in live and one in neutral and these are driven by three transistors, one on the +12V to both relays and one in each ground of the relays, so everything is redundant. A single failure will not cause the heater to be permanently on. Seems like a lot of complication just to remove the need for a thermal cutout and if the MCU or its firmware failed it could get too hot. Presumably it has a watchdog as well.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Zeolite models like ours are even more complicated because they have a second heater and a blower fan that draws air from half way up the inside of the wash tub, blows it through a heater, through the zeolite granules and back into the bottom of the wash tub. During the first water heating of an eco cycle the hot air heater is used to both dry the zeolite and heat the water indirectly. The main heater then takes over to get the water to its desired temperature. During the final rinse the main heater gets the water to a high temperature so that the dishes are steaming hot. After the water is drained the blower sucks the moist air from the tub and blows it through the zeolite. The Zeolite absorbs the water vapour and gets very hot due to an exothermic chemical reaction, aiding in the drying.</div><div><br /></div>So there is a third relay and a fourth transistor to switch the neutral to the second heater, sharing the switched live with the main heater. This heater does have a tiny axial thermal cutout in series with it. I don't think there is any other temperature control for it other than the two thermistors attached to the main heater see the water temperature rise when the hot air heater is on. Note the air heater isn't used in the drying cycle, just the blower and the zeolite. It claims to be energy efficient because the heat put into the zeolite while it was heating the water is released when it absorbs the moisture, so you get the water absorption aspect of the drying for free. The vapour will be released again during the heating cycle of the next wash when the dishes are wet anyway and presumably condenses. Some other dishwashers open their door at the end to get rid of the water vapour but that would make your house damp.<div><br /></div><div>Another energy saving mechanism I noticed when I opened the machine is there is large thin water tank over most of the left side of the machine that is filled with clean water at the end of the cycle. So the water for the next cycle is already at room temperature at the start, so needs less heating than cold water straight from the main would.<br /><div><br /></div><div>I tested both heaters and found they had the correct resistance and no apparent leakage to ground or to the thermistors. The thermistors both measured about 13K, which seemed reasonable for a 10K thermistor at room temperature and they had no leakage to ground. I added a cup of warm water to the sump and they both reduced in value by the same amount. I could find no fault with the electrical side, so I decided to turn my attention to the control unit.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLNEgfoLiD9NKmPEhLWnxx_bEyy0Z7KVwW3QglTZc1_oaqCxfRkLC36rusp1vylSeml9GDF2EqnZltiSU5Equ2rraPXSUxwKM9LZyRlVbllmeet7eVxLMDgkozh5PcYTFQNH_VfQy2mGAYtjEm-F9L3Fz1zwDTCo7EFjBtZN8SpfkGkMattITlqsiLQA/s2540/image00001.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="2540" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLNEgfoLiD9NKmPEhLWnxx_bEyy0Z7KVwW3QglTZc1_oaqCxfRkLC36rusp1vylSeml9GDF2EqnZltiSU5Equ2rraPXSUxwKM9LZyRlVbllmeet7eVxLMDgkozh5PcYTFQNH_VfQy2mGAYtjEm-F9L3Fz1zwDTCo7EFjBtZN8SpfkGkMattITlqsiLQA/w640-h258/image00001.jpg" width="640" /></a></div><br /><div>On opening, it immediately became apparent that there are two separate control units, the other is the button and display controller in the door of the machine and they are linked by an optically coupled serial bus via the little PCB on the left and this serial comms is presumably what the communication error refers to.</div><div><br /></div><div>The main controller is not isolated from the mains. The mains gets half wave rectified by a single diode, producing a 340V DC rail relative to mains neutral. This powers two three phase brushless DC motor controllers. One drives the main wash pump motor and the second one is multiplexed between the drain pump and zeolite blower motors by the white relay top centre. This makes the motors quiet and reliable and means the controller can vary the speed.</div><div><br /></div><div>The four SOT223 packages top left are triacs. One drives a small AC synchronous gear motor that rotates a disk with holes in it to route the water from the circulation pump between the upper and lower spray arms. It has an index switch so it knows where it is. I think the rest drive various solenoid valves.</div><div><br /></div><div>The three SOT223 packages top right of centre are transistors for driving high voltage DC solenoids. One drives the soap dispenser solenoid.</div><div><br /></div><div>The TNY268PN seven pin DIP package near the centre of the PCB is a switch mode regulator that steps down the 340V to about 12V referenced to the 0V rail of the board, i.e. mains neutral, and that is further regulated down to 3.3V for the ST ARM MCU by the tiny 6 pin chip at the bottom. Having the main board referenced to neutral makes sense because it means the motor controllers and the triac drives, etc, can be easily driven by the MCU without any isolation and also means the switch mode regulator doesn't need an opto in its feedback loop.</div><div><br /></div><div>I presume for safety reasons, the touch sensitive button controller in the door is isolated from the mains, hence the optocouplers for the comms. It also has a separate 12V supply coming from an isolated second secondary winding on the switch mode transformer. This is the leftmost brown electrolytic, small diode and the white two pin connector going to the opto board. These are the only parts of the main board that need an isolation gap from the rest of it. So instead of the usual isolation gap that splits the circuit in two there is just a small isolated island in the middle and an isolation gap across the middle of the opto board.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxGPfrE5BbfOVaqzNQsvCUjiD1Z4rhrmRtg8N3FgvKcEmM2qVUbvLfZUhToO3RNQrCvQSzluqpcX1hCxgXa_J6lL0rNyJEF0m2giAMPrCjAHUOQtr4S23cnI1NSWkFSFVbzv1e3DIFVsq-qcn8D77y8R1KXfwT3NpPn7kqD4DtjTvy8SLXU1u31TjsRg/s2728/image00002.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1124" data-original-width="2728" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxGPfrE5BbfOVaqzNQsvCUjiD1Z4rhrmRtg8N3FgvKcEmM2qVUbvLfZUhToO3RNQrCvQSzluqpcX1hCxgXa_J6lL0rNyJEF0m2giAMPrCjAHUOQtr4S23cnI1NSWkFSFVbzv1e3DIFVsq-qcn8D77y8R1KXfwT3NpPn7kqD4DtjTvy8SLXU1u31TjsRg/w640-h264/image00002.jpg" width="640" /></a></div><br /><div>Curious to know why there are four optos and what could be wrong with the serial comms I reverse engineered the circuit. Here is a my very scruffy schematic:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYStBrNOpvfpcDTNCnQi4vL-U1ISXb4gKrRiP6WQaQDC8AXjzlUWMJ2sRlFcrUC6ub6PDUqkBLJCWqffAjn8FKDOMI1FGUSEDrdbnps1E5cu6FFOpneuTPAJTM0VTkrM9w_PtIILADxq7J1HXG9jMmhtzgzCx6lXunW0kG70CvMPKa1nQ1AGf08mfqeg/s2860/IMG_20220725_0002.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1286" data-original-width="2860" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYStBrNOpvfpcDTNCnQi4vL-U1ISXb4gKrRiP6WQaQDC8AXjzlUWMJ2sRlFcrUC6ub6PDUqkBLJCWqffAjn8FKDOMI1FGUSEDrdbnps1E5cu6FFOpneuTPAJTM0VTkrM9w_PtIILADxq7J1HXG9jMmhtzgzCx6lXunW0kG70CvMPKa1nQ1AGf08mfqeg/w640-h288/IMG_20220725_0002.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Two of the SFH6156 optos together with four transistors and two diodes implement the transmit and receive coupling, which is complicated because there is a single half duplex bidirectional comms line. The transistors and diodes are needed to decide which side is pulling the line low and activate the opposing opto to pull the other side low without forming a latch by turning both optos on. There are also three zeners to clamp the comms to 5V despite the supply to the opto board being 12V. Odd it is 5V when all the MCUs run at 3.3V, so they have more transistors in their interfaces to the comms line.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">A third opto controls the supply to the other two, so that they get powered off by the main controller to save power when the machine is in standby. The fourth opto is needed because when the comms optos are powered down the button controller can no longer send messages. So when you touch the power on button this fourth opto is turned on to wake up the main controller, which then powers up the other three optos to allow serial communication.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Since I had two faults to deal with I wondered if there was something systemic wrong with the board, such as the power supply. I powered it up on my bench using my 3D printed isolated variac supply that I use mainly for repairing switch mode PSUs, safely.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtH28MrBJpjBE6nXgd6LkiVNMzxtrJcmag5mv4tWT9mXCE3UfEfzUNhhSep7FDmLeLxCfF2qFLYGMiedO-gLgWNxHztasKXd7gyqEt0mDbKEF9BRG4Tp-ziqCOplPXJfinzVhwYlxE1j99Wqi_pnvhVfV9a7Synk6Igqi0aLfoioBRmWHOVkBzTRRM6g/s2794/variac.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2794" data-original-width="2705" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtH28MrBJpjBE6nXgd6LkiVNMzxtrJcmag5mv4tWT9mXCE3UfEfzUNhhSep7FDmLeLxCfF2qFLYGMiedO-gLgWNxHztasKXd7gyqEt0mDbKEF9BRG4Tp-ziqCOplPXJfinzVhwYlxE1j99Wqi_pnvhVfV9a7Synk6Igqi0aLfoioBRmWHOVkBzTRRM6g/w620-h640/variac.JPG" width="620" /></a></div><br /><div class="separator" style="clear: both;">The power rails seemed fine. The isolated supply was about 12V, the non-isolated supply of the main board was 13.4V. I don't know if that was correct but most things are run from the regulated 3.3V supply derived from it and that was spot on. </div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">I also couldn't find anything wrong with the opto board. All the optos seemed to be working and their data sheet advertises "Low CTR Degradation". I didn't know that was a thing but apparently the LEDs in optos slowly wear out and that is bad when they are used in the feedback loop of power supplies.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">My attention moved to the relays. They looked fine and the soldering to the PCB was solid. It wasn't easy to test them on the bench because the board doesn't do anything without its button controller and all its I/O. I didn't want to put power on the relay coils to test them as it risked damaging the board, so I made a little 3D printed box with seven LEDs to display the state of the four transistors driving the relays and the three relay contacts.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDulbOJ28L0L6Hy06IUd6TCEWznX3TMyQlJjNWlJziVH7iHsVvs4eijEGdoyakYXCexx5PTc1qYnhsa7QHgPFUArKW6dwfrFIpU3U_Bku9HX21f6oVsVniKRhOaDOtoi_cdgDWhVPdr6veS8G9IGPClqypGpiZlwZnJgSRUU5YlwyAHjBKbjnLVNtsgA/s2517/IMG_20220528_151457207_HDR.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1634" data-original-width="2517" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDulbOJ28L0L6Hy06IUd6TCEWznX3TMyQlJjNWlJziVH7iHsVvs4eijEGdoyakYXCexx5PTc1qYnhsa7QHgPFUArKW6dwfrFIpU3U_Bku9HX21f6oVsVniKRhOaDOtoi_cdgDWhVPdr6veS8G9IGPClqypGpiZlwZnJgSRUU5YlwyAHjBKbjnLVNtsgA/w640-h416/IMG_20220528_151457207_HDR.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFXsWQC1gAToALKhEH63I8dNu8XVYFABJxnT2Kk4jZj5BHhbCbMJlwV5lBM8pp8SAotZJvpI7nHuowakvca8rFF4SnrQhTmyd6SoFv-Aufe4mNh3E3AQK3SQ-T5W5_U_CJQ1wIy2O0u-dSutIf80doc6oNztW-iRA58M0wYiRK9Ey2AFSVBCw0ylM1PQ/s2212/IMG_20220725_183334879.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1265" data-original-width="2212" height="366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFXsWQC1gAToALKhEH63I8dNu8XVYFABJxnT2Kk4jZj5BHhbCbMJlwV5lBM8pp8SAotZJvpI7nHuowakvca8rFF4SnrQhTmyd6SoFv-Aufe4mNh3E3AQK3SQ-T5W5_U_CJQ1wIy2O0u-dSutIf80doc6oNztW-iRA58M0wYiRK9Ey2AFSVBCw0ylM1PQ/w640-h366/IMG_20220725_183334879.jpg" width="640" /></a></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"> I soldered it to the PCB using a ribbon cable that fed through a gap in the plastic case, so I could run the machine relatively safely.</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">I put the controller back in the machine, took out the lower basket and spray arm and put a thermocouple in the sump. I ran the quick wash cycle that only takes 45 minutes and heats to 45°C for its wash cycle. The thermocouple said it heated to 43C, which is close enough for me, and it ran the complete cycle with no errors. The LEDs worked as expected.</div><div><br /></div><div>Thinking it might have just been a loose connector I filled the machine with dishes and ran the normal eco cycle that takes 3.5 hours. This time it ran the cycle cold and stopped with the EO2 error again, so back to square one.</div><div><br /></div><div>I managed to find out how to get into a self test routine by holding the Pre-Rinse and Info buttons while powering it on. That displayed two recent errors which were the E02 and an aqua sensor calibration error. The aqua sensor measures how dirty the water is and you can select programs that vary the wash cycle accordingly. I don't think it is used by the quick wash or the eco programs we use.</div><div><br /></div><div>After doing several steps the self test got stuck due to a comms error. I tried running it again but that caused a flood because it seemed to fill the machine that was already left full by the previous test not finishing. The water level overflowed the door hinge, went into a gutter which has a down pipe into the base of the machine. The water collected there and triggered a float switch that is a disk of expanded polystyrene under a microswitch. When the flood sensor is triggered all the machine will do is run its drain pump. Since that can't empty the base the only way to fix it is to bail out the base or wait for it to evaporate. I did the latter and decided to study the controller while I waited.</div><div><br /></div><div>I noticed that an SOT transistor near to the thermistor inputs was a bit crooked, so I poked it with my fingernail and to my surprise it moved. It is the left most transistor here.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCEb8YNVKcEjS6Jo5yHGPl_pvf6vqfKMe8LO0PoN5zxwMxfRq60kS138-GBZZYXKPeyk5rTdH71xM1vFV5BvUGvkjDdNFMfttKPW9IxirlkvKxiw-e1e88h4wqGWbsTO4RRmO9Y5JF8WJVU3fgOht3yax5I5f4ztX5OKozTa_k9C1EKEq5J-f7zKxFmQ/s369/transistor.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="369" data-original-width="330" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCEb8YNVKcEjS6Jo5yHGPl_pvf6vqfKMe8LO0PoN5zxwMxfRq60kS138-GBZZYXKPeyk5rTdH71xM1vFV5BvUGvkjDdNFMfttKPW9IxirlkvKxiw-e1e88h4wqGWbsTO4RRmO9Y5JF8WJVU3fgOht3yax5I5f4ztX5OKozTa_k9C1EKEq5J-f7zKxFmQ/s320/transistor.jpg" width="286" /></a></div><br /><div>I desoldered one leg and it fell off in pieces. It had a hole through the middle like it had been blown up but tracing the circuit I found it was just switching a 150Ω resistor to ground. It looked like it was an LED driver for one of the optical sensors. I found a wiring diagram for a similar machine and it seems to be where the aqua sensor connects, so it must be an optical sensor and the LED is switched off to save power and sensor life. So that explained the aqua sensor error.</div><div><br /></div><div>The SMT marking code seemed to indicate it was a Nexperia PDTC143ZT NPN "Digital" transistor, which has a pair of internal resistors connected to the base. I confirmed this by measuring the base resistance of another device on the board with the same markings. I had to order 50 from RS at about 25p each. It was tempting just to stick a MOSFET with the same footprint on as it would have worked but might have needed a pulldown resistor between source and gate. I can probably use the rest in other projects where I would normally use a MOSFET to avoid the need for two resistors.</div><div><br /></div><div>The thermistor inputs just connect to two pullup resistors and then the MCU inputs. One is 8.2K and it measured spot on my UNI-T UT61E 22000 count DMM. The other is 4.7K and it measured nearly 1% low. The resistors looked special because they were green and bigger than others. I think they might be high stability / close tolerance so, as I was putting an order into RS anyway, I ordered a 0.1% 25PPM high stability resistor as well but had to buy 20 at 42p each. I didn't think it needed to be that accurate though because thermistors are usually only accurate to one percent at most. I have no idea how close the firmware expects the readings to track before it gives an error but I assumed it would allow a reasonable tolerance before giving an error, so I didn't expect it to fix the E02 errors.</div><div><br /></div><div>As I wasn't really making any progress in diagnosing the two original errors I decided to bring in the big guns. I have a Mooshimeter Bluetooth enabled multimeter that can can log to an internal SDcard, so I thought that was ideal to log the thermistor voltages over a full wash cycle. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYwjYfyGae6lV64J-nN0cfi986kZqn3cAUdM_O6WCgI83Xg6yannaOr1rlBGkY5P7We-DIqOhAR3gnz_ckk8DRrHA-vrb7VEERmj1EBs7M3MPICXWlVplEgQadxWA7mLHO3Vb2QI_cJYscPb-CaylFZ01-kGvR3ehMaqnX98fWzVdoAncFnP7anYT7g/s1885/mooshimeter.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1173" data-original-width="1885" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiYwjYfyGae6lV64J-nN0cfi986kZqn3cAUdM_O6WCgI83Xg6yannaOr1rlBGkY5P7We-DIqOhAR3gnz_ckk8DRrHA-vrb7VEERmj1EBs7M3MPICXWlVplEgQadxWA7mLHO3Vb2QI_cJYscPb-CaylFZ01-kGvR3ehMaqnX98fWzVdoAncFnP7anYT7g/w640-h398/mooshimeter.JPG" width="640" /></a></div><div><br /></div><div>The only problem is it has only one auto ranging voltage channel. The resistance input can be used to measure voltages but only up to 1.2V, so I needed an external attenuator. I decided to 3D print one that would maintain the cat III safety rating. I was, after all, connecting to a controller that is not isolated from the mains.</div><div><br /></div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcOWePD3BjMQ4jWtLHJt5_PT1A7SjVNNXZ0rwJ2VgFUnvIFyo4zGKkgzKlzqx7KI87aH9slwgoSA64XwV8qOh1-th4zB6JID03Vvb5t5Ef7xWyU1FaSFiymtIq-6_zjyvBt_WlGDIWRbiruab-NHvrFTTsgiZ0AP2uUy7KyTa25MQiqSJdaqPZMNiUFw/s1788/IMG_20220725_213649748.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: center;"><img border="0" data-original-height="1788" data-original-width="1630" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcOWePD3BjMQ4jWtLHJt5_PT1A7SjVNNXZ0rwJ2VgFUnvIFyo4zGKkgzKlzqx7KI87aH9slwgoSA64XwV8qOh1-th4zB6JID03Vvb5t5Ef7xWyU1FaSFiymtIq-6_zjyvBt_WlGDIWRbiruab-NHvrFTTsgiZ0AP2uUy7KyTa25MQiqSJdaqPZMNiUFw/s320/IMG_20220725_213649748.jpg" width="292" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy5wiuQfgrIzP2qyVkWkKR7dfL83sNOySq-ZvYjbqOL-9mJvyYtdVzqECbI-60yf7IwyX1OVm8M-SBjYewzDs4yFOSTqJBMUfq-0CNlRWEPkTHePMFyxdaaA7sg_C12ZaKY08NfM3Zr9j3gEtZHsDGBjNO_Av08F-Iko6tc4t0TR1kofkQ_BHJfm2fJw/s2831/IMG_20220725_213931056.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2188" data-original-width="2831" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy5wiuQfgrIzP2qyVkWkKR7dfL83sNOySq-ZvYjbqOL-9mJvyYtdVzqECbI-60yf7IwyX1OVm8M-SBjYewzDs4yFOSTqJBMUfq-0CNlRWEPkTHePMFyxdaaA7sg_C12ZaKY08NfM3Zr9j3gEtZHsDGBjNO_Av08F-Iko6tc4t0TR1kofkQ_BHJfm2fJw/s320/IMG_20220725_213931056.jpg" width="320" /></a></div><div><br /></div><br /><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq3UxJhcVksnTJRBFH-Q2QoSGF0BfWpfDQgb7OKwgW24HilQTIbZp2cMKt_vm0j0Pii5PfU5onEMedQR8dW_fSUN3nfdvxn6fNcrjc3PBnjcgZ3-uz93IigA0fE3OZy7NK62lUN7lrv8jUcqY7Mq1K5fjlfziF1IFMhEr8D5cuW3JoueriG9BBHBU3BA/s562/attenuator.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="562" data-original-width="557" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq3UxJhcVksnTJRBFH-Q2QoSGF0BfWpfDQgb7OKwgW24HilQTIbZp2cMKt_vm0j0Pii5PfU5onEMedQR8dW_fSUN3nfdvxn6fNcrjc3PBnjcgZ3-uz93IigA0fE3OZy7NK62lUN7lrv8jUcqY7Mq1K5fjlfziF1IFMhEr8D5cuW3JoueriG9BBHBU3BA/s320/attenuator.png" width="317" /></a></div><br /><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>I used the pins from a couple of 4mm banana jacks and 3D printed threads in the base to accept them at the standard 3/4" pitch used for multimeter input terminals. The input impedance is 10MΩ and there is a 10 turn pot to fine tune the ratio to 10:1. Strangly the Mooshimeter seems to have an unmeasurably high imput impedance on the Ohm socket when used as a voltmeter, so I didn't need to take that into account.</div><div><br /></div><div>One problem I did have was bit-rot because I bought the meter in 2016, so of course it doesn't work properly with my latest Android phone. It wont stay connected long via Bluetooth BLE. I had to dig out my previous phone and that did work except emailing the log files from the app no longer works due to some permission problem. I had to find the uploaded file in the Files app and email it from there. It is crazy buying hardware that needs an app to function because it wont stay working for long unless it is actively maintained. Especially true for obscure test equipment because I only use each item occasionally. My home made IOT devices serve up a web page over Wifi, so they should stay working a lot longer because they work on any phone, tablet or computer without an app, and can be scripted with Python and curl.</div><div><br /></div><div>My UT61E multimeter has an optically coupled serial interface, so I can connect it to my laptop to log readings from live equipment. I decided to use it to measure the 3.3V supply to see if that ever goes flaky. Again that has bit rotted because I bought it in 2015 and this is the first time I needed the serial link. The serial connection now needs a USB to serial converter because even my old laptop hasn't got real serial ports and I couldn't get the software to run on it. Not sure why, but it was pretty crap as far as I can remember. I managed to find a <a href="https://github.com/4x1md/ut61e_py" target="_blank">Python script on Github</a> that I could hack to do what I needed. </div><div><br /></div><div>I couldn't get the serial interface to work until I took it apart and realized it needs RTS to be negated because it uses it for a negative supply rail. I rewired it to use RXD as that isn't used by the interface, so is always driven negative by TXD from the host.</div><div><br /></div><div>To investigate the comms errors I eventually used three more instruments. I attached my <i>Saleae</i> 8 channel logic analyser to the optically isolated end of the serial bus. It connects to my laptop with a USB cable, so isn't isolated, but that is OK for the isolated end of the bus. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhELyLtyJG3inWUfM4V2ZlrP1Ilygv4hE51PqdUcBLfdo6pQh1wKNyoToOqoZnkFmIUvlyPjuoldBJvMRY1e4XIGsJZnDZlpDMXvSGLIGQO9gncEDRungceXD6MJyOtWgQy0dRTf6_4wfGZlXfmy8e49xMqZHgrHbbw7HBZjmcqCVSIZDOF6PfD7XzzIg/s2771/IMG_20220725_231943818.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1475" data-original-width="2771" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhELyLtyJG3inWUfM4V2ZlrP1Ilygv4hE51PqdUcBLfdo6pQh1wKNyoToOqoZnkFmIUvlyPjuoldBJvMRY1e4XIGsJZnDZlpDMXvSGLIGQO9gncEDRungceXD6MJyOtWgQy0dRTf6_4wfGZlXfmy8e49xMqZHgrHbbw7HBZjmcqCVSIZDOF6PfD7XzzIg/w400-h213/IMG_20220725_231943818.jpg" width="400" /></a></div><div><br /></div><div>I also eventually added my Analog Discovery USB scope to the isolated serial bus as well. Both of these devices still worked well, without bit rot.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOdaelnUOXWnfD_80qStMv-3Xhv6rhWmYVo9PdhI03GDyfEUiDSNuV9bxO5q23Stq3DhQxFmYufpWZFvbgEHGUnbKGTgmJoiahICjwhjpPHvZuc4GOND4JPa8SD_eV3mamO4uCdjhLwH50UsBOr8X_HdDP0Sl05SyucVyndhMCyYC4xpGoP9GWXIhD8Q/s3940/IMG_20220725_234411819_HDR.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2984" data-original-width="3940" height="303" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOdaelnUOXWnfD_80qStMv-3Xhv6rhWmYVo9PdhI03GDyfEUiDSNuV9bxO5q23Stq3DhQxFmYufpWZFvbgEHGUnbKGTgmJoiahICjwhjpPHvZuc4GOND4JPa8SD_eV3mamO4uCdjhLwH50UsBOr8X_HdDP0Sl05SyucVyndhMCyYC4xpGoP9GWXIhD8Q/w400-h303/IMG_20220725_234411819_HDR.jpg" width="400" /></a></div><div><br /></div><div>On the non isolated end of the serial bus I added my OpenScope WiFi oscilloscope, powered by a USB power bank to keep it isolated. Here it is in its 3D printed case:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUiTJljAGjlZhSXOIHVT8VD6IssaSeFkQF5iZ9ZFa46dw52ImBC1sA3V6REsv6a15j4-iv1xCHkWId3UTj9ypTrzn7nQL-7ugoWoPGkZqOqqjwqbVXXfvj5jHc6nSVayC8kmfuVxrmoGeQoWunA5EsouiZeWH9fsY-mWqxiHFnjcBqoop-8SyaiFgO-w/s3622/IMG_20220725_232108983.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3275" data-original-width="3622" height="361" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUiTJljAGjlZhSXOIHVT8VD6IssaSeFkQF5iZ9ZFa46dw52ImBC1sA3V6REsv6a15j4-iv1xCHkWId3UTj9ypTrzn7nQL-7ugoWoPGkZqOqqjwqbVXXfvj5jHc6nSVayC8kmfuVxrmoGeQoWunA5EsouiZeWH9fsY-mWqxiHFnjcBqoop-8SyaiFgO-w/w400-h361/IMG_20220725_232108983.jpg" width="400" /></a></div><br /><div><br /></div><div>I backed this on Kickstarter and it shipped in June 2017, so this was actually the newest piece of equipment but it has bit rotted the most and took me ages to get working. I think it was sold until 2020 and then suddenly <a href="https://forum.digilent.com/topic/20924-openscope-and-openlogger-retired/" target="_blank">retired and no longer supported</a>. Although the software is open source it hasn't been updated and the Android app seems to have disappeared from the Google Play Store, so only works on my old phone again. Worse than that, the web based interface served from Digilent's servers no longer works because modern browsers don't allow cross origin browsing. </div><div><br /></div><div>When you open the web page served by the scope it redirects to <a href="http://waveformslive.com/ ">waveformslive.com</a> and that tries to access the scope on your home network and that is now blocked by the browser. I tried a Chrome plugin that is supposed to get rid of CORS errors but I couldn't get it to work. You are supposed to be able to host the website from the OpenScope itself by putting it on its SDcard, but I couldn't get that to work either.</div><div><br /></div><div>In the end I had to host it on my laptop using the Digilent Agent as a server and that did work. There is however a bug in the scope that causes it to regularly lose its WiFi connection and need to be reset when it is being rapidly triggered, but it will stay connected waiting for a trigger, so I did manage to use it.</div><div><br /></div><div>So by the time I received the RS order, installed the new parts and got all this equipment attached and working by curing the bit rot and designing and printing the attenuator, the machine's flooded base had long dried out. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx5X41KMRcTla56Vp0O96wIUzCDkNQJO0CXAYSLK83t8mDvqhbWflR4JeE1gYGGmwFxXIdU93QafaK_igNgDnbRDsBeZaWu3WumzGV49CgaK-7riMoHEhj6EBCKDvRcp5l2KmQpr5l0GY9uqmLw-ri5589NCOVdj4PDrZM25OEYltUEdFyWRkWlbWLTg/s4608/IMG_20220524_112110303.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3456" data-original-width="4608" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx5X41KMRcTla56Vp0O96wIUzCDkNQJO0CXAYSLK83t8mDvqhbWflR4JeE1gYGGmwFxXIdU93QafaK_igNgDnbRDsBeZaWu3WumzGV49CgaK-7riMoHEhj6EBCKDvRcp5l2KmQpr5l0GY9uqmLw-ri5589NCOVdj4PDrZM25OEYltUEdFyWRkWlbWLTg/w640-h480/IMG_20220524_112110303.jpg" width="640" /></a></div><br /><div>This is what it looked like before I had attached the Analog discovery. I soldered wire wrap wires to the PCBs and brought them out of the case to pin headers to allow probes to be connected. I also have a power monitor connected to the mains input so that I can see how much power the machine is using. It is only about 160mW when in standby mode, which is impressive. It takes about 4W when it is active but doing nothing. I.e. with the display active before the program is started. When the various motors are running it takes between 20 and 40W. The zeolite heater takes around 1.5kW and the water heater takes about 2.4kW.</div><div><br /></div><div>So armed with all this equipment I ran a quick wash and it worked perfectly. I then ran an eco wash and it failed at the drying cycle with a comms error. Since I changed the thermistor pullup resistor and the transistor I have never seen the E02 error. I can't imagine the small error in value caused the problem because when I graph the resistances calculated from the voltages they only stick within 3% of the same value and when cold water is filling the sump, or the heaters are being switched on or off they can drift about 10% apart. This seems reasonable because heat travels relatively slowly through metals due to the heat capacity relative to the thermal conductivity. So even if the thermistors are mounted close together thermal transients may hit them at slightly different times.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipGLErCKimX3DlfmlqqZV2PAwmv8OSLhIvMdfGx8jZcyGh7E_Jp_TfT_deZFB89s5Ev1XeebV56PRfl1KWj4JNqlzfZkeAT20lAwoMPQQXCZjpO_Czd4lzn8AjkHnahNkzaSVe91OpZaP0QcOP_WtBq4p86Qden7d5gj7LgssvXSPjip9T83ERW0Z4sQ/s920/Thermistors.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="920" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipGLErCKimX3DlfmlqqZV2PAwmv8OSLhIvMdfGx8jZcyGh7E_Jp_TfT_deZFB89s5Ev1XeebV56PRfl1KWj4JNqlzfZkeAT20lAwoMPQQXCZjpO_Czd4lzn8AjkHnahNkzaSVe91OpZaP0QcOP_WtBq4p86Qden7d5gj7LgssvXSPjip9T83ERW0Z4sQ/w640-h314/Thermistors.png" width="640" /></a></div>This shows a quick wash with the voltages logged every 10 seconds and then used to calculate the resistances of the two thermistors. The program starts at the first dip on the left, which is where the water that has been standing in the tank on the side of the machine is released into the tub for the cold prewash. There is a small temperature increase at that point, so it must have been warmer than the sump water. Around the 100 mark the water starts to be heated to 45°C for the wash cycle by the main heater. I think the two peaks are where more cold water is added. The final slope on the right is where it heats the water to 85°C for the final rinse. It then finishes and the machine slowly cools down on the right.</div><div><br /></div><div>The log of the 3.3V supply voltage every 100ms showed it was pretty stable:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-FN50Oby1vMwAspJjMxVSMc5onwobRgd5zBfZpzuvMag1aDuWhcply9wCmHME8LgNleJKGMlSfk8t7Nu4QquYRNcPf1WLdr1k_AwlV_jgUoimepcmBqJbYQdZdRyds69ftSIlW3j4LkFBohToZ4_55JKQq9d2IfVVk4WBxCg7hHAEuGl22r-3_0CySQ/s1122/supply3v3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="446" data-original-width="1122" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-FN50Oby1vMwAspJjMxVSMc5onwobRgd5zBfZpzuvMag1aDuWhcply9wCmHME8LgNleJKGMlSfk8t7Nu4QquYRNcPf1WLdr1k_AwlV_jgUoimepcmBqJbYQdZdRyds69ftSIlW3j4LkFBohToZ4_55JKQq9d2IfVVk4WBxCg7hHAEuGl22r-3_0CySQ/w640-h254/supply3v3.png" width="640" /></a></div><br /><div>So replacing the resistor somehow or other seemed to fix the EO2, and replacing the transistor fixed the aqua sensor error, but I consistently got the comms error during the drying cycle of the eco wash, when the machine is at it hottest. Thinking it might be temperature affecting the electronics, I ran the machine with the door controller and the main controller hanging out of it and it still failed in just the same way, so I then started to reverse engineer the serial protocol.</div><div><br /></div><div>This is a typical packet captured by the logic analyser and decoded:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsK7FR_uUYeoaTy6VUmOsXW7t_1kxTEjS7QLCIQuFmlONKEF9ieq7HBV-FcWP2dDx9icglV1fyEocRBeIPs_wMiw4WD0IvWy3h7NWhQgFktTc7lbGCyu8xVZaPR-j5GopFoLw-fhMg09BY0JZhPw1yK-OM2DYWuE6LeLdx284vJiv8KqQ_XQ3YZ52SIQ/s753/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="100" data-original-width="753" height="84" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsK7FR_uUYeoaTy6VUmOsXW7t_1kxTEjS7QLCIQuFmlONKEF9ieq7HBV-FcWP2dDx9icglV1fyEocRBeIPs_wMiw4WD0IvWy3h7NWhQgFktTc7lbGCyu8xVZaPR-j5GopFoLw-fhMg09BY0JZhPw1yK-OM2DYWuE6LeLdx284vJiv8KqQ_XQ3YZ52SIQ/w640-h84/screenshot.png" width="640" /></a></div><br /><div>The data is sent at 9600 baud with a start bit, 8 data bits and one stop bit. The first byte (0x08 in this case) is the length of the packet's payload. The first nibble of the second byte is the destination device address. I came to realise it is a multi-master protocol and there are actually three devices. Address 1 is the main controller in the bottom of the machine, address 2 is the button controller in the top of the door that also controls a small LCD. Address 5 is a controller for the larger LCD on the front of the door. The bottom nibble of the second byte appears to be a packet type. Then comes the payload data, 8 bytes in this case, then a 2 byte CRC16 checksum. The 0x2A on the end is an acknowledgement sent from the receiving device. The top nibble is its address and the A seems to mean a positive acknowledge. </div><div><br /></div><div>It wasn't obvious the last byte wasn't part of the packet at first. I thought it was an end of packet marker until I looked at the data on the OpenScope:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhf1-0TI3GRmkG5KLhWvkejEYWmf0n4amBtLbJmyNr3h3qW5vc8vg2SIEvKuwGmG48OEGb05js1RcM4B05LeJGA6LJ-vh7SiH8tblseKbl_X9hAIXgsl1ge6aJ4HOjIHRD-Ie7Mz0XRDqxwBXpZGjYo0qI4Q-CpGVCgaRF6G9nRqNQqTk_YZpsvBO7Ow/s1126/WaveFormsLiveChart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="559" data-original-width="1126" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhf1-0TI3GRmkG5KLhWvkejEYWmf0n4amBtLbJmyNr3h3qW5vc8vg2SIEvKuwGmG48OEGb05js1RcM4B05LeJGA6LJ-vh7SiH8tblseKbl_X9hAIXgsl1ge6aJ4HOjIHRD-Ie7Mz0XRDqxwBXpZGjYo0qI4Q-CpGVCgaRF6G9nRqNQqTk_YZpsvBO7Ow/w640-h318/WaveFormsLiveChart.png" width="640" /></a></div><br /><div>Here you can see the last byte's logic zeros go a bit lower than the preceding bytes. This is because the processor on the local side of the bus can drive it to zero but the device on the other side of the opto can only pull it low through a diode, so is a little higher. It was also a small differences in logic levels that made me realise there was a third processor in the door. This is actually a Microchip PIC24FJ256 that features a built in display controller and graphics accelerator.</div><div><br /></div><div>The button controller sends packets to the main controller when you press buttons. The main controller seems to send regular status packets to the button controller and that forwards the status information to the display controller to update the big display. For example I could see a value in the payload that corresponded to minutes remaining in binary and that is shown on the main display during a wash cycle.</div><div><br /></div><div>I don't think the main controller ever talks to the display controller directly. I am not sure how bus arbitration is done because I never saw a collision, but it seems possible if you hit a button just as a status message is due both the button controller and the main controller could start a packet simultaneously. They can both see their own data on the bus, so if there was a clash they could detect it and retry like Ethernet. Or maybe the button controller records when it got the last status message and knows when the next one is due.</div><div><br /></div><div>Using the logic analyser and the two scopes plus a multimeter looking at the supply to the optos I couldn't find anything wrong with the serial comms. Even when it was displaying comms error all three devices were still talking to each other and being acknowledged. The packets were well formed at the transport layer and had the correct CRCs. There was no obvious way to know what all the packets mean at the application layer but after doing all this reverse engineering and monitoring I decided the communication error was probably a red herring and I needed to look elsewhere. My theory is the main controller goes into an error state and starts sending messages that the button controller doesn't understand, so it reports a communication error.</div><div><br /></div><div>The communication error now always happened at the same point in the eco cycle, 40 minutes from the end where it had just done the hot rinse and drained the water. It waits a few minutes doing nothing and then turns the blower on. That is the point it fails. I knew there wasn't a problem with the blower motor because that is used earlier in the cycle to dry the zeolite with the heater on. At this failure point it blows hot steamy water over the heating element while it is switched off. When the machine cools down a bit the comms error clears. So if I had run it overnight, like I normally do, the only noticeable effect hours afterwards would be the dishes would not be quite as dry as normal.</div><div> </div><div>When I was looking at the board near the faulty transistor the nearest chip is a SEN013, which is described as a "Zero loss high voltage sense signal disconnect IC". Note that ,although the 3 channel version of the chip is fitted, only two channels are used, so the SEN012 could have been fitted.</div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjqEyOf6D6I1DQD44sBvRDPQaKjXdlriRkAUb1e46MeQbMpuboTxcfGAog4WMGx4ASM3D6z_jodMTioxCrHuFaC7TSuL0AwNsX-RJZqkTACpQwwKQvBTfpj86yfS6joAyT8Jd5dy0URJQmDze_29KMrdz6UOxotTmMNT30R7y07joY2KfsK1CdZ4JOWhw" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="245" data-original-width="343" height="229" src="https://blogger.googleusercontent.com/img/a/AVvXsEjqEyOf6D6I1DQD44sBvRDPQaKjXdlriRkAUb1e46MeQbMpuboTxcfGAog4WMGx4ASM3D6z_jodMTioxCrHuFaC7TSuL0AwNsX-RJZqkTACpQwwKQvBTfpj86yfS6joAyT8Jd5dy0URJQmDze_29KMrdz6UOxotTmMNT30R7y07joY2KfsK1CdZ4JOWhw" width="320" /></a></div></div><div>I had also noted that the LED that was monitoring the output of the live relay glows dimly even when the relay is off, so I decided to investigate the relay mains circuitry. This is what I found:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkOfnVEFwpW9s2MMQ9gmBJhooW-xN2tpvgy6YBVQ7E6jUT2t1qQJ0PTUOaWyMtkDOmadxGQJg_FOTGponfmc01lL75zpRVWxvXh3t5oa8YcC_QbXl4QT1ekpdQUAfwCUDi4YfNhj277XL_8lVugEQGTsGxkeSdayfdy_qS_Ww8mxJR68LHkBA7A8NYLA/s2141/IMG_20220726_0001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1150" data-original-width="2141" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkOfnVEFwpW9s2MMQ9gmBJhooW-xN2tpvgy6YBVQ7E6jUT2t1qQJ0PTUOaWyMtkDOmadxGQJg_FOTGponfmc01lL75zpRVWxvXh3t5oa8YcC_QbXl4QT1ekpdQUAfwCUDi4YfNhj277XL_8lVugEQGTsGxkeSdayfdy_qS_Ww8mxJR68LHkBA7A8NYLA/w640-h344/IMG_20220726_0001.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">The SEN13 is used to monitor the state of the heaters. When all the relays are off then live is fed to the heaters via 220K and monitored by an analogue input of the MCU and the neutrals coming back from the heaters are summed and then monitored by the second channel of the SEN13. So the MCU can detect relays being open or shorted, heaters being open or leaking to ground. The SEN13 avoids wasting any power when the machine is in standby by disconnecting the sense lines. There is also a special chip that disconnects the X2 cap discharge resistor when the mains is on, so every measure is taken to reduce the power consumption.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">So now I finally had an idea of what was going wrong. I monitored the sense inputs to the MCU with my isolated meters and found that the voltages dropped as the machine got hot and steamy. Suspecting the zeolite heater was leaking I measured its resistance to earth with a multimeter and still got an open circuit but when I reversed the probes my meter freaked out on the Ohms range. The heater was acting like a battery generating a few hundred mV. Lesson learned, always check for earth leakage in both directions! I still might not have not found the fault at the beginning because it was only leaky enough to cause a fault detection at the start of the drying cycle when it was hot and damp.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">To test that my theory was correct I replaced the heater with a small incandescent bulb to fool the control unit it had a non-leaky heater. I placed a bridge rectifier and a relay in series with the bulb and used the relay contacts to drive the real heater directly from the mains via a second wall socket. The bulb had a small Edison screw base that I didn't have a socket for, so I had to 3D print one. Here is my lashup:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAGQx_fWqjTNbrghJGqIbZum9_WvVKh_WWYjjmHbI2n5vB8HedeWUA4LxXReu1t26rLc-2ENfWZfh5eDZMayG2k6qAZZ_n8aMCu52AWWd2s52SaMeddlDnwttW88i5XmPnfK2lKpJCgXWwLp6PvNtE_ciqRZiMynOEntozQeu9Xw23wV3Yi6pHOm2VBQ/s4608/IMG_20220603_222243935.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3271" data-original-width="4608" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAGQx_fWqjTNbrghJGqIbZum9_WvVKh_WWYjjmHbI2n5vB8HedeWUA4LxXReu1t26rLc-2ENfWZfh5eDZMayG2k6qAZZ_n8aMCu52AWWd2s52SaMeddlDnwttW88i5XmPnfK2lKpJCgXWwLp6PvNtE_ciqRZiMynOEntozQeu9Xw23wV3Yi6pHOm2VBQ/w640-h454/IMG_20220603_222243935.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">And here it is connected to the machine while it was heating the zeolite:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3a2EZ_zd8dnJ6GAoDyd_Jo-pXsrkj8cCYwLJh6_Q_ZzdqRvUXtIlr34I7KqfhgSgO_azQ4RSqNlfjvyg8OlulQwzK25bXAceh05_8drx-v8LhvlhLbwc0XqAFBlc9OnK-J5lrw_Ly3wcXVLg4bC5cizw5iMN1yCHYYZkrv5kdfdHDx0HlDbGo03nNDw/s4608/IMG_20220603_194626122_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3456" data-original-width="4608" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3a2EZ_zd8dnJ6GAoDyd_Jo-pXsrkj8cCYwLJh6_Q_ZzdqRvUXtIlr34I7KqfhgSgO_azQ4RSqNlfjvyg8OlulQwzK25bXAceh05_8drx-v8LhvlhLbwc0XqAFBlc9OnK-J5lrw_Ly3wcXVLg4bC5cizw5iMN1yCHYYZkrv5kdfdHDx0HlDbGo03nNDw/w640-h480/IMG_20220603_194626122_HDR.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">The machine was able to complete the eco cycle without a communication error, so I had proved my diagnosis correct after about 3 months of testing, reverse engineering and head scratching. It was driving me mad. My wife and friends said I should scrap it and buy a new one but after I had invested so much effort I felt I had to press on. It was only 2 days before we went on holiday again for a few weeks, so it as good to solve it before we went after the mandatory 90 days at home.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">On return it was tempting to just minaturise the bodge and make it permanent because the zeolite heater is very difficult to access. When you blow steam into a bare heating element connected to mains live I don't think it is a surprise that you might get some leakage and I don't think it really causes a problem when the heater is enclosed in a steel tube that is grounded and the heater is already dissipating 1.5kW and sinks about 6A.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Eventually I plucked up the courage to attempt to remove the heater and see if it could be fixed by cleaning it.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The heater should look like this:</div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjxcoCJSWa5jTNtiW-iDdVlf_lKAykL7H5zmDEmQZLPdRR5WEsdeXO7CW4aMakSip1zHOe60WtoCBo8fSlapQMGhGt_UCyysXDdFgC5Xhv61b9e7L9guygj0oUfW9OLAWI3AL78svErUA1cdHZ6toX3iZMO0kk8c1JDDl-ZxWFVs2IjegUvqVsEPoXt9g" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="348" data-original-width="152" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEjxcoCJSWa5jTNtiW-iDdVlf_lKAykL7H5zmDEmQZLPdRR5WEsdeXO7CW4aMakSip1zHOe60WtoCBo8fSlapQMGhGt_UCyysXDdFgC5Xhv61b9e7L9guygj0oUfW9OLAWI3AL78svErUA1cdHZ6toX3iZMO0kk8c1JDDl-ZxWFVs2IjegUvqVsEPoXt9g=w175-h400" width="175" /></a></div><br />It just presses into the inlet tube of the zeolite tank and is sealed by the top o-ring. The peg on the side ensures the correct orientation.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1iQ1fuLjQmLRPQRo3jW1s0VNYUq_S_tUDUvBU-VUamZqyqM0FxRl94WmE6vC-jnnf8Zb80Rm8w6Pj-XDB7TbskFgufZtHs2UbmqbGnwfLJNFiujgg4swmsoWxK3PeLQWUCqJnaLdV67JnCpCy9CE_TgPWUVszErY4my9jT_jqGGHCLRtmI0_n8ChMJg/s738/tank.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="738" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1iQ1fuLjQmLRPQRo3jW1s0VNYUq_S_tUDUvBU-VUamZqyqM0FxRl94WmE6vC-jnnf8Zb80Rm8w6Pj-XDB7TbskFgufZtHs2UbmqbGnwfLJNFiujgg4swmsoWxK3PeLQWUCqJnaLdV67JnCpCy9CE_TgPWUVszErY4my9jT_jqGGHCLRtmI0_n8ChMJg/w400-h211/tank.PNG" width="400" /></a></div>But then it is held in place by the blower fan, which seals to the lower o-ring and has three barbed prongs that lock into slots in the metal flange of the tank.<br /><div class="separator" style="clear: both; text-align: left;"><br /><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiKbkpx8UZjpKIqGSWWP1TrESQX_90R2PmbeWqeh2DdOaM4XeTU9pXo4JxR8jXZdTC-HkqQuegcul0kWD4W4-2Z5V9_uB0yKBkEkxpp1lBFSvaSMRgtFukyF_QmybKUJTzaj10OdU9iRLunvQ83SV3hAlyJhK0yu8O7pcv3HcNn27woSnBqiIE5ekgxQ/s4085/IMG_20220706_131347042.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2897" data-original-width="4085" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiKbkpx8UZjpKIqGSWWP1TrESQX_90R2PmbeWqeh2DdOaM4XeTU9pXo4JxR8jXZdTC-HkqQuegcul0kWD4W4-2Z5V9_uB0yKBkEkxpp1lBFSvaSMRgtFukyF_QmybKUJTzaj10OdU9iRLunvQ83SV3hAlyJhK0yu8O7pcv3HcNn27woSnBqiIE5ekgxQ/w640-h454/IMG_20220706_131347042.jpg" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div></div>The blower needs to descend to separate from the ventilation duct, so I figured I would need to remove the base of the machine. How to do that was not at all apparent. Older machines just have four screws to undo but all I could see were two bent tabs at the back of the machine. I couldn't see how the front was fixed. Fortunately I found <a href="https://www.youtube.com/watch?v=5jJQSEZqHEE" target="_blank">this video</a> that showed how to remove the base of the same generation machine. It wasn't one with a zeolite heater but the basic construction was the same. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I would never have worked it out myself because there are three hidden plastic tabs that need to be released. To get to two of them you have to remove two covers over the door counterbalance spring cords, remove the cords and then remove the guides for the cords, the tabs are underneath those. Who would have guessed that?</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">You also need to turn the machine upside down, so you need to empty the sump. I first tried to use a small water pump I bought to make a laser cutter but it wasn't self priming, so that was a fail. Next I decided to use my vacuum pump but I needed to separate the dirty water from the air to stop it entering the pump.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I found this <a href="https://www.thingiverse.com/thing:4890706" target="_blank">air assist pop bottle pressure filter</a> on Thingiverse that screws onto a standard bottle thread and connects two pipes and allows a third one inside, so the water goes to the bottom while air is drawn from the top. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEimz9bVTcSjBTB8KqsIA3AlUH0o2C1k21ldv1qKIWapsCLhRBiFy69dYCLFBwlSmrjr-c6Fhr3dUJSC8hyoyZkCSPfNEhMuW5eW3Lx-5bERDkSA3g_8VEx5MYaF4J7gFohNrx4v9nDWeoe5grSHkNuXlPkeSWgtQge4KWBixJNcIm0XRQdVy6EFvubitg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="528" data-original-width="592" height="357" src="https://blogger.googleusercontent.com/img/a/AVvXsEimz9bVTcSjBTB8KqsIA3AlUH0o2C1k21ldv1qKIWapsCLhRBiFy69dYCLFBwlSmrjr-c6Fhr3dUJSC8hyoyZkCSPfNEhMuW5eW3Lx-5bERDkSA3g_8VEx5MYaF4J7gFohNrx4v9nDWeoe5grSHkNuXlPkeSWgtQge4KWBixJNcIm0XRQdVy6EFvubitg=w400-h357" width="400" /></a></div></div><div class="separator" style="clear: both; text-align: left;">I found a PET pop bottle was no use for vacuum, and neither was a thicker HDPE bottle used for acetone, as they just collapse. So I ended up with a glass vinegar bottle and that worked well to empty the sump. I think I will do that each time we go on holiday from now on.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfXnnmxq9oEUd8sazxjgCOvRiwJuF-pkUOxSK7CkKPo7w4fo6kytZt5cPrnIxqYSuEtjTbmV8myhqhWcLvL7O8ucZHIbK6v0JGKKTpJhIAgJXEMCdYHjMCGbgKYNjREsyF72U79BaqvsHre1LEuS_dtGQu65IXXuE57BhToGDDjl__cguAexAMXaCOkg/s3456/IMG_20220714_225521066_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3456" data-original-width="3017" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfXnnmxq9oEUd8sazxjgCOvRiwJuF-pkUOxSK7CkKPo7w4fo6kytZt5cPrnIxqYSuEtjTbmV8myhqhWcLvL7O8ucZHIbK6v0JGKKTpJhIAgJXEMCdYHjMCGbgKYNjREsyF72U79BaqvsHre1LEuS_dtGQu65IXXuE57BhToGDDjl__cguAexAMXaCOkg/w558-h640/IMG_20220714_225521066_HDR.jpg" width="558" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">So that was the final bit of 3D printing for this project.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I managed to remove the base to get to the pump and with great difficulty remove the three barbed prongs that requires three hands and three pairs of pliers. When I removed the heater it left its glass tube behind because the inside of the tank was thick with rust that jammed it solid. I broke the glass removing it and then I had to Dremel out the rust in order to make room for a replacement heater.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">The replacement was £129.40 including next day delivery from Bosch. Here is the new one next the old naked one:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzJvyK72KcIH9QFrhy_UJhG9PD980EXfbGYUnGSxY7LpmZfLk0jTRoqKwEwEFNTBLjjIC9KreQPyWrPhn_ABw79UvsFTLbDC8oL_-UkUln9ekcJCtbkA5EeiTTIQFYYXAGWWkDvYvqAgFXpat5yyfYO_F35meWiv7yCTn1Xmk5TMcBosV3P8doHaXpbQ/s3915/IMG_20220712_165114953.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="3915" data-original-width="3338" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzJvyK72KcIH9QFrhy_UJhG9PD980EXfbGYUnGSxY7LpmZfLk0jTRoqKwEwEFNTBLjjIC9KreQPyWrPhn_ABw79UvsFTLbDC8oL_-UkUln9ekcJCtbkA5EeiTTIQFYYXAGWWkDvYvqAgFXpat5yyfYO_F35meWiv7yCTn1Xmk5TMcBosV3P8doHaXpbQ/w546-h640/IMG_20220712_165114953.jpg" width="546" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">The corroded electrode encased in the white ceramic tube in the foreground sits at the bottom of the glass tube when it is horizontal and is there to detect water. It connects to the control unit via a brown wire that has a mystery inline component encased in resin and tape. It measures as a 1nF capacitor and must detect AC leakage from the element if it gets submerged. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">After breaking the glass it was hard to determine what was causing the leakage but there was a lot of black charcoaled strips of material amongst the elements that I think was the remains of the silicone glue that joins the glass to the base. Here are some small bits of it:</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHccoeyQxDLWekRl9aP6H7DMOic58fjYbthH4nhq_M0v9JNHtAyg_AxTD-X32WYVGVaeJ2zzgb5QzxV8h06yYKm7ebogAT-zTiW0zqUv8fVcfVBcEPte2D-VQKA4R4y0jr2ypm776orXzGfx8R-y1VpyQwKPMzgGo6ZDgUV-GkohqcEOZ7nKDdC4_huw/s776/IMG_20220719_163621561_HDR.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="776" data-original-width="738" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHccoeyQxDLWekRl9aP6H7DMOic58fjYbthH4nhq_M0v9JNHtAyg_AxTD-X32WYVGVaeJ2zzgb5QzxV8h06yYKm7ebogAT-zTiW0zqUv8fVcfVBcEPte2D-VQKA4R4y0jr2ypm776orXzGfx8R-y1VpyQwKPMzgGo6ZDgUV-GkohqcEOZ7nKDdC4_huw/w608-h640/IMG_20220719_163621561_HDR.jpg" width="608" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">Perhaps it became detached and the fan blew it into the elements and somehow bridged to the rust.</div><br /><div class="separator" style="clear: both; text-align: left;">This is a view into the tank after I had Dremeled most of the rust out of the inlet tube. Notice how corroded the bottom of the tank is (at the top of this view):</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm9fSp2NxTPxSG3JWGbCW-gt92S9L6hsIZQ4ichQ-M92rWmiudT9PulqNo7VA64jCZC3Uqz12pIJb4EFKI4aQdqBJ_GyHvScd9XF3IYUbxUvqCHwVFnVZ--P1h-PuxF_g4PGNMdSvDMPtlrOTpb83bA6fTrCcZTNryIKEZyN4h9uOY19l3UNlC8w9PJg/s1600/IMG_20220713_151009481.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm9fSp2NxTPxSG3JWGbCW-gt92S9L6hsIZQ4ichQ-M92rWmiudT9PulqNo7VA64jCZC3Uqz12pIJb4EFKI4aQdqBJ_GyHvScd9XF3IYUbxUvqCHwVFnVZ--P1h-PuxF_g4PGNMdSvDMPtlrOTpb83bA6fTrCcZTNryIKEZyN4h9uOY19l3UNlC8w9PJg/w640-h480/IMG_20220713_151009481.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">It was a total mess of corrosion and I think that it is a design fault to use galvanised steel for something that has hot water vapour passing through it regularly. My understanding is hot water and steam are far more corrosive than cold water and galvanised steel doesn't even last long outside. I don't know why they didn't use stainless like the rest of the tub.</div><br /><div>A replacement zeolite tank is £159.41 so I didn't feel like replacing it, but I don't know how long it will be before it rusts all the way through, especially as there is now bare steel where I Dremeled it. If it did leak it would only be water vapour that would escape, it shouldn't flood as the inlet and outlet are above the high water line.</div><div><br /></div><div>Putting the base back on the machine is difficult because it is obviously designed to be assembled the other way up at the factory, but that would need a hoist. I tried to improvise one with two stepladders, a plank, four luggage straps and a ratchet strap but that was a fail. </div><div><br /></div><div>The difficulty putting the base on upside down is that there is a big weight at the back to stop the machine tipping forward that isn't fastened to anything, it just sits in the base. On the zeolite machine there is also a metal heat shield under the zeolite tank that just sits in the base as well. It falls out when the base is removed upside down. So again you need lots of hands to hold them in place while the base is clipped back on. They are then trapped in place.</div><div><br /></div><div>Then I had to find all the parts spread around the house for four months and remember where they all went. Amazingly there was nothing left over, not even the usual screw, but there aren't that many in this machine. Lots of plastic parts just clip together. Obviously designed for cheap and easy assembly, not easy repair.</div><div><br /></div><div>I ran the self test and it went through something like 75 steps in an hour and a half and seemed to pass them all. I wish I had put crockery in because it was twice as long as a quick wash!</div><div><br /></div><div>So the machine is up and running again but having three different, unrelated faults occur at the same time is weird. The broken transistor seems to have been a manufacturing fault. Assuming it worked when new, it must have been soldered on crooked, in a way that left it under great stress, and then it later cracked. </div><div><br /></div><div>The earth leakage problem was misreported as a comms error and that wasted so much of my time. And the E02 error fixed by changing a resistor value by a fraction of a percent makes no sense, so perhaps it will come back to bite me. Or perhaps it was another manifestation of the earth leakage problem because the first heating in the eco cycle uses the zeolite heater. That would explain why the quick wash cycle tended to work because that doesn't use the zeolite heater at all. Better error codes and available schematics and wiring diagrams would have made the job so much easier.</div><div><div><div><div><div><br /></div></div></div></div></div>nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com4tag:blogger.com,1999:blog-4339813531032979196.post-60530873909769976642021-08-07T09:57:00.005+01:002021-08-07T14:59:11.736+01:00ESP32 auto program fix<p>Out of the box my ESP32 dev board required me to hold down the BOOT button at the start of programming to get it to program from the Arduino IDE. The board has a pair of transistors to connect the DTR and RTS lines to EN and GPIO0. This is intended to enter programming mode automatically but seems to have timing problems. If I don't hold the button I get:</p><blockquote>Fatal Error Occurred: “Failed to connect to ESP32: Timed out waiting for packet header”</blockquote><p>Looking around the internet I found a recommendation to add a 10uF electrolytic capacitor between EN and ground. While this did work for programming it seemed to inhibit the board reset at the end of programming. I found 1uF worked better, which let me use a small ceramic SMT cap, which is a lot neater.</p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-HFvTD7iaq98/YQ1NigVG0TI/AAAAAAAAgww/GVXh4r_3Cng3dBQoOcNgGAYwSYUFaI4pQCPcBGAsYHg/s2035/IMG_20210806_144722244.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1237" data-original-width="2035" height="390" src="https://1.bp.blogspot.com/-HFvTD7iaq98/YQ1NigVG0TI/AAAAAAAAgww/GVXh4r_3Cng3dBQoOcNgGAYwSYUFaI4pQCPcBGAsYHg/w640-h390/IMG_20210806_144722244.jpg" width="640" /></a></div><br />The nearest ground is the top right pin of the module and I could have angled it to reach that but I found it easier to just link it to the metal can.<p></p><p>Investigating why it doesn't work I found the setup and hold times for the strapping pins in the ESP32 datasheet:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-VhuYMgOaEQU/YQ47YM8sVwI/AAAAAAAAgxA/jymcaWehQCsiWA5Dz9TiOscU1L3a2v-lACNcBGAsYHQ/s765/strapping.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="765" height="446" src="https://1.bp.blogspot.com/-VhuYMgOaEQU/YQ47YM8sVwI/AAAAAAAAgxA/jymcaWehQCsiWA5Dz9TiOscU1L3a2v-lACNcBGAsYHQ/w640-h446/strapping.PNG" width="640" /></a></div>To enter programming mode GPIO0 needs to be low as EN transitions to high and stay low for 1ms after that.<br /><p>This is the two transistor circuit on my board which is labelled ESP32 DEV KIT V1, which implements the truth table shown.</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR4as-iVlx8kMZbtQ0Uu5nrHCz5J7moAEJSvZQlG9fxKWznIi8Eza49YseNCRfPUUmnPyKD1FysNE7yVUlWjWVr0hWqDrGOA1kPB_91TWB2iePjQ2HZn6-LvBrtWpjTL4V1KqZDvC9WSXg/s436/transistors.PNG" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="199" data-original-width="436" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR4as-iVlx8kMZbtQ0Uu5nrHCz5J7moAEJSvZQlG9fxKWznIi8Eza49YseNCRfPUUmnPyKD1FysNE7yVUlWjWVr0hWqDrGOA1kPB_91TWB2iePjQ2HZn6-LvBrtWpjTL4V1KqZDvC9WSXg/w640-h292/transistors.PNG" width="640" /></a></p><p>The truth table shows that EN and IO0 can't go low at the same time, so the zero setup time cannot be achieved unless both lines change together. Here is what it looks like on a scope after I added the capacitor.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-DytI06QHN_U/YQ5BAVGU7PI/AAAAAAAAgxQ/In1YGTU1qKAPzl3D05Hic18Q0QUmMa7YwCNcBGAsYHQ/s800/RIGOL%2BPrint%2BScreen07-08-2021%2B00_37_14.980.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://1.bp.blogspot.com/-DytI06QHN_U/YQ5BAVGU7PI/AAAAAAAAgxQ/In1YGTU1qKAPzl3D05Hic18Q0QUmMa7YwCNcBGAsYHQ/w640-h384/RIGOL%2BPrint%2BScreen07-08-2021%2B00_37_14.980.png" width="640" /></a></div><div><br /></div>During reset RTS is low and DTR is high, which makes EN low and IO0 high. At the end of reset DTR goes low and then about 1ms later RTS goes high. This would work without the transistors but with them EN starts to go high 1ms before IO0 goes low, so it violates both the setup and hold time. Adding the capacitor delays EN long enough for IO0 to be low as the chip comes out of reset.<br /><p>My best guess is the transistor circuit is there to ensure random serial monitors don't put the board into programming mode if they assert both DTR and RTS. To work without a capacitor RTS and DTR would need to change state simultaneously. There is a long discussion about it here: <a href="https://github.com/espressif/esptool/issues/136">https://github.com/espressif/esptool/issues/136</a>.</p>nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com1tag:blogger.com,1999:blog-4339813531032979196.post-43589681441467525362021-07-16T11:50:00.000+01:002021-07-16T11:50:09.271+01:00Third Hand<p>A problem I often face hand soldering surface mount components is keeping them in the correct position while soldering the first end. The surface tension of the solder invariably moves the component. When using paste and an oven the surface tension is the same on both ends and pulls the component into position. Solder paste and hot air works similarly but it is easy to blow the component away.</p><p>One solution is to tin the pad and the end of the component first and then use tweezers to hold the component on the pad while applying the soldering iron to the tinned end. However that requires a steady hand and today, after having two strong cups of coffee, my hands are far from steady!</p><p>Some time ago I bought a PCBite probing kit from Elektor. This consists of a steel base, four magnetic clamping posts to hold a PCB and four sharp tip probes with magnetic bases and flexible swan necks intended for making measurements. It works well for its intended purpose although I think the flexible necks would be better if they were stiffer.</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-_JsMvMrJ3Zk/YPFhqeNlYPI/AAAAAAAAgj0/hcpW549rag4--XrXnTWWgug3Dv8qdUHjQCNcBGAsYHQ/s441/PBCite.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="418" data-original-width="441" height="379" src="https://1.bp.blogspot.com/-_JsMvMrJ3Zk/YPFhqeNlYPI/AAAAAAAAgj0/hcpW549rag4--XrXnTWWgug3Dv8qdUHjQCNcBGAsYHQ/w400-h379/PBCite.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">I found they make an excellent third hand for holding SMT components in place while soldering.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-pS7Dv_em3WU/YPFiLye8jAI/AAAAAAAAgj8/TwbqgATyX5A6aIv4ODlVi3Y44aHtBNIbACPcBGAsYHg/s2180/IMG_20210716_111636976.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2180" data-original-width="1695" height="640" src="https://1.bp.blogspot.com/-pS7Dv_em3WU/YPFiLye8jAI/AAAAAAAAgj8/TwbqgATyX5A6aIv4ODlVi3Y44aHtBNIbACPcBGAsYHg/w498-h640/IMG_20210716_111636976.jpg" width="498" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Here it is holding an 0805 resistor, they are the smallest parts I am comfortable soldering by hand.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-DO0bSodcNkc/YPFiqw1lbRI/AAAAAAAAgkE/49e9o3fyr_8uWiaXp4W4tq34jV43l6wkACPcBGAsYHg/s3264/IMG_20210716_111121644.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2448" data-original-width="3264" height="480" src="https://1.bp.blogspot.com/-DO0bSodcNkc/YPFiqw1lbRI/AAAAAAAAgkE/49e9o3fyr_8uWiaXp4W4tq34jV43l6wkACPcBGAsYHg/w640-h480/IMG_20210716_111121644.jpg" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><p><br /></p>nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com4tag:blogger.com,1999:blog-4339813531032979196.post-25785063241214276862020-12-12T10:32:00.002+00:002020-12-12T11:00:44.589+00:00Sinkholes<p>Continuing my series of adventures in 3D printing holes the correct size, I turned my attention to countersink holes. </p><p>I don't normally use countersunk screws in 3D printed parts because they create lateral stress, whereas other forms of screw exert a purely compressive force, which can be spread by a washer. However, I am currently designing a part that needs flush screws in its base that is only 4mm thick, so there is no room for a counter-bore to bury a flat head.</p><p>First I had to improve my countersunk screw model because I previously just used a 45° cone with a sharp edge. In practice the edge has a nominal thickness of 1/10th of the screw diameter. That means if you countersink the hole with a normal conical countersink drill bit it has to be oversized to sink the head flush, and then leaves a gap around the circumference.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-qNOCGPNK6W0/X9PifvsGW6I/AAAAAAAAeF0/M8KYdOgw3t4GTyLKPkE-R6UQZmfDl8sTgCNcBGAsYHQ/s521/cone.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="521" height="363" src="https://1.bp.blogspot.com/-qNOCGPNK6W0/X9PifvsGW6I/AAAAAAAAeF0/M8KYdOgw3t4GTyLKPkE-R6UQZmfDl8sTgCNcBGAsYHQ/w400-h363/cone.PNG" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div>So the ideal shape for a 3D printed hole is an improvement because it can have a straight section at the top.<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-29qsLgbHCkk/X9PmLPbd60I/AAAAAAAAeGA/UnIfkhuhgxYVyk8heqvlpd2cbVIcDfqNQCNcBGAsYHQ/s449/counterbored.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="449" data-original-width="406" height="400" src="https://1.bp.blogspot.com/-29qsLgbHCkk/X9PmLPbd60I/AAAAAAAAeGA/UnIfkhuhgxYVyk8heqvlpd2cbVIcDfqNQCNcBGAsYHQ/w361-h400/counterbored.PNG" width="361" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>The complications are that, like <a href="https://hydraraptor.blogspot.com/2020/07/horiholes-2.html" target="_blank">horizontal holes</a>, we have to take into account the rounded staircase produced by the filament layers and also, like vertical holes, we need to use <a href="https://hydraraptor.blogspot.com/2011/02/polyholes.html" target="_blank">polyholes</a> to get the correct diameter when printed.<div><br /></div><div>The cone makes contact with the rounded filament edge above, rather than the centre of the extrusion, where the slicer samples the model, as shown below:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAPTt1j-4esAQ7wzzjeO94ZS1d_oDjzz_3sLKJLXFpBmcttleynNCq7XWIn75aOYB-lQ23mpoHqYbAFTwDYLILWZN4TYljE3qs67Ks37tsR_6l_MW-7Yme3yQ1pSfXymVuFCyNBeW3KmHe/s575/contact.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="365" data-original-width="575" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAPTt1j-4esAQ7wzzjeO94ZS1d_oDjzz_3sLKJLXFpBmcttleynNCq7XWIn75aOYB-lQ23mpoHqYbAFTwDYLILWZN4TYljE3qs67Ks37tsR_6l_MW-7Yme3yQ1pSfXymVuFCyNBeW3KmHe/w400-h254/contact.PNG" width="400" /></a></div>In order for the extrusion to not overlap the cone it has to be offset outwards by a distance $x$, which is simply $(\sqrt2-1) r$ where $r$ is half the layer height. Applying that to the line equation of the cone and limiting the result to be in the range between the screw clearance radius and the screw head radius gives the correct placement for the rings of filament that just touch the cone without overlapping.<div><br /></div><div style="text-align: center;"><a href="https://1.bp.blogspot.com/-VP8-UvfQ-Pk/X9QOpXSeqxI/AAAAAAAAeGY/s7_m1u4Rj4MBK8RqmnhDOOPBnVjGkWq2wCNcBGAsYHQ/s1020/polysink.png"><img border="0" data-original-height="292" data-original-width="1020" height="184" src="https://1.bp.blogspot.com/-VP8-UvfQ-Pk/X9QOpXSeqxI/AAAAAAAAeGY/s7_m1u4Rj4MBK8RqmnhDOOPBnVjGkWq2wCNcBGAsYHQ/w640-h184/polysink.png" width="640" /></a></div><div><br /></div><div>To make each of the rings print the correct size I make a stack of <a href="https://hydraraptor.blogspot.com/2011/02/polyholes.html" target="_blank">polyholes</a> to subtract from the model.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ZldZ3zOX-Xs/X9QP8MbCnnI/AAAAAAAAeGk/605Mb_66rTo6p-ridckKkmdA8WMMFrmwgCNcBGAsYHQ/s1090/polysink.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="521" data-original-width="1090" height="306" src="https://1.bp.blogspot.com/-ZldZ3zOX-Xs/X9QP8MbCnnI/AAAAAAAAeGk/605Mb_66rTo6p-ridckKkmdA8WMMFrmwgCNcBGAsYHQ/w640-h306/polysink.PNG" width="640" /></a></div><br /><div>These are double sided so they can be subtracted from the either the top or the bottom of a hole. As the slope is 45° they should be printable either way up.</div><div><br /></div><div>This is what it looks like subtracted from a part:</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-geuN2aympXk/X9QTwXiswCI/AAAAAAAAeG4/5tOVe42_G-ggKNndTtxc9EfFUAKsSDxAACNcBGAsYHQ/s1132/countersink.PNG" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="849" data-original-width="1132" height="480" src="https://1.bp.blogspot.com/-geuN2aympXk/X9QTwXiswCI/AAAAAAAAeG4/5tOVe42_G-ggKNndTtxc9EfFUAKsSDxAACNcBGAsYHQ/w640-h480/countersink.PNG" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>I have added an <a href="https://www.openscad.org/" target="_blank">OpenSCAD</a> module called <span style="font-family: courier;"><a href="https://github.com/nophead/NopSCADlib/blob/master/vitamins/screw.scad#L279" target="_blank">screw_polysink()</a></span> to <a href="https://github.com/nophead/NopSCADlib" target="_blank">NopSCADlib</a> to make printed countersinks. I haven't tried printing it yet but it should certainly work on a top surface. It might get a bit scrappy printed as an overhang without support.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com2tag:blogger.com,1999:blog-4339813531032979196.post-85207534059971746202020-07-23T18:02:00.002+01:002020-07-23T21:09:55.487+01:00Over cooked itWhen I was printing 24/7 for about 5 years I never had a problem with filament absorbing moisture because the heat from the machines kept the rooms they were in hot and dry and the filament was stored in the same rooms as the printers. In fact in winter it was so dry I had to buy a long conductive ESD mat that runs the length of my workshop and wear ESD ankle straps to prevent getting sparks off everything I touched.<br />
<br />
Since I retired I print more sporadically and tend to go away in winter and leave the heating at only 12°C. I still didn't have a problem with the white ABS that I got from Germany for kit production. It was unusual in that its natural colour was white instead of cream and it didn't smell much while printing. I used to find that I might get one or two bubbles in the skirt round the object but after that the rest of the print was fine. It appeared that filament sitting in the extruder from the last print would absorb some moisture over time but the rest on the spool that hadn't been melted did not, no matter how long it was left.<br />
<br />
I also got some black ABS from the same German company and that is totally different. It bubbles very badly and needs to be dried. It also smells like ABS when it is printed. I never got good results from printing it, so I put off using it for years until I ran out of white. I then decided to tackle the moisture problem. Inspired by RichRap's <a href="https://richrap.blogspot.com/2018/02/diy-heated-drybox-for-3d-printing.html" target="_blank">heated dry bo</a>x, I designed a parametric heated dry box that I could tailor to fit any size spool.<br />
<br />
When I made the Dibond version of Mendel90 I noticed the dummy load resistors for the ATX PSU ran a lot cooler than they did on the MDF version. I came to realise that Dibond makes quite a good heat spreader even though the aluminium layers are only 0.3mm thick.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-oWnoxvFOIDY/Xxivfq8fNxI/AAAAAAAAdL8/fzb45S3mZ7ISnMekfXS2Fac_uoVYCD3EQCNcBGAsYHQ/s1600/mendle90_resistors.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1329" height="400" src="https://1.bp.blogspot.com/-oWnoxvFOIDY/Xxivfq8fNxI/AAAAAAAAdL8/fzb45S3mZ7ISnMekfXS2Fac_uoVYCD3EQCNcBGAsYHQ/s400/mendle90_resistors.jpg" width="331" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I also had lots of 47 Ω 50W TO220 resistors from various heated bed iterations that didn't <a href="https://hydraraptor.blogspot.com/2010/04/flash-bang-bed.html" target="_blank">go too well</a>. Since this doesn't need to get very hot or need much power I thought it would be a good way to use them up.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I have a parametric box in <a href="https://github.com/nophead/NopSCADlib/blob/master/readme.md" target="_blank">NopSCADlib</a> that is made from Dibond panels and printed brackets that can be scaled to any size that fits my CNC mill, so it was easy to wrap that around my large 2.4kg spools and add 12 resistors along three sides. The spool runs on 608 ball bearings between penny washers, there is a thermistor to monitor the temperature and a small fan to stir the air around.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Ws5FlgaeMP4/Xxi03w8ajTI/AAAAAAAAdMI/K2cMAYuTqsUj-HAM_32Vh69iFGoVoR0pwCNcBGAsYHQ/s1600/inner.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="753" data-original-width="882" height="546" src="https://1.bp.blogspot.com/-Ws5FlgaeMP4/Xxi03w8ajTI/AAAAAAAAdMI/K2cMAYuTqsUj-HAM_32Vh69iFGoVoR0pwCNcBGAsYHQ/s640/inner.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I ran the resistors in series from half rectified mains to give a total wattage of 51W. I earthed all the panels and covered all the connections with heat shrink sleeving but it wouldn't pass any safety standards as the wiring isn't double insulated. Safe enough for me though as I don't need to put my hands inside it but I wouldn't recommend it. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
For my smaller 1kg spools I use 9 resistors and wire them in parallel for 12V operation. That gives 28W, which is enough for the reduced surface area and much safer.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ciEOd5KnboM/Xxi3-FpTxYI/AAAAAAAAdMY/XyjsB1H1q_YbKk_wwWzrBwEU2SFtOFOEACNcBGAsYHQ/s1600/inner2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="914" height="520" src="https://1.bp.blogspot.com/-ciEOd5KnboM/Xxi3-FpTxYI/AAAAAAAAdMY/XyjsB1H1q_YbKk_wwWzrBwEU2SFtOFOEACNcBGAsYHQ/s640/inner2.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
To reduce the energy consumption I obviously needed to insulate the outside of the box, so I suspended it inside another slightly larger box and filled the gap with cotton wool. It is a lot nicer to work with than fiberglass or rockwool and quite cheap in the quantities needed. It is also just the right thickness to fill the gap, which is dictated by the corner fixing blocks. Even without the cotton wool the air gap gave quite good insulation. The only connection between the inner and outer cases is a few printed standoffs and the wires and filament exit guide.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-nITdgUmo_IE/Xxi6USV3TgI/AAAAAAAAdMk/VWXliK2PPSwrfX32uq4tm0w-rwoVuBEbgCNcBGAsYHQ/s1600/main_assembled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="913" data-original-width="1024" height="570" src="https://1.bp.blogspot.com/-nITdgUmo_IE/Xxi6USV3TgI/AAAAAAAAdMk/VWXliK2PPSwrfX32uq4tm0w-rwoVuBEbgCNcBGAsYHQ/s640/main_assembled.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
It is completed by a hinged double door made of acrylic sheets with a hygrometer and thermometer module in the inner door. An arduino Leonardo with an LCD, some buttons and a couple of MOSFETs controls the temperature and the fan and keeps a record of the heater duty cycle. Again parts I had to use up.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So basically I created a 3D printed fan oven! </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The base of the outer box is extended, so it bridges the frame stays of my <a href="https://hydraraptor.blogspot.com/2012/12/mendel90-updates.html" target="_blank">Mendel90</a>s after removing the spool holders. Four fixing blocks stop it sliding off but are only screwed to the base, not the printer., so it can be lifted off and they then act as feet.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-dFKCxscOs28/Xxk4hzktfuI/AAAAAAAAdNE/PSjDR2Q0CW4WnUDC7WzaZ0yz_llANBpAQCNcBGAsYHQ/s1600/mendel90.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="659" data-original-width="506" src="https://1.bp.blogspot.com/-dFKCxscOs28/Xxk4hzktfuI/AAAAAAAAdNE/PSjDR2Q0CW4WnUDC7WzaZ0yz_llANBpAQCNcBGAsYHQ/s1600/mendel90.png" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The mains version is controlled by a stand alone Arduino thermostat I had previously built to control a beer fridge. Another reason the first version was mains operated.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-OBBjyQx8UfM/Xxi8sDFPUUI/AAAAAAAAdM4/ctWfQTU0_p85Ec9-IZARziHErTaxXI7kwCNcBGAsYHQ/s1600/main_assembled.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="918" data-original-width="1024" height="572" src="https://1.bp.blogspot.com/-OBBjyQx8UfM/Xxi8sDFPUUI/AAAAAAAAdM4/ctWfQTU0_p85Ec9-IZARziHErTaxXI7kwCNcBGAsYHQ/s640/main_assembled.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I have parts to make a third one the same as the second, after that I will probably make it headless with an ESP8266 and an I2C temperature and humidity sensor.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
To dry the ABS filament I set the temperature to 80°C for a few hours and then left it at 50°C, even when the printer is not in use. The relative humidity in the box drops to about 19%. In the room it is about 60%. When I was printing 24/7 it used to be well below 50%.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
As well as stopping bubbles it improves surface finish making it more glossy, makes bridges pull tighter, completely stops nozzle ooze at the end of a print and even reduces the ABS smell while printing to almost nothing.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
At the end of a print I retract an extra 1mm and turn off the heater before moving Z back to the top. Without the dryer I used to get 10 to 20mm ooze out of the nozzle as the extruder cooled down. I had always assumed this was due to gravity but it is in fact due to moisture turning to steam pushing the filament out. When it is dry the surface tension must be sufficient to stop any flow due to gravity.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I was used to snapping off the ooze before I start a build, it had become an unconscious action, but now there is nothing to remove. It will be a big advantage when I make a multi material machine as there should be no ooze from the idle extruders while another is being used.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The reduction in smell was a complete surprise. Before I dried the black ABS it seemed to smoke as it came out of the nozzle. I now realise that was water vapour and it must carry off some volatile products. It now hardly smells at all when printing but if I stick my nose in the dryer it does smell of hot plastic, even though it is only at 50°C. I guess the moisture it has driven off carries some VOCs with it.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
About a year ago I got some wood coloured ABS in the UK which was even more affected by moisture than the black, so that is when I built the second smaller dry box, around October. After drying it printed very well. I made this replacement handle for a curtain puller with it.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-XeTbWPeeC8M/XxlKZVfQtGI/AAAAAAAAdNY/2sC0Y2bj8BwK3_Cken9T6ARmixTRe42-ACNcBGAsYHQ/s1600/curtain_puller.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="988" data-original-width="1600" height="394" src="https://1.bp.blogspot.com/-XeTbWPeeC8M/XxlKZVfQtGI/AAAAAAAAdNY/2sC0Y2bj8BwK3_Cken9T6ARmixTRe42-ACNcBGAsYHQ/s640/curtain_puller.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
After switching the dry boxes off when we went away for the winter I turned them on again in March and they have been on ever since. I last printed with the brown plastic at the end of May and it was fine but when I tried to use it yesterday it has gone super brittle. The coil has a very strong heat set, something I don't like about 3mm filament on 1kg spools, and bending it straight now causes it to snap.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I was trying to use it on my original MDF Mendel90 that is now encased in a box with a chamber heater. The filament feeds from the top of the box rather than through a PTFE tube that runs all the way to the extruder. The part that was outside of the dry box for about seven weeks was still ductile but had moisture in it. When I pulled the dry part from the box through it just snaped, so I can no longer print it on that machine. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Qt1MD8Ge4bM/XxmnglrJWjI/AAAAAAAAdOA/9yBfZUA80x4ctzw706NPmf9DLZrs6y3iwCNcBGAsYHQ/s1600/sturdy90.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="823" height="640" src="https://1.bp.blogspot.com/-Qt1MD8Ge4bM/XxmnglrJWjI/AAAAAAAAdOA/9yBfZUA80x4ctzw706NPmf9DLZrs6y3iwCNcBGAsYHQ/s640/sturdy90.JPG" width="329" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
It does still seem to work on my Dibond machines that do have the PTFE tube all the way to the extruder. That keeps some of the coil's curve and doesn't require it to be fully straightened. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-EClLvGNcRa0/Xxmnv31vnpI/AAAAAAAAdOE/Uf7aStOCnMEYsmI9iZ5T6bcHZsEghrA5QCNcBGAsYHQ/s1600/Mendel90_green.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1090" height="640" src="https://1.bp.blogspot.com/-EClLvGNcRa0/Xxmnv31vnpI/AAAAAAAAdOE/Uf7aStOCnMEYsmI9iZ5T6bcHZsEghrA5QCNcBGAsYHQ/s640/Mendel90_green.JPG" width="434" /></a></div>
<span style="text-align: left;"><br /></span>
<span style="text-align: left;">And the printed objects don't seem to be brittle at all. I haven't done any proper strength tests but a quick test bending a small 100% filled block with pliers it bent and got white bruises like ABS normally does.</span>
<br />
<span style="text-align: left;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-z_sMKJJQl3M/XxmtSMTlr_I/AAAAAAAAdOU/a8BwhBWN6fsCxkcA2LTTM3iI459YDw91ACNcBGAsYHQ/s1600/block.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="986" data-original-width="1600" height="393" src="https://1.bp.blogspot.com/-z_sMKJJQl3M/XxmtSMTlr_I/AAAAAAAAdOU/a8BwhBWN6fsCxkcA2LTTM3iI459YDw91ACNcBGAsYHQ/s640/block.JPG" width="640" /></a></div>
<span style="text-align: left;"><br /></span>
<span style="text-align: left;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: left;">
So keeping brown ABS at 50°C for a few months seems to completely denature it but a melt cycle seems to restore it. I have heard of PLA going brittle on the spool but nobody seems to know for sure what causes it. PLA is also somewhat brittle but ABS isn't at all. Presumably the long polymer chains must get shorter somehow and then reform when melted. I am not sure if the temperature is the problem or if it is too dry. I have read there is an optimum moisture level for processing plastic at, rather than as dry as possible, not sure why.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
The black ABS hasn't gone brittle yet and it has been in its heated box for longer.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
My prototype MDF Mendel90 runs with a chamber temperature of 45C and I have noticed that the printed parts it is made of seem to become brittle over time. The extruder runs a lot hotter of course and the Wade's block tends to crumble after a few years and needs to be replaced regularly. They last a lot longer on my unboxed machines. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I also think ABS shrinks over time, even at room temperature. I made a test print with some holes in it a four years ago when I was having an interesting <a href="https://gilesbathgate.com/2016/02/07/polyholes-revisited/" target="_blank">discussion</a> about <a href="https://hydraraptor.blogspot.com/2011/02/polyholes.html" target="_blank">Polyholes</a> with Giles Bathgate. I tested it with plug gauges but as I didn't have a case for them I left them standing in it on a shelf near a north facing window. When I went to use them for my<a href="https://hydraraptor.blogspot.com/2020/07/horiholes-2.html" target="_blank"> Horiholes</a> test I found they were stuck in it much tighter than I remembered and the plastic has yellowed slightly.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ZS8DxBqWT-g/XxlTICughfI/AAAAAAAAdNs/WpCULYsoM1sNq4oFRpW0IJlcAdw-cty8gCNcBGAsYHQ/s1600/gauges.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1284" data-original-width="1600" height="512" src="https://1.bp.blogspot.com/-ZS8DxBqWT-g/XxlTICughfI/AAAAAAAAdNs/WpCULYsoM1sNq4oFRpW0IJlcAdw-cty8gCNcBGAsYHQ/s640/gauges.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I made a case for them with a screw top using my <a href="https://github.com/nophead/NopSCADlib#Thread">thread</a> utility in NopSCADlib, printed in the black ABS.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-_7LYDWSEcek/XxmypgOrUyI/AAAAAAAAdOg/Jw86V2PrjX8lJLSJnQbKD2wMBY05LFXMACNcBGAsYHQ/s1600/gauges-001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1198" data-original-width="1145" height="640" src="https://1.bp.blogspot.com/-_7LYDWSEcek/XxmypgOrUyI/AAAAAAAAdOg/Jw86V2PrjX8lJLSJnQbKD2wMBY05LFXMACNcBGAsYHQ/s640/gauges-001.JPG" width="610" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So now I have dropped the temperature of my dry boxes to 30°C as surely that won't degrade the plastic much more than in a hot room without sunlight. That vastly reduces the power consumption of course. 50°C needed about 50% duty cycle but 30°C is only 4%, only a shade over one Watt. The hygrometers are still reading 19% after a day at the lower temperature. I find that odd because, for a given air water content, reported relative humidity should increase as temperature falls.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
So I think I will try initially drying new plastic at 80°C overnight and then reducing to 30°C for long term storage from now on and see how that goes. A good measure of whether it is dry enough is the complete lack of ooze at the end of the build.</div>
nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com14tag:blogger.com,1999:blog-4339813531032979196.post-35947206886276564052020-07-20T16:56:00.000+01:002020-12-13T22:15:08.186+00:00Horiholes 2As <a href="https://www.blogger.com/profile/12792264289634575186" rel="nofollow" style="background-color: #f6f6f6; color: #de7008; font-family: Arial, sans-serif; font-size: 16.731px; font-weight: 700;">whosawhatsis</a> pointed out in a comment on my <a href="https://hydraraptor.blogspot.com/2020/07/horiholes_36.html#comment-form" target="_blank">last post</a>, the edges of the filament staircase are actually semicircular and that makes a big difference as to where they should be to meet the circle tangentially. Not sure why I missed that as I have done several posts about extruded filament shape, I must be losing it!<br />
<br />
This is what my previous shape actually produces.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsOif9tsAJCkjD7wIfC2era1t7_eCEs9HFBgWvGBspnVX_D_Tl48v8OQ3TUTACbRwcu7UU0K7HwNb1fb9cf995DfLqymPwOqJLQ3ZLq4N9PySY6k1ElerDc-fZjAVfs4yg9AsTNqEaUCco/s1600/rounded.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="604" data-original-width="758" height="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsOif9tsAJCkjD7wIfC2era1t7_eCEs9HFBgWvGBspnVX_D_Tl48v8OQ3TUTACbRwcu7UU0K7HwNb1fb9cf995DfLqymPwOqJLQ3ZLq4N9PySY6k1ElerDc-fZjAVfs4yg9AsTNqEaUCco/s640/rounded.PNG" width="640" /></a></div>
<br />
The circle only touches at four points. The correct shape is obtained by calculating where the semicircles meet the circle.<br />
<br />
The centres of the ends of the filament lie on a circle with a radius of the hole plus half the filament height. The end of the filament is then offset inwards horizontally by half the filament height. I.e. the slicer samples the layer at the central tip but the filament touches the circle on a tangent.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-LGF3UmSOh9g/XxR7WRAGXcI/AAAAAAAAdJw/wOBgswD_T1wfxM7xWliZdQpsEJWiI56ZQCNcBGAsYHQ/s1600/correct_correct.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="557" data-original-width="703" height="506" src="https://1.bp.blogspot.com/-LGF3UmSOh9g/XxR7WRAGXcI/AAAAAAAAdJw/wOBgswD_T1wfxM7xWliZdQpsEJWiI56ZQCNcBGAsYHQ/s640/correct_correct.PNG" width="640" /></a></div>
<br />
To make the shape geometrically I make a teardrop with a radius of the hole plus half the filament width, split it in half and shift the two halves together by half the filament width. As can be seen here that goes through all the filament tips, i.e., where the slicer samples.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-AebqyzjPwq8/XxV_vxYF9TI/AAAAAAAAdKM/ILgNISJ7pBUSlnQjgKUwlBplDvT7iO3mQCNcBGAsYHQ/s1600/shape2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="560" data-original-width="727" height="492" src="https://1.bp.blogspot.com/-AebqyzjPwq8/XxV_vxYF9TI/AAAAAAAAdKM/ILgNISJ7pBUSlnQjgKUwlBplDvT7iO3mQCNcBGAsYHQ/s640/shape2.png" width="640" /></a></div>
<br />
This is what it looks like relative to the target hole.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-o-8b5WfKPGs/XxWEa2HCTqI/AAAAAAAAdKY/A5DcftIEQ_UG--LeXCRGQ62zKwYh9pSfwCNcBGAsYHQ/s1600/shape3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="544" data-original-width="650" height="534" src="https://1.bp.blogspot.com/-o-8b5WfKPGs/XxWEa2HCTqI/AAAAAAAAdKY/A5DcftIEQ_UG--LeXCRGQ62zKwYh9pSfwCNcBGAsYHQ/s640/shape3.png" width="640" /></a></div>
<br />
Interestingly it is the same as my previous attempt at the top, bottom and sides, i.e. the only four points it touched before.<br />
<br />
I made a test with the new formula.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Y--RFAtvtCk/XxWHPAlXpsI/AAAAAAAAdKk/kMXkMdZQctkKssyn7CFa4uTTyTr8Tf9HwCNcBGAsYHQ/s1600/test2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="619" data-original-width="1144" height="346" src="https://1.bp.blogspot.com/-Y--RFAtvtCk/XxWHPAlXpsI/AAAAAAAAdKk/kMXkMdZQctkKssyn7CFa4uTTyTr8Tf9HwCNcBGAsYHQ/s640/test2.PNG" width="640" /></a></div>
<br />
The plug gauges all fit, but more snugly than before, so this is definitely a better solution for supporting a bearing in a pocket. At every layer it should have a tangential support from the rounded edge of an extrusion.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9HHSV0VkuI8/XxWw-YDCLkI/AAAAAAAAdLQ/Tpc4RIIu2R4lzrLRxVb3q6JWR_06sd_kQCNcBGAsYHQ/s1600/print.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="615" data-original-width="1600" height="246" src="https://1.bp.blogspot.com/-9HHSV0VkuI8/XxWw-YDCLkI/AAAAAAAAdLQ/Tpc4RIIu2R4lzrLRxVb3q6JWR_06sd_kQCNcBGAsYHQ/s640/print.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here is a close up of the 6mm hole that is aligned on a layer boundary and the 1mm hole above it.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-mXwwHrI10S8/XxWxUd6lE2I/AAAAAAAAdLY/8X7fSRX7tzsCZHLOP62tsA1FpBl3LC8AQCNcBGAsYHQ/s1600/close_up.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1245" height="640" src="https://1.bp.blogspot.com/-mXwwHrI10S8/XxWxUd6lE2I/AAAAAAAAdLY/8X7fSRX7tzsCZHLOP62tsA1FpBl3LC8AQCNcBGAsYHQ/s640/close_up.JPG" width="498" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
I have updated NopSCADlib on Github to use this method.<br />
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com8tag:blogger.com,1999:blog-4339813531032979196.post-80653964488987063182020-07-18T23:20:00.000+01:002020-07-18T23:45:48.740+01:00HoriholesBack in 2011 I came up with <a href="http://hydraraptor.blogspot.com/2011/02/polyholes.html" target="_blank">polyholes</a> to get around the problem of 3D printed vertical holes coming out too small. Horizontally printed holes also come out too small but for a different reason: the slicer creates a staircase approximation of the hole, but because it samples the model at the middle of the layer, the top or bottom corners intrude into the circle.<br />
<br />
This shows a 6mm truncated teardrop sliced with 0.25mm layers, with red highlighting the overlap.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKYFsiEIkxYBzkd3l_gJt0V5wwBf1rApKEBjIUA7K_T7ZcQeNvYpJ8_BVPwSSWB2mq5Z6G32LaCaAaGtn1ssgosB1NNq-k08UTmPJGsrJ5WCBh8JhfFEF9ESa-OCmiFc4eHvuY7czEXDwp/s1600/teardrop.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="404" data-original-width="602" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKYFsiEIkxYBzkd3l_gJt0V5wwBf1rApKEBjIUA7K_T7ZcQeNvYpJ8_BVPwSSWB2mq5Z6G32LaCaAaGtn1ssgosB1NNq-k08UTmPJGsrJ5WCBh8JhfFEF9ESa-OCmiFc4eHvuY7czEXDwp/s640/teardrop.PNG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
A long time ago I mitigated this by adding 1/4 of the layer height to the radius, for reasons I can't remember now, but it isn't very accurate. There is some slight interference vertically and gaps at the sides.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-9zzRNXabqzk/XxNu8vm4ThI/AAAAAAAAdIo/D7n6y49tCNAxWXfM8SbXa0iqZ-wxPiTEQCNcBGAsYHQ/s1600/plus.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="417" data-original-width="601" height="444" src="https://1.bp.blogspot.com/-9zzRNXabqzk/XxNu8vm4ThI/AAAAAAAAdIo/D7n6y49tCNAxWXfM8SbXa0iqZ-wxPiTEQCNcBGAsYHQ/s640/plus.PNG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: left;">
<div>
I am currently designing a gearbox with ball bearings in 3D printed pockets, which I want positioned accurately, so I decided to revisit the problem.</div>
<div>
<br /></div>
<div>
The correct solution is simple: the compensated shape for the teardrop is simply the hull of itself shifted up half a layer and shifted down half a layer. That compensates the top half so that the bottom of the layer ends up on the circle and the bottom half so that the top of the layer ends up on the circle.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-nsW6r0RUVJM/XxNvxkKiJ0I/AAAAAAAAdI0/v5IjAW7yLWUwGT0J_ivsi4tYbhGJMlMUwCNcBGAsYHQ/s1600/correct.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="421" data-original-width="592" height="454" src="https://1.bp.blogspot.com/-nsW6r0RUVJM/XxNvxkKiJ0I/AAAAAAAAdI0/v5IjAW7yLWUwGT0J_ivsi4tYbhGJMlMUwCNcBGAsYHQ/s640/correct.PNG" width="640" /></a></div>
<div>
<br /></div>
<div>
<div>
So now all the tips of the stairs sit exactly on the circle, except near the top where the 45 degree overhang would be exceeded.</div>
<div>
<br /></div>
<div>
This is what the hole looks like before it is sliced.</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-CoyGpIgQhoM/XxNwBhJrEqI/AAAAAAAAdJA/fs4EF7etELUQ0AUNiQyytqwzjt24zQ_ywCNcBGAsYHQ/s1600/shape.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="445" data-original-width="622" height="456" src="https://1.bp.blogspot.com/-CoyGpIgQhoM/XxNwBhJrEqI/AAAAAAAAdJA/fs4EF7etELUQ0AUNiQyytqwzjt24zQ_ywCNcBGAsYHQ/s640/shape.png" width="640" /></a></div>
<div>
<br /></div>
<div>
<div>
It does of course make the model specific to being sliced at a certain layer height, but my models tend to be designed that way anyway,</div>
<div>
<br /></div>
<div>
I printed this test piece with 6mm holes at different offsets from the layer boundary as well as holes from 1mm to 5mm and I tested it with plug gauges.</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-Cyz76SCEEec/XxNwofktnjI/AAAAAAAAdJM/2FgnwCyhjjw2VJWopkRe6epNKH4UjhyBQCNcBGAsYHQ/s1600/test.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="570" data-original-width="1427" height="255" src="https://1.bp.blogspot.com/-Cyz76SCEEec/XxNwofktnjI/AAAAAAAAdJM/2FgnwCyhjjw2VJWopkRe6epNKH4UjhyBQCNcBGAsYHQ/s640/test.PNG" width="640" /></a></div>
<div>
<br /></div>
<div>
<div>
The gauges fit all the holes easily. Some are snug and some have a little play vertically depending on how the top edge aligns with the layer boundaries.</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-yBmnttq-j38/XxNw7KD4B9I/AAAAAAAAdJU/b-IsrGgVIjwDJ3_lvLOGtfu14IjXqnKBgCPcBGAsYHg/s1600/IMG_20200718_191245579.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="825" data-original-width="1337" height="394" src="https://1.bp.blogspot.com/-yBmnttq-j38/XxNw7KD4B9I/AAAAAAAAdJU/b-IsrGgVIjwDJ3_lvLOGtfu14IjXqnKBgCPcBGAsYHg/s640/IMG_20200718_191245579.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<div>
The bridge layers over the top come out a bit low because the filament forms a cylinder from a volume that would normally almost fill a rectangle, making it a slight interference fit when the top lines up exactly with the layers. In other cases there is a bit of vertical play due to the 45 degree limit at the top of the teardrop. This won't be an issue with my gearbox because it will be split into top and bottom halves and the top half will be printed upside down.</div>
<div>
<br /></div>
<div>
I have updated<span style="font-family: inherit;"> </span><span style="font-family: "courier new" , "courier" , monospace;">teardrop_plus()</span> in NopSCADlib to use this method and also added a <span style="font-family: "courier new" , "courier" , monospace;">plus</span> option to all the other variants like <span style="font-family: "courier new" , "courier" , monospace;">tearslot()</span>. See <a href="https://github.com/nophead/NopSCADlib#Teardrops">https://github.com/nophead/NopSCADlib#Teardrops</a> and <a href="https://github.com/nophead/NopSCADlib#Horiholes">https://github.com/nophead/NopSCADlib#Horiholes</a> where you can find the code to make the test STL. </div>
<div>
<br /></div>
<div>
It should work universally as long as all slicers slice in the centre of the layer. Obviously it makes less difference with smaller layer heights.</div>
<div>
<br /></div>
</div>
</div>
nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com10tag:blogger.com,1999:blog-4339813531032979196.post-80350973331078332782019-06-13T11:10:00.000+01:002019-06-13T11:26:17.169+01:00NopSCADlibWhen I used <a href="https://www.openscad.org/index.html" target="_blank">OpenSCAD</a> to design <a href="http://hydraraptor.blogspot.com/2011/12/mendel90.html" target="_blank">Mendel90</a> I modelled complete assembly views with all the vitamins in place and a significant part of the code was actually the vitamins. Vitamins being the RepRap term for non-printed parts of a 3D printer, fasteners, motors, etc. I also automated the generation of the bill of materials, STL files, DXF files and PNG assembly views, but making the build manual was still a lot of manual work, pardon the pun.<br />
<br />
After Mendel90 production ended I started designing other projects and found myself needing to use its vitamin library, but because it wasn't designed to be stand alone, that quickly got messy. Eventually I made a new stand alone library and a more general Python framework that would work for any project.<br />
<br />
Over the last few years I have refactored it many times, making it much faster to preview, more general and more automated. In particular it can now catalogue all the vitamins and automatically make build manuals for any project using Markdown embedded in OpenSCAD comments. There is a simple example <a href="https://github.com/nophead/NopSCADlib/blob/master/examples/MainsBreakOutBox/readme.md" target="_blank">here</a>. I also added reusable printed parts, such as feet, hinges and handles and some reusable enclosures.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-837al0k-oMM/XQIKxpOzIZI/AAAAAAAAaEw/f_vvj9xnHywcD8DEdzPw9zdphgdJzyKsQCLcBGAs/s1600/libtest.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1072" data-original-width="1300" src="https://1.bp.blogspot.com/-837al0k-oMM/XQIKxpOzIZI/AAAAAAAAaEw/f_vvj9xnHywcD8DEdzPw9zdphgdJzyKsQCLcBGAs/s1600/libtest.png" /></a></div>
<br />
It will never be complete because each significant project I make with it usually needs a few more types of vitamin, but it is hopefully structured so that it can grow sustainably without bringing OpenSCAD to its knees. To do that I had to fix some issues in OpenSCAD itself because it used to slow down exponentially with the number of files used. The picture above has an instance of every part in the library. The latest release of OpenSCAD can draw it in about one minute on my desktop PC. This is remarkable because at one time it took 12 minutes.<br />
<br />
Here is an example of a typical assembly views it creates: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-DxLRbxcE04Y/XQIQlhx7OEI/AAAAAAAAaE8/H-eavcOyMkEF87ig4PgAhPTkUzh5JWLQgCLcBGAs/s1600/box_assembly.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="688" src="https://1.bp.blogspot.com/-DxLRbxcE04Y/XQIQlhx7OEI/AAAAAAAAaE8/H-eavcOyMkEF87ig4PgAhPTkUzh5JWLQgCLcBGAs/s1600/box_assembly.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I have published it open source <a href="https://github.com/nophead/NopSCADlib" target="_blank">on GitHub</a> to enable me to publish projects that use it in the future. I use it for every project I make now, so I don't have any stand alone scad files that can be put on Thingiverse, for example. Feel free to use it in your own projects.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com4tag:blogger.com,1999:blog-4339813531032979196.post-38595911873062275712018-06-06T18:29:00.002+01:002018-06-06T18:29:46.737+01:00Beware fake multi-meter leadsI bought these multi-meter leads on eBay for £2.99. They are advertised as "16PCS/Set Multimeter Probe Pin Test Leads Cable Multifunction Digital Clip Kit". I was attracted to them by the large number of accessories including pin type plugs that fit old analogue multi-meters.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-T2Pvd3VyRQs/WxgLcXYmpyI/AAAAAAAAWAg/pw7TakzQNBI78JgyWvLD4fv0H2-kKuioQCKgBGAs/s1600/IMG_20180606_163935.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="840" data-original-width="1600" height="334" src="https://1.bp.blogspot.com/-T2Pvd3VyRQs/WxgLcXYmpyI/AAAAAAAAWAg/pw7TakzQNBI78JgyWvLD4fv0H2-kKuioQCKgBGAs/s640/IMG_20180606_163935.jpg" width="640" /></a></div>
<br />
When they arrived I discovered that the wires are steel and have a resistance of about 1 Ohm each, which makes them about as useful as a chocolate teapot. Any resistance measurement gets 2 Ohms added . Current measurements on the amps range drop large voltages, the wires get hot and would burn if left on for more that a few seconds.<br />
<br />
Voltage measurements would be accurate enough but where the attachments screw on there is exposed metal, so not suitable for high voltages.<br />
<br />
I got a full refund and get a set of these instead for £2.97.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-y0XJs-DHcQQ/WxgNyI6AfgI/AAAAAAAAWAs/7oiEchgWT2AIMJygKfb9mzqAXcv35QEAACKgBGAs/s1600/IMG_20180606_163850.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1021" data-original-width="1600" height="408" src="https://2.bp.blogspot.com/-y0XJs-DHcQQ/WxgNyI6AfgI/AAAAAAAAWAs/7oiEchgWT2AIMJygKfb9mzqAXcv35QEAACKgBGAs/s640/IMG_20180606_163850.jpg" width="640" /></a></div>
<br />
They claim to be CE cat III rated for 1000V and 20A. Their resistance is only 64 milliohms. Not bad but my UNI-T UT61E came with 600V 10A rated ones that measure 44 milliohms and my EEVblog BM235 wins with 24 milliohms for 1000V 10A probes.<br />
<br />
I got them to replace these old ones that belong to a multi-meter I inherited from my Dad. They have numerous burns from touching a soldering iron.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-QX-WAwRkwSo/WxgVGBnnE5I/AAAAAAAAWBo/7FSLC8J4acIxE1bs2yCIURQS39QeSUfAwCKgBGAs/s1600/IMG_20180606_175748.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="915" data-original-width="1600" height="364" src="https://3.bp.blogspot.com/-QX-WAwRkwSo/WxgVGBnnE5I/AAAAAAAAWBo/7FSLC8J4acIxE1bs2yCIURQS39QeSUfAwCKgBGAs/s640/IMG_20180606_175748.jpg" width="640" /></a></div>
<br />
I dug out this old meter when I realised all my modern digital meters only go up to 1000V at most. This one goes up to 6KV!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-cgbjR1VXq5M/WxgVpyuDVEI/AAAAAAAAWB0/adC11Gvzd5srEQvqPo7p9EyrulyMXSVsQCKgBGAs/s1600/IMG_20180606_180241.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1165" height="640" src="https://3.bp.blogspot.com/-cgbjR1VXq5M/WxgVpyuDVEI/AAAAAAAAWB0/adC11Gvzd5srEQvqPo7p9EyrulyMXSVsQCKgBGAs/s640/IMG_20180606_180241.jpg" width="466" /></a></div>
<br />
I think it was purchased sometime in the early 1970s. It is branded Honor Model TE-12, made in Japan. I have seen identical ones on the web branded Lafayette. I don't think you would get away with connectors like that for 6KV nowadays!<br />
<br />
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com1tag:blogger.com,1999:blog-4339813531032979196.post-25086089311191139762018-06-02T11:53:00.000+01:002018-06-02T11:53:27.894+01:00Avoiding annoying Blogger cookie warningsBeing warned by every web site that it uses cookies is very annoying. I don't see how it is useful because virtually every site uses cookies.<br />
<br />
When looking at a Blog hosted by Blogger it is even more annoying because it warns for every new page of a blog visited. Looking at the cookie it uses to decide whether to warn about using cookies I noticed it stores the path of the page relative to the blog. That is why it warns for each page of someones blog. However it looks like it won't warn for sub paths of the path in the cookie. So if you visit the root of the blog and dismiss the warning there it gets rid of the warnings for every other page in the same blog. This is a lot more reasonable and probably the way it should work by default.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-MZ_sBUe22kY/WxJ1DWL_U9I/AAAAAAAAV-c/UVZnoDZ7sP8cp7MMUy74XVWK6apVvFTMgCLcBGAs/s1600/cookie.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="118" data-original-width="201" height="187" src="https://2.bp.blogspot.com/-MZ_sBUe22kY/WxJ1DWL_U9I/AAAAAAAAV-c/UVZnoDZ7sP8cp7MMUy74XVWK6apVvFTMgCLcBGAs/s320/cookie.PNG" width="320" /></a></div>
<br />
It is also annoying that this will expire in a year. If every website I visit repeats the warning every year it will continue to be a constant stream of warnings forever.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com0tag:blogger.com,1999:blog-4339813531032979196.post-44848119419172178912018-04-24T21:20:00.000+01:002018-04-26T15:10:10.443+01:00ESP8266 SPI SpyI came across a <a href="https://www.webx.dk/oz2cpu/energy-meter/energy-meter.htm" target="_blank">very useful post</a> by Thomas Scherrer that describes how to read data from a Peacefair PZEM-021 energy meter by spying on the SPI bus with an Arduino. I decided to do the same thing with an ESP-12F WiFi module so that I could view the results remotely and plot graphs, etc. It took me a lot longer to get this working than I anticipated due to a few problems along the way.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-kKv-H5NSNm0/WtyOD6XIkoI/AAAAAAAAViA/V_4xxRLnqFoObr8M2RXylzGQMQv2I8SmQCLcBGAs/s1600/pzem021_front.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="920" data-original-width="1600" height="230" src="https://2.bp.blogspot.com/-kKv-H5NSNm0/WtyOD6XIkoI/AAAAAAAAViA/V_4xxRLnqFoObr8M2RXylzGQMQv2I8SmQCLcBGAs/s400/pzem021_front.jpg" width="400" /></a></div>
<br />
<br />
The main hardware difference is the ESP8266 is a 3.3V device but the Arduino is 5V. The PZEM-021 is actually a mixture. The RN8208G metering chip is a 5V device. It is a SPI slave, the SPI master is an STM32 ARM processor that is 3.3V but with 5V tolerant inputs. That means the signals originating from the CPU can go straight into the ESP8266 but the data out from the RN8208G would need attenuating.<br />
<br />
Copying Thomas, I removed the mains dropper components C1 and R1 and powered the PZEM-021 from an external supply. This allows it to measure voltages right down to zero instead of cutting out at 80V. I used this little 12V 1A supply recommended by <a href="https://www.youtube.com/watch?v=Pa-bPlZikfE" target="_blank">Big Clive</a> on YouTube.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-QnlZ8srzMmc/WtyPSMsmSMI/AAAAAAAAViM/ETgVERcMd-4YSY_bRjEYT8I7786rk2coACLcBGAs/s1600/12VPSU.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="853" data-original-width="1600" height="340" src="https://2.bp.blogspot.com/-QnlZ8srzMmc/WtyPSMsmSMI/AAAAAAAAViM/ETgVERcMd-4YSY_bRjEYT8I7786rk2coACLcBGAs/s640/12VPSU.jpg" width="640" /></a></div>
<br />
I powered the ESP-12F from the same supply with a tiny 3.3V MP2307 buck converter module.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-PLgjRCgrqBo/WtyQcBatigI/AAAAAAAAViY/RH0901K9MdYlHIh4IhmnCOzPTth6S2lkACLcBGAs/s1600/buck.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="951" data-original-width="1353" height="280" src="https://2.bp.blogspot.com/-PLgjRCgrqBo/WtyQcBatigI/AAAAAAAAViY/RH0901K9MdYlHIh4IhmnCOzPTth6S2lkACLcBGAs/s400/buck.jpg" width="400" /></a></div>
<br />
WARNING: when connected to PZEM-021 the 0V rail is at mains neutral potential. This has to be treated with the same precautions as live because if the mains lead happened to be be reversed or the neutral connection broke it would become live. Don't connect a USB programmer or a scope ground to the circuit unless you power it with a mains isolation transformer. Fortunately the ESP8266 can be programmed wirelessly from the Arduino IDE once a sketch with ArduinoOTA has been installed and this is much faster than USB.<br />
<div>
<br /></div>
During the hardware development I used a mains isolation unit that I made after watching <a href="https://www.youtube.com/watch?v=51mjt9nFoeA" target="_blank">this video</a> by Paul Carlson, another of my favourite YouTubers. I built this originally to allow me to repair a switch mode PSU that was part of a friend's home cinema unit. It allows me to connect my scope to the live part of a circuit but then of course it is no longer isolated, so great care has to be taken not to touch the high voltage bits.<br />
<br />
It is a DiBond box with 3D printed frame, handles and rubber feet containing an isolation transformer and a small variac. It also has two 100W light bulbs in parallel with a bypass switch for optional current limiting, a different model of power meter and some 4mm jack sockets allowing me to attach my <a href="http://hydraraptor.blogspot.co.uk/2017/06/mooshimeter-mod.html" target="_blank">Mooshimeter</a> to log voltage and current.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-lkbYpX6JXgc/WtyZLg56i2I/AAAAAAAAViw/TtzgVLDbPoIJ9SAbIWCJvgQFElnt_lmOgCLcBGAs/s1600/isolation_tx.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1397" height="640" src="https://1.bp.blogspot.com/-lkbYpX6JXgc/WtyZLg56i2I/AAAAAAAAViw/TtzgVLDbPoIJ9SAbIWCJvgQFElnt_lmOgCLcBGAs/s640/isolation_tx.jpg" width="558" /></a></div>
<br />
The first task was to solder wires on to the PZEM-021 PCB to bring power in and data out to my circuit.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-I702AwA5y44/Wtye-Qv4bzI/AAAAAAAAVjA/pVjQ2Cr7VpgkhqYxuqu3l99o5vl59cN_gCLcBGAs/s1600/pzem021_back.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="858" data-original-width="1600" height="340" src="https://3.bp.blogspot.com/-I702AwA5y44/Wtye-Qv4bzI/AAAAAAAAVjA/pVjQ2Cr7VpgkhqYxuqu3l99o5vl59cN_gCLcBGAs/s640/pzem021_back.jpg" width="640" /></a></div>
<br />
I didn't see a need for the chip select / word latch signal and I took the data from the other end of R9 compared to Thomas. The signals are as follows:<br />
<ul>
<li>Red is 12V, black is ground. </li>
<li>The word latch going to the display from chip U2 pin 7 on the left, used for synchronisation. </li>
<li>MISO data coming from the energy chip via R9.</li>
<li>The SPI clock coming from U2 pin 12.</li>
</ul>
The two wires on the chip are tricky to solder due to the fine pitch, which is much smaller than a practical soldering iron bit. I used the following technique:<br />
<ul>
<li>Strip some wire-wrap wire and trim the end to be the length of the flat part of the pin.</li>
<li>Tin it. It doesn't hold much solder due to being such a small radius.</li>
<li>Add plenty of liquid flux around the pin.</li>
<li>Line the wire up along the top of the pin with an Andonstar ADSM201 microscope camera.</li>
<li>Put a very small amount of solder on a small chisel bit.</li>
<li>Press the iron on top of the wire and leave it long enough to conduct the heat through the wire to boil the flux and melt the solder on the pad below.</li>
</ul>
The amount of solder on the iron bit is crucial. If you use too much it will bridge the pins. To remove a bridge add plenty of flux and wipe the pin with a large flat bit. Surface tension will cause some solder to wick onto the bit, wipe it off and repeat until the bridge breaks.<br />
<br />
When I looked at the levels of the signals I got a bit of a surprise. I was expecting MISO on channel 2 to go to 5V but the other two come from the ARM and should be 3.3V signals.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-etEJd4Sjq7Q/WtyoRwxytQI/AAAAAAAAVjQ/vlXJe0f89DAWdpezF8aPLrZW8TW5y1_IgCLcBGAs/s1600/RIGOL%2BPrint%2BScreen08-04-2018%2B11_37_24.801.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://1.bp.blogspot.com/-etEJd4Sjq7Q/WtyoRwxytQI/AAAAAAAAVjQ/vlXJe0f89DAWdpezF8aPLrZW8TW5y1_IgCLcBGAs/s640/RIGOL%2BPrint%2BScreen08-04-2018%2B11_37_24.801.png" width="640" /></a></div>
<br />
They seem to have a 20kHz ripple that takes them up to 4V. I looked back at Thomas' oscilloscope pictures and see the same ripple there. It doesn't make any difference for him because he is using a 5V chip but I didn't want to stuff 4V into my ESP8266!<br />
<br />
On further investigation I found that the whole 3.3V rail had this ripple on it. It comes from a Holtek HT7133-1 3.3V LDO regulator. The datasheet for that suggests 10uF decoupling capacitors on the input and output. The circuit has what looks like a 10uF tant on its input but the output decoupler is a tiny MLCC that looks too small to be 10uF. I added a 10uF electrolytic in parallel and that killed the oscillation. It is the blue radial cap across C1 in the photo above.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-3pW7Km9UPDM/WtytnWlz_mI/AAAAAAAAVjs/rQ7mRa3G6QMm6ks5ObTjGuBiZ2v555EaACLcBGAs/s1600/RIGOL%2BPrint%2BScreen08-04-2018%2B14_05_42.183.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://3.bp.blogspot.com/-3pW7Km9UPDM/WtytnWlz_mI/AAAAAAAAVjs/rQ7mRa3G6QMm6ks5ObTjGuBiZ2v555EaACLcBGAs/s640/RIGOL%2BPrint%2BScreen08-04-2018%2B14_05_42.183.png" width="640" /></a></div>
<br />
That just left the issue of the 5V signal to contend with. R9 turns out to be 1K so simply adding a 2K2 to ground drops the signal low enough.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-QnTkjzJQxaA/WtyxL6Gh_eI/AAAAAAAAVj4/eMgs2SM3EqoY7MVAE-ohFpoBxuVzkZ-7QCLcBGAs/s1600/attenuated.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://1.bp.blogspot.com/-QnTkjzJQxaA/WtyxL6Gh_eI/AAAAAAAAVj4/eMgs2SM3EqoY7MVAE-ohFpoBxuVzkZ-7QCLcBGAs/s640/attenuated.png" width="640" /></a></div>
<br />
It also changes the first eight bits from FF to 00. This is actually when the command byte is being sent to the meter chip on MOSI and MISO is tri-state, so it doesn't matter.<br />
<br />
Hardware done, on to the firmware. Before starting the project I had seen that the ESP8266 has a spare SPI port available and I assumed it would be straightforward to just read a stream of 13 bytes, wrong! It wasn't because the SPI port it a relatively complex device with dozens of registers that doesn't just send and receive bytes. It actually works at the command level, expecting to send or receive a command and address and then send or receive status or data bytes.<br />
<br />
When in host mode it is possible to configure it to send and receive arbitrary bytes, indeed that is what the Arduino SPI class does and it works on the ESP8266 more or less the same as it does on an AVR. In slave mode though it has to receive a command and address according to the <a href="http://wiki.ai-thinker.com/_media/esp8266/docs/esp8266-technical_reference_en.pdf" target="_blank">technical manual</a> and the command defines what happens next. The relevant sections are:<br />
<blockquote class="tr_bq" style="font-family: sans-serif; font-size: 16.7456px; left: 221.814px; top: 486.394px; transform: scaleX(0.968485);">
4.3.2. <span style="font-size: 18.268px;">Communication Format Supported by S</span><span style="font-size: 18.268px;">lave SPI</span>Slave ESP8266SPI communication format is almost the same as that of the master mode, <span style="font-size: 16.7456px;">i.e. command+address+read/write data, but the slave read/write operation has its</span>hardware command and undeletable address, which is, <br />
<ul>
<li><span style="font-size: 16.7456px;">Command: a must; length: 3 ~ 16 bits; master output and slave input </span><span style="font-size: 16.7456px;">(MOSI).</span></li>
</ul>
<ul>
<li><span style="font-size: 16.7456px;">Address: a must; length: 1 ~ 32 bits; </span><span style="font-size: 16.7456px;">master output and slave input </span><span style="font-size: 16.7456px;">(MOSI).</span></li>
</ul>
<ul>
<li><span style="font-size: 16.7456px;">Read/write data: optional; length: 0 ~ 512 bits (64 Bytes); master output and slave </span><span style="font-size: 16.7456px;">input (MOSI) or master input and slave output (MISO).</span></li>
</ul>
4.3.3.<span style="font-size: 18.268px;">Command Definition Supported by S</span><span style="font-size: 18.268px;">lave SPI</span>The length of slave receiving command should at least be 3 bits. For low 3 bits, there are <span style="font-size: 16.7456px;">hardware reading and writing operation, which is,</span><br />
<ul>
<li>010 <span style="font-size: 16.7456px;">(slave receiving) : Write the data sent by master into the register of slave data </span><span style="font-size: 16.7456px;">caching via MOSI, i.e. SPI_FLASH_C0 to SPI_FLASH_C15.</span></li>
</ul>
<ul>
<li>011 (slave sending):<span style="font-size: 16.7456px;">Send the data in the register of slave data caching (from </span><span style="font-size: 16.7456px;">SPI_FLASH_C0 to SPI_FLASH_C15) to master via MOSI.</span></li>
</ul>
<ul>
<li>110 (slave receiving and sending): Send slave data caching to MISO and write the <span style="font-size: 16.7456px;">master data in MOSI into data caching SPI_FLASH_C0 to SPI_FLASH_C15.</span></li>
</ul>
</blockquote>
<span style="font-family: inherit;">On the face of it this looks like it will not work in this application, which is unbelievable that a SPI port can't read arbitrary data as a slave and is hard coded for emulating flash chips and the like. </span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">I couldn't find any proper register level documentation for the ESP8266 other than various .h files on the web. The Arduino library uses shortened names which are very cryptic but some headers use longer names. While searching for these I came across the technical manual for the ESP32 and realised it has SPI ports that are nearly the same. It also has register level documentation in it's <a href="https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf" target="_blank">technical manual</a> so I was able to get a slightly better understanding. After a lot of experimentation I found a solution.</span><br />
<br />
The first n bits get interpreted as a command, where n is 3 or more and defaults to 8. The start of the 13 byte sequence that I want to receive is always zero now that I added the pull down resistor. So it always receives command zero. The bottom three bits normally control what happens next and zero defaults to read status. However, it is possible to override this with user definable commands by setting SPI_SLV_CMD_DEFINE in SPI_SLAVE_REG. That makes the SPI_SLAVE3_REG define what the command values are for four different actions. By setting SPI_SLV_WRBUF_CMD_VALUE to zero and the other three values to nonzero I was able to make it interpret the command as write buffer, so the rest of the data gets written into the buffer.<br />
<br />
Well that was the theory but I was missing two bytes at the beginning. This was because it was being interpreted as an address. The default address length is 24 bits. I changed it to 8 by setting SPI_USER1_REG and now I get the 12 bytes of data following the zero byte. Now this doesn't make sense because if the first 8 bits are being interpreted as an address where is the command coming from? The command length is set by SPI_USER2_REG and it defaults to 8. I was expecting to have to set it to say four and set the address length to four bits so that they could share the first byte but any value between 2 and 8 seems to work and makes no difference. I don't know if it is a bug in the chip or I don't understand something but I get to read my 12 bytes of data<br />
<br />
So in conclusion you can't read a completely arbitrary SPI data stream but you can if the first few bits are a known value.<br />
<br />
Here is my code that sets up the HSPI:<br />
<br />
<script src="https://gist.github.com/nophead/f78bca73d730285ad16300087c58a783.js"></script>
When the data is received I get an interrupt where I copy it from the HSPI's dword buffer into a byte buffer in RAM.<br />
<br />
<script src="https://gist.github.com/nophead/24a0c01ddb3751c4f784a30fadaecf81.js"></script>
I set up the sync pin to generate an interrupt on the falling edge. This resets the HSPI and unmarshals the data:<br />
<br />
<script src="https://gist.github.com/nophead/d2bee0b721845a5ed905669f598b6007.js"></script>
I found that when I switched the load on and off I sometimes got a data packet shifted right one bit. That points to a spike on the SPI clock line into the ESP8266 but I could not find one with a 100MHz scope triggered on the mains switching edge. I added a snubber close to the switch but that didn't cure it, so I bodged it in the firmware and moved on. If a voltage sample is not more than half the previous one I ignore it once.<br />
<br />
Another oddity is that when there is no load and the voltage is relatively high the power reading would go slightly negative. I detect that and set it to zero.<br />
<br />
The foreground loop looks for the new_readings flag to be set and does the conversion to real units:<br />
<br />
<script src="https://gist.github.com/nophead/b57427fc6323f6ddee3ae20b4a1df26f.js"></script>
The conversion constants are close to what Thomas used but slightly different, so the ARM must have some per unit factory calibration constants in it.
<br />
<br />
So it took me longer than I anticipated to follow in Thomas' footsteps because of the complexity and lack of proper documentation for the ESP8266 HSPI peripheral but I got there in the end. I hope others find this as useful as I found Thomas' work.<br />
<br />
By now you are probably wondering what this is all for. Well, while investigating a strange line regulation problem in a power supply I got annoyed that the mains voltage in our house is constantly varying, making it hard to make measurements of input versus output. This is what it looks like logged every 10 seconds over a couple of days using my Mooshimeter.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-qp-uYaaqcz8/Wt9R-6pi4BI/AAAAAAAAVlo/1v5veDBUI7cJoDAag-eM5iKBXs3Fy6D2wCLcBGAs/s1600/mains.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="323" data-original-width="1600" src="https://1.bp.blogspot.com/-qp-uYaaqcz8/Wt9R-6pi4BI/AAAAAAAAVlo/1v5veDBUI7cJoDAag-eM5iKBXs3Fy6D2wCLcBGAs/s1600/mains.PNG" /></a></div>
<br />
As well as the small modern variac shown above I have a old WM5 model that I got on eBay. The <a href="https://www.ietlabs.com/pdf/GR_Experimenters/1955/GenRad_Experimenter_Dec_1955.pdf" target="_blank">only data I could find</a> on it was from 1955. It still works fine so I decided to automate it with a small stepper motor to maintain a specified voltage. I.e. make a WiFi control IOT variac.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-U8mUdJjOJcI/Wt9dSbFUUMI/AAAAAAAAVmQ/nNYejQcHRNoA7TAGzfIOh2U2lFm_uh2pACLcBGAs/s1600/variacbot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1537" data-original-width="1600" height="614" src="https://2.bp.blogspot.com/-U8mUdJjOJcI/Wt9dSbFUUMI/AAAAAAAAVmQ/nNYejQcHRNoA7TAGzfIOh2U2lFm_uh2pACLcBGAs/s640/variacbot.jpg" width="640" /></a></div>
<br />
Another DiBond and printed part creation but the front panel had to be acrylic to let the WiFi out. Fortunately the front of my bench faces towards my router. The ESP8266 controls the motor via a Pololu stepper driver.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-LPyMeZUV9BM/Wt9f6yQwdGI/AAAAAAAAVmg/BpfMBfu3EFUvMeyoMLHNp5U5_jRzFN3CACLcBGAs/s1600/variac_controller.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1145" data-original-width="1600" height="456" src="https://1.bp.blogspot.com/-LPyMeZUV9BM/Wt9f6yQwdGI/AAAAAAAAVmg/BpfMBfu3EFUvMeyoMLHNp5U5_jRzFN3CACLcBGAs/s640/variac_controller.jpg" width="640" /></a></div>
<br />
The control interface is a simple web form that also shows the current readings using<a href="https://circuits4you.com/2018/02/04/esp8266-ajax-update-part-of-web-page-without-refreshing/" target="_blank"> AJAX as described here</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-_8SyvB6tiNM/Wt9gJ1vBhII/AAAAAAAAVmk/bx5Zua901ig19Dm-HUgUbmcGSFyoXsdMwCLcBGAs/s1600/variac_screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1280" data-original-width="720" height="640" src="https://3.bp.blogspot.com/-_8SyvB6tiNM/Wt9gJ1vBhII/AAAAAAAAVmk/bx5Zua901ig19Dm-HUgUbmcGSFyoXsdMwCLcBGAs/s640/variac_screenshot.png" width="360" /></a></div>
<br />
The control algorithm is very simple. The motor is stepped at the specified speed by the error in voltage multiplied by the gain. The readings update every 200ms but they lag a lot. That causes overshoot if the gain is set high. It would probably benefit from a full PID controller but it works well enough for now. The deadband setting allows it to stay in a range without constantly moving because I don't want to wear out the variac. Servo control of a variac is a standard way of regulating mains but I have no idea how long the brushes last. Manual mode disables the motor.<br />
<br />
The readings can be read and the settings changed from the command line or from a Python script using<a href="https://en.wikipedia.org/wiki/CURL" target="_blank"> cURL</a>. Here is an example that sweeps the voltage from 10 to 250 in 10 Volt steps and reads the current and power.<br />
<br />
<script src="https://gist.github.com/nophead/9971e140a134753400d45899f4a78d4a.js"></script>
Here is a graph showing current, power and resistance versus voltage of a 60W light bulb<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-jxz4I0RrKiY/Wt9xrupq5zI/AAAAAAAAVm8/HaWN1Q0ONDkLQBLpA_MZ4YgQzuI6bycrQCLcBGAs/s1600/bulb_graph.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="539" data-original-width="890" height="386" src="https://3.bp.blogspot.com/-jxz4I0RrKiY/Wt9xrupq5zI/AAAAAAAAVm8/HaWN1Q0ONDkLQBLpA_MZ4YgQzuI6bycrQCLcBGAs/s640/bulb_graph.PNG" width="640" /></a></div>
<br />
I plan to use this to plot a power supply line regulation graph. For that I will need a way of reading the output voltage in my script. I have two scopes that have network APIs as well as my Mooshimeter that has a BLE interface. I just need to work out which is the easiest to access in Python.<br />
<br />
Here is the full ESP8266 sketch.<br />
<br />
<script src="https://gist.github.com/nophead/6404c6670c9409aa6dfa5cf65829260f.js"></script>nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com8tag:blogger.com,1999:blog-4339813531032979196.post-30579159088430879142018-04-15T20:04:00.000+01:002018-04-15T20:04:39.909+01:00ESP8266 contention during programming To put the ESP8266 into serial programming mode it needs to be reset with GPIO 2 held high, GPIO 15 low and GPIO 0 low. On the other hand to start it executing flash GPIO 0 needs to be high during reset. I have seen lots of circuits on the web, for example the NodeMCU board and Adafruit's Huzzah board that pull GPIO 0 to ground with a switch and / or with DTR from a USB to serial adapter. Reset can be driven from RTS to automate programming with the Arduino IDE.<br />
<br />
A lesser known fact is that when the ESP8266 goes into programming mode it outputs a 26 MHz clock on GPIO 0 with considerable drive strength and fast edges. Shorting this to ground or DTR is not good at all as it causes massive contention and generates a lot of noise. This can cause programming to fail unless there is some hefty decoupling on the supply rail. The simple solution is to put a resistor between GPIO 0 and whatever is pulling it low. Here is what the signals look like with 10K between GPIO 0 and DTR from an FTD1232.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-8nkv6Ftu1IY/WtOUGxBgH7I/AAAAAAAAVds/behCINFiZ9I-khhMA6-z_r4r2ZkgcQT8QCLcBGAs/s1600/contention..jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="440" data-original-width="595" height="472" src="https://1.bp.blogspot.com/-8nkv6Ftu1IY/WtOUGxBgH7I/AAAAAAAAVds/behCINFiZ9I-khhMA6-z_r4r2ZkgcQT8QCLcBGAs/s640/contention..jpg" width="640" /></a></div>
<br />
The oscillation doesn't show up at full amplitude with a slow time base but I can assure you it is full swing with plenty of overshoot due to not being terminated. You can see a bit of it coupled onto the TX line and this is when it is through 10K. Imagine how noisy things get when it is fighting with the FTD1232 DTR line and winning.<br />
<br />
Another lesser know fact is that when the ESP8266 is in reset its GPIO lines get pulled up internally. You can see with 10K pulling it down the GPIO line only goes down to about 0.7V during reset.<br />
<br />
Before reset my application is driving GPIO 0 low. RTS goes low a short time before DTR, so it briefly becomes an input and gets pulled to 3.3V by DTR before it pulls it low again. This explains the spike on the left.<br />
<br />
I haven't seen any circuits published that avoid this contention.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com2tag:blogger.com,1999:blog-4339813531032979196.post-45307348139820996902018-04-03T21:40:00.000+01:002018-04-04T00:13:38.507+01:00Printed ESP-12 module breakout adapterI plan to make a few projects based around ESP-12F WiFi modules. These are postage stamp sized modules containing an ESP8266 chip plus 4MB of flash. The <a href="https://en.wikipedia.org/wiki/ESP8266" target="_blank">ESP8266</a> chip is a 32 bit MCU with an integrated WiFi transceiver and TCP/IP stack. They come programmed as a WiFi modem but they can be reprogrammed with the Arduino IDE to do other things in addition to the WiFi. Great for IOT applications because they are so small and cheap (less than £2) but reasonably powerful. A lot more powerful than an Arduino, for example, but with less I/O.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-gQs_5-bt3X8/WsJTtc9E3mI/AAAAAAAAVZc/_1MfNVnqITkLBKeBu1PNsc3EwnS4RfwVACLcBGAs/s1600/ESP-12F.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="314" data-original-width="421" height="297" src="https://4.bp.blogspot.com/-gQs_5-bt3X8/WsJTtc9E3mI/AAAAAAAAVZc/_1MfNVnqITkLBKeBu1PNsc3EwnS4RfwVACLcBGAs/s400/ESP-12F.jpg" width="400" /></a></div>
<br />
The solder pads are on a 2mm pitch, so they are often used with a breakout board to adapt them to 0.1" pitch for breadboard or perfboard, etc. That adds cost and increases the size somewhat because the through hole pins need to be outside the perimeter of the module. I solved the problem another way, by using a 3D printed wire guide that routes wires from the 0.2mm pitch holes to the nearest 0.1" hole, minimising the space used and costing virtually nothing.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-w0L1pRDmgP8/WsJW5PKXyII/AAAAAAAAVZo/IAmAI7xsDC0PvlNd9pqFkU3IVeEw-XMkACLcBGAs/s1600/adapter.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="479" data-original-width="574" height="333" src="https://3.bp.blogspot.com/-w0L1pRDmgP8/WsJW5PKXyII/AAAAAAAAVZo/IAmAI7xsDC0PvlNd9pqFkU3IVeEw-XMkACLcBGAs/s400/adapter.jpg" width="400" /></a></div>
<br />
The holes in the module are quite small so I use stripped wire wrap wire. I push it through the module, down through the guide, which routes it to the correct hole in the perfboard. I fold the top over, solder it to the module and trim it. I do the four corners first and pull them tight and solder underneath to secure the module.<br />
<br />
Here is a module mounted on perboard.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-DyPo5bwVHmw/WsJanPkD0TI/AAAAAAAAVZw/9n4ghTNHEZsiUpjS5dVAyeZvqExpAMkJgCLcBGAs/s1600/variac_controller.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1145" data-original-width="1600" height="456" src="https://2.bp.blogspot.com/-DyPo5bwVHmw/WsJanPkD0TI/AAAAAAAAVZw/9n4ghTNHEZsiUpjS5dVAyeZvqExpAMkJgCLcBGAs/s640/variac_controller.jpg" width="640" /></a></div>
<br />
It doesn't use any extra board space outside the 0.1" holes it uses. I.e. the adjacent holes are all usable.<br />
<br />
I didn't break out the end connections because they are not very useful. They are all GPIO lines used internally for the flash. I read it is possible to free up two by removing the can and re-configuring the flash chip to use a two bit interface instead of four bits, but that is too much hassle for me.<br />
<br />
Here is the OpenSCAD that produced the adapter: -
<br />
<script src="https://gist.github.com/nophead/b743bb6b09b23bcdb0e276fdda4cea70.js"></script>
<br />
The only notable thing is the squeezed wall definition, see my <a href="http://hydraraptor.blogspot.co.uk/2018/04/avoiding-voids.html" target="_blank">previous post</a>.<br />
<br />
<br />
<br />
<br />
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com0tag:blogger.com,1999:blog-4339813531032979196.post-71271779806024670772018-04-03T14:12:00.000+01:002018-04-03T17:28:58.043+01:00Avoiding voidsThe thinnest practical wall you can print, (with Skeinforge at least), is two extrusion widths wide. Any bigger leaves a gap, until you get to three extrusions wide, and then you get infill in between them.<br />
<br />
If the wall is exactly two extrusions wide then they only touch
tangentially and have a weak bond because the edges of the filament are
rounded.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-qfjahEYmQwI/WsM0a7jiE9I/AAAAAAAAVag/SFswYvFWcZ4lH64F824F0-X-_ucmaLaAQCLcBGAs/s1600/twin.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="248" data-original-width="622" height="254" src="https://3.bp.blogspot.com/-qfjahEYmQwI/WsM0a7jiE9I/AAAAAAAAVag/SFswYvFWcZ4lH64F824F0-X-_ucmaLaAQCLcBGAs/s640/twin.PNG" width="640" /></a></div>
<br />
I discovered that if you make a wall even thinner then Skeinforge still lays down two paths equal to the extrusion width but places them closer together. This is because it always offsets inwards by half the extrusion width, even if the resulting paths overlap. I found I can make use of this to squash the plastic together, making a stronger wall with less voids.<br />
<br />
An optimum amount of squeeze is to place the nozzle aperture just free of the flat part of the first path when extruding the second. The width to make this happen is $extrusion\_width - layer\_height / 2 + nozzle\_aperture / 2 + extrusion\_width / 2$.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-MKHlgcEJLzQ/WsM5cNn8pDI/AAAAAAAAVaw/GJf6FbhMV_sROBTv7-gGCovF6vFEPmHFgCLcBGAs/s1600/attempted.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="1420" height="216" src="https://2.bp.blogspot.com/-MKHlgcEJLzQ/WsM5cNn8pDI/AAAAAAAAVaw/GJf6FbhMV_sROBTv7-gGCovF6vFEPmHFgCLcBGAs/s640/attempted.PNG" width="640" /></a></div>
<br />
Of course, despite what Skeinforge thinks, the plastic volume can't overlap, so regardless of where the nozzle is the minimum width the wall can be is $2 * extrusion\_width - layer\_height * (1 - π/4)$ due to the volume of plastic extruded, i.e. if it manages to completely fill the voids. This is shown below: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-BNKRsxnT2IM/WsNT5fkwemI/AAAAAAAAVbI/uNPJTiCMTkgwSiW4VZ7UGlF4BJxqvhJVQCLcBGAs/s1600/actual.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="831" height="176" src="https://2.bp.blogspot.com/-BNKRsxnT2IM/WsNT5fkwemI/AAAAAAAAVbI/uNPJTiCMTkgwSiW4VZ7UGlF4BJxqvhJVQCLcBGAs/s640/actual.PNG" width="640" /></a></div>
<br />
The grey area is where the edge would have been with the wall two extrusion widths wide. There isn't much difference, and depending on the viscosity of the plastic, the real width should be somewhere in between. But the big difference is the walls are strongly fused together. The top void should be completely filled because it is right under the nozzle, leading to a smoother top surface. And the bottom void has more chance of being filled due to the back pressure caused by the filament having to flow more to the right.<br />
<br />
To put some numbers to the diagrams, these have been drawn to scale for 0.25mm layer height and 0.5mm extrusion width, 0.4mm nozzle. The requested wall width is 0.825mm but the volume of plastic means it must be at least 0.946mm, only 0.054mm less than the original 1mm wall.<br />
<br />
I made a test script that makes a box with two 1mm walls and two 0.825mm walls.<br />
<br />
<script src="https://gist.github.com/nophead/eb799ccd853f60e4f31ec600939a3dd4.js"></script>
<br />
Here is a corner of the box under a microscope. The wall on the left is seamlessly fused and the wall on the right clearly has a void.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtiTqnEQZnlFN8Ybx05gOWNJ1XOjPrsAQVZOPWY_tK_OpYWwPP0xUK1Oe7gW_4GgzUx4bymMCE4pnFiNXy29C3WutQLlLUy1n4NFyC31zFic26YQDsIUQUfTYuP28F2InoRwRd3EvH4pSW/s1600/corner.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="640" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtiTqnEQZnlFN8Ybx05gOWNJ1XOjPrsAQVZOPWY_tK_OpYWwPP0xUK1Oe7gW_4GgzUx4bymMCE4pnFiNXy29C3WutQLlLUy1n4NFyC31zFic26YQDsIUQUfTYuP28F2InoRwRd3EvH4pSW/s640/corner.bmp" width="640" /></a></div>
<br />
The wall comes out a bit thinner than the theory predicts, I am not sure why, maybe the increased pressure causes the plastic to feed a bit slower.<br />
<br />
I used this technique to make the <a href="https://github.com/nophead/Mendel90/blob/master/scad/fan-guard.scad" target="_blank">Mendel90 fan guards</a> a lot stronger part way through production because I had some fall apart one day when my filament was a bit undersized.<br />
<br />
It would be nice if the slicer could do this automatically, so you can keep a 1mm wall in the design, but it would make it by extruding one side of the wall as normal but the other side it would offset the nozzle to fill the voids and then extrude a little more plastic to make it still 1mm thick.<br />
<br />
In fact it should really do this anytime it is extruding against another extrusion path. E.g. when doing multiple outlines and when doing infill. I.e. the only time the tool path of the nozzle should be down the centre of the extrusion path is when there is nothing either side, or it is enclosed on both sides. And in each of these three cases a slightly different flow rate would be needed to get the new exposed edge in the correct place.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com2tag:blogger.com,1999:blog-4339813531032979196.post-11960059018941770212017-12-02T13:48:00.000+00:002017-12-02T13:48:08.627+00:00Fretting corrosionLong ago I noticed friction fit connectors are not reliable in 3D printers: <a href="http://hydraraptor.blogspot.co.uk/2011/06/reliable-connections.html">hydraraptor.blogspot.co.uk/2011/06/reliable-connections</a>. For example, 0.1" Molex connectors that are rated for 3A burn out when only carrying 1A motor currents. Even signal connectors on HydraRaptor lose contact and need re-seating occasionally. I figured it must be due to vibration and / or thermal expansion and contraction.<br />
<br />
It is one of the reasons I choose the Melzi electronics for Mendel90, i.e. because it has screw terminals instead of Molex connectors that are common on other boards like RAMPS. While looking at some connectors for another project I came across the term "fretting corrosion", which is exactly the problem that causes failed connections when you have vibration or thermal movement. There is a marketing video explaining it here:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe width="320" height="266" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/YtPBzVtJY4E/0.jpg" src="https://www.youtube.com/embed/YtPBzVtJY4E?feature=player_embedded" frameborder="0" allowfullscreen></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Basically contact mating points need to be gas tight to prevent corrosion and any relative movement breaks the gas tight seal. You can now get connectors that have sprung female parts to absorb any motion and prevent this mode of failure. Worth considering if you are designing a 3D printer.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com5tag:blogger.com,1999:blog-4339813531032979196.post-45424216547127000142017-08-07T00:45:00.000+01:002017-08-07T00:45:41.563+01:00Will it burnI always intended to put lots of different tool heads on HydraRaptor
but after being a <a href="http://hydraraptor.blogspot.co.uk/2007/06/bob-on.html" target="_blank">milling machine</a> for a while it got stuck as a 3D
printer until I started making Mendel90 kits and then it sat gathering
dust.<br />
<br />
Back in 2009 I bought a 1W 808nm infra red laser diode to experiment with but I never got around to trying it out until recently.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-d1HUr-8ihkY/WYBe5-EpsdI/AAAAAAAAIuQ/sCoXjGOpYC8PXjovkKKShS52yRpw5pqOQCLcBGAs/s1600/laser_diode.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="497" data-original-width="851" height="372" src="https://4.bp.blogspot.com/-d1HUr-8ihkY/WYBe5-EpsdI/AAAAAAAAIuQ/sCoXjGOpYC8PXjovkKKShS52yRpw5pqOQCLcBGAs/s640/laser_diode.JPG" width="640" /></a></div>
<br />
I bought it on eBay for £292, which seems very expensive now, but the seller claimed it has a spot size of only 13um x 120um. That would give a power density of 640 W/mm<sup>2</sup>, assuming a rectangular spot. In comparison a 40W CO<sub>2</sub> laser with a round spot of say 0.25mm would give a power density of 815 W/mm<sup>2</sup>, so I expected to be able to cut through wood and plastic a few mm thick with it.<br />
<br />
Inconveniently, the anode of the diode is connected to the case. <br />
<br />
It came with a driver board that takes 11-18V and a TTL enable signal and produces a constant current drive.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-aVzFub_6C08/WYCUokHC8EI/AAAAAAAAIu0/aYUPtLyr11QxjUhnH4qFn7H7nwuuifaowCLcBGAs/s1600/laser_driver.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1355" data-original-width="1600" height="271" src="https://1.bp.blogspot.com/-aVzFub_6C08/WYCUokHC8EI/AAAAAAAAIu0/aYUPtLyr11QxjUhnH4qFn7H7nwuuifaowCLcBGAs/s320/laser_driver.JPG" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
It is all a bit last century with through hole components and a relay. I looked at the switching waveform and found that the relay added an 8.2ms delay and there was a 2.95ms rise time.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-Fxf7J2YtHuE/WYCWLho-isI/AAAAAAAAIu8/KUIbIkD_ivAG0rGWwhFTEfyxSvnHlFWAACLcBGAs/s1600/RIGOL%2BPrint%2BScreen24-05-2017%2B12_31_32.946.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://2.bp.blogspot.com/-Fxf7J2YtHuE/WYCWLho-isI/AAAAAAAAIu8/KUIbIkD_ivAG0rGWwhFTEfyxSvnHlFWAACLcBGAs/s640/RIGOL%2BPrint%2BScreen24-05-2017%2B12_31_32.946.png" width="640" /></a></div>
The blue trace is the enable signal and the yellow trace the output voltage.<br />
<br />
The two TO220 devices had their markings ground off but it was trivial to trace the circuit and work out what they are: a 7810 10V regulator and an LM317 variable regulator wired as a 1.25A constant current source.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-ew6bZ_kbQTI/WYCcWytULgI/AAAAAAAAIvM/TcCI6XejAmQE2AYuPw7tLEATIkSvhby1QCLcBGAs/s1600/laser_driver_schematic.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="448" data-original-width="1600" height="178" src="https://2.bp.blogspot.com/-ew6bZ_kbQTI/WYCcWytULgI/AAAAAAAAIvM/TcCI6XejAmQE2AYuPw7tLEATIkSvhby1QCLcBGAs/s640/laser_driver_schematic.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Laser didoes are very easily destroyed by overshoot transients of even a few micro seconds duration, so most of the circuit seems to be to avoid those. R2 and C3 seem to be to stop inductive spikes from the relay getting onto the 10V rail. R4 and C6 are probably to filter any relay contact bounce but they also make the rise and fall times very slow. D1 is a mystery because it can never be forward biased, so might as well not be there.<br />
<br />
I hacked the PCB and reconfigured the circuit to replace the relay with a MOSFET, speed up the edge rate and added a big red LED to warn me when it was on. I have a pair of <a href="https://www.thorlabs.com/thorproduct.cfm?partnumber=LG9" target="_blank">Thorlabs LG9</a> safety glasses to protect my eyes.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-CQMNfwslEK8/WYCqAQf6hoI/AAAAAAAAIvY/n5KQz86dINkCISBwn-0tmhrvWiF1P-1kQCLcBGAs/s1600/hacked_driver.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="867" data-original-width="1600" height="346" src="https://2.bp.blogspot.com/-CQMNfwslEK8/WYCqAQf6hoI/AAAAAAAAIvY/n5KQz86dINkCISBwn-0tmhrvWiF1P-1kQCLcBGAs/s640/hacked_driver.jpg" width="640" /></a></div>
Here is the new switching waveform: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-eFxmlcrKuUQ/WYCr0Qb3KDI/AAAAAAAAIvc/JApNtK_0HqMASuYjhJZb86qH9SE6QmmvACLcBGAs/s1600/RIGOL%2BPrint%2BScreen02-06-2017%2B12_11_50.994.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="800" height="384" src="https://4.bp.blogspot.com/-eFxmlcrKuUQ/WYCr0Qb3KDI/AAAAAAAAIvc/JApNtK_0HqMASuYjhJZb86qH9SE6QmmvACLcBGAs/s640/RIGOL%2BPrint%2BScreen02-06-2017%2B12_11_50.994.png" width="640" /></a></div>
<br />
This time the yellow trace is the enable signal. The blue trace is the current waveform measured with the hall effect current sensor mentioned in my last post. The small delay turning on is while the output capacitor charges enough for the diode to start conducting. The rise and fall times are now less than 1ms which seems more reasonable.<br />
<br />
The forward voltage of the diode is about 2.2V at 1.25A giving a power dissipation of 2.75W and an efficiency of 36% assuming the output is 1W. I mounted it on an old PC CPU cooler which was complete overkill.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-3qCo2JIcHUo/WYL6N2f_G2I/AAAAAAAAIw8/5v5jlyza78gVQQFcsvVU3q-EEA_6U0UHgCLcBGAs/s1600/cooler.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="742" data-original-width="900" height="327" src="https://2.bp.blogspot.com/-3qCo2JIcHUo/WYL6N2f_G2I/AAAAAAAAIw8/5v5jlyza78gVQQFcsvVU3q-EEA_6U0UHgCLcBGAs/s400/cooler.JPG" width="400" /></a></div>
<br />
I made a rough estimate of the thermal resistance of the heatsink with the fan on by attaching a 50W resistor that has the same case style as the laser. The heatsink itself is about 0.23°C/W and the case of the resistor a little more, 0.48°C/W in total. So the temperature of the diode casing will rise by less than 1°C.<br />
<br />
These dashes were made by waving a random piece of black plastic (most likely ABS) in front of it while the 100 Hz test waveform above was driving it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ztxq3xhS18U/WYC51odkIcI/AAAAAAAAIvo/GXcxsI6zWSUHzdCWdhyBtcU01_aCt86OgCLcBGAs/s1600/dashes.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="793" data-original-width="1600" height="197" src="https://1.bp.blogspot.com/-ztxq3xhS18U/WYC51odkIcI/AAAAAAAAIvo/GXcxsI6zWSUHzdCWdhyBtcU01_aCt86OgCLcBGAs/s400/dashes.JPG" width="400" /></a></div>
<br />
With continuous power it makes deep scars.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-YRkjLKn-bWQ/WYC6VGBZBHI/AAAAAAAAIvs/crUfD3e3Wu8NTR0UwrBWaaJNoFonXQdcwCLcBGAs/s1600/lines.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://1.bp.blogspot.com/-YRkjLKn-bWQ/WYC6VGBZBHI/AAAAAAAAIvs/crUfD3e3Wu8NTR0UwrBWaaJNoFonXQdcwCLcBGAs/s400/lines.JPG" width="400" /></a></div>
<br />
Holding it steady I was able to slowly drill all the way through the 1.75mm thickness but it left a ring on the surface. The exit hole was clean though. By all accounts ABS doesn't laser very well.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-P2CZIL9PPZs/WYC677FBjBI/AAAAAAAAIvw/rx3AmXw614A3ZfpZn-gmMrXTkK00YOzWQCLcBGAs/s1600/hole.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="300" src="https://3.bp.blogspot.com/-P2CZIL9PPZs/WYC677FBjBI/AAAAAAAAIvw/rx3AmXw614A3ZfpZn-gmMrXTkK00YOzWQCLcBGAs/s400/hole.JPG" width="400" /></a></div>
<br />
With these rough manual tests I established the focus length was about 35mm, which I needed to know to be able to design a mount for HydraRaptor, so that I could position it relative to the <a href="http://hydraraptor.blogspot.co.uk/2011/04/auto-z-probe.html" target="_blank">Z probe</a> to give me auto focus.<br />
<br />
I also established it has no effect at all on white paper because that reflects red light and this is near IR, so it will behave mostly the same as red light. It also had no effect on some Kapton (polyimide) film because that is transparent to red light. With near IR you can only cut materials that absorb the red end of the spectrum. If they are transparent or reflective to red they are unaffected. In contrast, CO<sub>2</sub> laser light is far infra red with a much longer wavelength and that is absorbed by most things including optically transparent materials like glass and clear acrylic and white materials like paper.<br />
<br />
I designed HydraRaptor in 2D and that was all it needed at the time because it was made from flat sheets of MDF and had no 3D printed parts. In order to be able to add new parts to it I decided to re-model it in 3D in <a href="http://www.openscad.org/" target="_blank">OpenSCAD</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-MfcI2TVRFdE/WYS76tY_5KI/AAAAAAAAIxY/xMP0bUF-gYsbZoI1YOxwdupTa3bbAh3vQCLcBGAs/s1600/main.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="834" data-original-width="840" height="634" src="https://4.bp.blogspot.com/-MfcI2TVRFdE/WYS76tY_5KI/AAAAAAAAIxY/xMP0bUF-gYsbZoI1YOxwdupTa3bbAh3vQCLcBGAs/s640/main.png" width="640" /></a></div>
<br />
I mounted the heatsink on a printed bracket that aligns the laser with the centre of the table and also supports a radial blower and duct for air assist. That is a jet of air that blows the smoke away from the cut and the lens.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-NwidIzh3MAU/WYTSR-wc0RI/AAAAAAAAIxo/OqOxDRSQhDo_QpgyN00igrbXROGIO-fZgCLcBGAs/s1600/laser.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="834" data-original-width="840" height="634" src="https://1.bp.blogspot.com/-NwidIzh3MAU/WYTSR-wc0RI/AAAAAAAAIxo/OqOxDRSQhDo_QpgyN00igrbXROGIO-fZgCLcBGAs/s640/laser.png" width="640" /></a></div>
<br />
I made a steel plate bed to protect the XY table and allow me to hold down the work piece with magnets. An L shaped bracket made from DiBond allows repeatable alignment with the back left corner of the bed. I used that corner to allow oversized sheets to hang over the front right where there is maximum clearance. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ke9xk_LTOO4/WYTbVi4czsI/AAAAAAAAIx8/-OD6kJQ1o3w5Hxw1VQ8Ic5a2n3plzoneACLcBGAs/s1600/bed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="834" data-original-width="840" height="634" src="https://1.bp.blogspot.com/-ke9xk_LTOO4/WYTbVi4czsI/AAAAAAAAIx8/-OD6kJQ1o3w5Hxw1VQ8Ic5a2n3plzoneACLcBGAs/s640/bed.png" width="640" /></a></div>
<br />
The hole in the corner of the L is needed because an internal corner would otherwise have a radius equal to the tool radius that cut it.<br />
<br />
The first task was to find the exact focal point and I did that by burning a line of spots from different heights into the paint surface of an off-cut of DiBond and looked for the smallest one. I have hundreds of these off-cuts from making Mendel90 kits and because the paint is a thin layer on top of aluminum it seems like a good way to measure the spot size.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-UEWWGNLsTlo/WYZMoY7bWfI/AAAAAAAAIys/lPASUn5gdwQ2iALckccX9dVF5XcRu4vAACLcBGAs/s1600/focus.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="454" data-original-width="1600" height="180" src="https://3.bp.blogspot.com/-UEWWGNLsTlo/WYZMoY7bWfI/AAAAAAAAIys/lPASUn5gdwQ2iALckccX9dVF5XcRu4vAACLcBGAs/s640/focus.JPG" width="640" /></a></div>
<br />
After I had established the focal point I then needed to establish how big the spot is. I have a microscope and a graticule slide but it was too hard to align it by hand. The alternative method I came up with was to make a line of spots 0.1mm apart so that I could compare the spot size with their pitch and use the ratio to work out the size.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-OV5-L6bcjiY/WYTl8W8E4zI/AAAAAAAAIyM/0rRSTWjkZ2IkHqvGkyhrEfjGl0VRhgLxQCLcBGAs/s1600/spots.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="640" height="480" src="https://2.bp.blogspot.com/-OV5-L6bcjiY/WYTl8W8E4zI/AAAAAAAAIyM/0rRSTWjkZ2IkHqvGkyhrEfjGl0VRhgLxQCLcBGAs/s640/spots.jpg" width="640" /></a></div>
<br />
As you can see the spot isn't quite aligned with the outer case of the laser. The size works out at 0.16mm by 0.07mm. This is a lot bigger than the 0.12mm x 0.013mm advertised and only gives a power density of 90 W/mm<sup>2</sup>. The bright area in the middle where it looks to have cut to full depth is 0.036mm wide.<br />
<br />
Laser spots don't have well defined sharp edges. An ideal laser has a Gaussian intensity distribution which falls off away from the centre asymptotically to zero. The beam diameter is sometimes defined as where the intensity drops to half the maximum and other times where the intensity drops to 1/e<sup>2 </sup>≈ 13.5%. So my power density calculations are somewhat naive.<br />
<br />
The beam starts off long and thin because it comes out of the edge of the chip die. The cleaved edges form the two parallel mirrors. Whereas I think of lasers having a parallel beam, the beam from a diode laser diverges at tens of degrees. And it diverges faster in the axis at right angles to the die than it does in the axis parallel to the die. So although it starts out wide and short it ends up tall and thin.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-iCv9KNLyI10/WYZAccNz0bI/AAAAAAAAIyc/Y7asTVwr4bIgFrgBes6MplvvyYk64PvXACLcBGAs/s1600/beam.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="735" data-original-width="1041" height="449" src="https://2.bp.blogspot.com/-iCv9KNLyI10/WYZAccNz0bI/AAAAAAAAIyc/Y7asTVwr4bIgFrgBes6MplvvyYk64PvXACLcBGAs/s640/beam.png" width="640" /></a></div>
<br />
Not only that, but the beam also has astigmatism. That is: the point that the beam diverges horizontally from is further back then the point it diverges vertically from. So focusing it to a round spot requires tricky anamorphic optics. Mine just has a plain lens that is rotated in a screw thread to adjust the focus, so it can't correct the elliptical beam shape.<br />
<br />
My next experiment was to work out what travel speed I can engrave at. This will be different horizontally and vertically because the energy density applied to the material will depend on the area swept out as well as the power and time. This will make motion planning interesting as the speed will need to vary depending on the slope of a line and so will the kerf compensation. Alternatively the laser could be mounted on a rotary axis to keep it pointing along the axis of travel for maximum detail. That would need a very accurately aligned axis though to avoid the spot wandering as it rotates. A round spot would be a lot easier to deal with!<br />
<br />
I engraved a 5x5mm crosshatch with each line at a different speed. Speed reduces from left to right and bottom to top. The speeds are 5mm/s, 5/2mm/s, 5/3mm/s. ... 5/13mm/s.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-YJnpeYP1l8s/WYcSO0DKJYI/AAAAAAAAIy8/1AYp-0bfHVYG-hH1Q7DQDfiPfOJpcCKwACLcBGAs/s1600/cross_hatch.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1055" data-original-width="1114" height="606" src="https://2.bp.blogspot.com/-YJnpeYP1l8s/WYcSO0DKJYI/AAAAAAAAIy8/1AYp-0bfHVYG-hH1Q7DQDfiPfOJpcCKwACLcBGAs/s640/cross_hatch.JPG" width="640" /></a></div>
<br />
By looking at the cross over points one can tell if the maximum engraving depth has been reached or not. So it needs go as slow as about 0.5mm/s horizontally to not show the vertical lines.<br />
<br />
Note that it never goes deep enough to reach the aluminium skin. It looks bright but when I check for conductivity with a mulitmeter I have to scratch away the white layer to get contact. I think there must be white primer underneath the black paint and that reflects the laser, stopping further ablation.<br />
<br />
Here is a 5x5mm rectangle engraved with a raster of lines overlapping 50%.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-eVVIKPJG8rk/WYdBvoRlfxI/AAAAAAAAIzM/gW9ytUEyHVMnFlufv0GH07WjTS1eRIPzgCLcBGAs/s1600/engrave.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1327" data-original-width="1600" height="530" src="https://2.bp.blogspot.com/-eVVIKPJG8rk/WYdBvoRlfxI/AAAAAAAAIzM/gW9ytUEyHVMnFlufv0GH07WjTS1eRIPzgCLcBGAs/s640/engrave.JPG" width="640" /></a></div>
<br />
I don't know what gives it an apparent texture.<br />
<br />
While doing these tests it soon became apparent that I needed fume extraction because removing even a tiny amount of paint smelt unpleasant. I thought I might get away without it for shallow engraving as there are many open frame laser engraving machines on the market. My first attempt was to add an 80cfm fan close to the edge of the bed that sucks air and blows it down a 1" pipe that I hang out of the window.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-JLuXdrvutvw/WYdCk7R22pI/AAAAAAAAIzY/jzsiLWihqqUYNGYFUJh8GoPYssZIWxlcgCLcBGAs/s1600/extractor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="971" data-original-width="1421" height="436" src="https://3.bp.blogspot.com/-JLuXdrvutvw/WYdCk7R22pI/AAAAAAAAIzY/jzsiLWihqqUYNGYFUJh8GoPYssZIWxlcgCLcBGAs/s640/extractor.png" width="640" /></a></div>
<br />
It produces quite a powerful suction and this reduced the smell but not enough. I switched to tests on balsa wood because I thought it would be less toxic. I have a lot of 2mm sheets left over from the early days of RepRap when it was used as a <a href="http://hydraraptor.blogspot.co.uk/2008/04/more-playing.html" target="_blank">bed material for PLA</a> before better options were discovered.<br />
<br />
It still smelt very smokey, so I decided to make an enclosure. I had always intended to do this. Way back when I bought the laser, I also bought some brushed aluminum DiBond sheets big enough to make a cover but ended up using most of them for other things. I did have two left to make the front and top and some black off-cuts from Mendel90 production long enough to make the sides.<br />
<br />
The width of HydraRaptor is 511mm and that is bigger than the X axis of my CNC router, which is 450mm. By hanging it over the side of the bed so it just cleared the gantry I was able to route one side at a time. I made some tooling holes in the corners of the door cutout that allowed me to turn it around 180° but maintain accurate registration. If it had been 1mm wider it would not have fit the router!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-MDVX2lDBJN0/WYdLq9pCTyI/AAAAAAAAIzo/Klt5m1D-77UMPIDGvg1w4XGg9XGz11wAQCLcBGAs/s1600/enclosure.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="971" data-original-width="1421" height="436" src="https://3.bp.blogspot.com/-MDVX2lDBJN0/WYdLq9pCTyI/AAAAAAAAIzo/Klt5m1D-77UMPIDGvg1w4XGg9XGz11wAQCLcBGAs/s640/enclosure.png" width="640" /></a></div>
<br />
The door is an acrylic one I recycled from my Mendel case. I might replace it with DiBond to remove the need to wear safety glasses. It is sealed around the edges with rubber sealing strip tape. The enclosure isn't airtight because there are holes for wires to the z-axis driver, etc, but it is under significant negative pressure when the fan is running, so they are not a problem. I cut an 80mm hole opposite the extractor fan to get a good stream of air across the bed.<br />
<br />
The enclosure removes any smell in the room while it is engraving wood but the smokey smell remains inside the machine even after a couple of weeks.<br />
<br />
I did a larger grid test (50mm x 50mm) to see what speed I could cut through 2mm thick balsa wood but found it didn't matter how slow I went it did not go right through but it did give a wider charred area. The speed is 5 / n mm/s, where n is the line's index.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-DjSsYoTyeeI/WYdvPeH5MWI/AAAAAAAAIz4/vrE77QCOR2oWQHzHxJcZ1XTh0zuW1p4RACLcBGAs/s1600/crosshatch.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="516" data-original-width="522" height="632" src="https://3.bp.blogspot.com/-DjSsYoTyeeI/WYdvPeH5MWI/AAAAAAAAIz4/vrE77QCOR2oWQHzHxJcZ1XTh0zuW1p4RACLcBGAs/s640/crosshatch.JPG" width="640" /></a></div>
<br />
Here is the underside: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmpIX898ishVdOI1dk6sDN63O1gLPbAjLXlHEvC42_A8h4X3E3x8J6r3dVtlYyKCLZD9vi92CwpcyVQdOEP3uydiLeFuHJ198WjEph7pioER5jtV2s6arxv2Sc0WQ3mJ5vy1s883SYBIQ/s1600/back.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="511" data-original-width="585" height="558" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmpIX898ishVdOI1dk6sDN63O1gLPbAjLXlHEvC42_A8h4X3E3x8J6r3dVtlYyKCLZD9vi92CwpcyVQdOEP3uydiLeFuHJ198WjEph7pioER5jtV2s6arxv2Sc0WQ3mJ5vy1s883SYBIQ/s640/back.JPG" width="640" /></a></div>
<br />
Just a few pin prick holes and some surrounding char where the slowest lines cross.<br />
<br />
I did another test where instead of reducing the speed by the line's index I kept the speed constant at 3mm/s (5 mm/s for y) but repeated the line n times. I found this gave far less char and actually cut all the way through.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-ygqnUTVsOmE/WYeRSHBfm0I/AAAAAAAAI0Q/XoET-Iid9n4azAQQUnCwyR1a6zOAHTS1gCLcBGAs/s1600/CIMG1761.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="601" data-original-width="601" height="640" src="https://4.bp.blogspot.com/-ygqnUTVsOmE/WYeRSHBfm0I/AAAAAAAAI0Q/XoET-Iid9n4azAQQUnCwyR1a6zOAHTS1gCLcBGAs/s640/CIMG1761.JPG" width="640" /></a></div>
<br />
So horizontally it took 4 passes at 3mm/s to cut through and vertically 6 passes at 5mm/s. Working out the power energy density as passes * power / speed these are more or less the same, which is odd considering the big difference in beam width.<br />
<br />
The next test I tried was to cut out a square using four passes at 3mm/s in both directions.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-NLIkvKSXbYg/WYeS03GzPkI/AAAAAAAAI0c/0RzQI3KRQ5QjGEDG6xT495aCTZW21B15gCLcBGAs/s1600/square.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="532" data-original-width="551" height="308" src="https://4.bp.blogspot.com/-NLIkvKSXbYg/WYeS03GzPkI/AAAAAAAAI0c/0RzQI3KRQ5QjGEDG6xT495aCTZW21B15gCLcBGAs/s320/square.JPG" width="320" /></a></div>
<br />
I was disappointed to find it didn't cut all the way through so I re-ran the grid test above and the laser power dropped to zero and it never lased again. The left edge of the wood was not very straight where I cut it with a knife and it left a small gap that allowed the laser beam to hit the steel plate below. What seems to have happened is the reflection was enough to destroy the diode's mirrors. It still takes the same power but gives no output. This is known as<a href="https://en.wikipedia.org/wiki/Catastrophic_optical_damage" target="_blank"> Catastrophical Optical Damage</a>.<br />
<br />
Where the beam had previously gone all the way though to the steel it had created black stains so that stopped any reflection. So it looks like I should have painted my steel plate black. I was also lucky that the DiBond didn't engrave down to the aluminium surface as I expect that would be an even better mirror.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-cdkUK0n2S34/WYeYGZDmRtI/AAAAAAAAI1E/OLmj3QVfzj8GbZZQYx19pWOLigYxC2DiwCKgBGAs/s1600/IMG_20170806_231116.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="898" data-original-width="1600" height="358" src="https://1.bp.blogspot.com/-cdkUK0n2S34/WYeYGZDmRtI/AAAAAAAAI1E/OLmj3QVfzj8GbZZQYx19pWOLigYxC2DiwCKgBGAs/s640/IMG_20170806_231116.jpg" width="640" /></a></div>
<br />
So a disastrous end to the experiment!<br />
<br />
I have ordered a 2.3W blue laser from China so I will continue experimenting with that when it arrives. I also have a 12W IR fiber laser to play with but that requires a serious power supply and cooling system, so I will get more experience with lower power lasers before I attempt to power that up.<br />
<br />
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com13tag:blogger.com,1999:blog-4339813531032979196.post-67747339990269724502017-07-30T19:10:00.000+01:002017-07-30T19:10:11.180+01:00Adding weightSometimes it is desirable to make 3D printed items with heavy bases, so that they stand up or are not easily moved. An example is this base I made to hold two tiny PCBs.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX2pj88t0z87-T0R2f28ty8TrVap_bWzD625sboZb85S7OBEXv706hSnMs8uDoIVvasvST-Ag-SUEjgrXMKATBV43zHUzk7ARTi0EkYH6dkh7sM8keyFrwF_8GgzwFlbrkbyJ2p9b_z5IP/s1600/hall_pcb.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="548" data-original-width="567" height="617" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX2pj88t0z87-T0R2f28ty8TrVap_bWzD625sboZb85S7OBEXv706hSnMs8uDoIVvasvST-Ag-SUEjgrXMKATBV43zHUzk7ARTi0EkYH6dkh7sM8keyFrwF_8GgzwFlbrkbyJ2p9b_z5IP/s640/hall_pcb.JPG" width="640" /></a></div>
<br />
They are Hall effect isolated current to voltage converters that I plan to use to measure stepper motor current waveforms in conjunction with an oscilloscope. They don't have any mounting holes, so I clamped them by the corners and screwed them onto a printed base.<br />
<br />
I wanted the base to be heavy to stop them being dragged around by the scope leads. A while ago I saw a <a href="https://www.youtube.com/watch?v=jf29HmLmfRs&feature=youtu.be&t=12m02s" target="_blank">Youtube video by Warner Berry</a> where he used lead shot to make printed parts with heavy bases. He prints parts with no bottom layers, so the honeycomb infill is exposed. He fills that with lead shot and then pours in epoxy resin. When that has cured he sands the base flat and sticks on a rubber sheet to make them non-slip.<br />
<br />
I found lead shot on eBay sold for filling diving belts but I also found steel shot sold for filling teddy bears and that was much cheaper and available in smaller diameters. Steel has about 2/3 the density of lead, so it is a cheaper way of adding weight if you can accommodate 50% more volume. It also has the advantage of being non-toxic of course.<br />
<br />
I got the smallest size, which is 1mm balls, on the basis that they will fill a space slightly better than larger sizes. The downside I found was that when pouring them they tend to bounce and fly all over the place. They don't vacuum up because they have a very high weight to air resistance ratio being spherical. I had to use a magnet to capture them. In hindsight I think 2mm balls would be easier to handle.<br />
<br />
Instead of printing infill without bottom layers I simply made the whole base hollow. It doesn't need any infill for strength because it is going to be filled with resin. It is quite a large area to bridge without infill but it gets covered, so it doesn't matter how ugly it prints.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-NwRuybO2Eic/WX4LRO6eXSI/AAAAAAAAIt4/ifnZlC4D_Xc0dxu9BoJpAu4CQIxLZGZ4wCLcBGAs/s1600/pcb_mount.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="939" data-original-width="1148" height="522" src="https://4.bp.blogspot.com/-NwRuybO2Eic/WX4LRO6eXSI/AAAAAAAAIt4/ifnZlC4D_Xc0dxu9BoJpAu4CQIxLZGZ4wCLcBGAs/s640/pcb_mount.png" width="640" /></a></div>
<br />
The screws go into brass heat fit inserts that I press in with a soldering iron. In hindsight I should have capped the holes to prevent resin getting in them.<br />
<br />
After I filled it with the steel shot I poured in two part polyurethane resin that I had left over from an experiment nearly 10 years ago:<a href="http://hydraraptor.blogspot.co.uk/2008/03/hdpe-pu.html" target="_blank">hydraraptor.blogspot.co.uk/2008/03/hdpe-pu</a>. I was amazed it still worked. It is probably better for this application than epoxy resin because it is less viscous, so should fill the gaps more easily.<br />
<br />
Here it is after I sanded it down: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-kn2QllnF87M/WX4OZPak8YI/AAAAAAAAIuE/dGVLu9_BI8UsA3sBNM6Sogx8x5ZMnxdbQCLcBGAs/s1600/hall_pcb_underside.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="592" data-original-width="680" height="556" src="https://1.bp.blogspot.com/-kn2QllnF87M/WX4OZPak8YI/AAAAAAAAIuE/dGVLu9_BI8UsA3sBNM6Sogx8x5ZMnxdbQCLcBGAs/s640/hall_pcb_underside.JPG" width="640" /></a></div>
<br />
Not the best casting as I under filled one corner and there are some bubbles, but it doesn't matter at all in this application.<br />
<br />
I covered it with a sheet of adhesive backed neoprene rubber. It is probably not the best choice of rubber because it seems to be quite slippery.<br />
<br />
The end result weighs 80g which feels quite heavy for something this size and is just about heavy enough to not be dragged around by scope leads. If I was making it again I would make it a bit deeper and try to find a better non-slip rubber.<br />
<br />
Another way to encapsulate the shot would be to pause the print and pour them in before before the top layers are printed. They would then rattle of course, which might be annoying. On a moving bed machine like Mendel90 there would be a limit to how much weight you could add without lowering the acceleration. Also adding weight might cause the bed to drop in level slightly giving an uneven layer. Neither would be problems on HydraRaptor because its moving table weighs 9kg and has a load capacity of 125kg!nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com6tag:blogger.com,1999:blog-4339813531032979196.post-77041224577945477842017-06-16T17:39:00.000+01:002017-06-16T18:05:04.704+01:00Mooshimeter ModLast year I bought a <a href="https://moosh.im/mooshimeter/" target="_blank">Mooshimeter</a> wireless 2-channel multimeter. It is a multimeter front end that links to your mobile phone with Bluetooth and displays the results in an app.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-0ShR_clb9mE/WUPsBhExgeI/AAAAAAAAIpo/QqHLZPFC3dwv9vtg4hOfzyOH1bRwLsQLQCLcBGAs/s1600/mooshimeter.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="996" data-original-width="1600" height="396" src="https://4.bp.blogspot.com/-0ShR_clb9mE/WUPsBhExgeI/AAAAAAAAIpo/QqHLZPFC3dwv9vtg4hOfzyOH1bRwLsQLQCLcBGAs/s640/mooshimeter.JPG" width="640" /></a></div>
<br />
It is handy because you can read it remotely, it can measure voltage and current simultaneously and display power, it can log to an SD card and graph the results. It can also speak the results.<br />
<br />
Despite all these good features my "go to" multimeter is still my <a href="http://www.eevblog.com/product/bm235-multimeter/" target="_blank">EEVBlog branded Brymen BM235.</a> So my Mooshimeter sits in a drawer for most of its life. When I get it out it usually wants to do a firmware update, which needs fresh batteries. Because it has no off switch the best you can do is put it into shipping mode. It still flashes its LED occasionally, so the batteries run down over a period of several months and are then not up to doing a firmware update.<br />
<br />
Devices with no proper off switch are a pain if you only use them rarely because the batteries are always flat when you come to use them. This is particularly a problem because modern Duracell batteries seem to leak and corrode as soon as they are flat. This didn't used to be the case. I found some very old ones that I had abandoned in outdoor devices that I expected to be corroded to hell but in fact they were not corroded at all, despite being well past their use by date. In contrast I have had many corrode recently that were flat, but still well within their use by date. I have stopped buying Duracell and now use Costco's own Kirkland branded ones. It is too early to say if they corrode or not.<br />
<br />
So I normally remove the batteries from devices I use rarely but with the Mooshimeter this involves removing the casing that is held together by two screws. I decided to add a switch to it but it has a cat III safety rating and cutting a hole in the case would void that.<br />
<br />
I had two ideas to get around this: the first was to put a normally closed reed switch in series with the batteries and 3D print a cradle with a magnet in it to turn it off. My second idea was to use a mercury tilt switch to turn it off when placed upside down. I ordered both but as the mercury switches arrived first I implemented that and it works well.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-PoWNWrpmZsg/WUQFPB9SYCI/AAAAAAAAIqc/9oiGsAsu6PwS9RFA5RdMd5SRC04ODXmNACLcBGAs/s1600/tilt_switch.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="776" data-original-width="1600" height="310" src="https://3.bp.blogspot.com/-PoWNWrpmZsg/WUQFPB9SYCI/AAAAAAAAIqc/9oiGsAsu6PwS9RFA5RdMd5SRC04ODXmNACLcBGAs/s640/tilt_switch.JPG" width="640" /></a></div>
<br />
I decided the easiest point to break the battery circuit was the link between the two cells. For some odd reason that is a copper fill rather than just a track. It is on the top side of the PCB so I had to desolder one of the contacts to get at it. Fortunately the battery contacts have thermal relief connections so I just cut two of those to isolate the pad.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-q674kwI7b8k/WUP-VazSqvI/AAAAAAAAIp4/PZQABOBHe94rHY7rjQFGS_AI4AXJww0OACLcBGAs/s1600/battery_pads.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-q674kwI7b8k/WUP-VazSqvI/AAAAAAAAIp4/PZQABOBHe94rHY7rjQFGS_AI4AXJww0OACLcBGAs/s640/battery_pads.JPG" width="640" /></a></div>
<br />
I then made an insulating washer out of Kapton film. I used that because it is very thin and can handle soldering temperatures. I stamped it out with a hole punch but I found it very difficult to get the hole concentric. This is my third attempt that was just good enough:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-dURHBQB47bg/WUP_HOCf1wI/AAAAAAAAIqA/sYYSQeJCs1sxX_SdfRZE5g37liH13P47QCLcBGAs/s1600/kapton_washer.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1394" data-original-width="1600" height="278" src="https://3.bp.blogspot.com/-dURHBQB47bg/WUP_HOCf1wI/AAAAAAAAIqA/sYYSQeJCs1sxX_SdfRZE5g37liH13P47QCLcBGAs/s320/kapton_washer.JPG" width="320" /></a></div>
<br />
And here it is in place:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-UiOoF6I5ga0/WUP_OQA7dFI/AAAAAAAAIqE/RXQKuPO5O1Ezsx6HVDoYtY89sJwfK8LrgCLcBGAs/s1600/washer_fitted.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1016" data-original-width="1600" height="406" src="https://3.bp.blogspot.com/-UiOoF6I5ga0/WUP_OQA7dFI/AAAAAAAAIqE/RXQKuPO5O1Ezsx6HVDoYtY89sJwfK8LrgCLcBGAs/s640/washer_fitted.JPG" width="640" /></a></div>
<br />
I reinserted the clip over the top and resoldered it. I then soldered the tilt switch between the two now isolated battery terminals.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-jabHtG_P2OE/WUP_w05cXWI/AAAAAAAAIqM/oYxOrLDUt5QfDb6kc52AJyY4E0GtvPd8ACLcBGAs/s1600/mercury_switch.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://1.bp.blogspot.com/-jabHtG_P2OE/WUP_w05cXWI/AAAAAAAAIqM/oYxOrLDUt5QfDb6kc52AJyY4E0GtvPd8ACLcBGAs/s640/mercury_switch.JPG" width="640" /></a></div>
<br />
When upright the contacts are bridged by the mercury, which is very low resistance. When I turn it upside down the mercury flows to the top of the bulb and isolates the batteries.<br />
<br />
So all I have to do is remember to place it upside down in its case. If you want to attach the meter to something moving then the reed switch idea is the one to go for. I think it can probably be mounted in the same place if you use a neodymium magnet. You can get it nearer the back of the case by mounting it on the other side of the PCB but I don't know if that affects clearance distances for class III.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com2tag:blogger.com,1999:blog-4339813531032979196.post-61813987982031225642016-04-03T14:11:00.001+01:002016-04-03T14:11:35.884+01:00Beware fake wire!I bought some test leads with banana plugs and alligator clips for £0.99 on Ebay from Hong Kong. They were described as "Alligator Probe Test Leads Clip Pin to Banana Plug Cable for Digital Multimeter GF". I don't know what the GF means.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-AcJxtSdFXy4/VwAGdd-BqcI/AAAAAAAAIks/TfjZu7YHgN0mhnq2XPjqrK7KvXerKpaWw/s1600/leads.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="408" src="https://1.bp.blogspot.com/-AcJxtSdFXy4/VwAGdd-BqcI/AAAAAAAAIks/TfjZu7YHgN0mhnq2XPjqrK7KvXerKpaWw/s640/leads.JPG" width="640" /></a></div>
<br />
Very cheap and what could possibly be wrong with them? Well actually, almost everything!<br />
<br />
The first time I used them to connect a regulator to a bench PSU they got hot and dropped several volts. Without needing to do any sums with wire gauge and current I felt the resistance must be too high, so I measured it to be about 1.4Ω for the round trip. Way too high as multimeter leads are generally about 0.2Ω.<br />
<br />
I unscrewed a plug and found this: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-tZEvUb2sRww/VwAJEfb88CI/AAAAAAAAIk4/ku03XobvcYstN8rxAMmcQoPc8tCHj4R1w/s1600/plug%2Bend.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="302" src="https://4.bp.blogspot.com/-tZEvUb2sRww/VwAJEfb88CI/AAAAAAAAIk4/ku03XobvcYstN8rxAMmcQoPc8tCHj4R1w/s640/plug%2Bend.JPG" width="640" /></a></div>
<br />
The screw bites down on the soft insulation and that presses the folded back strands against the barrel. Not the best way to make a connection as you want the screw biting down directly on the strands, or better still a ferrule.<br />
<br />
At the clip end it was more of the same: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-eqSIjBTYFD8/VwAKIGBYqfI/AAAAAAAAIlE/W8sgNQ9aKqoETcRDwIpindy48wAuKqE7g/s1600/croc%2Bend.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="546" src="https://4.bp.blogspot.com/-eqSIjBTYFD8/VwAKIGBYqfI/AAAAAAAAIlE/W8sgNQ9aKqoETcRDwIpindy48wAuKqE7g/s640/croc%2Bend.JPG" width="640" /></a></div>
<br />
The strands are trapped between metal and plastic again instead of being soldered through the hole. The crimp is there just for mechanical strain relief, not the electrical connection.<br />
<br />
I removed all the connectors (the clips pull off really easily due to not being soldered) and measured the resistance of the wire on its own. Still 1.4Ω, too much I felt for that gauge of copper wire 2m long. The simple explanation is that it isn't copper.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-SLfc5T_ykj8/VwAMCRdnq9I/AAAAAAAAIlQ/Db21_Wnc14Qo6AmgscNTL-qS7PS-Z8jzA/s1600/magnets.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="412" src="https://4.bp.blogspot.com/-SLfc5T_ykj8/VwAMCRdnq9I/AAAAAAAAIlQ/Db21_Wnc14Qo6AmgscNTL-qS7PS-Z8jzA/s640/magnets.JPG" width="640" /></a></div>
<br />
The fact it sticks really well to magnets leads me to believe it is copper plated steel. That might be OK for measuring voltage but no good for measuring or carrying current. I can't see any reason for using it other than it must be cheaper.<br />
<br />
I replaced it with 32/0.2mm copper wire half the length and got a total resistance of 20mΩ. Much more suitable for hooking up PSU test circuits but a bit less flexible than ideal for multimeter leads.<br />
<br />
So basically I got usable connectors for £0.99, which is still probably cheaper than I could buy them for in the UK. The wire and the construction were junk.nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com4tag:blogger.com,1999:blog-4339813531032979196.post-8275235401774937572016-03-29T13:05:00.000+01:002016-04-03T14:12:19.035+01:00Beware of cheap Kelvin clip LCR meter test leadsWhen I first got my Elektor LCR meter I didn't have any four wire test leads for it so I made up a pair from the ends of an old VGA monitor cable and some miniature crocodile clips.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-B1Vr8k5_NeQ/VvmEgyFH5XI/AAAAAAAAIjE/7H0uzAmsrJAZ_8B4eLbOUITBUeIgCsdgw/s1600/home%2Bmade%2Bleads.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="466" src="https://3.bp.blogspot.com/-B1Vr8k5_NeQ/VvmEgyFH5XI/AAAAAAAAIjE/7H0uzAmsrJAZ_8B4eLbOUITBUeIgCsdgw/s640/home%2Bmade%2Bleads.JPG" width="640" /></a></div>
<br />
These worked well enough for measuring normal components but they are not true Kelvin leads because the wires meet at the crocodile clips, not at the device under test. The steel clips add about 3mΩ and 200nH. True Kelvin clips insulate the two jaws from each other and one wire goes to each jaw. They also have non-ferrous jaws, so are less inductive and more conductive.<br />
<br />
I found some suitable clips at RS for £9 and was going to buy a pair of those and make up my own leads until I found I could buy them ready made on eBay for only £6.70 from Hong Kong, bargain! So I purchased a set : -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Ww-dj6piWh0/VvmNaMVhgUI/AAAAAAAAIjU/eZjzsJRtfGo6FS8-dIcKxrJFNPzQ6-13Q/s1600/Kelvin%2Bleads.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="600" src="https://3.bp.blogspot.com/-Ww-dj6piWh0/VvmNaMVhgUI/AAAAAAAAIjU/eZjzsJRtfGo6FS8-dIcKxrJFNPzQ6-13Q/s640/Kelvin%2Bleads.JPG" width="640" /></a></div>
<br />
<b>N.B.</b> they had red and black sleeving when I bought them. This picture is after I fixed them!<br />
<br />
When I tried them out I found that the readings were very inconsistent and the open circuit capacitance increased when the wires were moved close to each other. That made me think the wires were not screened cable so I opened one of the BNC connectors to check.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-nL-AZpPCC8g/Vvo2J_5g5SI/AAAAAAAAIjk/m-kFPfFd7Mk27rGtPm92Sh5bLQ8X4BpsA/s1600/bnc_back.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="196" src="https://1.bp.blogspot.com/-nL-AZpPCC8g/Vvo2J_5g5SI/AAAAAAAAIjk/m-kFPfFd7Mk27rGtPm92Sh5bLQ8X4BpsA/s400/bnc_back.JPG" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-v32YjwPu5mQ/Vvo2N0tifNI/AAAAAAAAIjo/bRUHr-Btn38kfzN16l6TBXoC5TMIV-zoQ/s1600/bnc_front.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="187" src="https://3.bp.blogspot.com/-v32YjwPu5mQ/Vvo2N0tifNI/AAAAAAAAIjo/bRUHr-Btn38kfzN16l6TBXoC5TMIV-zoQ/s400/bnc_front.JPG" width="400" /></a></div>
<br />
What I found was the cable is actually screened, in fact it has both a copper braid screen and an inner aluminium foil screen like digital TV coax. However the screen is not connected to to the BNC outer contact, it is cropped back to the insulation. It was the same in all four BNC plugs so I had to remake all those connections.<br />
<br />
Then I found that the screens were shorted to the inner core at the clip end! I had to cut off the red and black sleeving and completely disassemble the clips. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-suePE0Pe3to/Vvo5Pyio98I/AAAAAAAAIj0/eo0H9mNKT5EWMbA5QU6elBXbIIB7xWoLg/s1600/clips.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://1.bp.blogspot.com/-suePE0Pe3to/Vvo5Pyio98I/AAAAAAAAIj0/eo0H9mNKT5EWMbA5QU6elBXbIIB7xWoLg/s640/clips.JPG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-kKQwSaani9k/Vvo5StWeAMI/AAAAAAAAIj4/7lhPNigjj4YD8Sh44yOUmt1MpLvLm1PVQ/s1600/shorted.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="392" src="https://1.bp.blogspot.com/-kKQwSaani9k/Vvo5StWeAMI/AAAAAAAAIj4/7lhPNigjj4YD8Sh44yOUmt1MpLvLm1PVQ/s640/shorted.JPG" width="640" /></a></div>
<br />
It is as if the person making them didn't understand the concept of screened cable and just used it like normal single conductor wire. Much easier and faster to assemble that way of course.<br />
<br />
So I had to remake all four of those connections as well, stripping back the screen and covering it with heat shrink sleeving.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-PK067KU4DRw/Vvo7UU8GToI/AAAAAAAAIkE/81IqVnIym5Q5qXqQF8Fg_l7DgNtAgGPzQ/s1600/sleeved.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://2.bp.blogspot.com/-PK067KU4DRw/Vvo7UU8GToI/AAAAAAAAIkE/81IqVnIym5Q5qXqQF8Fg_l7DgNtAgGPzQ/s640/sleeved.JPG" width="640" /></a></div>
<br />
Another problem is the insulation tape that prevents the jaws being shorted together by the spring that holds them closed is not tough enough and was already starting to fail. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ3FaoHytZWn2-bpQoquISM1F8V64hq5tY6q6dqMendPTvUWaQnE8u-vgz-l1flxpQzCVMauorwrV2c5-c3kPLol9FnTlX0er-PLf85CBMfZLDYJu39XrTO8W5Mna6e8noe10E65gVGNQ9/s1600/insulation+damage.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="172" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ3FaoHytZWn2-bpQoquISM1F8V64hq5tY6q6dqMendPTvUWaQnE8u-vgz-l1flxpQzCVMauorwrV2c5-c3kPLol9FnTlX0er-PLf85CBMfZLDYJu39XrTO8W5Mna6e8noe10E65gVGNQ9/s640/insulation+damage.JPG" width="640" /></a></div>
<br />
To fix this I added some heat shrink sleeving to the spring.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx4MSFlZz-A4i_LkszQhNCvhzgkM8n69QyKq9iCO_Gpz9HuoQu9MtitNHvywrEgIjv0b1zXr_fky7rzGlmRQ3-mNQ3tX9H7zdkMy39tM6ObApIlTUeTTdi0IreZd9XefeMwh1AARH70cZ8/s1600/spring.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="474" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx4MSFlZz-A4i_LkszQhNCvhzgkM8n69QyKq9iCO_Gpz9HuoQu9MtitNHvywrEgIjv0b1zXr_fky7rzGlmRQ3-mNQ3tX9H7zdkMy39tM6ObApIlTUeTTdi0IreZd9XefeMwh1AARH70cZ8/s640/spring.JPG" width="640" /></a></div>
<br />
I then hot glued the wires in place as there isn't much strain relief and replaced the outer sleeving with 19mm heat shrink. That is why mine ended up grey instead of red and black.<br />
<br />
They now work well but remaking all eight ends was a lot of time and materials. The seller was apologetic and gave me a refund but I wonder how many other ones like this are out there. I also ordered Kelvin tweezers for surface mount devices and a 4 terminal test fixture from China, so it will be interesting to see if they are built properly. nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com0tag:blogger.com,1999:blog-4339813531032979196.post-31092399801268917212016-03-28T18:55:00.000+01:002016-04-07T22:56:29.116+01:00Elektor 500ppm LCR meter case tipsI recently bought a <a href="https://www.elektor.com/500-ppm-lcr-meter-kit-with-main-board-and-lcd-board">500ppm LCR meter from Elektor</a> because I didn't have anything for measuring inductors or the ESR (equivalent series resistance) of capacitors, both of which are important for modern electronics, particularly switch mode regulators that have become ubiquitous.<br />
<br />
It is also more accurate than any of my multimeters and has wider measurement ranges. For example it can measure resistance from 0.1mΩ to 1GΩ and capacitance between 0.1pF and 0.1F. This means I can now measure parasitics like contact resistance, stray capacitance and lead inductance. The principal reasons it can do this while my multimeters can't is because it uses a four wire Kelvin connection to the device under test, and as well as measuring voltage and current, it also measures the phase between them.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-pYpy7ngZ24Q/Vvkt_POyBjI/AAAAAAAAIhA/M_OdE7gKk4Qca-WMwJM7Z5QBQxK2NFC0Q/s1600/LCR%2Bmeter.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="428" src="https://1.bp.blogspot.com/-pYpy7ngZ24Q/Vvkt_POyBjI/AAAAAAAAIhA/M_OdE7gKk4Qca-WMwJM7Z5QBQxK2NFC0Q/s640/LCR%2Bmeter.JPG" width="640" /></a></div>
<br />
It took over a month to be delivered and the case arrived two weeks later. The meter's arrival coincided with the arrival some ridiculously cheap switch mode buck and boost regulators from China. None of them worked properly (no surprise there) so it was pressed into service straight away, without its case. It worked well but when I got the case there were a few snags assembling it and then it then didn't work properly.<br />
<br />
The case comes pre-drilled and labelled from Elektor and is about three times the price of the generic version available from RS and Farnell. I expected it to include all the fasteners for that price but it only came with the screws that hold the case together.<br />
<br />
To mount the LCD PCB I needed four M3 x 16mm countersink screws, nuts and washers and four 7mm M3 spacers. Luckily I already had suitable screws and I used eight 6 BA x 1/8" spacers as the LCD is actually 6.4mm only thick. If I hadn't had those I would have printed some custom plastic ones.<br />
<br />
I found the LED was too short to reach the hole for it in the front panel, so I re-soldered it as high as I could to improve its appearance. I also chamfered the back of the hole for it with a countersink to guide it in.<br />
<br />
The next issue I had was the ribbon cable was way too long with nowhere to store the excess.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-g61s3pHDMDY/Vvk1Z68bEsI/AAAAAAAAIhQ/ylK5GNMu9LonywP3OZl8aZz65SdN5TGXg/s1600/long%2Bcable.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="302" src="https://2.bp.blogspot.com/-g61s3pHDMDY/Vvk1Z68bEsI/AAAAAAAAIhQ/ylK5GNMu9LonywP3OZl8aZz65SdN5TGXg/s640/long%2Bcable.JPG" width="640" /></a></div>
<br />
I shortened the cable and re-attached the IDC plug on the other side.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-2Yl0qVcQW1w/Vvk1u6jNNeI/AAAAAAAAIhU/-9AH96lMTUsC2NflnQngeIqQns240XpGw/s1600/short%2Bcable.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="356" src="https://2.bp.blogspot.com/-2Yl0qVcQW1w/Vvk1u6jNNeI/AAAAAAAAIhU/-9AH96lMTUsC2NflnQngeIqQns240XpGw/s640/short%2Bcable.JPG" width="640" /></a></div>
<br />
It is not good practice to re-use IDC connectors but I didn't have a 14 way one to hand.<br />
<br />
The long cable did allow me to test it without the case though, which would have been more difficult with the short one.<br />
<br />
The main PCB just slides into guides built into the case extrusion. I did have some problems with getting the LED to go into its hole so I chamfered that on the inside as well.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-wIGXMUmDOmc/Vvk4Z0ByS9I/AAAAAAAAIhk/zn4H1nzxx8Au1rUlKbW-ALz4ciuwVWkIw/s1600/led%2Bchamfer.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="296" src="https://4.bp.blogspot.com/-wIGXMUmDOmc/Vvk4Z0ByS9I/AAAAAAAAIhk/zn4H1nzxx8Au1rUlKbW-ALz4ciuwVWkIw/s640/led%2Bchamfer.JPG" width="640" /></a></div>
<br />
The body of the LED protruded a bit too far to allow the board to go all the way in so I re-melted the solder and pushed it back as far is the PCB holes allowed. That was just enough to allow a perfect fit.<br />
<br />
The case must be earthed via a screw hole on the PCB but the the hole in the case was missing as well as the fasteners. I marked the hole position using a 3mm spot drill though the PCB and then drilled it to 3.3mm and countersunk it. This is necessary because the head comes out under the ABS end bezel. I used another M3 x 16 CS screw with a 5mm brass spacer, a shake proof washer and a nut.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-_dXFv8m6BP0/Vvk-qVazMyI/AAAAAAAAIh0/uTp0x6sib8wRbTfQBj27rHo-gqiv8kBhA/s1600/screw.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="617" src="https://2.bp.blogspot.com/-_dXFv8m6BP0/Vvk-qVazMyI/AAAAAAAAIh0/uTp0x6sib8wRbTfQBj27rHo-gqiv8kBhA/s640/screw.JPG" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-pEvH-YaB__0/Vvk_Dep9-0I/AAAAAAAAIh4/YLmoLp6_HCAUqZzoT1e2N1okIMpv3kTKA/s1600/earthed.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://3.bp.blogspot.com/-pEvH-YaB__0/Vvk_Dep9-0I/AAAAAAAAIh4/YLmoLp6_HCAUqZzoT1e2N1okIMpv3kTKA/s640/earthed.JPG" width="640" /></a></div>
<br />
When fitting the right hand end cap I noticed the USB connector shorted to the surrounding metalwork. That is not good because the USB shield is connected to digital ground but the case is analogue ground. I added some clearance by filing two sides of the hole.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-gVmNuwb0EZE/VvlB8UQi4cI/AAAAAAAAIiI/OZaGuNK0Auwdi58ZByyBkiDN44hqUQ7sg/s1600/DSCF3799.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="438" src="https://1.bp.blogspot.com/-gVmNuwb0EZE/VvlB8UQi4cI/AAAAAAAAIiI/OZaGuNK0Auwdi58ZByyBkiDN44hqUQ7sg/s640/DSCF3799.JPG" width="640" /></a></div>
<br />
After assembling the case I found it no longer worked properly in LCD mode. The open circuit trim always failed with "trim failed due to line perturbations". It still worked when used via its PC program where the LCD display is not used. So it seems the LCD PCB is too noisy to be mounted close to the analogue front end.<br />
<br />
I concluded I needed to place a metal screen over the LCD PCB but there isn't a lot of room inside the case. My first thought was to add a sheet of single sided blank PCB material mounted on spacers with the same screws that hold the PCB. That would have involved cutting it to size, marking and drilling four holes, either manually or by setting it up on one of my routers. Being too lazy for that I decided to 3D print an insulating cover for the PCB and cover it in aluminium adhesive tape.<br />
<br />
Here is my OpenScad design :-<br />
<br />
<script src="https://gist.github.com/nophead/5d7c8c2de72661ef4f54.js"></script>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-3UeHn9qMnBo/VvlQ5aqebbI/AAAAAAAAIiY/pfBhVT1-QSclx__s3IHKd7fpF-MVTPOqg/s1600/lcr_meter_screen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-3UeHn9qMnBo/VvlQ5aqebbI/AAAAAAAAIiY/pfBhVT1-QSclx__s3IHKd7fpF-MVTPOqg/s640/lcr_meter_screen.png" /></a></div>
<br />
And here it is covered in aluminium tape and fitted :-<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-IT-ifEXb6Io/VvlSDLufM9I/AAAAAAAAIik/dUDJqhewQMExs0cpb9qQJo3slJSkHz4tA/s1600/screened.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://2.bp.blogspot.com/-IT-ifEXb6Io/VvlSDLufM9I/AAAAAAAAIik/dUDJqhewQMExs0cpb9qQJo3slJSkHz4tA/s640/screened.JPG" width="640" /></a></div>
<br />
I trimmed the long wires from the LCD display to reduce the clearance needed from the back of the PCB to 1.5mm. I also bent the test pins on the main board to reduce their height. I replaced the plain washers and nylocs shown earlier with shake proof washers and plain nuts. The washers dig into the aluminium to hopefully make a good connection through the oxide.<br />
<br />
With the screen fitted the meter works again in LCD mode although the short circuit trim fails occasionally. When powered from my PC or running stand alone from a USB adaptor the readings jump around a lot. When powered from my linear bench PSU it is much more stable. This isn't surprising as PCs tend to have a lot of ground noise, particularly laptops with external power supplies. My desktop PC (3D printed case of course) is micro ATX powered from a remote 12V PSU so will have similar ground noise to a laptop.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-drPvHSIG19M/VvlhmCfoOLI/AAAAAAAAIi0/6qaLHfm6NQESxwNivhrrwVaO_vlLzo1vQ/s1600/pc.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="338" src="https://4.bp.blogspot.com/-drPvHSIG19M/VvlhmCfoOLI/AAAAAAAAIi0/6qaLHfm6NQESxwNivhrrwVaO_vlLzo1vQ/s640/pc.JPG" width="640" /></a></div>
<br />
I don't think powering such a sensitive piece of equipment from a USB switch mode PSU makes a lot of sense unless it has exceptional output filtering and a clean ground. It only takes 180mA so an old fashioned mains transformer and linear regulator could be used.<br />
<br />
<h3>
Summary</h3>
<h4>
Extra Parts required</h4>
<ul>
<li>5 off M3 x 16mm countersink screws.</li>
<li>5 off M3 plain nuts.</li>
<li>5 off M3 shake-proof washers. </li>
<li>4 off M3 x 7mm or 6.4mm spacers.</li>
<li>1 off M3 x 5mm spacer.</li>
<li>Metal screening for the LCD PCB.</li>
</ul>
<h4>
Tweaks</h4>
<ul>
<li>Drill and countersink the earth screw hole.</li>
<li>Expand the hole for the USB connector to give clearance all the way round. </li>
<li>Chamfer the inside of both LED holes.</li>
<li>Reposition both LEDs slightly. </li>
<li>Shorten the ribbon cable.</li>
<li>Crop the LCD pins. </li>
<li>Fit an earthed metal or foil screen over the LCD PCB.</li>
</ul>
With these tweaks the LCR meter works very well. It gives much more stable readings in stand alone mode powered from a linear PSU.<br />
On reflection I think the design should have included a metal screening can over the analogue front end. It could then be housed in a cheap plastic case. I could have 3D printed one saving myself about £45 but it would not have looked as nice as the anodised aluminium one.<br />
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com7tag:blogger.com,1999:blog-4339813531032979196.post-49716179757195957642016-02-06T13:08:00.000+00:002016-02-18T11:22:10.327+00:00Cool mapsThe aim of making the instrument described in the <a href="http://hydraraptor.blogspot.co.uk/2016/01/quantifying-cooling.html" target="_blank">last post</a> was to be able to quantify the cooling effectiveness of various fan and duct combinations by sampling the airflow at a grid of positions around the nozzle.<br />
<br />
I attached the denuded bulb to the terminals such that it was pointing vertically upwards. I then placed the Coolometer on the bed with the bulb filament aligned with the nozzle at the centre of the bed (0,0).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-RZamrJfH9Sk/Vq9IaVFOEoI/AAAAAAAAIas/18jqEDoyZ_k/s1600/octopi-green.local.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="422" src="https://3.bp.blogspot.com/-RZamrJfH9Sk/Vq9IaVFOEoI/AAAAAAAAIas/18jqEDoyZ_k/s640/octopi-green.local.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
I originally planned to clamp it somehow but instead I just placed it on some anti-slip matting and set the Y acceleration to a very low value.<br />
<br />
My printers are controlled by Raspberry Pis so it was straightforward to attached the Coolometer to the second USB port. I control both it and the printer with the following Python script that runs on the RPi.<br />
<br />
<script src="https://gist.github.com/nophead/7f28ac6d5e9f51475d25.js"></script>
I made the Coolometer command acknowledgement <span style="font-family: "courier new" , "courier" , monospace;">ok</span>, the same as Marlin, so I could use the same <span style="font-family: "courier new" , "courier" , monospace;">do_command()</span> function to talk to both of them by passing the serial port.<br />
<br />
The script scans in X and Y taking a cooling reading at each grid point. It generates a file called <span style="font-family: "courier new" , "courier" , monospace;">fanmap.dat</span> that consists of a list of XY coordinates with a cooling reading in milliwatts. The file format can be read by gnuplot to draw graphs. This is the first time I have used gnuplot. I normally draw graphs with spreadsheet programs but this is a lot more powerful and very easy to use.<br />
<br />
This simple gnuplot script: -<br />
<br />
<script src="https://gist.github.com/nophead/f6564e01348b86109102.js"></script> produces 3D plots like this: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-snW_PUBXUiY/VrBwU0XMVcI/AAAAAAAAIa8/i9QwDGnp5mc/s1600/fanmap_huxley.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-snW_PUBXUiY/VrBwU0XMVcI/AAAAAAAAIa8/i9QwDGnp5mc/s1600/fanmap_huxley.png" /></a></div>
<br />
The 3D view looks cool and is good for interactive examination because you can rotate it with the mouse. A better view for a static picture is from above, which can be obtained by <span style="font-family: "courier new" , "courier" , monospace;">set view map</span>. These are referred to as heat maps in gnuplot parlance but by reversing the palette they become cool maps!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-xM_zDb-aZWw/VrSepy1vekI/AAAAAAAAIds/JRsB6xbP9VU/s1600/fanmap_huxley_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-xM_zDb-aZWw/VrSepy1vekI/AAAAAAAAIds/JRsB6xbP9VU/s1600/fanmap_huxley_2d.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Here is the script I used: -<br />
<script src="https://gist.github.com/nophead/c61a39aac27aae59c247.js"></script>
It labels the colour key with the minimum, maximum and average cooling values in mW. Gnuplot is fantastically powerful and flexible but it took me a while to achieve the exact view I wanted. <br />
<br />
Each reading is averaged over 100 samples in about two seconds, so it takes about an hour to do a scan of 80 by 90mm in two mm increments.<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
This is the first plot I made and was done on my Huxley90 because that machine is next to my desk. It is fortunate I did this first as I was expecting some difference in airflow from front to back but was surprised to see a big difference side to side. Had I scanned the Mendel90 duct first I would have attributed that to its asymmetry, but the Huxley90 duct is left right symmetrical. Here it is in the same orientation as the 3D graph: -</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-7UJ6OkW1PZQ/VrB0IsJ89II/AAAAAAAAIbI/Y5BESOX_WqQ/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="483" src="https://2.bp.blogspot.com/-7UJ6OkW1PZQ/VrB0IsJ89II/AAAAAAAAIbI/Y5BESOX_WqQ/s640/duct.png" width="640" /></a></div>
<br />
The only explanation that I could think of to cause this imbalance is the anti-clockwise rotation of the fan. <br />
<br />
To test this hypothesis I mounted the fan upside down so it was spinning clockwise, but then it was sucking rather than blowing of course. The cooling effect was much less, as expected, but was now stronger on the right than the left.<br />
<br />
Another experiment I did was to watch smoke from a joss stick going through a naked fan. I had to run the fan very slowly to be able to see smoke coming out the other side. The smoke going in was a tightly twisting vortex looking like a micro tornado. Coming out it was rotating more slowly with a bigger diameter.<br />
<br />
So I think that because the air-stream is rotating anti-clockwise it likes to exit the duct on the left hand side where it is travelling downwards and less so on the right hand side where it is travelling upwards. The effect seems more marked with the small 40mm fan I used for the Huxley90. This is possibly because the depth to width ratio of that duct is bigger, so the flow is more free to rotate.<br />
<br />
Moving on to the fan duct and fan supplied with the Mendel90 Dibond kits this is the plot I got: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-9oDCrjV4wnk/VrEn02eL3fI/AAAAAAAAIb4/CXnYd-HGhp0/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://1.bp.blogspot.com/-9oDCrjV4wnk/VrEn02eL3fI/AAAAAAAAIb4/CXnYd-HGhp0/s640/duct.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-16JK0LyYV6w/VrSeB8sflLI/AAAAAAAAIdo/Ga4EYsOmgcA/s1600/fanmap_dibond_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-16JK0LyYV6w/VrSeB8sflLI/AAAAAAAAIdo/Ga4EYsOmgcA/s1600/fanmap_dibond_2d.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
As you can see the overall cooling effect is better, as to be expected with the bigger 60mm fan. There is a less pronounced left right difference but there is an odd cold lump front right. I thought this might be something to do with the jet from the cold end cooling hole at the back or perhaps the hot end affecting airflow. I removed the hot end and blocked the hole and neither made any significant difference.<br />
<br />
My hypothesis is that the air rushes around each side of the circular part of the duct in opposite directions and collides at the front and then spills out. I.e. the air has significant momentum, so it prefers going around the outside of the duct loop to exiting the slot in the bottom. When it hits the air coming from the opposite side it has no choice but to exit. The lump is displaced to the right because the left stream is more powerful.<br />
<br />
Odd that the ring of maximum cooling is smaller diameter when the output part of the duct is identical to the Huxley one.<br />
<br />
The next thing I tried was the same duct with a <a href="http://www.ebay.com/itm/121197134961" rel="nofollow" target="_blank">GELID Solutions Silent 6 fan</a> suggested by <a class="g-profile" href="https://plus.google.com/113737869224798118032" target="_blank">+Neil Darlow</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-cfBRpqUVBYA/VrSiFUryhsI/AAAAAAAAId4/UMDFQwZeOIs/s1600/DSCF3767.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="448" src="https://4.bp.blogspot.com/-cfBRpqUVBYA/VrSiFUryhsI/AAAAAAAAId4/UMDFQwZeOIs/s640/DSCF3767.JPG" width="640" /></a></div>
<br />
This claims to have "Optimized Fan Blades" and "High Airflow and High Static Pressure" as well as "Silent Operation" and "Long Lifetime". Here is a comparison of the things I could measure compared to the original fan: -<br />
<br />
<table border="0" cellspacing="0">
<colgroup width="111"></colgroup>
<colgroup width="61"></colgroup>
<colgroup width="55"></colgroup>
<colgroup width="75"></colgroup>
<colgroup width="59"></colgroup>
<tbody>
<tr>
<td align="left" height="17"><br /></td>
<td align="left"><b>Current</b></td>
<td align="left"><b>Power</b></td>
<td align="left"><b>Speed</b></td>
<td align="left"><b>Noise</b></td>
</tr>
<tr>
<td align="left" height="17"><b>Silent 6 @ 12V</b></td>
<td align="right">0.103 A</td>
<td align="right">1.2 W</td>
<td align="right">3060 RPM</td>
<td align="right">47.5 dB</td>
</tr>
<tr>
<td align="left" height="17"><b>Original @ 12V</b></td>
<td align="right">0.209 A</td>
<td align="right">2.5 W</td>
<td align="right">3600 RPM</td>
<td align="right">53.5 dB</td>
</tr>
<tr>
<td align="left" height="17"><b>Original @ 9V</b></td>
<td align="right">0.136 A</td>
<td align="right">1.2 W</td>
<td align="right">3060 RPM</td>
<td align="right">48.3 dB</td>
</tr>
</tbody></table>
<br />
I measured the noise at 15cm rather than the normal 1m because my sound meter only goes down to 40dB. The fan was running in the duct and placed on a block of foam so the table did not act a sound board.<br />
<br />
I used the tacho signal on the yellow wire to get the speed. It produces a square wave with two cycles per revolution. I found that the supplied fan had no output on the yellow wire and after I disassembled it I found the components for it: a PNP transistor and a resistor were not fitted. In fact the only electronic part is a hall effect chip with complementary outputs. That feeds a two phase motor with two pairs of coils in series. I added the missing components to make the measurement. Interestingly the transistor is driven from one of the coils so it works even when the fan is not powered as long as it is spinning fast enough to generate enough voltage to turn the transistor on.<br />
<br />
The data shows what I expected: that most of the noise reduction comes from the reduced speed. If the original fan is driven from 9V it rotates at the same speed as the Gelid one and takes about the same power. It is slightly noisier, which I put down to the fact the Gelid has a smoother leading edge on its blades. They also have more curve to them giving it a steeper pitch, so it can potentially move more air at the same speed.<br />
<br />
This is the cool map from it: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-dY6K7g-EzDU/VrSzKxUJ9xI/AAAAAAAAIeI/SBe8NtAuh34/s1600/fanmap_silent_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-dY6K7g-EzDU/VrSzKxUJ9xI/AAAAAAAAIeI/SBe8NtAuh34/s1600/fanmap_silent_2d.png" /></a></div>
Compared with the original fan it does produce a slightly higher peak and average cooling effect with 6dB less noise, so it does do what it says on the tin. However it has the unexpected effect of changing the air distribution significantly.<br />
<br />
I tried running the original fan with 50% PWM. All that did was reduce the airflow, it didn't change the distribution significantly.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwcbRJyaaGfIsNMMPyvgPL3GT6emX12ek2LasO_aCLopzELeoQaGJOlOpAqNNi03_lfaVEDvZEq3pRQfzux-u4Rxp1wDdtsIFW4ij3frAhtxuqndstRmdGeuU1und4nb0n34GZxc0B4yb5/s1600/fanmap_dibond_lower_128.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwcbRJyaaGfIsNMMPyvgPL3GT6emX12ek2LasO_aCLopzELeoQaGJOlOpAqNNi03_lfaVEDvZEq3pRQfzux-u4Rxp1wDdtsIFW4ij3frAhtxuqndstRmdGeuU1und4nb0n34GZxc0B4yb5/s1600/fanmap_dibond_lower_128.png" /></a></div>
So it seems that subtle changes to the shape of the fan blades greatly affect the airflow pattern at the exit of the duct. Who would have guessed that?<br />
<br />
Next up is the version of the fan duct to suit the E3D V6 hot end that proved so <a href="http://hydraraptor.blogspot.co.uk/2016/01/a-bridge-too-far.html" target="_blank">challenging for slicers</a>. This has to slope downwards to fit underneath the E3D's fan assembly. It is also a bigger diameter to clear the bigger heater block assembly.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-UxWv_X5Vhfo/VrS48jLSH9I/AAAAAAAAIeo/kVFt2n0NsGQ/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://1.bp.blogspot.com/-UxWv_X5Vhfo/VrS48jLSH9I/AAAAAAAAIeo/kVFt2n0NsGQ/s640/duct.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Not too surprising to me by now this has a massive and unpredictable effect: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-C8RFJEYZ2qw/VrS6TFkJUYI/AAAAAAAAIe0/zEXUj9LA4jY/s1600/fanmap_E3D_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://1.bp.blogspot.com/-C8RFJEYZ2qw/VrS6TFkJUYI/AAAAAAAAIe0/zEXUj9LA4jY/s1600/fanmap_E3D_2d.png" /></a></div>
I have no real explanation for why this seems to have a quarter of the circle missing. Looking at the plot one would think there is a blockage or a hole in the duct but that isn't the case. I think it is a consequence of two streams of air hitting each other head on. If you think about it that would create a chaotic result.<br />
<br />
There are a lot of alternative Mendel90 fan duct designs on <a href="http://www.thingiverse.com/search/page:3?q=Mendel90+fan&sa=" target="_blank">Thingiverse </a>so I decided to test a few of those. <br />
<br />
This is a <span id="goog_188369983"></span><a href="http://www.thingiverse.com/thing:842111" target="_blank">40mm duct by sivar231<span id="goog_188369984"></span>1</a>: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-xlncXa6DgW0/VrXVjMSAlTI/AAAAAAAAIfE/1O2WuWUn8vU/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://2.bp.blogspot.com/-xlncXa6DgW0/VrXVjMSAlTI/AAAAAAAAIfE/1O2WuWUn8vU/s640/duct.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-57j9K5G97HQ/VrXWEKHkXOI/AAAAAAAAIfI/TSxLkPymqQM/s1600/fanmap_40_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-57j9K5G97HQ/VrXWEKHkXOI/AAAAAAAAIfI/TSxLkPymqQM/s1600/fanmap_40_2d.png" /></a></div>
Less cooling than my 40mm Huxley90 version and very uneven.<br />
<br />
This is an <a href="http://www.thingiverse.com/thing:491316" target="_blank">alternative 60mm duct</a> for the E3D hot end by <a class="g-profile" href="https://plus.google.com/109352235257103413028" target="_blank">+Daniel Bull</a> that has the fan mounted vertically :-<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Cf5tXjs4UkM/VrXZf7pjVyI/AAAAAAAAIfY/LTj8fLgr_vQ/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://3.bp.blogspot.com/-Cf5tXjs4UkM/VrXZf7pjVyI/AAAAAAAAIfY/LTj8fLgr_vQ/s640/duct.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-Myl06QJQcUc/VrXaSqAitAI/AAAAAAAAIfc/cmdVojRoqiw/s1600/fanmap_danielbull_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="640" src="https://3.bp.blogspot.com/-Myl06QJQcUc/VrXaSqAitAI/AAAAAAAAIfc/cmdVojRoqiw/s640/fanmap_danielbull_2d.png" width="640" /></a></div>
<br />
Compared to my original design this gives a higher average cooling but a lower peak. It too has a quarter of the loop missing and the air that should come out there seems to shoot off forward instead. Mounting the fan vertically seems to give a bit more flow, presumably because the air doesn't have to turn a corner, but it seems to be less even, possibly due to the rotation having a bigger effect.<br />
<br />
After I designed Mendl90 I learned that radial blowers are more suited to pushing air down a small duct. Axial fans are fine for pushing large volumes of air down a large duct but radial fans generate a higher pressure so are better suited to making smaller jets.<br />
<br />
<a href="http://www.thingiverse.com/thing:1113928" target="_blank">This</a> a duct for a 50mm radial blower by kiefer :-<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://4.bp.blogspot.com/-eYkqRLBX0CU/VrXeypEqFPI/AAAAAAAAIfs/sTetvxzakgY/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="504" src="https://4.bp.blogspot.com/-eYkqRLBX0CU/VrXeypEqFPI/AAAAAAAAIfs/sTetvxzakgY/s640/duct.png" width="640" /></a></div>
<br />
I got the blower from <a href="http://www.robotdigg.com/product/320/5015+12VDC+0.23A+Blower+Fan" target="_blank">RobotDigg</a> but it seems to be slightly different to the one pictured and has three wires, not two.<br />
<br />
<table align="center"><tbody>
<tr><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/-VqBw2L8_A_o/VrYwITuXhlI/AAAAAAAAIgM/XCaPZi3Y5xY/s1600/blower_bottom.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://3.bp.blogspot.com/-VqBw2L8_A_o/VrYwITuXhlI/AAAAAAAAIgM/XCaPZi3Y5xY/s320/blower_bottom.JPG" width="320" /></a></div>
</td><td><div class="separator" style="clear: both; text-align: center;">
<a href="https://2.bp.blogspot.com/-FNQ5kw9BokU/VrYwGfGoudI/AAAAAAAAIgI/UJLDsnd7gic/s1600/blower_top.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="312" src="https://2.bp.blogspot.com/-FNQ5kw9BokU/VrYwGfGoudI/AAAAAAAAIgI/UJLDsnd7gic/s320/blower_top.JPG" width="320" /></a></div>
</td></tr>
</tbody></table>
<br />
It rotates at 7200 RPM, takes 250mA and produces 56 dB at 15cm. So it is a lot more powerful than the original fan but more compact with the air coming out of a much smaller aperture.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://3.bp.blogspot.com/--BeUHEBreDI/VrXh1kKmdjI/AAAAAAAAIf4/xpezwHw-BiQ/s1600/fanmap_radial_2d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://3.bp.blogspot.com/--BeUHEBreDI/VrXh1kKmdjI/AAAAAAAAIf4/xpezwHw-BiQ/s1600/fanmap_radial_2d.png" /></a></div>
It gives significantly more cooling and there aren't any gaps in the ring. It does seem to suffer from the air coming from both sides and colliding problem at the front. That seems to result in a high pressure jet spilling inwards and a lower pressure stream spilling outwards at the front.<br />
<h3>
</h3>
<h3>
Conclusion</h3>
When I designed the Mendel90 duct my aim was to achieve even cooling of the part without cooling the nozzle. The default duct with the original fan seems to give the most even cooling but I now think that is a complete fluke. Small changes such as the height of the duct, or the shape of the fan blades has a dramatic effect. This leads me to think that the airflow with an axial fan is chaotic due to the presence of vortices arising from its rotation.<br />
<br />
A radial blower seems to be the way to go as it produces more cooling and the air coming out of it isn't rotating. I would mount the blower with its aperture pointing forwards to avoid the air needing to turn a right angle. Rather than have the air flowing around the circle in both directions I will try a p shape where the air goes around in one direction and then meets itself travelling in the same direction. I think this will create a vortex airflow that emerges more evenly around the circle. I expect the shape of the junction might be critical. As far as possible I will try to keep the cross section constant to avoid <a href="https://en.wikipedia.org/wiki/Bernoulli's_principle" target="_blank">Bernoulli</a> effects.<br />
<br />
So in all I managed to use three new tools (fritzing, CodeBender and gnuplot) and discovered a few facts about fans and airflow, so I learned a lot doing this project.<br />
<br />
Fluid dynamics is obviously a massive subject and I learned this morning that it isn't a solved problem mathematically, there is a <a href="https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations" target="_blank">$1M prize</a> outstanding. As ever, the closer you look at things the more complicated they get. <br />
<br />
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com19tag:blogger.com,1999:blog-4339813531032979196.post-88847032911961412902016-01-29T17:20:00.000+00:002016-02-18T11:21:40.632+00:00Quantifying coolingA few months ago <a href="https://plus.google.com/u/0/113737869224798118032/auto" target="_blank">+Neil Darlow</a> mentioned that he had replaced his <a href="http://hydraraptor.blogspot.co.uk/2011/12/mendel90.html" target="_blank">Mendel90</a> fan with a quiet version and it seemed to give better cooling results. This made me curious because quieter fans of the same dimensions generally spin slower and produce less airflow. So I purchased one to compare but then realised I had no better way of judging its efficacy than holding my finger in the air stream to feel the breeze. With these two fans it was too close to call.<br />
<br />
After a bit of Googling I found that an easy way to measure localised airflow is with a <a href="http://www-g.eng.cam.ac.uk/whittle/current-research/hph/hot-wire/hot-wire.html" target="_blank">hot wire anemometer</a>. These heat a wire by passing a current through it and then measure how much the airflow cools it. The current and voltage can be used to determine both the resistance and the power dissipation using Ohm's law. The resistance can then be used to determine the temperature knowing the thermal coefficient of the metal that the wire is made from. The extra heat loss due to the airflow is proportional to the square root of the flow rate.<br />
<br />
A popular circuit configuration is a constant temperature anemometer as described <a href="http://www-g.eng.cam.ac.uk/whittle/current-research/hph/cta-circuit/cta-circuit.html" target="_blank">here</a>, but note the op-amp inputs are labelled incorrectly. An op-amp is used to adjust the voltage across a <a href="https://en.wikipedia.org/wiki/Wheatstone_bridge" target="_blank">Wheatstone bridge</a> to keep it in balance. The bridge consists of three fixed resistors and the hot wire, so when it is balanced the wire has a known fixed resistance determined by the other three. Because the power is controlled to keep the resistance constant it follows that the temperature of the wire is constant. The voltage on the bridge can then be used as a measure of the heat carried away by the airflow.<br />
<br />
Tungsten is commonly used for the hot wire, presumably because it has a reasonably high resistivity, temperature coefficient and resists oxidisation. I hatched a plan to use a small light bulb with the glass removed, mount it on the bed of a printer and move it around under the fan duct to plot a map of the airflow.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Z-iijpkzEcs/VqpZvM75V2I/AAAAAAAAIZU/R6TaMs1uqVo/s1600/bulb.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://1.bp.blogspot.com/-Z-iijpkzEcs/VqpZvM75V2I/AAAAAAAAIZU/R6TaMs1uqVo/s320/bulb.JPG" width="320" /></a></div>
<br />
This is a small 12V 0.8W bulb. Its cold resistance is about 15Ω but more than ten times that when hot. This is why bulbs take a massive surge current for a few milliseconds when they are switched on. <br />
<br />
I was wondering about how I was going to calibrate the airflow reading but then realised that the flow rate is not actually what I am interested in. It is the cooling effect the airflow has, which is what I am directly measuring. The result is simply the extra power needed to maintain a target temperature and is a measure how fast the bulb filament is being cooled. So rather than an anemometer I decided to call it a coolometer. Unfortunately Futurama <a href="http://futurama.wikia.com/wiki/Cool-O-Meter" rel="nofollow" target="_blank">used that name first</a>. Rather than displaying megafonzies mine displays milliwatts! <br />
<br />
This is the circuit that I came up with: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-yTr90Y0TjOA/VqkzBa52ERI/AAAAAAAAIXQ/4_thALhhz0o/s1600/coolometer.fzz%2B-%2BFritzing%2B-%2B%255BSchematic%2BView%255D%2B27012016%2B211215.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://2.bp.blogspot.com/-yTr90Y0TjOA/VqkzBa52ERI/AAAAAAAAIXQ/4_thALhhz0o/s1600/coolometer.fzz%2B-%2BFritzing%2B-%2B%255BSchematic%2BView%255D%2B27012016%2B211215.bmp.jpg" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
R1, VR1 and the bulb filament connected across J3 form the bridge that is maintained in balance by U1, Q1 and Q2. The <a href="https://www.intersil.com/en/products/amplifiers-and-buffers/all-amplifiers/amplifiers/CA3140.html" rel="nofollow" target="_blank">CA3140</a> is a fairly old <a href="https://en.wikipedia.org/wiki/Operational_amplifier" target="_blank">op-amp</a> that I have had lying around for more than 25 years but it does still seem to be available. It was notable at the time for the fact its inputs are happy at or slightly below the negative rail, so it doesn't need a negative supply, unlike a lot of early op-amps like the 741. It also has a very high input impedance but that is no benefit here. Its output can't go higher than 3V when driven from a 5V supply and although it can source 10mA it can only sink 1mA.<br />
<br />
Q1 is a PNP emitter follower that amplifies the current that can be sunk and also acts to shift the output voltage range 0.7V higher. R3 and R2 further shift the voltage so the output swing can turn Q2 fully on or off. The side effect is they reduce the loop voltage gain but Q2's voltage gain will more than make up for that. It further boosts the current to drive the low resistance bulb and allows the bridge voltage to swing over the full supply range. If I was designing using modern components I would use one of the true rail to rail op-amps from Maxim and save a transistor.<br />
<br />
VR2 is an offset null adjustment. I didn't think one would be needed at first because a small input offset isn't going to affect the output much in this circuit. However I soon realised that there are two stable states, one where the bridge is in balance and the other where the voltage supply to the bridge is zero. To force the circuit into the non-zero state I had to ensure there was a small but finite negative input offset.<br />
<br />
I was a bit worried that adding more voltage gain after the op-amp might cause it to oscillate like my <a href="http://hydraraptor.blogspot.co.uk/2016/01/ultra-low-dropout-regulator-for-flicker.html" target="_blank">ULDO regulato</a>r did. However it appears to be stable with just the op-amp's internal frequency compensation. That must be because the transistors have a much higher frequency response than the op-amp, so don't add much extra phase shift within its bandwidth.<br />
<br />
To measure the results, display them and send them to a serial port I used a <a href="https://www.sparkfun.com/products/12923" target="_blank">MicroView</a>. This is a tiny module combining an OLED display and an Arduino. I got four of these from the Kickstarter campaign. They are relatively expensive for what they are but I got four for the price of two because Sparkfun sent the first ones out without a bootstrap and had to replace them all. Since I have an ISP programmer it was trivial to install bootstraps into the first two.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-Lb2ly6cRg_w/VqpZ8YuvtLI/AAAAAAAAIZc/0U4td8fBIQM/s1600/microview.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://1.bp.blogspot.com/-Lb2ly6cRg_w/VqpZ8YuvtLI/AAAAAAAAIZc/0U4td8fBIQM/s320/microview.JPG" width="320" /></a></div>
<br />
<br />
The MicroView measures the voltage on the bridge and also the voltage across the bulb. With those measurements and knowing the value of R1 it can calculate the resistance and power dissipation of the bulb. Given the thermal coefficient of tungsten and cold resistance of the bulb it can estimate its temperature.<br />
<br />
I didn't use the USB serial converter that goes under the MicroView because I wanted a micro USB socket rather than a full sized plug and I also wanted a lower profile, so I used one of <a href="https://iotmodules.co.uk/other/ft232rl-ftdi-usb-to-ttl-serial-adapter-module-for-arduino" target="_blank">these</a> instead.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggTTQOB355BE-vnBBQi1ne0dmkKRWFP85dVrNFaSM6X-sW5VWq5QHqjimHl5HOLA9_dI1SYvF4ILB7siEnbloLHRCS6YfN9Wz8ZLr8iFCq1MKFY0Z7PaQUnZQ41D-JtWxOXTd-JDO7dEo5/s1600/FT232RL+FTDI+USB+to+TTL+Serial+Adapter+Module+for+Arduino+-+Other+-+Mozilla+Firefox+28012016+101618.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggTTQOB355BE-vnBBQi1ne0dmkKRWFP85dVrNFaSM6X-sW5VWq5QHqjimHl5HOLA9_dI1SYvF4ILB7siEnbloLHRCS6YfN9Wz8ZLr8iFCq1MKFY0Z7PaQUnZQ41D-JtWxOXTd-JDO7dEo5/s400/FT232RL+FTDI+USB+to+TTL+Serial+Adapter+Module+for+Arduino+-+Other+-+Mozilla+Firefox+28012016+101618.bmp.jpg" width="400" /></a></div>
I removed the right angle connector and fitted pin strips down the two sides. They appear as J1 and J2 in the schematic. I also removed the 3.3/5V jumper and replaced it with a wire link to lower the profile.<br />
<br />
Because I wanted to test the circuit on a breadboard and then move it to perfboard I decided to try out <a href="http://fritzing.org/home/" target="_blank">fritzing</a>. I was impressed by its ease of use. One bugbear of mine with traditional ECAD is the separation of the schematic and layout into different programs. You have to export your schematic as a netlist and import it into the layout program. Then there are horrible things like back annotation and cross probing. I have long argued it should be a single model with two views that are kept in sync. Having written a UML CASE tool myself, which has 15 different tabbed views of the same database that are always in sync I know this isn't too difficult to do.<br />
<br />
Fritzing has breadboard, schematic and PCB views that are all synchronised. You can add, remove and connect components in any view and it will be reflected in the others. One thing I found quirky was that nets seem to preserve the order of connection, so you have to route the PCB or breadboard in the same order as the schematic. You can get around this by making tracks double back over themselves but in my mind a net should represent connectivity without an order of connection.<br />
<br />
You can find the fritzing project here: <a href="http://fritzing.org/projects/coolometer" target="_blank">fritzing.org/projects/coolometer</a> <br />
<br />
Here is my perfboard layout: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-TJtwZuSB1_g/Vqn6Y3-6jyI/AAAAAAAAIX0/rqHK9R4-3Vk/s1600/coolometer.fzz%2B-%2BFritzing%2B-%2B%255BBreadboard%2BView%255D%2B28012016%2B111912.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="448" src="https://2.bp.blogspot.com/-TJtwZuSB1_g/Vqn6Y3-6jyI/AAAAAAAAIX0/rqHK9R4-3Vk/s640/coolometer.fzz%2B-%2BFritzing%2B-%2B%255BBreadboard%2BView%255D%2B28012016%2B111912.bmp.jpg" width="640" /></a></div>
<br />
You can see the offset null pot was a late addition connected with flying leads on the back. I left the un-routed rats nest to represent those.<br />
<br />
I am not a fan of the radial components being shown on their sides. It makes some sense for simple breadboard projects but I would prefer a strict plan view.<br />
<br />
The breadboard view can show a traditional breadboard or stripboard. The perfboard view is just a variation of the stripboard pattern, it simply replaces the strips with pads. The problem is that with perfboard you also need to put wire tracks on the back of the board as well as jumpers on the top. There is no way to represent that in fritzing 0.9.2, so I had to print it out and hand mark the underside tracks with a pen to actually be able to build it.<br />
<br />
There are quite a lot of part libraries about that contain parts aimed at hobbyists like the MicroView. As they are contributed by different people / companies there are inconsistencies in the sizes and style of schematic symbols. For example the pots should be the same size as the other resistors and being trimmers should have a flat slider instead of an arrow. The arrow should meet the zigzag, not go through it, that would be a two terminal variable resistor. This appears to be a cross between the two. As fritzing appears to be aimed at education I think it is important for the symbols to be correct.<br />
<br />
I do like the old school resistor symbols but they were replaced with boring boxes by standards organisations in the nineties if I remember correctly.<br />
<br />
I failed to find a part for the CA3140, so I used a random op-amp that had a sensible looking symbol. Unfortunately the offset null pins of an OP27 didn't match the footprint of a CA3140, hence why it appears to be connected to an NC pin on the schematic. I tried to modify it to match my part but failed. Part creation is external to fritzing.<br />
<br />
I also made a PCB layout just to try it out, I have no intention of making a PCB as this is a one off for an experiment. Auto route works but is ugly, as always, so I hand routed it as I always do. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-PHYMK1F04NU/VqoQwRQvQOI/AAAAAAAAIYE/Su-zC8MRhkQ/s1600/coolometer.fzz%2B-%2BFritzing%2B-%2B%255BPCB%2BView%255D%2B28012016%2B125715.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="470" src="https://3.bp.blogspot.com/-PHYMK1F04NU/VqoQwRQvQOI/AAAAAAAAIYE/Su-zC8MRhkQ/s640/coolometer.fzz%2B-%2BFritzing%2B-%2B%255BPCB%2BView%255D%2B28012016%2B125715.bmp.jpg" width="640" /></a></div>
<br />
A view with the pictorial version of the components would be nice. Note that the footprint of the pots is different to breadboard view. It actually matches the pots I used though.<br />
<br />
Again it is very easy to use for simple designs like this. I think it is
limited to two layers and I don't think it can do thermal vias. It can
do copper fills. I will probably stick with KiCad for more complex designs.<br />
<br />
Here is the built up perfboard version. Note that this picture was taken before I added the offset null pot.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-mLmirUEELQg/VqoaTUArCcI/AAAAAAAAIYU/Rf4UEf5hxO4/s1600/DSCF3750.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="424" src="https://1.bp.blogspot.com/-mLmirUEELQg/VqoaTUArCcI/AAAAAAAAIYU/Rf4UEf5hxO4/s640/DSCF3750.JPG" width="640" /></a></div>
<br />
Here is the underside :-<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIfqd27RJihYOT6EjjX1a4B-mHIuTiHCqHtnmB_21UbxRTs325zERRV8g6djxOmVIvneM2XOFqUymH9IyGMXLQHVofBnw-SSElBdfV7RfesLgPg8IlcBjvWu9MeF6xm1C-9ND_TsECTHjZ/s1600/DSCF3751.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIfqd27RJihYOT6EjjX1a4B-mHIuTiHCqHtnmB_21UbxRTs325zERRV8g6djxOmVIvneM2XOFqUymH9IyGMXLQHVofBnw-SSElBdfV7RfesLgPg8IlcBjvWu9MeF6xm1C-9ND_TsECTHjZ/s640/DSCF3751.JPG" width="640" /></a></div>
<br />
I made a 3D printed case of course, using OpenSCAD. It was a great help that there was a 3D model of the MicroView case parts available in STL format. I was able to assemble them to make an accurate 3D representation of it and also use it to cut the hole in the case lid. Once I had measured up the perfboard I was able to locate all the components that needed holes in the case by using their grid coordinates. Amazingly this was right the first time I printed it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-j00cP8mpp1g/VqosSBYy27I/AAAAAAAAIY4/EQv3tSrBNJ8/s1600/coolometer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="484" src="https://2.bp.blogspot.com/-j00cP8mpp1g/VqosSBYy27I/AAAAAAAAIY4/EQv3tSrBNJ8/s640/coolometer.png" width="640" /></a></div>
<br />
I used HEATFIT brass threaded inserts which I pushed in using a soldering iron with a conical bit.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-1G5Ckc0PGyU/VqocTId9SPI/AAAAAAAAIYo/3-2-asjANYA/s1600/DSCF3749.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="462" src="https://1.bp.blogspot.com/-1G5Ckc0PGyU/VqocTId9SPI/AAAAAAAAIYo/3-2-asjANYA/s640/DSCF3749.JPG" width="640" /></a></div>
<br />
Here it is assembled and running. Unfortunately the camera shutter missed the most important bits of the text, the temperature and power.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-kGMrSBwSMQQ/Vqotcb148NI/AAAAAAAAIZE/XulkO0qXufg/s1600/DSCF3752.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="486" src="https://2.bp.blogspot.com/-kGMrSBwSMQQ/Vqotcb148NI/AAAAAAAAIZE/XulkO0qXufg/s640/DSCF3752.JPG" width="640" /></a></div>
<br />
The cheap perfboard I used was a bit warped so the board is sandwiched between the top and the base, supported all around its edges top and bottom, and clamped with four screws. The screw heads are recessed into the base so that it sits flat.<br />
<br />
When I was following instructions to install the MicroView bootstrap I discovered <a href="https://codebender.cc/" target="_blank">CodeBender</a>. This allows you to store an Arduino project in
the cloud, edit it in a web page, compile it in the cloud and download into an Arduino using a web browser plug in. It's much more convenient than installing hundreds of megabytes of Arduino IDE and the editor is much nicer. Here is the actual code:<iframe allowtransparency="true" frameborder="0" src="https://codebender.cc/embed/sketch:199295" style="height: 510px; margin: 10px 0 10px; width: 100%;"></iframe>
Click on the title to see a non-embedded version in its <a href="https://codebender.cc/sketch:199295" target="_blank">own webpage</a>.<br />
<br />
The MicroView doesn't have any separation between the analogue and digital power rails so I guessed the ADC readings would be quite noisy. I knew that the AVR can be made to sleep while the ADC is sampling to reduce the amount of digital noise. I scraped some code from the Arduino forum to do that. Ten bits is not a lot of resolution so I do 16 reads in quick succession and add them together to get a 16 bit result. In the presence of random noise oversampling can increase the resolution at the expense of the sample rate. Marlin firmware uses this technique for reading temperatures.<br />
<br />
The ADC uses the 5V rail for its reference but the actual voltage at the end of a USB cable is somewhat unknown, so I measure the internal bandgap reference to calibrate the other two voltage readings. <br />
<br />
Once the glass is removed from the bulb the voltage becomes quite unstable. I think this is because of chaotic air turbulence. I first noticed this effect when using a thermocouple to measure the temperature at the surface of a <a href="http://hydraraptor.blogspot.co.uk/2010/01/hot-bed.html" target="_blank">heated bed</a>. The control loop might be somewhat unstable due to it having a high gain and bandwidth controlling a laggy heater. It may tend to over correct and overshoot. Despite this I found that averaging over 100 samples gave a stable reading.<br />
<br />
The firmware displays the three voltages it measures (VCC, the bridge voltage and the bulb voltage) averaged over the last 100 samples. It also displays the calculated power and temperature of the bulb.<br />
<br />
I adjust VR1 to set the temperature to 185°C to emulate freshly extruded filament. I don't think the exact temperature matters much. Making it higher increases the sensitivity but there may not be enough voltage to maintain it in a strong airflow. Also you probably don't want it glowing as it might oxidise. It takes a lot more power to reach a given temperature once the glass is removed, obviously, as you have convection cooling even in still air rather than just radiation.<br />
<br />
Pressing the button causes it to subtract the current power level from subsequent readings. That is done in still air so that the power reading is then just the extra heat carried away by a moving airflow.<br />
<br />
The serial protocol is minimal. If it receives <span style="font-family: "courier new" , "courier" , monospace;">z</span> it zeros the power and replies <span style="font-family: "courier new" , "courier" , monospace;">ok</span>. If it receives <span style="font-family: "courier new" , "courier" , monospace;">s</span> it clears the sample buffer and replies <span style="font-family: "courier new" , "courier" , monospace;">ok</span>. After it gets 100 samples it sends VCC, the bulb power and the bulb temperature.<br />
<br />
As this article is long already I will show the results in <a href="http://hydraraptor.blogspot.com/2016/02/cool-maps.html">another post</a>. In the meantime here is a scan of the standard Mendel90 fan duct's cooling effect at 2mm resolution.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-la20li12NEw/VquO-h9TepI/AAAAAAAAIZw/nVuLXX7MNUM/s1600/fanmap_dibond.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://4.bp.blogspot.com/-la20li12NEw/VquO-h9TepI/AAAAAAAAIZw/nVuLXX7MNUM/s1600/fanmap_dibond.png" /></a></div>
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com9tag:blogger.com,1999:blog-4339813531032979196.post-27315919451314850712016-01-28T13:53:00.002+00:002016-01-30T09:52:18.242+00:00A bridge too farThis version of the Mendel90 fan duct that accommodates the E3D V6 hot end happens to be a shape that is surprisingly difficult for slicers. It is because of the shallow sloping slanted bridge.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-xas4hI5lwNc/VqAC57nMCjI/AAAAAAAAIMU/gskhHzptYrQ/s1600/duct.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="http://1.bp.blogspot.com/-xas4hI5lwNc/VqAC57nMCjI/AAAAAAAAIMU/gskhHzptYrQ/s640/duct.png" width="640" /></a></div>
<br />
<h3>
Skeinforge</h3>
I slice everything I print with Skeinforge, so the normal Mendel90 parts are designed around its limitations. It normally does a good job of detecting bridges and aligning the infill to span the gap. Its big limitation is that it does the infill for an entire layer in one direction, whereas it should at least be per island. However, even with the original flat fan duct it doesn't see the first layer of the roof as a bridge.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-bgx72khX89s/VqeYWPR9TiI/AAAAAAAAIS0/mykeJFvfIYw/s1600/duct_original.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="484" src="http://4.bp.blogspot.com/-bgx72khX89s/VqeYWPR9TiI/AAAAAAAAIS0/mykeJFvfIYw/s640/duct_original.png" width="640" /></a></div>
<br />
Left to its own devices it does this for the bridging layer.<br />
<br />
Layer before roof: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-EtqkbNTD7Xc/Vqefts11qCI/AAAAAAAAITE/zt2NwR7cnrE/s1600/sf_below.gco%2B-%2BSkeinlayer%2B26012016%2B161516.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="342" src="http://3.bp.blogspot.com/-EtqkbNTD7Xc/Vqefts11qCI/AAAAAAAAITE/zt2NwR7cnrE/s640/sf_below.gco%2B-%2BSkeinlayer%2B26012016%2B161516.bmp.jpg" width="640" /></a></div>
<br />
First bridging layer: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidp2k8Hznz2T3JNDf-_SpzFMnz66eeGIXFROFZsUj4cTWu_t2Cp719pm2hHUhgmTH6boKrk5ZxxbMK8rBJQa35YahfWRqyQXOCOTS1CbQIR9GcxpefQ0jH8vUffyPOIg5IWrxRA7Y6CPkp/s1600/sf_bridge.gco+-+Skeinlayer+26012016+161651.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidp2k8Hznz2T3JNDf-_SpzFMnz66eeGIXFROFZsUj4cTWu_t2Cp719pm2hHUhgmTH6boKrk5ZxxbMK8rBJQa35YahfWRqyQXOCOTS1CbQIR9GcxpefQ0jH8vUffyPOIg5IWrxRA7Y6CPkp/s640/sf_bridge.gco+-+Skeinlayer+26012016+161651.bmp.jpg" width="640" /></a></div>
<br />
Clearly this doesn't print well because the ends of the infill don't land on anything. The orange section of infill has nothing under the yellow internal edge, so the loops just fall down.<br />
<br />
Filament runs can't start, end or change direction when there is nothing under them, whether it be infill or outline. I don't know what algorithms slicers use but if I was writing one I would generate the infill for an island at the default angle and then check that all the end points land on something below. If not then I would try aligning it with each of the straight sides of the outline, starting with the longest first, noting how many endpoints miss. In most cases that would yield a direction with no misses. In the unlikely event it didn't then I would go for the direction with least misses and try reducing them by tweaking the angle. If there is no solution then I would issue a warning and miss out the lines that can't be printed.<br />
<br />
To get around Skeinforge not spotting the bridge I set the infill starting angle to 90° so that the first bridge layer happens to be in the right direction anyway.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-fOYlACls7hQ/VqeljYiq5HI/AAAAAAAAITc/3VSvGeY-DhQ/s1600/sf_90.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="338" src="http://4.bp.blogspot.com/-fOYlACls7hQ/VqeljYiq5HI/AAAAAAAAITc/3VSvGeY-DhQ/s640/sf_90.bmp.jpg" width="640" /></a></div>
<br />
This workaround is OK when you have just one layer that bridges. With multiple layers you might need to slice with different angles and then splice the gcode together, but that is getting very inconvenient.<br />
<br />
I normally print Mendel90 parts with 0.4mm layers, but I print the duct with 0.35mm layers in order to stretch the filament tighter, so that it bridges the large gap with less droop. The fact that it isn't detected as a bridge means that special bridging settings can't be applied.<br />
<br />
When it comes to the new duct this strategy doesn't work because every layer of the sloping bridge advances left with nothing underneath. So consecutive layers are all bridges at the left edge. With normal 90° infill rotation every second layer has its infill changing direction in mid air. It is supported a little way back, so only small loops hang down, but that makes the inside of the duct very ugly and can't be good for airflow. Also if I print it with 0.35mm layers then the extra tension makes it tend to curl upwards and brush the nozzle, leaving brown marks on the top surface.<br />
<br />
I could set the infill rotation to zero so that every layer is the right direction for the bridge but that would lead to a weak object, especially where the infill is sparse, so I haven't tried it. What is needed is a slicer that can split the sloping roof layers into a left unsupported edge that is printed as a bridge and the rest that is printed with normal diagonal infill. I know that other slicers can have different infill patterns within one island, so I decided to try them out with this object.<br />
<br />
<h3>
Cura 15.04.3</h3>
Cura seems to display infill as solid yellow in its layers view, so I used <a href="http://gcode.ws/">gcode.ws</a> to display the gcode.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-xZ-u5XviRDw/VqeyUC7-MfI/AAAAAAAAITs/vj7tTurOAHc/s1600/cura.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="610" src="http://1.bp.blogspot.com/-xZ-u5XviRDw/VqeyUC7-MfI/AAAAAAAAITs/vj7tTurOAHc/s640/cura.png" width="640" /></a></div>
Cura doesn't detect a bridge and just uses diagonal infill all the way. Interestingly it doesn't connect the ends of the infill, it does a short move at high speed with no retraction. Also it doesn't seem to have any retraction when it moves significant distances across the infill. This is one of the reasons I don't use Cura. I need retractions before all moves longer than say 1mm otherwise it leaves a trail behind and the next line doesn't start properly as there is missing plastic.<br />
<br />
<h3>
KISSlicer 1.1.0.14</h3>
KISSlicer shows some errors in the STL but the colour it uses to highlight them isn't in the key, so I don't know what it thinks is wrong. There are no errors in Netfabb Basic so I am pretty sure the file is OK.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-dz_mgRHyrmE/VqfDyB100GI/AAAAAAAAIT8/ajgQpRd7YCg/s1600/KISSlicer%2B%2528Unregistered%2529%2B26012016%2B185742.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="420" src="http://3.bp.blogspot.com/-dz_mgRHyrmE/VqfDyB100GI/AAAAAAAAIT8/ajgQpRd7YCg/s640/KISSlicer%2B%2528Unregistered%2529%2B26012016%2B185742.bmp" width="640" /></a></div>
<br />
It too doesn't recognise the bridge and just does normal diagonal infill over it, using a colour scheme that is very difficult to see! <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-a66ffd7VtM0/VqfSE7fuIuI/AAAAAAAAIUY/m9hPartcJFA/s1600/KISSlicer%2B%2528Unregistered%2529%2B26012016%2B194010.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-a66ffd7VtM0/VqfSE7fuIuI/AAAAAAAAIUY/m9hPartcJFA/s1600/KISSlicer%2B%2528Unregistered%2529%2B26012016%2B194010.bmp.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
One odd thing is seems to do is inset the internal walls a little further on the last layer below this one, perhaps to give the infill more area to land on.<br />
<br />
<h3>
Slic3r 1.2.9</h3>
Slic3r actually detects it as a bridge but gets the angle slightly wrong.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-tOb0_wKDB28/VqfVX0hOf9I/AAAAAAAAIUk/00_yeChovMc/s1600/Slic3r%2B26012016%2B201802.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="509" src="http://1.bp.blogspot.com/-tOb0_wKDB28/VqfVX0hOf9I/AAAAAAAAIUk/00_yeChovMc/s640/Slic3r%2B26012016%2B201802.bmp.jpg" width="640" /></a></div>
Two infill lines start or end in mid air. I discovered though that if I rotate it 90° the infill comes out correct. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-VgXVrBmjeW0/VqfXPS-oJ1I/AAAAAAAAIUw/XJqd-R4SW1A/s1600/GLCanvas%2B26012016%2B202515.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="630" src="http://1.bp.blogspot.com/-VgXVrBmjeW0/VqfXPS-oJ1I/AAAAAAAAIUw/XJqd-R4SW1A/s640/GLCanvas%2B26012016%2B202515.bmp.jpg" width="640" /></a></div>
This is a shame because I orientate it length ways for printing. That is because on a moving bed Y axis you want to minimise the Y movement to keep the object in warm air.<br />
<br />
The next layer does exactly what I want. I.e. it does horizontal infill where there is nothing underneath but reverts to normal diagonal infill where there is something below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-xonE8rLlhxY/VqfaE80Tb6I/AAAAAAAAIU8/i0zOmGOsXys/s1600/GLCanvas%2B26012016%2B203639.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="606" src="http://1.bp.blogspot.com/-xonE8rLlhxY/VqfaE80Tb6I/AAAAAAAAIU8/i0zOmGOsXys/s640/GLCanvas%2B26012016%2B203639.bmp.jpg" width="640" /></a></div>
So far so good but after a few more similar layers it starts to go a bit wrong.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-butqkpxE4H8/VqfcqKsU1_I/AAAAAAAAIVI/0E9-NDXX2I4/s1600/Fullscreen%2Bcapture%2B26012016%2B205042.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="382" src="http://2.bp.blogspot.com/-butqkpxE4H8/VqfcqKsU1_I/AAAAAAAAIVI/0E9-NDXX2I4/s640/Fullscreen%2Bcapture%2B26012016%2B205042.bmp.jpg" width="640" /></a></div>
It gets the boundaries of the bridge region wrong. It has a few lines of infill turning in mid air at the right hand side. Further up the slope it gets the left hand side wrong as well. I suspect it is because the slope slants left to right.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmdZnw-sm3Kvrw8RWpomo7kRtRXOqNakZsJyaiUOmXNzQZwSrZm0fAPgvhTeCbAS-4r3K7ei13YKHmUoi7n263jttuYMSjkXAVAmkAmC2z62QJ-pnu_jPmBWT5P6JS7MAve6ZDTyWFWgqj/s1600/GLCanvas+26012016+205534.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmdZnw-sm3Kvrw8RWpomo7kRtRXOqNakZsJyaiUOmXNzQZwSrZm0fAPgvhTeCbAS-4r3K7ei13YKHmUoi7n263jttuYMSjkXAVAmkAmC2z62QJ-pnu_jPmBWT5P6JS7MAve6ZDTyWFWgqj/s640/GLCanvas+26012016+205534.bmp.jpg" width="640" /></a></div>
Further up it gets a bit more strange.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-6FFz4o4ubL0/Vqfe-3PO75I/AAAAAAAAIVg/qLdF6xqhA-0/s1600/GLCanvas%2B26012016%2B210148.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="426" src="http://1.bp.blogspot.com/-6FFz4o4ubL0/Vqfe-3PO75I/AAAAAAAAIVg/qLdF6xqhA-0/s640/GLCanvas%2B26012016%2B210148.bmp.jpg" width="640" /></a></div>
I haven't tried printing it but I suspect it would come out not too badly, with just a few small loops hanging down. At least it does logically the right thing, shame about the bugs in getting the bridge angle and region accurate.<br />
<br />
<h3>
</h3>
<h3>
CraftWare 1.13 beta</h3>
This is a late addition suggested in the
comments. Perhaps the nicest user interface of all but it doesn't detect
bridges at all in this object.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-f4fbnFK17IU/VqyGc9kAw6I/AAAAAAAAIaQ/hM5ZuMX3BAE/s1600/Fullscreen%2Bcapture%2B30012016%2B093659.bmp.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="510" src="http://3.bp.blogspot.com/-f4fbnFK17IU/VqyGc9kAw6I/AAAAAAAAIaQ/hM5ZuMX3BAE/s640/Fullscreen%2Bcapture%2B30012016%2B093659.bmp.jpg" width="640" /></a></div>
<br />
<h3>
Simplify3D 3.0.2</h3>
Since none of the free slicers I know of got this right I decided to try a paid for one. With a single outline it fails to detect the first bridge and just does diagonal infill in mid air.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-wmiYLrm1q5E/Vqfne8R_HQI/AAAAAAAAIVw/FoyqUvpNR4w/s1600/Simplify3D%2B%2528Licensed%2Bto%2BChris%2BPalmer%2529%2B26012016%2B213729.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="554" src="http://2.bp.blogspot.com/-wmiYLrm1q5E/Vqfne8R_HQI/AAAAAAAAIVw/FoyqUvpNR4w/s640/Simplify3D%2B%2528Licensed%2Bto%2BChris%2BPalmer%2529%2B26012016%2B213729.bmp.jpg" width="640" /></a></div>
<br />
On subsequent layers it does seem to divide the layer correctly into a bridge region and a normal region but gets the infill direction in the bridge area completely wrong.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/--b0K3BvscJE/VqfoTsfFi_I/AAAAAAAAIV8/47BRadpjsSU/s1600/Simplify3D%2B%2528Licensed%2Bto%2BChris%2BPalmer%2529%2B26012016%2B213942.bmp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="522" src="http://4.bp.blogspot.com/--b0K3BvscJE/VqfoTsfFi_I/AAAAAAAAIV8/47BRadpjsSU/s640/Simplify3D%2B%2528Licensed%2Bto%2BChris%2BPalmer%2529%2B26012016%2B213942.bmp.jpg" width="640" /></a></div>
<br />
With two outlines it gets the main bridge correct but the slope now doesn't have a separate bridge region, just diagonal infill. That is except for just one layer and that also has the direction wrong.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/-FWEIpFVMJcg/Vqfq9cRNIsI/AAAAAAAAIWQ/06Ng6U7IJWY/s1600/Fullscreen%2Bcapture%2B26012016%2B214952.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="http://2.bp.blogspot.com/-FWEIpFVMJcg/Vqfq9cRNIsI/AAAAAAAAIWQ/06Ng6U7IJWY/s640/Fullscreen%2Bcapture%2B26012016%2B214952.bmp" width="640" /></a></div>
<br />
The odd layer corresponds with the solid support diaphragms over the screw holes.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://1.bp.blogspot.com/-6t-opeKyBV4/VqfsIHz-0aI/AAAAAAAAIWk/1ZHAgr317nM/s1600/Fullscreen%2Bcapture%2B26012016%2B214927.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="http://1.bp.blogspot.com/-6t-opeKyBV4/VqfsIHz-0aI/AAAAAAAAIWk/1ZHAgr317nM/s640/Fullscreen%2Bcapture%2B26012016%2B214927.bmp" width="640" /></a></div>
<br />
This does print slightly better than the Skeinforge one but only because the extra outline means the infill lines don't need to overhang quite as far.<br />
<br />
<h3>
Conclusion</h3>
So in summary I can't find a slicer that gets this correct but Slic3r is the closest. Of course they all offer support material but that would be difficult to remove inside the duct and there in lies another raft of bugs, if you pardon the pun. See below: -<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-pV2eXlE_baM/Vqf0T7HUnJI/AAAAAAAAIW0/K7zSUlY9meI/s1600/Fullscreen%2Bcapture%2B26012016%2B223248.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="458" src="http://4.bp.blogspot.com/-pV2eXlE_baM/Vqf0T7HUnJI/AAAAAAAAIW0/K7zSUlY9meI/s640/Fullscreen%2Bcapture%2B26012016%2B223248.bmp" width="640" /></a></div>
<br />nopheadhttp://www.blogger.com/profile/12801535866788103677noreply@blogger.com9