tag:blogger.com,1999:blog-43507773491856820042008-05-15T23:33:18.486-07:00Abstract Pathtumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-4350777349185682004.post-61195782281100989942008-05-14T06:08:00.000-07:002008-05-15T10:20:12.774-07:00Converting Scooba Adapter from 110V to New Zealand 240VThe method is pretty similar to the Roomba adapter conversion and involves replacing a capacitor and varistor.<br /><br />Pictures:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0198-791193.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0198-791126.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The capacitor and varistor are circled.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0199-711733.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0199-711728.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The two replacement components. a <a href="http://www.jaycar.co.nz/productView.asp?ID=RE6156&amp;CATID=&amp;keywords=100uf&amp;SPECIAL=&amp;form=KEYWORD&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=">400V 100uF capacitor</a> and a <a href="http://www.jaycar.co.nz/productView.asp?ID=RN3400&amp;CATID=&amp;keywords=varistor&amp;SPECIAL=&amp;form=KEYWORD&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=">275VAC varistor</a>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0200-747105.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0200-747089.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The board with the replacement components installed. The capacitor had to be mounted sideways in order to fit in the case. I used hot glue to keep it in place.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0201-747208.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0201-747145.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The Scooba happily charging.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-58700612398390404642008-05-14T04:34:00.000-07:002008-05-15T02:09:32.494-07:00Fixing a dead Roomba 500/570 (No Lights)I've had my Roomba 570 for almost two months. In that time, the little guy has been automatically vacuuming the house automatically everyday. A couple of weeks ago, I found him dead (no lights), in the morning, half way through a cleaning cycle. After picking him up he came back to life and then worked fine until two days ago.<br /><br />Two days ago, I found my Roomba dead again, half way through a cleaning cycle. He did not respond to any button presses and none of the indicator lights would come on. Resetting him did not work, nor did removing and replacing his battery. I opened him up and gave him a thorough clean (inside and out) with my standard vacuum. He worked again for 15 minutes and then died whilst emitting a a slow and unrecognisable musical sequence. This happened several more times during the day. The Roomba would die, only to come back to life after he was disassembled and cleaned. The Roomba would run, sometimes for an hour but often for only 10-15 minutes at a time before dying. One of the last times before he died, he moved eratically and again, played a musical sequence in an almost slow motion and drunken fashion.<br /><br />Eventually it seemed like my Robotic Vacuum was dead for good. No matter what I did, he would not respond to any button presses nor would he activate any indicator lights. The only thing I could think of that could cause this to happen would be a blown component or bad solder joint.<br /><br />I disassembled him all the way down to his main circuit board. I carefully went over his entire circuit board, looking for bad solder joints or blown components. I took special care to examine the FETs that drive the motors as well as the voltage regulators. The FETs looked undamaged and the regulators appeared to work because many of digital components chips were getting a 4.2V-5V supply (regulated down the battery's 14.4V supply). Nothing, it seemed, would bring back my Roomba.<br /><br />At 2am this morning, I pondered and wondered. What could possibly cause the Roomba to play music really slowly before it died? It was unlikely that a blown component or failed regulation circuit would cause that kind of failure.<br /><br />I came up with a theory. The crystal oscillator used as a clock generator for the Roomba's microcontroller (an ARM ARM7TDMI) relies on a piezoelectric crystal which can fail from heat, physical shock or simply poor construction.<br /><br />If the crystal oscillator on the Roomba main circuit board failed in such a way as to cause it to oscillate slower than its rated frequency then the Roomba's microcontroller (an ARM ARM7TDMI) would slow down accordingly. The Roomba's monitoring routines would notice some kind of problem (perhaps because of ms timings with other chips or interrupts) and try to play some said warning tones. The slower clock rate would cause those tones to be played with a lower fequency and longer duration.<br /><br />I opened up the Roomba yet again and examined the offending 8Mhz crystal connected to the ARM processor. The solder joints looked fine and the component looked undamaged. Connecting the battery was still not activating the Roomba. I then applied physical pressure to the crystal, connected the battery and was greeted with a hello musical sequence from the Roomba! With some experimentation (fiddling with the crystal) I was able to get the Roomba to start playing music really slowly (almost on demand). I was pretty sure I had found the cause of my Roomba's early death.<br /><br />The cause was hard to find but the fix was simple. I replaced the crystal on the board with a new <a href="http://www.jaycar.co.nz/productView.asp?ID=RQ5287&amp;CATID=&amp;keywords=crystal&amp;SPECIAL=&amp;form=KEYWORD&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=">8Mhz crystal from jaycar</a>. My Roomba now runs like a champ! The crystal is slower than the maximum 32MHz that the processor can take so it would probably be possible to overclock the Roomba (!) though I imagine many of the routines are dependent on the crystal being 8MHz.<br /><br />From reading the iRobot forums, there are appears to be several other people who have had similar symptoms and at least one other <a href="http://forums.irobot.com/irobothome/board/message?board.id=80&amp;thread.id=4980">person who has identical symptoms</a>. I'm left to wonder if iRobot has unknowingly used a bad run of crystals...<br /><br />Here are the pictures:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0222-738882.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0222-738803.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The top of the Roomba with its faceplate removed. The face plate can be removed carefully prying it off, starting from the edge closest to the dustbin. There are clips on the outer circumference as well as the inner circumference. The faceplate clips are quite tight so it will need careful but forceful tugs.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0221-714674.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0221-714660.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The Roomba's bottom cover needs to be removed. Start by removing the side brush and unscrewing the four large screws. Once the bottom cover is removed, the 10 small screws on the bumper bar should also be removed.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0220-781533.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0220-781523.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The Roomba with the bottom cover and battery removed.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0219-781460.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0219-781449.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The Robot with its top cover removed. The crystal is under the control panel which can be removed by unscrewing another four screws. Unscrewing the left and right wheels on the bottom of the roomba will make it easier to work with the Roomba. Make sure you work on a bench and not the carpet as static discharges may damage or destroy components<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0210-716138.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0210-716079.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The robot with the top cover and control panel removed. The crystal is the small metallic, cylindrical component to the right of the "iRobot" logo on the bottom right quadrant of the circuit board.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0225-715473.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0225-715459.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />A close up of the revision number and date as printed on the board.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0215-716231.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0215-716168.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />A close up of the offending component. The component was glued to the circuit board during manufacturing. The ARM processor is in the same area but on the opposite side of the board.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0218-714599.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0218-714582.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Another view of the faulty crystal showing its legs and where it is soldered to the main board. The underside of the crystal has "8.000" engraved -- indicating that the crystal is an 8Mhz crystal.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0223-738963.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0223-738948.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The replacement crystal. The packaging is different (rectangular but that doesn't matter).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0228-715558.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0228-715543.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The new crystal soldered to the board. I applied some hot glue (not pictured) to make sure the crystal won't move around and short out other components.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0229-776099.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0229-776089.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />I side shot of the new crystal. "8.000" means 8000Hz or 8MHz :-).tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-29359212924231558022008-05-13T11:06:00.000-07:002008-05-13T11:08:20.824-07:00Another video of my RobonovaSlightly more intelligent this time :-)<br /><br /><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/RnFXLfMBmgQ&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/RnFXLfMBmgQ&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-60046439543440202142008-05-13T08:15:00.000-07:002008-05-13T08:16:59.794-07:00Video of my RN-1 walking autonomously<object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/ar4Ao1aLECo&hl=en"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/ar4Ao1aLECo&hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object>tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-20346719145334169982008-05-08T22:42:00.000-07:002008-05-08T22:57:03.212-07:00Modifying GWS voltage indicator to show voltage in bar modeThe OBI-02-5 is a 6V battery level indicator made up of 10 SMD LEDs driven by a LN3914N indicator driver. I wanted to use one of these on my RN-1 robot, not necessarily for the indicator but because all humanoid robots need cool looking LEDs :-).<br /><br />GWS make various versions for 4, 5 and 6 cell NiMH/Nicad cells(4.8V, 6V and 7.2V) specifically for RC applications. GWS ships the indicators configured to only light up one LED at a time. I wanted all indicator to light up like a BAR indicator rather than a dot/point indicator.<br /><br />The datasheet for the LM3914N shows that it is capable of displaying in bar mode. The mode selection pin (pin 9) needs to be hooked up to the V+ pin (pin 3).<br /><br />Pictures:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0203-735808.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0203-735797.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The indicator board from the front<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0202-735770.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0202-735760.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The indicator board from the back<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0205-705758.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0205-705745.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The back of the board after modification<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0208-712449.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0208-712361.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />RN-1 proudly displaying his lightstumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-56442616975271360862008-05-02T20:05:00.000-07:002008-05-02T20:28:42.795-07:00Fixing Roomba 500/570 side brushes with stitchesThe Roomba 500 series side brush is infamous for amputating itself. Over time, the arms of the side brush weaken and break off very near the center hub. It's very hard to glue the arms back on since the surface area of the breakge point is very small but it looks like you could simple stich the arm back on using a small needle and thread.<br /><br />Here's some pictures of a side brush with an arm reattached using stiches!<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0196-719893.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0196-719830.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The side brush was first attached back to the hub with some superglue and left to dry for 15 minutes (aparently superglue can react with cotton and catch fire!). After the glue dried sufficiently, I used a small needle and thread and stitched the arm to the central hub. I didn't make too many stitches as I was concerned that too many needle holes would compromised the plastic.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0197-774685.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0197-774612.jpg" alt="" border="0" /></a>tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-70260245216383553622008-05-02T09:24:00.000-07:002008-05-02T09:41:09.622-07:00Robonova hip and ankle jointsI've got a <span class="blsp-spelling-error" id="SPELLING_ERROR_0">Robonova</span> RN-1 humanoid robot. It's a great robot but the use of a screws fitted into thin threaded brackets for the hip and ankles is a really bad design flaw in the <span class="blsp-spelling-error" id="SPELLING_ERROR_1">Robonova</span>.<br /><br />My <span class="blsp-spelling-error" id="SPELLING_ERROR_2">robonova's</span> hip/leg joints and leg/ankle joints failed within 2 weeks of building the robot. The joints <span class="blsp-spelling-corrected" id="SPELLING_ERROR_3">loosened</span> causing the robot to go off balance and fail many of his moves. The screws eventually came lose. Eventually some of the threaded holes in the brackets wore and became useless!<br /><br />I've replaced the screws with standard M2 (2mm) screws and matching nuts. The best nuts to use would have been <span class="blsp-spelling-error" id="SPELLING_ERROR_4">nyloc</span> nuts as they are less likely to come loose. My local fastener supplier was out of M2 <span class="blsp-spelling-error" id="SPELLING_ERROR_5">nyloc</span> nuts so I had to go with standard nuts (for now :-)).<br /><br />The advantage of using screws and nuts instead of just screws is that the threads in the bracket holes aren't required so you can utilise all 8 holes (4 threaded, 4 <span class="blsp-spelling-error" id="SPELLING_ERROR_6">unthreaded</span>) to create an extra strong joint!<br /><br />Here are some pictures:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0192-718055.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0192-718051.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0193-718098.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0193-718090.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0195-776599.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0195-776590.jpg" alt="" border="0" /></a>tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-65730163978988780872008-04-26T21:38:00.000-07:002008-04-26T22:23:47.948-07:00Roomba 570 scratch protectionI wish iRobot would build the sides of their robots with more scratch resistance plastic or rubber. The plastic they use may be cheaper but a robot that runs into furniture to find its way around the room really needs better protection.<br /><br />I protect my iPod and digital camera with plastic film sold by <a href="http://www.bestskinsever.com/">bestskinsever</a>, <a href="http://www.invisibleshield.com/">invisibleshield</a> and others. The film is basically the same as <a href="http://solutions.3m.com/wps/portal/3M/en_US/Scotchgard-PPF/Home/">3M Scotchguard</a>. It is less than 1mm thick and is highly resistant to scratches. It is aparently the same film used to protect helecopter blades from damage. I haven't read about anyone else using these for protecting roombas but I think it's an ideal solution. The protective film is cheap, thin (does not change the appearance of the roomba), slightly soft (protects furniture from bumps) and easy to install (only requires soapy water to activate the stickiness). The film is highly adhesive (does not come off by itself) but is actually easy to peel off and leaves no visible marks or residue behind.<br /><br />I bought some A4 sheets from bestskinsever and cut them to the right shape to protect all around the sides of the roomba and around edges on the underside of the roomba. The flim performs perfectly. After 3 weeks of use, the roomba still looks brand new with no visible scratches on the sides and all my furniture remains undamaged.<br /><br />Manually cutting the plastic film to shape is time consuming but installing the film is much easier to install on the roomba then an iPod LCD because you don't need to be overly careful with dust particles and optical clarity.<br /><br />Here's some pictures of the protected roomba 3 weeks after the protective film was installed:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0170-715784.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0170-715376.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />A shot of the front right of the roomba. There's two strips of film in this photo. One over the right hand sensor bar and one over the plastic under the sensor bar. Cutting the strips for the sensor bar was the most difficult because of the round edge at one end of the sensor bar (far left in the photo).<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0171-716229.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0171-715860.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />A close shot of the end of the roomba's left sensor bar. You can see that the sensor bar and the plastic surrounding it are covered with seperate strips of plastic film. The protective film gives reflections a slight "orange peel" looking effect.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0172-787651.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0172-787261.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />It's a bit difficult to see but there are panels of plastic film protecting the back of the roomba too.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0175-787686.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0175-787681.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Here's a close up of a couple of plastic film panels protecting the side of the roomba.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0177-720384.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0177-720378.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Here's a close up shot of the front center of the roomba showing the two protected sensor bars.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-26984654573669923272008-04-16T02:10:00.000-07:002008-04-16T03:43:25.091-07:00Adding metal bearings to the Roomba 500/Roomba 570 Gear BoxBefore buying my Roomba 570, I was aware that the Roomba 500 series had a design flaw that causes the gear box to fill with dust and hear which would eventually cause it to malfunction. <a href="http://www.youtube.com/watch?v=MQ1l8FikTwo">This video</a> on YouTube by another Roomba owner details the problem.<br /><br />I was hoping that iRobot would have already resolved the issue by the time I got my Roomba. After running my Roomba for a week, I opened the gear box casing to find it full of fluff and cat hair. The dust and hair enters through rather large gaps between the roller/brush driver cogs and the hole in the gear box casing they protude out of.<br /><br />I found this post by vic7767 from RoombaReview. vic7767 uses ball bearings to allow the driver cogs to protude from the gear box casing whilst keeping the gear box casing sealed (no gaps around the edges).<br /><br />The sizings of the ball bearings are pretty standard and I found a <a href="http://www.smpbearings.co.nz/">local supplier </a>of bearings that had all three sizes necessary in stock. The sizes (Dxdxw) are 23x17x4mm, 10x15x4mm and 6x10x3mm.<br /><br />Here's some pictures of my mods:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0150-400-788139.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0150-400-788137.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Medium sized driver cog with the bearing mounted. The cog had to be filed down a bit to fit the bearing.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0151-400-788160.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0151-400-788158.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The large driver. This had to be filed down several millimetres too.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0152-400-772175.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0152-400-772173.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The large driver cog and the bearing next to it.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0155-400-700043.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0155-400-700041.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The smaller driver cog in place. The hole in the cog assembly had to be widened with a file.<br /><br />The opening on the left is what things are like without bearings. Even with the driver cog inserted, the opening left plenty of room for dust and hair to get pulled in.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0154-400-772196.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0154-400-772193.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Both driver cogs with bearings fitted.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0156-400-700063.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0156-400-700061.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The cogs fitted in the cog assembly with the bearings. No more gaps for dust to get in. Nice.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0163-400-772872.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0163-400-772870.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The smallest driver cog (mates with the motor shaft) along with its matching bearing.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0164-400-772898.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0164-400-772891.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The smaller cog fitted onto the cog assembly. Slow and careful filing gave the cog a nice tight fit.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0160-400-733039.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0160-400-733037.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The cog assembly from the inside with all cogs fitted.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0161-400-733059.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0161-400-733057.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The fitted cogs and bearings again.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0165-400-782415.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0165-400-782412.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Roomba on his back with the back cover off.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0166-400-782437.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0166-400-782433.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The driver cogs with the brush and beater fitted.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-82196985918532978862008-04-11T21:52:00.000-07:002008-05-15T02:14:54.108-07:00Fixing/Converting Roomba adapter from 110V to 240V for New ZealandI recently bought a Roomba 570 robotic vacuum from ebay. The robot came with a 110V/120V adapter. Since I'm pretty used to seeing adapters that support 110V-240V, I didn't bother checking the ratings and was greeted by an alarming bang and puff of yellow smoke when the adapter was plugged into our New Zealand 240V mains.<br /><br />Fixing &amp; Converting the switch-mode adapter from 110V to 240V is relatively easy but you shouldn't attempt it unless you know what you're doing. It can be very dangerous whenever working with high-voltage devices.<br /><br />Opening the white adapter casing up was relatively easy (the screws are underneath the rubber feet). The yellow smoke came from a blown 200V 47uF capacitor.<br /><br />To convert the adapter to 240V, you need to replace the 47uF capacitor with a higher voltage capacitor but similar capacity capacitor. I was able to get a 450V 47uF capacitor from <a href="http://www.jaycar.co.nz/productView.asp?ID=RE6125&amp;CATID=&amp;keywords=450V&amp;SPECIAL=&amp;form=KEYWORD&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=">jarcar </a>for under $8. I would have preferred to get a capacitor with a lower voltage rating but couldn't find any local suppliers. Because of its high voltage rating, the 450V capacitor was a bit too large to mount vertically so I had to mount it sideways. I secured the capacitor from contact with other components using some blobs of hot glue. Electrolytic capacitors are polarised so make sure you make a note of which way round the original capacitor was mounted when you mount the new one.<br /><br />The only other component you need to change is the varistor which is the blue disk-like component. The varistor protects the circuit from high voltage spikes. I <a href="http://www.jaycar.co.nz/productView.asp?ID=RN3400&amp;CATID=&amp;keywords=varistor&amp;SPECIAL=&amp;form=KEYWORD&amp;ProdCodeOnly=&amp;Keyword1=&amp;Keyword2=&amp;pageNumber=&amp;priceMin=&amp;priceMax=&amp;SUBCATID=">used this one from jarcar </a>which was under $2.<br /><br />When you've finished putting the adapter back together again, plug it in and carefully measure the DC output from the circular plug (the one that goes into the docking station). The adapter should be outputting 22.5V. You shouldn't plug the adapter into the Roomba docking station until you are sure that the adapter is properly outputting 22.5V otherwise you could damage the docking station and the Roomba if it's docked.<br /><br /><br />Now for the pictures:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0137-715476.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0137-715473.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The adapter after it has been opened. The capacitor (top) and varistor (bottom left) have been circled. Notice how the capacitor has burst.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0138-715492.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0138-715489.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The replacement components. A 47F 450V electrolytic capacitor and a 275V varistor.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0139-774079.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0139-774075.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The original capacitor (left) and the replacement capacitor (right).<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0140-774100.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0140-774095.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The adapter with new capacitor and varistor in place.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0141-780475.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0141-780471.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The adapter lid would not close because the 450V capacitor was too large. Here, the capacitor is mounted sideways.<br /><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0146-733010.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SPM_A0146-733003.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />The Roomba, happily charging from his newly converted 240V adapter.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-36757224279212447942008-02-04T01:26:00.000-08:002008-02-04T01:47:43.111-08:00Fix for iPod Touch/iPhone restarting after powering offOn the weekend, my iPod touch developed a problem where it would always restart again automatically after it was powered off. Basically, the iPod would always reboot instead of shutting down. Indicatively, the problem does not appear if the iPod touch is shutdown whilst attached to my Dension car dock and others have reported it does not appear if the iPod is docked to a 4th gen iPod dock for PCs (even if the dock is not plugged into a PC).<br /><br />After eliminating software as the likely culprit, I tracked down the problem to a dirty dock connector.<br /><br />The dock connector on the iPod has many pins, some of them are control pins. The resistance between the some control pins and ground is read by the iPod and is used to determine the type of device that is connected (dock, serial accessory, etc). I figured some contamination between the pins and the case were causing a faulty reading causing the iPod to think it was connected to an accessory which required it to turn on when it is connected.<br /><br />Apparently there was some kind of contamination between the pins and ground (which I imagine, also includes the casing). The contamination did not stop the iPod from functioning like normal except for the shutdown problem. Cleaning the dock connector with a dry cotton bud did not help, but a cotton bud, well soaked in isopropyl alcohol removed the contamination and has permanently fixed the problem.<br /><br />Don't use anything to clean the connector except for isopropyl alcohol. Other solvents (including water) can leave residues and/or salts behind which could make it worse. You can buy isopropyl alcohol from electronics suppliers, paint dealers and chemists.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-5426925722433264512007-08-09T13:21:00.000-07:002007-08-09T13:27:51.903-07:00SST-ST30NF fanless PSUWow, the ST30NF from Silverstone is a fantastic power supply. I've been using it in my HTPC for over 2 months and it has worked perfectly.<br /><ul><li>The powersupply produces no noise (not even electronic buzzing unless you ear is right on the casing)</li><li>The powersupply was half the price of my original SilenX powersupply (which despite the advertising produces a heck of a lot more than 14dB of noise)</li><li>Produces a suprisingly little heat (Core 2 Duo system).</li><li>Although rated at only 320W, the power supply actually uses a 520W core and is configured to automatically shutdown if it is loaded to over ~400W.<br /></li></ul>I have two intake takes that blow air through the powersupply. The fans are undervolted to 7V and produce nex to no noise when running. I use the fans to promote air flow and reduce stagnant pools of warm air, not to actually perform any direct cooling.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-14287793779246338652007-08-09T12:44:00.001-07:002007-08-09T13:18:59.754-07:00Felt Tips & Nibs for Tablet PCs<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/SP_A0062-705388.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/SP_A0062-705041.jpg" alt="" border="0" /></a><br />I recently upgraded from an <span class="blsp-spelling-error" id="SPELLING_ERROR_0">NEC</span> <span class="blsp-spelling-error" id="SPELLING_ERROR_1">litepad</span> to an ST5112 tablet PC. The Fujitsu ST5112 is an amazing tablet and although is thicker and weighs more than the <span class="blsp-spelling-error" id="SPELLING_ERROR_2">Litepad</span>, it is jam-packed with features (including a fingerprint reader, <span class="blsp-spelling-error" id="SPELLING_ERROR_3">PCMCIA</span> slot and 6 hour standard battery!).<br /><br />I wanted to get some replacement felt tips for the pens in order to get that ever elusive "pen on paper" feel rather than the "plastic on glass" feel which comes standard.<br /><br />It turns out that most <span class="blsp-spelling-error" id="SPELLING_ERROR_4">Wacom</span> pen nibs are compatible with Tablet PC pens. The <span class="blsp-spelling-error" id="SPELLING_ERROR_5">Intuos</span>3 pen accessory kit comes with 5 standard tips, 5 felt tips and 5 stroke (spring loaded) tips.<br /><br />The tips arrived this morning and after a few minutes of testing, I can say that the felt tips feel like, well, felt pens (and they sound like them too -- funny that). They're a small improvement over the plastic pens (I wouldn't say much). They give slightly more resistance/precision allowing me to write words smaller. I would be interested to see what a tip with a more rubber feel is like.<br /><br />I think the best way to get that paper feel is probably to get a soft screen protector; however I don't like the quality of just about all the screen protectors on the market. The "raised" nature of most tablet PC screens means that most screen protectors use four poorly measured strips of double sided tape to attach themselves to the screen and it result looks <span class="blsp-spelling-corrected" id="SPELLING_ERROR_6">amateur</span> and messy.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-37105653414444254572007-07-04T08:47:00.000-07:002007-07-04T09:04:32.703-07:00Don't use CreateGraphics.Unless you have a really good reason to, always draw all your UserControls inside OnPaint.<br /><br />I really hate it when controls flicker. Flickering cannot be solved by getting a newer processer. It is not a problem with the speed of a video card. In computer graphics, it is often faster and easier to simply erase part of a window and redraw it rather than figuring out which individual pixel needs to be updated. Flickering is caused when a background colour is painted before the foreground graphics is painted. The problem is that on windows, each time you paint a pixel you're painting directly to video memory. The rendering of the background color (usually white) is visible for a split second before the foreground pixels are painted over the background.<br /><br />One big mistake that people make when they write Windows Forms user-controls with DoubleBuffering enabled is that they try to draw onto a control outside of the OnPaint method. This is usually accomplished by creating a graphics context using Control.CreateGraphics in some other event handler and then drawing on the resulting context. This will bypass the inbuilt double buffering support in Windows Forms as you will be drawing directly to video memory rather than to an offscreen buffer.<br /><br />If a control needs to be updated in response to some event/action, the state of the control should be changed by changing the appropriate variables and then a combination of the Control.Invalid, Control.Update, and Control.Refresh methods should be used to inform the control to redraw itself.<br /><br />One side-effect of people using CreateGraphics (apart from control flickering), is that they sometimes draw graphics on the control and forget to draw it inside the OnPaint method. This means that the control will not draw itself properly if the control needs to be updated because of external causes (for example, if a window that was once overlapping the control moves).<br /><br />I've seen this kind of mistake in a simple clock control. In response to a timer event, the developer calls CreateGraphics and paints the new time. The OnPaint method is never overridden. This appears to work most of the time but if a window is dragged over and then off the control, the custom drawn graphics for the control will be missing until the next timer event fires. Composition in Vista with composition (Aero) turned on actually prevents this from actually being much of a problem but I still think it's a nasty way to program controls.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-85083296808251786402007-07-04T08:26:00.000-07:002007-07-04T08:47:04.704-07:00NotifyingWeakReferenceWeakReferences in C# and Java are nice but sometimes it'd be nice if there was an easy way to get notified when the referenced object is collected.<br /><br />For Platform.NET I implemented a WeakReference type that has a ReferenceCollected event.<br /><br />The type actually inherits from a generic class named WeakReference which isn't listed below but the point of this post is to demonstrate the relatively simple technique used.<br /><br />Caveats:<br /><ul><li>Don't use the type if you plan on having hundreds of NotifyingWeakReference instances. Each NotifyingWeakReferences will create an object with a finalizer which slows down the garbage collection process.</li><li>The event will be raised sometime after the NotifyingWeakReference is invalidated but not immediately.</li></ul><pre class="csharpcode"><br /><span class="kwrd">public</span> <span class="kwrd">class</span> NotifyingWeakReference&lt;T&gt;<br /> : WeakReference&lt;T&gt;<br /> <span class="kwrd">where</span> T : <span class="kwrd">class</span><br /> {<br /> <span class="kwrd">public</span> <span class="kwrd">virtual</span> <span class="kwrd">event</span> EventHandler ReferenceCollected;<br /><br /> <span class="kwrd">protected</span> <span class="kwrd">virtual</span> <span class="kwrd">void</span> OnReferenceCollected(EventArgs eventArgs)<br /> {<br /> <span class="kwrd">if</span> (ReferenceCollected != <span class="kwrd">null</span>)<br /> {<br /> ReferenceCollected(<span class="kwrd">this</span>, eventArgs);<br /> }<br /> }<br /><br /> <span class="kwrd">private</span> <span class="kwrd">class</span> GarbageCollectionListener<br /> {<br /> <span class="kwrd">private</span> NotifyingWeakReference&lt;T&gt; m_NotifyingReference;<br /><br /> <span class="kwrd">public</span> GarbageCollectionListener(NotifyingWeakReference&lt;T&gt;<br /> notifyingReference)<br /> {<br /> m_NotifyingReference = notifyingReference;<br /> }<br /><br /> ~GarbageCollectionListener()<br /> {<br /> <span class="kwrd">if</span> (m_NotifyingReference.Target == <span class="kwrd">null</span>)<br /> {<br /> m_NotifyingReference.OnReferenceCollected(EventArgs.Empty);<br /> }<br /> <span class="kwrd">else</span><br /> {<br /> <span class="kwrd">new</span> GarbageCollectionListener(m_NotifyingReference);<br /> }<br /> }<br /> }<br /><br /> <span class="kwrd">public</span> NotifyingWeakReference(T <span class="kwrd">value</span>)<br /> : <span class="kwrd">base</span>(<span class="kwrd">value</span>)<br /> {<br /> <span class="kwrd">new</span> GarbageCollectionListener(<span class="kwrd">this</span>);<br /> }<br /> }<br /></pre>PS. Does anyone else wish C# had runtime-level support for Java-like SoftReferences? I emulate them by using TimedReferences (WeakReferences that hold strong references for a specified amount of time after the reference target was last accessed).tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-28991775276175335582007-07-04T08:08:00.000-07:002007-07-04T08:17:27.007-07:00Windows Media Store Crashes and disableUpdateDiscSvcIf you use a third party guide provider for Vista Media Center then you probably use the disableUpdateDiscSvc registry key. There is a bug in Vista that causes the Windows Media Store Update Manager to crash if the key/setting is enabled.<br /><br />This bug is known by Microsoft (KB935685) but the fix is only available for download by calling Microsoft.<br /><br />Luckily someone has uploaded the hotfix to <a href="http://www.xpmediacentre.com.au/community/downloads.php?do=file&id=152">www.xpmediacenter.com.au</a>.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-10119411155645142792007-06-13T19:22:00.000-07:002007-06-13T19:28:34.382-07:00VMWare, Wireless Network Adapter and BridgingIf you're using VMWare Server on Windows Vista with a Wireless network adapter, you might have problems using native VMWare bridged networking. NAT networking works ok to give your guest OS internet access but isn't so good if your guest is a server.<br /><br />A good alternative is to create a windows MAC bridge between the VMWare "virtual" network adapter and your wireless adapter.<br /><br />I recommend using the VMWare Network manager to create a new network adapter rather than using the existing number 1 and number 8 adapters (used for host only and NAT only respectively).<br /><br />By default, VMWare won't allow VMWare network adapters to take part in a windows MAC bridge. You can allow individual VMWare network adapters to take part in a windows MAC bridge by by following the instructions documented in this <a href="http://kb.vmware.com/selfservice/dynamickc.do?cmd=show&forward=nonthreadedKC&docType=kc&externalId=1212&sliceId=2&stateId=0 0 9345265">KB article</a>.tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-15392606352254405982007-06-04T05:59:00.000-07:002007-06-05T20:08:24.881-07:00My new HTPCI bought a 46" Sony Bravia V-series LCD television a few months back. The TV is awesome but my old media center XBOX really let the TV down. The XBOX can be modded to output NTSC widescreen but the output quality is really blury and color faded when compared to the output quality of a PC when hooked up the the TV's VGA input.<br /><br />I had temporary hooked the TV up to a PC set up as a media center but because of the noise plus the negative aesthetic qualities of having a standard mini-tower PC next to the TV I decided to build an entirely new HTPC.<br /><br />The components were:<br /><br /><ul><li>Case: <a href="http://www.silverstonetek.com/products/lc16m/lc16m.html">SilverStone Lascala SST-L16MCR</a><br /><br />I had originally looked at the Zalman HD160 all aluminium case (I love all-alumium cases!) but it was twice the price and the volume knob was too small, flimsy and cheap. At $650, the Zalman case (without a PSU) would have cost almost as much as an XBOX 360!<br /><br />I wanted a case that looked like a HiFi amp rather than a computer. The case needed a VFD or LCD display, a volume and front accessible USB, FireWire and audio ports as well as an inbuilt set of memory card readers. Be sure to get the LC16MCR not the LC16MC if you want the memory card readers.<br /><br />The VFS on the case is an iMON and comes with a remote with an inbuilt IR mouse. The VFD display works well in Vista including the spectrum analyzer which I wasn't sure would work at all. You have to enable the "Stereo Mixer" recording device in Vista and use that as the source. I'm glad the motherboard I got came with an onboard sound card with a stereomix recording channel.<br /><br />I'm very happy with the case. It turned out to be a great choice.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/lc16m-v1-765756.jpg"><img style="cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/lc16m-v1-765754.jpg" alt="" border="0" /></a><br /></li></ul><ul><li>CPU: Intel Core 2 Duo 6420<br /><br />I didn't need a grunty processor and this one had the right price/performance qualities. The processor needed to be dual core (increases responsiveness) but had to run cool. The Core 2 Duo idles around 23 degrees with the cooler I got.<br /><br /></li><li>Cooler: Thermalright Si-128<br /><br />Choosing a cooler took a long time. I wanted to get a cooler with as quiet a fan as possible. The SI-128 comes with no fan as you get to choose your own).The Zalman 9000 has an inbuilt fan so it would not have been easy to replace the fan.<br /><br />The other big issue was that the cooler had to fit in the case. Most quiet or fanless coolers are 15cm or higher which would have been a couple of cm too high for the case (that's really saying something since the LCM16 is a really big case). I was pleasently suprised when I found that the SI-128 cools the processor to 23 degrees using only the system case fans for airflow. I didn't need to buy a fan to clip ontop of the cooler so the cooler is 100% silent.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/product_si128-725726.jpg"><img style="cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/product_si128-725720.jpg" alt="" border="0" /></a><br /><br /><br /></li><li>Motherboard: Gigabyte GS-965P-DS3P<br /><br />I was originally going to go for the Asus P5B-E but they're EOL and I couldn't find anyone who had any stock. I don't regret ending up with the DS3P as it's an excellent motherboard. The only thing that worried me was that it only has 2 PCI slots (but has 4 extra PCIe slots). The PCIe slots would be great if I could find any non-graphics PCIe devices in NZ!<br /><br />The things I really looked out for in a motherboard were: Passively cooled chipset, Optical SPDIF audio out, FireWire support, RAID support.<br /><br /></li><li>Memory: 2xApacer 1GB DDR6400 800Mhz memory<br /><br />Nothing fancy but the memory does come with heatspreaders.<br /><br /></li><li>Video Card: Asus 7300GT<br /><br />An excellent video card (only $120 NZD). Fast enough to run the Vista Aero interface and play videos without a glitch. Older cards like the FX5200 will struggle with full screen video if you have the 3D Aero interface turned on. The card uses passive cooling so there's no noisy fan.<br /><br /></li><li>TV Tuner: A Leadtek PVR2000.<br /><br />Just a TV tuner I already had. I plan on getting a card based on the ATI Theatre 550 chipset as I hear the picture quality is better.<br /><br /></li><li>Optical Drive: ASUS 18X DVDRW with Lightscribe<br /><br />Around $65 NZD and works<br />extremely well. This drive is a short profile drive which means it won't take up as much case room as normal sized bigger drives. The drive, like most optical drives is noisy when it first starts spinning but it's very quiet while running.<br /><br /></li><li>Power Supply: SilenX 450W power supply<br /><br />A quiet power supply (not perfectly silent) but not bad.<br /><br /></li><li>Case Fans: 4 SilenX 80mm Fans<br /><br />I use <a href="http://www.almico.com/speedfan.php">SpeedFan</a> to software control the fan speeds so they run almost silent.<br /><br /></li><li>Operating System: Windows Vista Home Premium<br /><br />Not as expensive if you buy an OEM copy (about $170). Vista Media Center is one of the best products Microsoft have released.<br /><br /><br /></li></ul>The system is setup with <a href="http://www.reven.co.nz/">xmlTVNZ </a>to support NZ guides. I get information about the current program (much more than a normal Sky Box) and can set the HTPC to automatically record my favourite shows (single screening or the entire series as it shows). Rewinding, fast-forwarding, and pausing and of live TV works perfectly as you'd expect.<br /><br />If only those people buying mySky could see what an HTPC could do :-)<br /><br />I'm will be posting photos in the next few weeks..tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-66258767338432976942007-06-03T22:45:00.000-07:002007-06-03T22:57:53.343-07:00Windows Media Center Store Update Manager CrashesIf you're messing with the MCE guide settings in Vista you may end up with Windows Vista Media Center Update Manager constantly crashing. It will crash everytime you try to update your guide or when performs a scheduled guid update.<br /><br />In my case, I was configuring the guide to work in New Zealand with with xmlTVNZ. The problem is that somehow Media Center's database (which is, curiously, a <a href="http://www.sqlite.org/">Sqlite</a> database) gets corrupted and one of the fields can't be converted into a DataTime.<br /><br />The solution is to delete the file <span style="font-family:courier new;">C:\ProgramData\Microsoft\eHome\mediacenterdatastore.db. </span>If the file is locked, you will need to shutdown the media center process as well as the ehrec.exe (use the Task Manager to kill the process or the Services manager to shutdown all the services with names starting with "Windows Media Center").<br /><span style=""></span>tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.comtag:blogger.com,1999:blog-4350777349185682004.post-68606333050558671002007-06-02T21:11:00.001-07:002007-06-12T05:51:54.553-07:00PowerMenuPowerMenu is a small application I wrote back in 1998 that some extra menu items to the windows control menu in addition to the standard "Close", "Maximize", etc options. The extra menus are: Always On Top, Transparency and Minimize To Tray.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/power_menu_screenshot-721231.gif"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/power_menu_screenshot-721228.gif" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.abstractpath.com/weblog/uploaded_images/powermenu_vista-789598.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://www.abstractpath.com/weblog/uploaded_images/powermenu_vista-789591.jpg" alt="" border="0" /></a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />Along with this new blogger-based website, I've created a simple one click installer for PowerMenu.<br /><br /><a href="http://www.abstractpath.com/powermenu/PowerMenuSetup_1_5_1.exe"><br />Download Installer<br /><br /><img src="http://www.abstractpath.com/images/windows_download_link.png" /><br /></a><br /><a href="http://www.abstractpath.com/powermenu/PowerMenu_1_5_1.zip"><br />Download Installer-less Version (not recommended)<br /><br /><img src="http://www.abstractpath.com/images/windows_download_link.png" /><br /></a><br /><br />PowerMenu is free but please consider making a donation:<br /><br /><form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input name="cmd" value="_xclick" type="hidden"><input name="business" value="tum@veridicus.com" type="hidden"><input name="item_number" value="PowerMenu" type="hidden"><input alt="Donation amount" name="amount" value="$5.00" size="22" style="border-style: solid; border-width: 1px; height: 24px; font-size: 10pt; font-family: Tahoma;" type="text"><br /><input name="submit" alt="Donate $5" value="Donate" style="font-family: Tahoma; font-size: 10pt; background-color: rgb(189, 221, 192); width: 80px; height: 24px;" type="submit"><br /><br /></form>tumtumtumhttp://www.blogger.com/profile/08707154189579608918noreply@blogger.com