Recent Updates Toggle Comment Threads | Keyboard Shortcuts

  • gumby3344 8:35 pm on December 16, 2014 Permalink | Reply
    Tags: , , , , ,   

    Looks like a valve build might be able to happen this weekend! We are pumped to get the Ion firing more effectively. As long as I can get to work on some design we should be able to turn it out this coming weekend!

  • gumby3344 7:21 pm on December 1, 2014 Permalink | Reply
    Tags: , , , ,   

    Making a Paintball Gun From Scratch – Hey! It's a Gun! 

    With our last build resulting in a gun that could be muzzle loaded to fire single shots, Brian was confident that we could attain semi-auto firing over the course of the coming weekend. The main problems and parts that needed to be addressed to get to that point were correcting the cycling issues in the bolt, rigging a sort of makeshift trigger system to fire the gun, and feeding paintballs into the system.

    The issue that had to be solved first was the issue of cycling. After our second build, we found that the bolt was not being forced forward by the firing pressure when the control pressure was released. To fire the gun, we had to assist the bolt by pushing on the back of it with something. We expected that the primary cause of this problematic friction was the surface finish of our internal parts. This appeared to be an easy fix after some fine grit sanding on the lathe. Another way that we helped the movement of the bolt was by deepening the o-ring grooves to relieve a little pressure on the bolt.

    After these two fixes, the bolt started to cycle the way it was intended. In order to achieve semi-automatic dryfiring, we had to rig up a hose system to imitate our future trigger. This is roughly what we came up with…

    Gun air rig sketch semiauto

    In this setup, pressure is supplied by separate hoses. The firing pressure is constant as it will be on the final version, and an air gun is used to dump pressure from the control chamber in place of a solenoid-actuated valve. We did have a problem off the start because the trigger pressure input was pumping air too fast for the air gun to dump it. this was causing the chamber to remain at too high a pressure for the bolt to cycle. to fix this, we basically jammed a plug into the input hose to slow the rate at which air could flow through it just enough to allow the bolt to cycle. With this setup, we achieved semiautomatic fire without ammunition.


    At this point I am returning to this post after over a year of absence, so my recollection may be a bit fuzzy. I apologize for any inconvenience.


    In order to feed paintballs into the gun, we decided to create a basic hopper feed system by boring a large hole in the top of the gun. We then threaded the hole and created another piece that fit tightly onto the neck of a hopper and threaded into place on the gun.

    Since this was the first time we had to do anything on a different axis than the firing axis, it meant we got to use a new toy. Brian had recently bought a four jaw chuck that was useful for this type of operation. The mount for this job is pictured below. The hole was started using a wood bore bit, and the hole was widened using a boring bar.

    2013-07-20 11.05.21


    After making both parts, we attached a hopper and voila! It is amazing how much that hopper makes it look like a gun.

    2013-07-20 14.39.03

    We rigged up our makeshift trigger system (partially pictured above) and took it outside to try firing it a few times.

    Now that the firing mechanism is operational, we need to set up a trigger mechanism. The primary phase of this process will be the design of the solenoid valve. A concept is shown below.

    First: A cross-section of the valve                     Second: A full image of the valve hammer



    This valve will be actuated like a solenoid. There will be a copper wire winding around the left end of the valve body which will pull the hammer back when charged.

    In the rest state, pressure will be routed through the valve as such:

    Valve_clip_air_diagram_restWith the valve in its rest state, constant pressure is applied to both the control chamber and the firing chamber. Due to the pressure in the control chamber, the gun does not fire. Once the valve is actuated by an electric current through the solenoid, the air pressure will behave as such:

    Valve_clip_air_diagram_fireWith the control pressure now dumped, the present firing pressure will be able to fire the weapon. After firing, the source pressure will return the hammer to its original position as soon as the solenoid is deactivated, allowing the recharge of the control chamber.

    Hopefully with some refinements to this design, and a free weekend to build, Brian and I can get a real paintball gun together. We still have to deal with making the gun run on CO2, which brings in a whole host of regulation and expansion issues, but I think we are fairly close to a workable product.

    I am sorry to anyone who was affected by my delay in posting this write-up, and I hope you enjoy its contents.


    • pan 5:08 pm on December 16, 2014 Permalink | Reply

      • gumby3344 8:07 pm on December 16, 2014 Permalink | Reply

        Hey! Looks good! Using the end-final position of sigma and everything 😉 <-(Not actually smart, just looked at Wikipedia) I am curious about the sigma in place of the Tau in invention, however. I think yours pronounces better, but for the sake of readability and direct letter translation I think am going to stick with the Tau for now, unless you feel like convincing me otherwise (which you probably could). Definitely smart to replace the omega with a beta though, I was a sophomore in high school when I made that logo and I think I just used whatever Word put in for me 😉 Thanks for the interest in the site and the helpful comment!!

  • jschoolie 1:09 am on March 7, 2014 Permalink | Reply  

    Line 6 DL4 Smart Switch Mod in Beta Testing! 


    Hey Everyone!
    I’m to the point where I feel like I’m ready to sell this mod to a few brave beta testers! The kit will include all of the components required to do the mod (custom PCB, programmed microcontroller, footswitch, resistors, etc.). You’ll need to be able to solder and connect wires to the DL4 PCB, as well as assemble the Smart Switch PCB.

    Check out our shiny new website for more details.

    • Benjamin 8:53 am on August 7, 2014 Permalink | Reply

      I would like to get on the list to purchase the DL4 mod. I’m guessing your site got blown up from the number of people emailing to get on your list. Every time I try and fill out the email form to get on the waiting list I get this message when I click “Place Order”….

      Internal Server Error

      The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

      I’m guessing, like so many others that saw you on Reverb’s “The 7 Best DL-4 Mods,” that your simple web page has been over run. Thought I’d try to contact you and let you know this way. Also to hopefully get on the list for the mod as well. Best of luck to you guys!

      • jschoolie 9:20 am on August 7, 2014 Permalink | Reply


        Thank you so much for letting us know! We are working on fixing it now. Email me at with your full name and address and I’ll get you on the list. My apartment’s mail room lost my last batch of PCBs so there may be a delay before I can start sending out orders because I have to track those down first. Thanks again!

  • schoolie 6:05 pm on February 7, 2014 Permalink | Reply
    Tags: , Evanut, , , ,   

    RF-45 Repair – Making a new Y-Axis Nut 

    The most recent success in my ongoing RF-45 mill repair project is the fabrication of a new Y-Axis lead nut. The stock nut was apparently lost somewhere along the way during the attempted CNC conversion that I’m partially reversing, so I had to come up with a replacement.

    My first thought at replacing the nut was to make a new one out of acetal plastic based on the method described at the Home Shop Machinist Forum. On second thought, I decided it would be much more practical to see if I could find a replacement part online. Like many of the chinese machine tools out there, this mill is one of many clones of an original design. In this case, the Rong-Fu 45 is the original, and my copy was produced by Penn Tools. Unfortunately, I was unable to find replacement parts through them, but Grizzly sells a similar mill along with replacement parts. I dug through the manual to find the part number, contacted Grizzly, and ordered the nut. Easy enough right?

    Unfortunately, the importer of my mill chose to use 8 TPI leadscrews, while the Grizzly version uses 10 TPI leadscrews, so the nut didn’t work. I returned it to Grizzly, and set off on my original plan of making the nut from scratch.

    I started by boring and splitting the acetal to fit the lead screw:

    (Read the rest of this post…)

  • schoolie 11:02 pm on November 6, 2013 Permalink | Reply
    Tags: Machine Repair, , , ,   

    RF-45 Repair – Reinforcing the bed 

    The RF-45 mill I purchased on craigslist a few months ago had some issues… In an attempt to convert the mill to CNC using an extremely oversized ballscrew, a previous owner had milled a pocket out of the bottom of the bed, leaving the material below the bottom of the center T slot uncomfortably thin. With the goal of restoring some of the bed’s original stiffness, I’ve fit a steel plate into the pocket. This post documents the process of machining the plate to fit the bed.

    Here’s the bed as it stood before adding the plate:

    View of bottom of bed showing material removed, and thin wall condition at bottom of T slot

    (Read the rest of this post…)

  • schoolie 9:36 pm on October 21, 2013 Permalink | Reply  

    Quick Fix – Changing the Battery on a Nike Triax Watch 

    The battery on my Nike Triax watch (WR0127-004) died a few months ago. I finally got around to fiddling with it, and was met with an unexpected lack of information online regarding the replacement procedure. Looking the watch over, it seemed fairly straightforward, just remove the four screws on the backplate and replace the battery.

    (Read the rest of this post…)

    • dan 7:14 pm on May 31, 2015 Permalink | Reply

      You could skip cutting the band and instead use a needle and pliers to push out the watchband pin, but there is a danger of stabbing yourself. There is no spring in the watchband, just a rod that is pressure/interference fit.

  • schoolie 10:30 pm on July 31, 2013 Permalink | Reply
    Tags: , ,   

    Bringing home a new project – a Rong Fu 45 Mill 

    A few weeks ago, my Craigslist RSS feed returned a listing for a mill for $300 only a half hour from my house. It was an RF-45 clone that the seller described as a “project.” The RF-45 is a much more substantial mill than the X2 mini mill I currently have, so I was intrigued to say the least. After a bit of thought and contemplating if I had room in the garage, I decided to give it a shot and contact the seller to get some more info.

    It turned out that the previous owner had begun a CNC conversion on it, and in the process had milled a large pocket under the table in an attempt to fit a much too large ballscrew on the X axis. The mill was disassembled, but all the stock leadscrews and handwheels were included, except for the Y axis acme nut. The seller had intended to finish the CNC conversion that the previous owner had so poorly started, but never got around to it since he already had another CNC set up in his garage. Fortunately, he held on to all the parts necessary to run the mill manually. I’m not quite ready to jump into the world of DIY CNC just yet :-).

    All in all, it seemed like a pretty good deal, so I arranged to pick it up the next day. Now I had to figure out how to move it. 700 pounds of chinese cast iron doesn’t just jump in the back of a truck…

    (Read the rest of this post…)

  • jschoolie 8:30 am on July 3, 2013 Permalink | Reply
    Tags: , DL4, Dotted Eighths, Line 6, Mod, Tap Tempo   

    Line 6 DL4 Dotted Eighth Tap Tempo Mod 

    Hey guys,

    So almost a year ago now, my brother Brian and I decided to make a dotted eighth tap tempo feature available on a Line 6 DL4 that I use on my guitar rig. We used an Arduino platform to prototype the project. I have been successfully using the mod for about 8 months now. Check out these videos for more info:

    Here’s the full source code for a standard Arduino or a standalone ATMega328 chip:

    I noticed there was a bug in the original code I posted. I went through and parsed a lot of stuff down in my original source code but I apparently made some errors. This code is the original source code and it is fully functional! 🙂
    (Read the rest of this post…)

    • Troy 9:57 pm on September 21, 2013 Permalink | Reply

      awesome mod. Do you have diy kits yet? If not would you be willing to hook me up with a schematic or possibly just some more details on this?

      • jschoolie 10:19 pm on September 26, 2013 Permalink | Reply

        Thanks! I’m working on finalizing everything right now. I’m very close to having a kit put together. I finished revising the pcb layout/schematic for the mod last night. The revised version uses an ATtiny85 and everything fits on a 1×1 pcb that fastens to the original screw holes on the DL4. Sorry for things moving so slowly, I’m currently enrolled in engineering at Purdue which eats up most of my free time 😉

        • Troy 10:46 pm on September 26, 2013 Permalink | Reply

          No prob. Thanks a lot for posting the code. I was missing the transistor part of the circuit and it gave me fits, but I was finally able to figure it out with an arduino uno and a transistor. I’m just a civil engineer (EIT)… It takes us a little longer to catch on. I think you would have a huge market if you started offering this mod. Thanks again for posting your code!

          • jschoolie 11:36 pm on September 26, 2013 Permalink | Reply

            You’re Welcome! I’m glad you got it working. Lol, you haven’t seen me try to build a bridge! And thanks, I hope so!

    • Troy 9:34 pm on September 30, 2013 Permalink | Reply

      After playing with it for a few days I think i have noticed a weakness in the code at least as it functions for me. On slow songs sometimes I will depress the tap on the beat and let it back up on the and of the beat to help me tap in time. I find that subdividing the rhythm helps me lock it in better (I have been accused of not having rhythm). I’m not sure why this is happening but I’m thinking the HOLD_DELAY 750 is timing out and resetting the tapstate variable. Is there any reason in the way you coded it that the HOLD_DELAY can’t equal 2002 to match the RESET_TIME? Was the selection of 750 arbitrary or did you have a reason?

      • jschoolie 12:26 am on October 1, 2013 Permalink | Reply

        Ah, you’re running into the double preset part of the mod. On the full mod, I have an extra MOSFET switch hooked up that receives either 5V or ground from the arduino. When hooked up properly to the DL4 it will act like an expression pedal. Holding the switch down for 750ms (which is what appears to be happening on the slow songs) flip flops the 5V/ground output from digital pin 8 I think, and it does reset the tap counts thus messing up the tempo. That feature should be pretty easy to remove in the debounce function as it is only necessary if you want the double preset thing to work. I’ll take a look at it tomorrow or Wednesday and try and post a version without that feature in it and that should fix it! Sorry about that!

        • Troy 12:07 pm on October 1, 2013 Permalink | Reply

          Thanks. I appreciate it. I use the double preset wheel instead of the switch. Thanks again for posting the code. It has made my dl4 infinitely more useable.

          • jschoolie 11:12 am on October 3, 2013 Permalink | Reply

            No problem, I’m glad it’s helping you out!

    • Marius 9:35 am on October 3, 2013 Permalink | Reply

      Hello jschoolie, I’m interested in your mod on DL4. Can you send me the list of parts i need and some info so I can make one for mine?

      • jschoolie 11:14 am on October 3, 2013 Permalink | Reply

        Hey Marius, I’m actually fairly close to having a PDF with the instructions and parts list etc. put together and I will post it on here when I have it done in a few days.

    • Bobby Meeks 12:59 am on October 5, 2013 Permalink | Reply

      This is great… Have you heard of anyone trying this on the HD300/400 that sadly has no .8th feature? I may be your first Guinea pig…

      • jschoolie 6:01 pm on October 5, 2013 Permalink | Reply

        Thanks Bobby, and I haven’t heard of any one doing that but I’d be willing to give it a shot! There may be some modifications to the code/process in general but I’m sure it could be done.

    • Ulises 12:45 pm on February 1, 2014 Permalink | Reply

      Hey man!! I play in a worship group and i love the dl4 except for the part that there is no 1/8!! You’re video inspired me!!! I am 17 and i just bout the Arduino mega!! I spent so much money so i can copy that code into a micro-controller but i would like to know if u have finished your pdf file showing what kind of switch i need and what parts (resistors, capacitors,regulators) i need and where to put them in the pref-board! Please man!! God Bless You!

      • jschoolie 4:02 pm on February 6, 2014 Permalink | Reply

        Hey dude! Glad to hear you like the mod and I’m also glad to hear you are using your talents to serve the Lord. I’ll have the PDF done and posted within a couple of weeks. I’m waiting on parts to get in and get my directions tested out before I post anything official. Thanks for your interest!

    • Ulises 9:02 pm on February 21, 2014 Permalink | Reply

      Thank you soo much man!!! Please let me know asap when you get everything done!! I dont need a kit i just need a pdf with all the intructions and i can get the stuff my self! You will help me use my dl4 in a better way!! God bless man!!

      • jschoolie 8:41 pm on March 5, 2014 Permalink | Reply

        Hey dude, I just got everything up and running on our shiny new site: It’ll have everything you need to get you going. The sites pretty new (i.e. we just learned how to write html a few weeks ago) so we are still working out a few kinks. If you see anything horrendous, please let me know lol 😉

    • jschoolie 1:21 am on March 7, 2014 Permalink | Reply

      Hey Everyone!
      I’m to the point where I feel like I’m ready to sell this mod to a few brave beta testers! The kit will include all of the components required to do the mod (custom PCB, programmed microcontroller, footswitch, resistors, etc.). You’ll need to be able to solder and connect wires to the DL4 PCB, as well as assemble the Smart Switch PCB.

      Check out our shiny new website for more details:

    • Ulises 8:35 pm on March 22, 2014 Permalink | Reply

      Hey man! did u receive my email?

    • Austin 5:15 am on June 10, 2015 Permalink | Reply

      Very cool! I am very new to avr programming, but this project really caught my attention. How easy would it be to add to the code allowing you to choose between a few different tap multipliers that are controlled via spdt switch of some kind? like choosing between 1/4, dotted 1/8 and 1/8.

  • schoolie 12:43 am on June 17, 2013 Permalink | Reply
    Tags: , , ,   

    Hacking the Heath/Zenith SL-5408 to run on DC 

    I’ve used the Zenith SL-5408 motion activated security light as a motion detector for my Bird Blaster. In version 1.0, I couldn’t get the detector to work off battery power, even though the whole circuit runs at 5V levels. Now that I’ve acquired a little more electronics equipment and knowledge, I thought I’d take another crack at powering the detector from a low voltage source.

    I started this round of reverse engineering by drawing out the power supply circuit in Eagle, adding components until I had reached the point where regulated 5V was present in the circuit. At this point, I didn’t notice anything that I hadn’t noticed the last time around. It was fairly obvious where the 5V supply originated, and that the PIR and timing circuit only used the 5V supply. The schematic is shown below. The 22 pin connection shown on the right is the point where the chip on board processor (the brains of the motion detector) is soldered in at a right angle to the main circuit board.

    SL-5408 Motion Detector Power Supply Circuit

    (Read the rest of this post…)

    • Kenney 1:07 pm on July 30, 2013 Permalink | Reply

      Great hack ! I have done a similar one to turn the output into a switch and delete the 120v . Good to know these can be hacked to use DC . How can I reduce the test function to 1second?

      • schoolie 2:51 pm on July 30, 2013 Permalink | Reply

        You’re wanting the output to remain active for one second instead of the stock five seconds right?

        If you’re using the arduino like I have in this post, you could just read in the output from the detector, then output a 1 sec signal through a separate relay or transistor controlled by the arduino. The only catch is that the detector will still reset on it’s normal schedule.

        I’ve also wondered if sending a faster clock signal to the detector would work. For example, sending a 300Hz square wave instead of a 60Hz square wave may reduce the test time from 5 sec to 1 sec. This would only work an the detector I used, and may not work at all :).

        What motion detector are you using?

    • Kenney 3:36 pm on July 30, 2013 Permalink | Reply

      Pretty sure its the same home depot Heath, I’ll have to double check. My setup is to scare deer out of the yard with stored rainwater (city water to expensive) and compressed air. I get a lot of false detections during the day with clouds causing cooler and hotter spots.
      OK with using 110v in and hack for switched out. But with the 5 second on and continual false starts would like to cut it back using less air/water. Looking at a time delay so it will cycle maybe 30 seconds before it would restart. Think Arduino is the only answer?

      • schoolie 3:55 pm on July 30, 2013 Permalink | Reply

        Something like the 555 circuit I used for the bird blaster should be adequate. The circuit in that post has 2 second ON time with control pulses at the beginning and end. I don’t think it would be too hard to incorporate a 30 second reset delay.

        What are you using to control the water flow or compressed air? That will determine what the control singals need to look like. Are you currently just using the motion detector’s relay?

        • Kenney 4:41 pm on July 30, 2013 Permalink | Reply

          Yes, just using the relay in the motion detector. Looks like I need to incorporate your 555 controlling circuit. Now all I need is to learn to read the schematic.

          • schoolie 5:00 pm on July 30, 2013 Permalink | Reply

            Honestly, using the Arduino may require less investment of time and materials if you’re new to electronics.

            If you’re looking to learn how this stuff works, starting with the 555 is definitely the way to go. If you just want a result, Arduino may result in less frustration 🙂

    • Kenney 8:02 pm on July 30, 2013 Permalink | Reply

      Knowing what I need, which arduino kit would you recommend? I have two motion sensors hooked to one 25vac ( blind spot) sprinkler valve. Pretty sure 12vdc would operate it if need be.

      • schoolie 11:10 pm on July 30, 2013 Permalink | Reply

        The standard Arduino Uno R3 is the simplest choice for getting started. You can get it at RadioShack or You’ll also need some resistors, an NPN transistor, a diode, and a relay with a 5v coil to actuate the valves. A 12v adapter that fits the Arduino’s power jack would be handy as well. Add a breadboard to build the circuit on (or proto board if you want to solder, maybe just skip the board entirely and solder the components directly together) and you’re good to go :-).

        Your motion detector will need to have the relay modded too if you haven’t already done so.

    • Kenney 7:56 am on July 31, 2013 Permalink | Reply

      Lots of good info, has me headed in the right direction to tweek this thing the way I want it.
      Many Thanks

      • schoolie 3:48 pm on July 31, 2013 Permalink | Reply

        Great. I’d love to hear how things go if/when you work on it.


  • schoolie 4:43 pm on June 15, 2013 Permalink | Reply
    Tags: , Bird Blaster, , , Orbit 62035, peacocks, Pets, PIR Motion Detector, sprinkler valve   

    The Bird Blaster v1.0 

    I keep a pair of peafowl as pets. Peafowl (the male in particular) like to look at themselves in anything that’s reflective. They also like to eat potted plants. This leads to a lot of peacock poop and damaged plants on our porch, which leads to me being in trouble with my wife :). Being an engineer, I figured the only reasonable solution would be to make a motion activated sprinkler to discourage them from hanging out near the house.

    Peacock and Peahen on the patio (they’re not supposed to be on the patio…)

    This was my first real electronics project, starting in the fall of 2011. My plan was to use a motion activated security light, a sprinkler valve from an automatic watering system, and a custom circuit to connect the two.

    (Read the rest of this post…)

  • schoolie 8:03 pm on May 22, 2013 Permalink | Reply
    Tags: , Arduino Compatible MC-2100 Controller, , DIY Arduino, , Lathe Tachometer, ,   

    Arduino Compatible MC-2100 Controller and Lathe Tachometer 

    The completed circuit in operation

    After getting the simple 555 based MC-2100 driver circuit working, we moved on to a controller with more features. I’d been looking for an excuse to make an arduino-compatible board (here’s a description if you’re not familiar), and this seemed like the ticket.

    The initial spec for the controller included the following functions:

    • Read user input from potentiometer
    • Send the 50ms period PWM signal to the MC-2100
    • Sense the lathe’s spindle speed using a magnetic reed switch or equivalent
    • Display the spindle speed on a 7 segment LED display

    At this point, the controller meets the requirements laid out above. I’ll discuss the implementation of each feature into the controller in the order listed above.

    (Read the rest of this post…)

    • Grant Brown 8:44 am on May 28, 2013 Permalink | Reply

      Hey, thanks for this. I had a broken treadmill in my basement with one of these controllers in it, and your blog was the only info I could find on the pinout of the MC2100.

    • richard caput 4:05 pm on September 2, 2014 Permalink | Reply

      Excellent job on all this man, ive been hunting alot of similar topics to you as i have seen your digital “breadcrumbs” all over the web from you hunting down a burnt out resistor to your footpedal mod and now this work of art up there, looks awesome man but i suck at electronics and all i want to do is get my effn atlas 10″ spinning on this 2.5hp, i ran it on an mc60 for awhile, fried after a month, ran another mc60 burnt in 2 weeks, stumbled across an mc2100, circuit board got cracked in my backpack leaving the dump B^D , ordered arduino and as soon as it got here hooked it up to the mc2100 (arduino to wall wart, uploaded all your code to arduino and jujst deleted multiplexing call the kept halting compile, hooked both to common ground, red wire to 100k pot, wiper to A0, .47ceramic wiper to G, and like magic the arduino temporarily dissapeared in a puff of smoke. threw it in corner and ordered another. so here i sit with another arduino a whole lot of parts and im hoping you will tell me a very simple way i can hook a pot to this arduino andthe mc2100 and fill my atlas with no more than 120vDC Brush burning Fury! seriously though real paranoid to screw this up again, just need my damn lathe running so i can start hammering out my todo list.

      • schoolie 1:37 pm on September 8, 2014 Permalink | Reply

        I think this circuit should work with the code you’ve already used. You should be able to run it by simply commenting out the multiplex7seg library as you have before. You’ll notice the arduino is getting its power and ground from the MC2100 directly, it shouldn’t be plugged in to the wall or the USB port any time the MC2100 is plugged in.

        Simple Arduino Circuit
        Bigger Version…

        The on/off switch on pin 13 should be optional, I’m pretty sure it defaults to ON if nothing is connected.

        In an attempt to diagnose your earlier problem, when you say you hooked the red wire to the pot, do you mean the red wire from the MC2100? If so, depending on the position of your potentiometer, you may have applied 12v to the analog pin of the arduino, which could cause the smoke you mentioned :). The pot needs to be hooked up between a 5v source and ground, as shown in my schematic.

        Let me know if you have any more questions. Good luck!

        • Richard Caput 7:09 pm on September 10, 2014 Permalink | Reply

          Wow, thanks man this actually worked without me frying anything, i think it also goes down as my first time being truly thankful to anyone whos schooled me over the internet. My best regards to you and if you ever need a part run thats too big for your RF i work for a machinist who gives me time on his jet bridgeport clone shoot me an email and ill try to repay the favor.
          btw, i did hook the red from mc2100 to the arduino, i think the chip is fine but the board is shot, got a cheap chinese knockoff for $4.00 on ebay and other than the $26 still in my wallet it seems to me identical… Cheers!

          • Richard Caput 7:25 pm on September 10, 2014 Permalink | Reply

            Also! i have a few real pretty SKF AC (reversible) gearmotors from an invacare hospital bed identical to this do you see any reason why i couldnty drive this motor with the incline circuit from the mc2100 and can you think of a way i could control the speed? i would like to use it to drive my leadscrew instead of this prehistoric rubics cube of a gearbox with the atlas? I use two of these motors for powerfeed on my RF clone at home with the hospital bed controller 🙂 so they are more than powerful enough i just dont want to fry the MC by putting too much (current)? through it. thanks again!

            • schoolie 11:25 am on September 11, 2014 Permalink | Reply

              I’m glad that worked for you! Happy to help.

              I’d guess you could simply connect your motor to the incline motor terminals. The incline motor on the treadmill is a small reversible AC motor (I think). Current rating… no idea. If it does fry something, that part of the circuit is independent of the main motor circuit, so you should be OK. Never tried it though, so do so at your own risk 🙂

              To control the motor direction, I’m pretty sure applying 5v to pin 5 or 6 of the MC2100 connector (orange and yellow wires) one at a time will select fwd or rev. You can see the incline motor circuit in the MC2100 schematic (left-center) at the bottom of this post.

        • Patrick Nolan 4:18 pm on May 29, 2016 Permalink | Reply

          This circuit worked great with my 2100E board, i used a very chopped down code, variable pot, works perfectly to control on off state of relay in my emi device, and speed, thanks very much for this post, i was a bit frustrated with trying to get the board to operate. hope this helps somebody else.


          MC-2100 Treadmill Motor Controller Interface
          Lathe Motor Controller via PWM
          Seven Segment Tachometer
          ON/OFF Toggle

          Joe Schoolcraft
          Brian Schoolcraft
          May 2013

          #define POT_READ A0 //Wiper of pot connected as voltage divider (Speed Command)
          #define PWM_OUT 9 //Connected to blue wire of MC2100 (50ms period PWM out)
          #define ON_OFF 13 //On/Off Switch Input

          #define PWM_CYCLE 50.0 //Output Signal PWM Period (50ms)

          #define POT_DIF 4 //Change detection threshold on pot
          #define MAX_DUTY 869 //Max Duty Cycle expected by MC-2100 (85% of 1023)
          #define MIN_DUTY 0 //Min Duty Cycle expected by MC-2100 (0% of 1023)

          int potTemp;
          int potValue;
          int lastPotValue;
          int potCheck;
          int speedLevel;

          byte onOffState = 0;

          void setup()
          pinMode(POT_READ, INPUT);
          pinMode(PWM_OUT, OUTPUT);

          Timer1.initialize(PWM_CYCLE*1000); //Set pin 9 and 10 period to 50 ms
          Timer1.pwm(PWM_OUT,25); //Start PWM at 0% duty cycle

          void loop()
          //Read and condition pot value
          potTemp = analogRead(POT_READ);
          potCheck = abs(potTemp – potValue);
          if(potCheck >= POT_DIF) { //Only accept new value if it’s far enough from the current accepted value
          potValue = potTemp;

          speedLevel = map(potValue,0,1023,0,MAX_DUTY); //Convert Pot input to pwm level to send to MC-2100

          if (onOffState == LOW){ //Off
          Timer1.setPwmDuty(PWM_OUT, speedLevel); //Shut down MC-2100

          if (onOffState == HIGH){ //ON
          Timer1.setPwmDuty(PWM_OUT,speedLevel); //Send speed command to MC-2100

          • FaMan 7:52 pm on January 22, 2017 Permalink | Reply

            I tried the above with an Uno board and the simplified circuit farther above, except I moved the switch connection from pin 13 to pin 12, and used a 0.22uF cap on the speed control pot (because that’s what I had). As written, the switch doesn’t work; it needs onOffState from the debounce function and both on and off are running the motor. I was pretty happy, it was my first ever Arduino project but it certainly won’t be the last. The working code is below:


            MC-2100 Treadmill Motor Controller Interface
            Lathe Motor Controller via PWM
            ON/OFF Toggle

            Original from
            Joe Schoolcraft
            Brian Schoolcraft
            May 2013

            Updates to make it work and add debounce FanMan 170122

            #define POT_READ A0 //Wiper of pot connected as voltage divider (Speed Command)
            #define PWM_OUT 9 //Connected to blue wire of MC2100 (50ms period PWM out)
            #define ON_OFF 12 //On/Off Switch Input
            #define TO_LOW_DELAY 50 //Debounce time for HI to LO switch transition
            #define TO_HIGH_DELAY 50 //Debounce time for LO to HI switch transition

            #define PWM_CYCLE 50.0 //Output Signal PWM Period (50ms)

            #define POT_DIF 4 //Change detection threshold on pot
            #define MAX_DUTY 869 //Max Duty Cycle expected by MC-2100 (85% of 1023)
            #define MIN_DUTY 0 //Min Duty Cycle expected by MC-2100 (0% of 1023)

            int potTemp;
            int potValue;
            int lastPotValue;
            int potCheck;
            int speedLevel;

            byte onOffState = 0;
            byte lastonOffState = 0;
            unsigned long lastOnOffTime = 0;

            void setup()
            pinMode(POT_READ, INPUT);
            pinMode(PWM_OUT, OUTPUT);
            pinMode(ON_OFF, INPUT_PULLUP); //Enable internal pullup resistor to simplify external circuit

            Timer1.initialize(PWM_CYCLE * 1000); //Set pin 9 and 10 period to 50 ms
            Timer1.pwm(PWM_OUT, 25); //Start PWM at 0% duty cycle

            void loop()
            //Read and condition pot value
            potTemp = analogRead(POT_READ);
            potCheck = abs(potTemp – potValue);
            if (potCheck >= POT_DIF) { //Only accept new value if it’s far enough from the current accepted value
            potValue = potTemp;

            speedLevel = map(potValue, 0, 1023, 0, MAX_DUTY); //Convert Pot input to pwm level to send to MC-2100

            onOffState = debounce(ON_OFF, &lastonOffState, &lastOnOffTime, TO_LOW_DELAY, TO_HIGH_DELAY);

            if (onOffState == LOW) { //Off switch to ground is closed
            Timer1.setPwmDuty(PWM_OUT, 0); //Shut down MC-2100

            if (onOffState == HIGH) { //ON switch to ground is open
            Timer1.setPwmDuty(PWM_OUT, speedLevel); //Send speed command to MC-2100


            /* Function for debouncing digital inputs

            _debouncePin – ID of pin to be read/debounced
            lastReading – pointer to variable storing the previous reading (HIGH/LOW) of the input pin
            lastDebounceTime – pointer to variable storing the last time (ms) the input changed (not debounced)
            _toLowDelay – debounce time for HIGH to LOW transition
            _toHighDelay – debounce time for LOW to HIGH transition

            _state – debounced state (HIGH/LOW) of _debouncePin

            byte debounce(byte _debouncePin, byte * lastReading, unsigned long * lastDebounceTime, int _toLowDelay, int _toHighDelay)
            byte _reading = digitalRead(_debouncePin);
            byte _state = *lastReading;

            if (_reading != *lastReading) { // pin state just changed
            *lastDebounceTime = millis(); // reset the debouncing timer

            if ((millis() – *lastDebounceTime) >= _toLowDelay && _reading == LOW) {
            // whatever the reading is at, it’s been there for longer
            // than the hold delay, so take it as the actual current state for use in the rest of the script
            _state = _reading;
            *lastReading = _reading;
            return _state;

            if ((millis() – *lastDebounceTime) >= _toHighDelay && _reading == HIGH) {
            // whatever the reading is at, it’s been there for longer
            // than the hold delay, so take it as the actual current state for use in the rest of the script
            _state = _reading;
            *lastReading = _reading;
            return _state;
            *lastReading = _reading;
            return _state;

            • twmaster 8:37 pm on February 2, 2017 Permalink | Reply

              When I try to compile this I get an error about missing includes. I’m assuming the Timer1 library is needed? What else?

              • FaMan 8:53 pm on February 2, 2017 Permalink | Reply

                Yes, you need the timerone library. Looks like wordpress stripped out anything with angle brackets in my code above thinking it’s html? The line should be (replace the parentheses with angle brackets:

                #include (TimerOne.h)

                You can download it from then you have to install it into your development environment.

                • twmaster 2:22 pm on February 3, 2017 Permalink | Reply

                  Any chance you could repost the code with code tags? Seems the HTML has loaded the code when copied with formatting stuff and breaks the compile. (sorry to be a pain)

    • Raff 11:57 am on October 9, 2014 Permalink | Reply

      Hi schoolie,

      been using these MC2100 posts as a guide for building a belt sander/grinder using a 2.5hp 90VDC motor and i snagged an MC2100-LS board to go with it, as the Livestrong board the motor had on the treadmill doesn’t seem to easy to reverse-engineer.. Seems to run beautifully using the bit-banging code from a previous post, but I am wondering about the reed-switch setup.

      You see…. the motor I have is an amazing little Johnson DC unit that actually has a reluctor wheel and sensor on the unit itself- the tone ring is mounted to the rear threaded hole on the motor spindle, and the sensor unit is attached to the side of the motor casing. It’s a 5vdc sensor- I believe it’s optical, and I can get more information on it, but how would you go about modifying your code or what can I do to use that instead of having to resort to a magnetic reed switch setup for finding motor speed?

      The MC2100 does have a “tach” pin header for the spindle speed sensor as far as I remember (it’s not with me at the moment, but I can verify soon).

      It would be awesome to have a similar setup, and in the future I would like to utilize a similar motor for something that requires reverse/dynamic braking as well. I have a metal fabrication business that I can find a ton of uses for these cheap (used) motors. Heck, the one I got was new and I picked it up for 50 bucks. Can’t beat that! Heck, I’d buy them new if I could get them to all work similarily. It’d be great to have a bunch of uses for the same motor on a bunch of tools and keep some backups/spares incase anything goes wrong.

      Thanks for all your open-source help on this great controller/motor combo.

      • schoolie 5:32 pm on October 10, 2014 Permalink | Reply

        That sounds like a nice little motor!

        If you can get the output of the speed sensor to pull a pin of the Arduino either LOW for each tooth passing by, you’re good to go. There are a few ways to do this, depending on how the sensor’s set up. If you can tell me a bit more about the sensor, I might be able to help.

        Once you’ve got the pulse train going into pin 2 of the Arduino, all it takes is modifying the following line of code with the number of teeth on the tone wheel:

        rawSpindleSpeed = 60000/(avgInterval*NUMBER_OF_TEETH)//convert to RPM

        On another note, the tach header on the MC-2100 doesn’t necessarily have to be hooked up, but if you can get a sensor that shorts to ground (like a reed switch) once for every ~2 motor revs (mount a single magnet on a step down pulley, etc.), the MC-2100 will perform closed loop control on the motor speed, maintaining a fairly constant RPM regardless of how hard you load it. Again, it will work without this, but it’s nice if you can swing it.

        • Raff 11:31 pm on October 30, 2015 Permalink | Reply

          Wow, almost a year since getting around to actually utilizing this thing now. I have some SSR’s on the way to configure an H-Bridge for reverse rotation and dynamic braking. I will update you on that in the near future. I didn’t want to use the arduino I had been using for another project, so I just got around to buying another Arduino that fits into the case.

          The speed sensor doohicky I spoke of earlier is an 80 tooth wheel rotating through an optical sensor (opto interrupter) that uses on 5v power. It has what looks to be two ground connections (which are pinned out individually, but have continuity and are right next to one another), a 5V connection, and an “OUT” connection on the board. Looking at most of the similar breakout board solutions available for arduino, they look identical, except those have 3 pins. so I’m guessing only one GND is required to have arduino interface with it.

          I’m going to send it the proper signals and see if I can get arduino to give me back a serial output of on/off and then transpose the code into your motor control code to see if i can get spindle speed. Once I get that working, Is it possible to just take the rawSpindleSpeed reading and then divide it by 2, and have one of the arduino pins pulled to ground in relation to that number so that the MC2100 gets the signal it wants for RPM control?

        • Raff 1:04 am on November 1, 2015 Permalink | Reply

          Ok, so i got the speed sensor working. If i spin it by hand, I can get it up to about 30rpm and its fine. I can do it endlessly. If I attempt to do the same by turning the motor up to 7% duty cycle, it will read the RPM and output it (using Serial.write) about 0-10 times before it stops refreshing the serial console. It’s almost as if the buffer overflows.

          The speed control still works, but the readout does not adjust/change. Any ideas what would cause that?

          • Raff 1:06 am on November 1, 2015 Permalink | Reply

            Adding to that, I have to physically unplug the arduino unit from USB and plug it in again and re-upload the sketch to get it to reset the serial console. I am not feeding the arduino with 9Vin power from the MC2100 because I am using the serial console to view the speed for now, so I am using USB to power the arduino at the same time.

            • schoolie 10:08 am on November 2, 2015 Permalink | Reply

              Do you have anything connected to Digital Pin 2? The way my code is written, Pin 2 is set up with an interrupt to look for the reed switch closing (line 90). If you leave it floating, static charges will trigger the interrupt randomly and mess up your serial communication. That might not be it, but it’s definitely worth checking.

              Dividing the spindle speed reading by two and sending to the MC2100 should allow it to do it’s internal closed loop control. The MC2100 functioned without it for me as well, but it doesn’t control itself quite as well.

              Check out the MC2100 schematic for details on how it expects to receive the speed signal. You’re looking for HD7 pins 1&2 in the middle of the page. If I’m reading it correctly, the output from the arduino should pull the HD7 pin2 to ground through about 2kohms resistance. However, the ground that’s being referenced is the floating ground the microcontroller uses (open triangle in the schematic), not the earth ground that’s fed out through HD2. I think you’ll need to use an optoisolator or something like that to get that working correctly, but I’m really not 100% sure.

              Again, I don’t think having the speed feedback is 100% necessary, so you can just skip it for now if you have to.

              • Raff 6:53 am on November 15, 2015 Permalink | Reply

                Hey again.

                I understand what you’re saying about the speed control not being neccessary. I thought I would just say to hell with it as well… but I’d really like to get these sensors to work even for RPM display instead of rigging up a set of magnets/reed switches. It’s so elegantly integrated into the motor housing, it would be a shame not to use.

                So since I have two wheels and two sensors I tried the following:

                I removed the decoupling capacitors from the little circuit board for the optical sensor, as it is the same sensor I’ve seen on multiple schematics for arduino, and the resistors were the same values, but this one had decoupling caps. On one sensor, I removed them. And tried both- still same issue. I figured perhaps the caps were sending some sort of feedback to pin 2 via the sense line, but that doesn’t seem to be the issue.

                I made sure that the schematic for those other optoisolators reflected the schematic for the one on this little sensor board, and also checked with a DVOM to match the pinout and wire it up accordingly.

                Serial monitor still stops.

                I also tried an 8 tooth wheel (by bending and flattening 72 of the teeth on one of the encoder wheels since I had two wheels and two sensors) to see if resolution was an issue, but it doesn’t seem to make a difference.

                Right now all i’ve been doing is attempting to comment out a bunch of code to see if the issue lies within an area that has nothing to do with the sensor itself.

                I am going to detach the sensor and see if I can figure it out. but it only seems to stop the serial monitor once the motor receives a PWM signal from the MC2100. If I spin it by hand, the sensor seems endlessly ok with it! odd!

                I’ll report back soon. And my SSR’s should be here tomorrow as well! 😀

                Thanks for all your help.

                • Raff 7:37 am on November 15, 2015 Permalink | Reply

                  ok… small update:

                  I removed the DC motor case ground (which is shown on the motor label that it “must be grounded”), and the signal doesn’t cut out anymore.

                  however, even with the speed sensor wire disconnected, I am getting feedback somehow because i’m getting a speed of 60-75rpm with no speed sensor if i use pin 2.

                  I changed to pin 3 and used interrupt 1 accordingly, and i reduced the number of teeth on the encoder wheel to 4 and have gotten it to read about 1000RPM at 30% duty cycle.

                  For a 3250rpm motor, it sounds about right.

                  Just to make sure, while it was running i plugged the motor ground back into the MC2100 case ground terminal and it cut off the signal again.

                  Any ideas on what to do? should I put a filter of some sort on the ground pins that go from the header to the arduino grounds?

    • Raff 6:06 pm on October 28, 2014 Permalink | Reply


      I can post pictures of the motor and setup once I tweak your code to run and display tach output onto the adafruit LCD shield, as well as PWM and whatnot. I’ll test with and without attaching the unit to the board. If I can’t get a tach output from the main header on the board with everything plugged in as is for treadmill use, I will feed the reluctor wheel sensor its power using the onboard pin header that’s there for it, and then draw the feedback signal by back probing the pin that feeds back into the board and send that to the arduino.

      One issue I’ve seen with the MC2100-LS (because that’s all I have to test with right now) is that if I ramp up the bit-banging duty cycle rapidly, it will go into overload protection and shut itself down until the controller POT is brought back down to 0% DC. Is this normal for all MC2100’s?, or part of the -LS series boards?

      I’ll be tackling this set up soon, perhaps next weekend- and I’ll post here for others to see as well. Then I’ll be creating the grinder base.

      These motors are going cheaaaaaaaap everywhere, as long as you take the treadmills away from the owners who can’t repair them. Sometimes for free!

      Thanks for all your documentation on this amazing combination of useable goodies.

      • Raff 6:06 pm on October 28, 2014 Permalink | Reply

        i meant for that to be a reply to your previous message. sorry!

    • Roy 12:14 am on November 26, 2014 Permalink | Reply

      First of all awesome build. I am looking to do the same thing but I am putting mine on a Harbor Freight knee mill (hopefully my lathe some day too).
      I am hoping you have a complete parts list for this. I already have the major parts- motor, 2100, arduino, display- but I need to know what caps and resistors you used. Such as the voltages…etc of c4, c5, c6…
      Also it looks like you used 2 reed switches- did you mount them in the same place on the spindle? (I was not sure if the double magnet would wreak havoc on the 2100 reed sensor- I am guessing not since I believe that is simply a movement sensor).
      Once I get it setup to the point of writing software I know I will have to mod yours since I have a single 4 digit 7 segment display and mine is 12 pin common anode, as well as wire my display a accordingly.
      On your arduino mc2100 schematic- it looks like all the items to the left of the ATmega box is all the items that would be built “into” an premade arduino.
      This is my first arduino build so it has been quite the learning experience. Thank for all the information so far!

      • schoolie 4:31 pm on December 1, 2014 Permalink | Reply

        The schematic I described in this comment should be all you need to get the MC2100 to operate. The parts required for this are simply a 220 ohm resistor, a potentiometer (any value will do, I used a 10k), and a capacitor for smoothing the reading from the pot (I used a 0.47 uF).

        Only one reed switch goes to the arduino for sensing speed. I put 2 magnets directly on the spindle of the lathe, so the speed sensor pulses twice per spindle revolution. The second reed switch is used to give the MC2100 the signal it needs for closed loop control of the motor speed. It’s not necessary for operation, but it’s nice if you can find a good place to put it. I’ve found through trial and error that the MC2100 is expecting 1 pulse for approximately every 2 revolutions of the motor, so find a place in your drivetrain where you can get close to that and stick a magnet (or more if it’s slower) and a sensor.

        From there, just figure out how to hookup your 7 segment display, and change the pin definitions at the top of the file accordingly. 4 of the pins on your display should be “digit select” and 8 should be “segment select”. Because your display is common anode, you should be able to use this library to drive it, just follow the instructions for hooking it up. Edit: got the anode/cathode thing wrong… you’ll have to use my modified version of that library to get your common anode display working

    • Malcolm 2:38 pm on December 19, 2014 Permalink | Reply

      Holy COW! You guys saved me so much time! I was thinking I was going to have to figure this all out on my own and here it all is! I quick and dirtied the LED RPM free version of this and it worked on the first try! Now I just need to figure how to set the magnets, and wire the display to get the RPM working. I believe I have a 4 digit common anode display in my stuff, but I’ve never wired it up.

      One question. Why power the 7 segment LED from the 12V with a regulator instead of using the 5V from the controller? Anyway, thanks soooo much!!!

      • schoolie 1:30 pm on December 20, 2014 Permalink | Reply

        Awesome, glad it’s working for you!

        The 5v reg in the schematic is the power supply for the entire circuit, not just the 7 seg display. The schematic inlcudes the arduino compatible circuit built “from scratch.” If you’re using an off the shelf Arduino and the current requirements of the display are within the Arduino’s limits, you’ll be fine just using the onboard regulator. Good luck!

    • Roy 11:50 pm on December 21, 2014 Permalink | Reply

      Thanks for the update, I do have a few more questions. I think I wasn’t completely clear. I am using an off the shelf arduino and not building it from scratch. So I am trying to figure out what parts I will still need from your schematic. I am using recycled parts from my crap bin and think I have gathered all the needed parts. Above you said you used a .47uf capacitor for the pot, but in the “gut shot” pic I see a black 4.7uf cap but do not see that on the schematic- I just want to make sure it was not a typo.

      Also I noticed something in the body that was confusing- talking about common anode/cathode displays:

      “Display Spindle Speed on LED Display

      For the display portion of the build, I used a couple two digit 7 segment displays from a treadmill’s dash panel. A brief overview of interfacing 7 segment displays with Arduino can be found here. Like most microcontroller topics, this one has two parts: the hardware and the software. For the hardware, I built a fairly standard 7 segment display circuit, with one exception. “”””””My displays were common ANODE (all the LED’s in the display share their positive pin), while most are common ANODE””””””.”

      I read that part to be a typo and that yours really were common cathode since you had to modify code and most are common cathode. I now understand that yours are actually common anode like mine. Thanks for the info so far, I will update as I progress.

      • Malcolm 12:26 pm on December 22, 2014 Permalink | Reply

        Hi Roy. I’m exactly where you are at the moment, mocking it up with a stock Arduino Uno and seeing what extra parts I need. My plan is to use a Pro Mini when once I’ve got it working. I also have a common anode display. Depending on your display, you may be able to use the 5V output from the Uno to power it with only a single resistor on each of the segment’s cathode legs. Do you have the data sheet for your display? Failing that, you could do some quick experiments lighting just a single segment from your Uno’s 5V. You can get a ballpark idea for the resistor if you know what color the display is. I’m actually going to use the transistor set up as shown in the project’s schematic as I don’t want to tax the Uno’s output. I just began wiring it all up last night, so I’ll let you know how it goes today.

        • Roy 12:42 pm on December 22, 2014 Permalink | Reply

          According to what I had read trying to power the display off the Arduino would be too much for it to handle, we need to make the power circuit. I have a ton of transistors but not the ones listed above, so I will be at a stand still until I can get those.

          • schoolie 1:07 am on January 2, 2015 Permalink | Reply

            There’s nothing special about the transistors I chose to use, at least not that I know of. My knowledge of transistor selection is minimal, but most PNP transistors should work. The right kind of JFET or MOSFET would work as well, you just need something that can handle switching the current of the leds.

            Making the power circuit is definitely not a bad idea 🙂

      • schoolie 1:05 am on January 2, 2015 Permalink | Reply

        Yes, Roy, you’re correct. My display is common anode. I’ve edited the post to fix that mistake. Sorry I keep messing that up…

    • tumoheat 6:30 pm on May 21, 2015 Permalink | Reply

      Great information. I was stuck till I saw your post about the missing 240 ohm resistor coming from the control panel. Now I can run the motor via PWM from my Arduino! Quick question, can I run two DC motors off of the MC-2100 controller? I’m building a pitching machine for my nephew and probably won’t crank it any where near the maximum voltage. Or do you think I’ll overload the board?

      • schoolie 10:29 pm on May 21, 2015 Permalink | Reply

        I can’t say for sure, but I’d guess running two motors in parallel would be OK. The board has a current sense resistor, so it self limits when overloaded. At least it does to some extent… I’d be interested to see how it works out!

    • Junior 9:39 am on August 12, 2015 Permalink | Reply

      Has anyone come up with code for using the LCD keypad shield + MC2100 / Reed switch for simeple lathe operation and tach? Ive been trying to do it but it might be a bit too much for me, ive been trying to hack together Schoolies code with the lcd keypad code but i havent gotten anytihing but the lcd printing “Lathe RPM” hehe, so please if anyone reading this out there can help please do or email me at . Not to hijack your project schoolie but this site seems to be a repository of MC2100 info

      • Junior 9:12 am on August 14, 2015 Permalink | Reply

        Can anyone help me figure out what im doing wrong? ive been just trying to modify (hack) schoolies code to work with this 16,2 Sainsmart LCD Keypad to have up + pwm and down button – but im getting nowhere.


        Modified from

        MC-2100 Treadmill Motor Controller Interface
        Lathe Motor Controller via PWM
        Seven Segment Tachometer
        ON/OFF Toggle

        Joe Schoolcraft
        Brian Schoolcraft
        May 2013

        And Sainsmart LCD Shield

        This program demonstrates button detection, LCD text/number printing,
        and LCD backlight control on the Freetronics LCD & Keypad Shield, connected to an Arduino board.

        After powerup, the screen looks like this:

        |Freetronics 16×2|
        |Btn: 0 | <- This time value counts up the number of seconds since reset (overflows at 99)

        When a button is pressed, a label appears for it:

        |Freetronics 16×2|
        |Btn:RIGHT 0 |
        Labels are LEFT, UP, DOWN, RIGHT and SELECT-FLASH.
        SELECT-FLASH makes the LCD backlight flash off and on when held down.

        Pins used by LCD & Keypad Shield:

        A0: Buttons, analog input from voltage ladder
        D4: LCD bit 4
        D5: LCD bit 5
        D6: LCD bit 6
        D7: LCD bit 7
        D8: LCD RS
        D9: LCD E
        D3: LCD Backlight (high = on, also has pullup high so default is on)

        ADC voltages for the 5 buttons on analog input pin A0:

        RIGHT: 0.00V : 0 @ 8bit ; 0 @ 10 bit
        UP: 0.71V : 36 @ 8bit ; 145 @ 10 bit
        DOWN: 1.61V : 82 @ 8bit ; 329 @ 10 bit
        LEFT: 2.47V : 126 @ 8bit ; 505 @ 10 bit
        SELECT: 3.62V : 185 @ 8bit ; 741 @ 10 bit

        #include // include LCD library
        // Pins in use

        #define ON_OFF 13 //On/Off Switch Input

        #define PWM_CYCLE 50.0 //Output Signal PWM Period (50ms)
        #define MAX_DUTY 869 //Max Duty Cycle expected by MC-2100 (85% of 1023)
        #define MIN_DUTY 0
        #define PWM_OUT 11
        #define BUTTON_ADC_PIN A0 // A0 is the button ADC input
        #define LCD_BACKLIGHT_PIN 3 // D3 controls LCD backlight
        // ADC readings expected for the 5 buttons on the ADC input
        #define RIGHT_10BIT_ADC 0 // right
        #define UP_10BIT_ADC 145 // up
        #define DOWN_10BIT_ADC 329 // down
        #define LEFT_10BIT_ADC 505 // left
        #define SELECT_10BIT_ADC 741 // right
        #define BUTTONHYSTERESIS 10 // hysteresis for valid button sensing window
        //return values for ReadButtons()
        #define BUTTON_NONE 0 //
        #define BUTTON_RIGHT 1 //
        #define BUTTON_UP 2 //
        #define BUTTON_DOWN 3 //
        #define BUTTON_LEFT 4 //
        #define BUTTON_SELECT 5 //
        //some example macros with friendly labels for LCD backlight/pin control, tested and can be swapped into the example code as you like
        #define LCD_BACKLIGHT_OFF() digitalWrite( LCD_BACKLIGHT_PIN, LOW )
        #define LCD_BACKLIGHT_ON() digitalWrite( LCD_BACKLIGHT_PIN, HIGH )
        #define LCD_BACKLIGHT(state) { if( state ){digitalWrite( LCD_BACKLIGHT_PIN, HIGH );}else{digitalWrite( LCD_BACKLIGHT_PIN, LOW );} }

        int speed1(0);

        byte buttonJustPressed = false; //this will be true after a ReadButtons() call if triggered
        byte buttonJustReleased = false; //this will be true after a ReadButtons() call if triggered
        byte buttonWas = BUTTON_NONE; //used by ReadButtons() for detection of button events
        Init the LCD library with the LCD pins to be used
        LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 ); //Pins for the freetronics 16×2 LCD shield. LCD: ( RS, E, LCD-D4, LCD-D5, LCD-D6, LCD-D7 )
        Called by the Arduino framework once, before the main loop begins
        void setup()
        Timer1.initialize(PWM_OUT*1000); //Set pin 9 and 10 period to 50 ms
        Timer1.pwm(11,0,1000); //Start PWM at 0% duty cycle
        //button adc input
        pinMode( BUTTON_ADC_PIN, INPUT ); //ensure A0 is an input
        digitalWrite( BUTTON_ADC_PIN, LOW ); //ensure pullup is off on A0
        //lcd backlight control
        digitalWrite( LCD_BACKLIGHT_PIN, HIGH ); //backlight control pin D3 is high (on)
        pinMode( LCD_BACKLIGHT_PIN, OUTPUT ); //D3 is an output
        //set up the LCD number of columns and rows:
        lcd.begin( 16, 2 );
        //Print some initial text to the LCD.
        lcd.setCursor( 0, 0 ); //top left
        // 1234567890123456
        lcd.print( “Lathe Speed” );
        lcd.setCursor( 0, 1 ); //bottom left
        // 1234567890123456
        lcd.print( “Speed = (speed1) “);
        Arduino main loop
        void loop()
        byte button;

        //get the latest button pressed, also the buttonJustPressed, buttonJustReleased flags
        button = ReadButtons();
        //blank the demo text line if a new button is pressed or released, ready for a new label to be written
        if( buttonJustPressed || buttonJustReleased )
        lcd.setCursor( 0, 0 );
        lcd.print( “Lathe Speed”);
        lcd.setCursor(8 , 1 );
        lcd.print(“Press Up/Dwn”);
        //show text label for the button pressed
        switch( button )
        case BUTTON_NONE:
        case BUTTON_RIGHT:
        lcd.setCursor( 0, 0 );
        lcd.print( “RIGHT” );
        case BUTTON_UP:
        lcd.setCursor( 0 , 0 );
        lcd.print( “Increasing” );
        speed1 = (speed1 + 3);
        Timer1.pwm(PWM_OUT, 0);
        lcd.setCursor( 0 , 1 );

        case BUTTON_DOWN:
        lcd.setCursor( 0 , 0 );
        lcd.print( “Decreasing” );
        speed1 = (speed1 – 100);
        lcd.setCursor( 0 , 1 );
        case BUTTON_LEFT:
        lcd.setCursor( 0 , 0 );
        lcd.print( “STOP” );
        Timer1.setPwmDuty(PWM_OUT , 0);
        speed1 = (0);
        lcd.setCursor( 0 , 1 );
        case BUTTON_SELECT:
        lcd.setCursor( 0, 0 );

        /* an example of LCD backlight control via macros with nice labels
        delay( 150 );
        LCD_BACKLIGHT_ON(); //leave the backlight on at exit
        delay( 150 );

        // an example of LCD backlight control via a macro with nice label, called with a value
        delay( 150 );
        LCD_BACKLIGHT(true); //leave the backlight on at exit
        delay( 150 );

        // print the number of seconds since reset (two digits only)

        //debug/test display of the adc reading for the button input voltage pin.
        lcd.setCursor(12, 0);
        lcd.print( ” ” ); //quick hack to blank over default left-justification from lcd.print()
        lcd.setCursor(12, 0); //note the value will be flickering/faint on the LCD
        lcd.print( analogRead( BUTTON_ADC_PIN ) );
        //clear the buttonJustPressed or buttonJustReleased flags, they’ve already done their job now.
        if( buttonJustPressed )
        buttonJustPressed = false;
        if( buttonJustReleased )
        buttonJustReleased = false;
        Detect the button pressed and return the value
        Uses global values buttonWas, buttonJustPressed, buttonJustReleased.
        byte ReadButtons()
        unsigned int buttonVoltage;
        byte button = BUTTON_NONE; // return no button pressed if the below checks don’t write to btn

        //read the button ADC pin voltage
        buttonVoltage = analogRead( BUTTON_ADC_PIN );
        //sense if the voltage falls within valid voltage windows
        if( buttonVoltage = ( UP_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage = ( DOWN_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage = ( LEFT_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage = ( SELECT_10BIT_ADC – BUTTONHYSTERESIS )
        && buttonVoltage <= ( SELECT_10BIT_ADC + BUTTONHYSTERESIS ) )
        button = BUTTON_SELECT;
        //handle button flags for just pressed and just released events
        if( ( buttonWas == BUTTON_NONE ) && ( button != BUTTON_NONE ) )
        //the button was just pressed, set buttonJustPressed, this can optionally be used to trigger a once-off action for a button press event
        //it's the duty of the receiver to clear these flags if it wants to detect a new button change event
        buttonJustPressed = true;
        buttonJustReleased = false;
        if( ( buttonWas != BUTTON_NONE ) && ( button == BUTTON_NONE ) )
        buttonJustPressed = false;
        buttonJustReleased = true;

        //save the latest button value, for change event detection next time round
        buttonWas = button;

        return( button );

    • Mark 1:08 am on December 28, 2015 Permalink | Reply

      Thanks so much for sharing this project and documenting it so well. This was extremely helpful in my upgrade to my Harbor Freight mill. I have shared a link to this post on my blog about the build. You can see it at

    • Paul Tinguely 6:19 pm on June 14, 2016 Permalink | Reply

      Excellent blog! wondering if you have found a schematic diagram for the MC-2100? I’m a retired digital engineer and would like to get involved in some similar projects.
      Any help would be greatly appreciated!

    • Chris 9:30 am on July 4, 2016 Permalink | Reply

      What is the type of fuse on the mc2100e board please? Have 2 of these boards but no fuses! Have Looked everywhere but can’t find value, many thanks.

    • Jimmy 11:37 am on August 2, 2016 Permalink | Reply

      Thanks so much for sharing your work! I have a treadmill with the MC2100LT and this will be so helpful in repairing it and looking for others for future projects with the Arduino. Great job

    • twmaster 7:46 pm on October 8, 2016 Permalink | Reply

      Ok. This is just what I need. I picked up free treadmill today and it has an MC2100 inside. I used to toss those controllers as I could not figure out their signal needs. Thank you.

  • schoolie 12:06 pm on May 22, 2013 Permalink | Reply
    Tags: , , ,   

    An update and simplification of the original MC-2100 PWM Circuit 

    The circuit. Left connector goes to MC-2100 (GND, 12V, Signal). Right connector goes to speed control pot.

    After discussion with Terry in the comments of previous posts, we came to the conclusion that the MC-2100 wasn’t expecting a full 5V signal at the control signal input (blue wire). As shown in the MC-2100 schematic, the optoisolator on the input (U1) has a 22ohm resistor (R2) in series with it. Applying 5V to the blue wire results in 170mA flowing through the optoisolator, higher than its 50mA rating.

    This lead to the conclusion that there must be another resistor in the circuit at the dash panel end of the blue wire. Upon inspection, there is a 240ohm resistor in series with the control signal output on the treadmill’s dash panel PCB. With the series resistance at 262ohms, the current through U1 is now 15mA, a much better current level for reliable operation.

    Taking things a step further, it’s possible for the circuit to operate on higher voltage if a larger series resistor is used. This allows us to eliminate the 5V regulator from the circuit, as well as the transistor from the output, which was mistakenly added to allow the higher output current the circuit required without the current limiting resistor.

    Here’s the resulting circuit (keep reading, not done yet!):

    MC-2100 PWM Driver v6 – No Filter

    (Read the rest of this post…)

    • John Tappan 9:38 am on February 3, 2015 Permalink | Reply


      This is really interesting stuff, and although I don’t understand any of the technical jargon, I am hoping I can replicate your controller for my MC-2100. I’m sure I’ll have many questions throughout the process, although your detail and explanation is top-notch. I lam a bit confused at the beginning, though. Is the “original MC-2100 PWM circuit” incorporated into the Arduino compatible “MC-2100 Driver V 6” or are they two separate components of the overall controller. I guess I’m asking if the 555 timer circuit is necessary in additon to the Arduino controller. Thanks.

      • schoolie 3:04 pm on February 9, 2015 Permalink | Reply

        The two circuits are independent, and produce the same basic function. The arduino based circuit is just a fancier way of doing it that provides a digital speed readout among other things. The simplest approach is to build the circuit in this post, and ignore the arduino stuff entirely. Good luck!

    • Doug 12:27 pm on October 30, 2015 Permalink | Reply

      Hi and thanks for the great article and your work on the MC2100.

      I have your circuit constructed on a breadboard. I have double checked everything twice and made sure all values are correct. I checked continuity between all points to make sure the breadboard contacts were ok.

      The red led on the MC2100 comes on and stays solid, which means it’s not receiving a pulse from the external circuit. I don’t have a scope to check to see if I am getting a proper square wave. You don’t show any DC voltages on your schematic, so I am not sure what voltages I should be reading on the external circuit?

      The previous owner said the treadmill control panel got wet and it stopped working properly. I tested the Motor and it works. The DC2100 board looks to be in good shape. I am wondering if the U1 opto is bad on my MC2100?

      I am at a standstill now until I figure out what to do next
      Any help would be appreciated
      Thanks, Doug

      Here’s a link to a pic of my setup

    • Doug 1:30 pm on October 30, 2015 Permalink | Reply

      I measured voltages on my external board and added them to your circuit diagram

    • Doug 12:07 pm on October 31, 2015 Permalink | Reply

      I was able to get Terry’s dual 555 timer circuit to work with my MC2100.
      Details on my build are here.

    • schoolie 10:15 am on November 2, 2015 Permalink | Reply

      It probably doesn’t matter now that you’ve got Terry’s circuit working, but was the 1.2 to 1.4v at the output measure with the blue wire plugged in to the MC2100? Did you adjust the R1 pot?

      Glad you got it working either way, thanks for sharing!


      • Doug 10:25 am on November 2, 2015 Permalink | Reply

        Hi Brian, I don’t remember now. That was a few days ago. I did play with both pots for quite a while until I gave up and built Terry’s circuit. I am not sure why I could not get your circuit to work properly?
        I set up a build page here for other people and there is a link to a you tube video of my build in action
        Check out my finished build here.

      • Doug 10:27 am on November 2, 2015 Permalink | Reply

        And by the way Brian, thanks for posting your blog. I would have just chucked the MC-2100 board in the trash and bought a MC-60 if it was not for finding your info 🙂
        Here’s my you tube video link for those that are interested.

    • Bryan 3:54 pm on November 17, 2015 Permalink | Reply

      I have a quick question – I’ve got the NE555/LM393 circuit built that works, but anytime I disconnect the power to the unit, it takes quite a bit of fiddling with the trimmer pot to get the motor to run again. I seemed to remember reading something about this issue, but I can’t recall where in the various threads on this topic. For most of the time, I can leave it plugged in and leave the main power circuit on, and just use a switch in line with the rheostat. Is there a way to get the unit to restart reliably when the power is completely turned off?

      • Bryan 8:37 pm on November 17, 2015 Permalink | Reply

        Correction: it’s been a while since I worked on this project, and had forgotten that I couldn’t get the 555/393 circuit to work, so built the twin 555 circuit (just like Doug). Going to try the momentary contact and see if that solves my issue.

        • Bryan 10:07 pm on November 17, 2015 Permalink | Reply

          Well… I seem to have solved my own problem just by reading a little more carefully – Doug’s solution works well for me. I’ve added an on/off switch in line with the hot side of the speed controller so I won’t normally have to turn it off at the circuit breaker.

    • Doug 6:42 am on November 18, 2015 Permalink | Reply

      Cool, glad that worked out for you!

    • JD Combs 5:30 pm on November 13, 2016 Permalink | Reply

      I realize this is an older post but I am just getting into building a treadmill motor powered 2×72″ belt grinder using a MC-2100 control from the tread mill I scavenged. I found the V6 interface circuit and was in the process of bread-boarding it but noted what looks like a discrepancy in the schematic. I am really old school electronics, late 60s Navy electronics, but it appears to me that a component is missing from the “A” side of the LM393. Either that or it is intentional “grounded” out of the circuit so as not to be used. Pins 1 thru 3 all go to ground effectively grounding pin 4 of the “B” side. Is this correct?

      • schoolie 9:38 pm on November 13, 2016 Permalink | Reply

        You’re reading it correctly, the A side of the LM393 isn’t used in this circuit. The LM393 has two independent comparator circuits, and we only need one here, so the three pins associated with circuit A are just tied to ground. Pin 4 is the main ground reference that is used by both circuits. Good luck!

    • Alex 3:10 am on January 6, 2017 Permalink | Reply

      I am trying to build this to see if I can get this treadmill back to use and I seem to be getting the same results as Doug did when he tried to build it. Similar voltage at R5 and R9. Parts list has R1 as the trimpot and R5 as potentiometer is this correct? If so around what value am I looking for on R1 when adjusting it?

  • schoolie 10:14 pm on May 21, 2013 Permalink | Reply
    Tags: , , ,   

    An alternative MC-2100 dashboard replacement circuit 

    Terry’s dual 555 circuit


    As discussed in the comments of earlier MC-2100 related posts, Terry has been working in parallel to create a circuit capable of generating the variable duty cycle PWM signal that the MC-2100 requires to operate. He’s written up a very thorough summary of his design process (click for the PDF file).

    Terry’s circuit uses two 555 timers (or a single 556), two potentiometers (one is a trimmer), and various capacitors and resistors. This is a great way to get the MC-2100 working without the dash panel if you don’t have a comparator on hand.

    • Doug 12:04 pm on October 31, 2015 Permalink | Reply

      Hi Terry,
      Hope you see this post here
      I built Schoolie’s 555 – LM393n circuit but was not able to get it to work with the MC2100

      Then I built your dual 555 timer board and was able to get my MC2100 to run my motor

      A couple of notes on my build using your PDF build document

      The circuit would not respond until I added a .68uf cap across the Black and Red wires coming from the MC2100. See my picture
      Once I added a cap across the incoming 12v voltage supply, the circuit began to send pulses to the MC2100
      I only discovered this because I hooked up my multi meter to measure the 12volt supply and the circuit started working. When I removed my meter, the circuit stopped working. I unhooked my meter and touched a .68 cap across the voltage supply and the circuit starting work. I saw Schoolie had a .47 on his circuit and so it looked like a good thing to add to your circuit

      The optimal resistance I found on my build for the combo of R3 + R2 was 31k

      Terry, as you noted in your PDF build document, turning off the MC2100 and then turning it back on resulted in the circuit no long working. I added a momentary switch between R5 pot and the 12 volt power supply
      Tapping the momentary switch and breaking the voltage to R5 and then releasing the momentary switch works like a charm.
      After breaking and restoring the 12 volt supply to R5 pot, the circuit starts up and pulses the MC2100

      I am open to any modifications that may be needed on my build
      Does the circuit need a filter on the blue wire to prevent the motor from messing up the pulses from the 555 board like schoolie di on hi circuit?
      I was curious if you have made any changes to your original circuit since creating your PDF document?

      Thanks, Doug
      Here’s a pic of my breadboarded circuit using Terry’s dual 555 timer circuit

      • Bryan 7:53 pm on November 17, 2015 Permalink | Reply

        Minor correction to your wording – you installed the momentary switch on the R2 (not the R5) pot. Wondering if this will work on the 555/LM393 circuit…

    • Doug 10:33 am on November 2, 2015 Permalink | Reply

      Thanks to you Terry and Schoolie for posting this info. I would have chucked my MC-2100 in the trash and purchased a MC-60 if it were not for the info posted here and on Schoolies blog.
      My finished project can be found on my web site here.

    • Doug 10:34 am on November 2, 2015 Permalink | Reply

      And here is a you tube video of my MC-2100 and your 555 timer circuit in action.

      • Doug 10:36 am on November 2, 2015 Permalink | Reply

        Oooops, sorry, that was the wrong video link posted above
        You can delete that link.
        This is the correct you tube video link

    • Bryan 12:03 am on November 25, 2015 Permalink | Reply

      Attempted to share a write-up of my resurrected treadmill, but apparently WordPress didn’t like it… to summarize, my treadmill control panel fritzed out and the dual-555 circuit saved me from having to buy a completely new treadmill (>$1000). My out-of-pocket was well below $100, so the return on that effort was very high. Thanks for sharing your know-how with us DIY kindred spirits…

    • Wesley 1:20 am on January 3, 2016 Permalink | Reply

      Great stuff all of you are doing here. I’ll admit right up front that I don’t have near the knowledge you guys do when it comes to these sorts of things. I’ve been trying for days now to hook this Mc-2100 Rev B up and get it running, but no luck. Not entirely knowing how the pots are hooked up might help as this is the only thing at the moment that I am pretty unsure of. Would one of you mind helping me out with this? I’m needing to get this onto a wood lathe next week so that I can turn some big posts with it. Thanks in advance for any help.

    • Doug 8:46 am on January 3, 2016 Permalink | Reply

      This is the project that I used my Treadmill motor on. It’s a dual action aluminum can crusher

  • gumby3344 4:05 pm on April 10, 2013 Permalink | Reply
    Tags: "I know what I am doing", , , , , ,   

    Making a Paintball Gun From Scratch – Still building… 

    Following the first day of work, we had nearly completed both the bolt and the charge chamber, and had completed the boltstop. In this session we needed to finish up these parts and create the firing chamber.  Brian and I had high hopes going in to this session. He was confident that we would at least fire a shot by the time I had to head home. I was somewhat skeptical! Although we were interrupted by some thermite and Doctor Mario, we were able to achieve this goal.

    We did the usual shaping and machining to get the firing chamber roughed out and then got on to the fun stuff… threading. Three parts needed threads. The firing chamber and charge chamber had to thread together at the middle of the gun; and we had to thread the inside of the front end of the firing chamber in order to put one of our Spyder barrels into it. The charge/firing chamber threads would be somewhat simple, as they only have to match each other and require no standardized dimensions. The barrel, on the other hand, has its own thread type that we would have to match. Just to make things more fun, The threads were metric, (M22 x 1.5) and our thread turning gears were standard. Brian worked his magic and got something pretty close to the barrel (7/8 x 16) and we went with it.

    External Firing Chamber Threads

    2013-04-06 14.57.03

    Internal Barrel Threads

    2013-04-06 14.56.39

    Whole Firing Chamber

    2013-04-06 14.55.42

    And I have saved the internal threads from the charge chamber for last to present you with a conversation that took place just moments prior to the cutting of the first internal threads we had done.

    Joe and I: “Brian are you sure you want to do this without a practice run or anything?”

    Brian: “I know what I am doing.”

    2013-04-06 15.44.41

    He apparently wanted our threads to look like the mouth of the Kraken, but as long as he knew what he was doing, who were we to question him! 🙂

    The embedded video shows our first paintball break on target.

    Gun air rig sketch

    The graphic above shows the air system we had set up when we fired the gun. Constant pressure is supplied to the firing pressure input, where the pressurized air waits to be released and force the ball from the gun. The bolt is held back by air pressure from the trigger pressure input. Whenever the air gun valve is open, this pressure is supposed to be keeping the bolt to the rear and keeping the gun from firing. Whenever this pressure is released (the air gun is pulled away from the input) the firing pressure should cause the bolt to move forward and the gun should fire. This wasn’t happening for us due to what we speculate to be general surface finish and O-ring fitting issues. With some further work and refinement this should be fixable. We ended up poking the back end of the bolt with random stuff and that provided the motivation required to start the firing cycle.

  • schoolie 7:57 pm on March 27, 2013 Permalink | Reply
    Tags: , ,   

    MC-2100 Control Algorithms – What I’ve learned so far… 

    I was helped out immensely by receiving a reverse engineered schematic of the MC-2100. That enabled me to examine and begin to understand how the hardware of the controller worked together to control the motor. However, it didn’t have much to say about the algorithms contained in the Cypress PSoC serving as the controller’s brain.

    Throughout the process of developing a control circuit to drive the controller, I’ve learned quite a bit about the software in the PSoC, and I’d like to share the information. The best way I can think to accomplish that is to document the timeline of my testing, and comment on the results. There’s a lot to read here, but if you’re trying to figure this thing out, I think it will be helpful. Here goes!

    (Read the rest of this post…)

    • Stuart 9:39 pm on May 5, 2013 Permalink | Reply

      My treadmill quit working and I noticed something from your article. My red LED is solid which you say means no speed voltage. When I try to start the machine it powers the motors for about a second then shuts down. Where does the voltage come from? Any idea which component went bad? How far from the magnet or whatever is on the roller for the sensor should the sensor be? I hope you can answer any of these questions. Thanks for reading.

      • schoolie 10:24 am on May 14, 2013 Permalink | Reply

        Stuart, does the indicator LED blink at all when the motor turns? If not, I’m not sure what’s going on.

        The speed command signal comes from the console over the blue wire on the MC-2100 connector. The speed sensor signal comes into the MC-2100 through the two pin connector labeled HD7.

        You can confirm that the speed sensor is working by disconnecting it from the board, and measuring the resistance across the sensor (you’ll have to stick a small pin or wire into each hole in the connector, and measure across them). The resistance should be very high most of the time, and drop to near zero for a bit each time the magnet on the roller passes by the sensor.

      • daniel 4:17 pm on October 12, 2013 Permalink | Reply

        how did you fix this problem?

        • schoolie 9:20 am on October 14, 2013 Permalink | Reply

          Unfortunately, I haven’t done much more work on the board that has the software messed up. What problems are you experiencing?

      • Reinhardt 4:12 am on February 17, 2014 Permalink | Reply

        Having the exact same problem. The main supply transformer fuse blew while someone was using it (required to convert line input to 110-120V AC). I replaced it, selected a program, and noticed the Drive Motor turning for a while, then shuts down (if I remember correctly the LED was permanently on afterwards). Tried to have a look at the LED a second time around, but the fuse blew again… I guess I’ll get a few hundred more fuses to try and figure it out. It’s a shame about the LED not “working” if the motor’s disconnected.
        Any advice on how to proceed? Like most people….I only have a multimeter…lol, what a pain.

        • Reinhardt 6:58 am on February 17, 2014 Permalink | Reply

          Forgot to mention, I already tested the speed sensor, and it functioned as you described.
          More tests I’ve done/ things encountered:
          1) When I plugged in the power, the dash lit up (without the magnet (key) connected), and the motor started, blowing the fuse. This only happened the “first” time I connected the power.
          2) Replaced the fuse again: The dash lit up again, then turned off. Connected the magnet, and everything displayed correctly. Tried to set a slow speed….motor started, blowing the fuse.
          3) So….disconnected the motor…repeat, fuse didn’t pop.
          Figuring the problem lies with the Dash Controller…which will be a pain to fix….
          Whats the best way to test the motor? Can I leave it connected to the belt, and use a 12V battery? Assume I should add a fuse in there too

        • Reinhardt 2:34 pm on July 23, 2014 Permalink | Reply

          Hi. I actually forgot about this post, and thought I’d share some info just in case someone else experienced the same problem.

          The fuse being blown was caused by a blown MOSFET (Q2). I replaced it, but Q2 blew again (once the treadmill sped up), causing a short circuit, blowing the main fuse. I then replaced Q2 as well as the MOSFET driver (U5), and the bus capacitor (C5) (because it was a bit swollen, which usually means it’s reached it’s EOL). The treadmill is running now 🙂

          Hope this helps someone.

    • John- 1:49 pm on December 3, 2014 Permalink | Reply

      I have a MC-2100 and treadmill motor that I’d like to use on my milling machine.
      Schoolie or Terry, are either of you willing to sell one of these or do you know where I could purchase one ready to use?

  • schoolie 7:14 pm on February 19, 2013 Permalink | Reply
    Tags: , , , Oscilloscope, Oscilloscope alternative, piezo,   

    Analyzing PWM Period and Duty Cycle without an Oscilloscope 

    Now that I have an oscilloscope, I’ve been able to learn a lot more about the circuit I’ve been designing for the MC-2100, as well as the MC-2100 itself. However, a lot of people don’t have access to a scope (even one as old and crappy as mine :)). I’ve had an idea for a method of analyzing a PWM signal without a scope for a while now. Last night, I got some time to test my idea and it worked fairly well, so I figured I’d share it here.

    (Read the rest of this post…)

    • littleschoolie 9:50 am on April 6, 2013 Permalink | Reply

      Dude that is awesome.

    • Brian 12:10 pm on April 25, 2013 Permalink | Reply

      This is pretty great. I’m building a PWM that may or may not be capable of 100% duty cycle, and I’d love to confirm it one way or the other but I don’t have an oscilloscope. I figured there would be a way to somehow generate an output that could be measured audibly. Visual wouldn’t really work as an LED could pulse faster than visible detection.

      • schoolie 3:41 pm on April 25, 2013 Permalink | Reply

        Cool! I think if you get to 100% duty cycle, the buzzer will be silent. You can probably confirm that without even analyzing the signal. I’d love to hear if this ends up working for you.

  • schoolie 11:59 pm on February 17, 2013 Permalink | Reply
    Tags: , , , ,   

    MC2100 Dashboard Replacement Control Circuit Update 2 

    MC-2100 PWM Controller Circuit v5

    In response to Terry’s comment on my previous MC-2100 post, I got the breadboard circuit hooked back up for some testing. In doing so, I found a couple things missing in my previous schematic. I also may be backing off calling this version of the circuit done. It looks like there may still be a bit to learn :).

    (Read the rest of this post…)

    • Terry 1:25 pm on February 18, 2013 Permalink | Reply

      Interesting that you had made those changes. Unfortunately, I have virtually no test equipment (only an analog multimeter). I don’t even have the MC-2100 board as a friend simply wanted a PWM circuit provided. Anyway to simulate the output I have the base of an NPN transistor attached to the output of the comparator. The emitter attached to ground and collector has a DC motor attached connected to the +12Vdc to somewhat separate the voltage rails between it and the PWM circuit. Adjusting pot R6 as per your circuit does indeed slow down / speed up the DC motor I have. As mentioned, however, I cannot get specific readings. As far as my earlier overheating of the 7805 , all is well now. I had some extra circuitry on my bread board which could have been the issue. My 7805 is quite comfortable to touch.

      I have not tried your new changes to the circuit. Not to speak less about your design (which I do like) but I keep switching between yours and the following to try to get a working solution:

      I am not sure if I provided you any useful information but I just wanted to let you know where I am at.

      Thank you

      • schoolie 11:44 am on February 19, 2013 Permalink | Reply

        Good to hear you’ve got the overheating sorted. As far as test equipment, there are still ways to get some meaningful data without an oscilloscope. The motor is a good first impression that you’re able to change the duty cycle of a square wave, but doesn’t tell you much else, as you know. Testing on the MC-2100 will tell you if your period is correct, but won’t tell you a value or whether the period is too high or too low.

        Here’s a little tip to help avoid one of the traps I fell into: the indicator LED on the MC-2100 will flash quickly indicating that a signal is received only if the motor is connected across the Motor + and – terminals. This lead to lots of confusion and frustration when testing on the bench without the motor hooked up. I kept thinking my circuit wasn’t working, when it was actually fine. This was before I got the oscilloscope, so I was in the dark as well.

        I tested a make shift method for measuring the signal last night using a piezo buzzer and an android spectrum analyzer app. I’ll try to get the details written up soon.

        Regarding the cicruit on, I think I had looked at that earlier. Reviewing it yesterday, it looks like the only way to change the frequency in small steps is by modifying the value of C1 by adding capacitors together in parallel/series, right? You could change R1, but there aren’t many options to choose from when it comes to potentiometers. If I did the math right, you’d need a 0.72uF cap with a 100k pot to get 20Hz. If R1 isn’t exactly 100k, C1 would shift a little. In the circuit I’m using, the frequency is adjusted with a potentiometer (R1), making it a lot easier to fine tune. The part count on mine is a little higher though.

        • Terry 12:16 pm on February 19, 2013 Permalink | Reply

          Excellent. Thanks for the update. It will certainly save me time knowing that the motor needs to be connected to get the proper LED indication. I am definitely interested in the write-up regarding the Android Spectrum Analyzer App.

          Regarding the circuit on I also noticed it had a set frequency based on R1 and C1. I was thinking of placing a 20k trimpot between pin 3 of the 555 and the R1 pot. I think theoretically this additional trimpot will allow me to adjust the frequency while R1 will allow for the duty cycle to be altered.

          Not to worry though. I still have your design in mind for possible final solution.

          • Terry 2:51 pm on February 19, 2013 Permalink | Reply

            I realize now, with the 20k trimpot included that will most likely affect the outer bounds of the duty cycle that can be attained. We shall see if it will be something that can be lived with.

            • schoolie 9:13 pm on February 19, 2013 Permalink | Reply

              I think you’re right on the trimpot limiting the duty cycle. However, I think it may work if you placed it in between D1 and R1. In that position, it would limit the minimum off time, while still allowing zero on time. This would work better than placing it after R1 because the MC-2100 only accepts 0 to ~85% duty cycle. Driving it over 85% shuts it off, I assume this is a failure mode prevention, wouldn’t want the treadmill taking off if a wire gets shorted high!

              There’s also the max speed calibration pot on the MC-2100. I haven’t messed with it, but I think it should be able to compensate somewhat even if your max duty cycle ends up under 85%.

    • Christopher 10:35 am on March 8, 2013 Permalink | Reply

      Hello, finding this thread very useful. I’ll be building one of these controller boards soon…could someone tell me the id of the two components on the MC2100e rev c board please,they are the two pieces attached to the heat sink on the left, Q5 and D13 I have G4PC40K for Q5 but I can’t identify the diode (I presume?). Many thanks

      • schoolie 7:22 pm on March 8, 2013 Permalink | Reply

        On mine (MC-2100 WA, one of the US versions), the two large components on the left of the heat sink are labeled Q2 and D13. Are these the components you’re asking about? I’ve noted them in the following picture: Q2 and D13 Identified

        Here’s a closeup shot of the two components, showing their labels: Q2 and D13 Closeup

        The components in question on my board are Q2: IRFP250N, and D13: HFA15PB60. They match the reverse engineered schematic I’ve posted previously. They’re the switching transistor and flywheel diode for the main motor current.

        The MC2100e may be different, I’m curious to see if your components match this.

    • Terry 7:13 pm on April 13, 2013 Permalink | Reply

      I am still working on this. I managed to obtain an oscilloscope to check my circuit. I switched to a different circuit:

      simply because I had the parts for it.

      I added a 7805 voltage regulator to power the above circuit since the specs on the MC-2100 states there is 9VDC on the red wire and a 5VDC signal is required on the pulse (blue) wire. On the test bench with a 12VDC power supply the output signal looks good frequency-wise. When attached to the MC-2100 with the cable that came with it I can get the on-board LED to blink but the motor is erratic. I found the 7805 to also get very hot. While on the test bench the 7805 does not get hot at all!!! Removing the cable and using some of my own jumpers instead, the results were better and the 7805 was much cooler. Testing the original cable for continuity shows good so this does not make sense.

      Attaching the scope on the ‘pulse’ line at the board shows a decent signal other than the fact that the highs are around 3VDC. Which led me to believe that it was too low to allow the MC-2100 to function properly. I am thinking that the MC-2100 is not receiving a high enough voltage. So, since the above circuit did not include a voltage regulator I decided to bypass it and apply the full voltage from the red wire of the MC-2100. The motor appeared to work much better. I thought I had found my solution until I started to smell smoke.

      After quickly disconnecting the cable, looks like I burnt out a 22 ohm SMD at the connector’s ‘pulse’ signal. I figure I can replace with a regular resistor of same value. Hopefully, that will be the extent of what has burnt out.

      Just wondering if you noticed or had issues due to the signal voltage level as well.

    • Terry 9:35 am on April 14, 2013 Permalink | Reply

      In my further research I found the following:

      which is stated to be for the REV B. board. Which happens to be the board I have. What luck!!! And it confirms the 22 ohm resistor at the ‘pulse’ (blue) wire. A lot of other useful comments on the schematic as well that other people might find handy.


    • schoolie 10:20 pm on April 14, 2013 Permalink | Reply

      Regarding the low voltage measured at the MC-2100 control input, I noticed that as well. Everything I checked seemed OK, so I’ve left it alone. Upping the voltage to try to overcome the voltage drop burned the resistor out as you suspected.

      I’m as stumped as you are on the regulator overheating.

      I wonder if your inconsistent operation when plugged in is due to the noise from the motor signal I described in the post above. Putting a capacitor from ground to the wiper on the potentiometers may help, but I haven’t studied your schematic well enough to say for sure. I’d put the scope on the output when you turn the motor on. Watch for the signal to break up when the motor starts turning. If it’s interference from the motor signal, it’ll be at a much higher frequency than the control signal (60 usec period).

      Hope you didn’t look too far for the schematic, I had it posted here, lol 🙂

      • Terry 10:42 pm on April 14, 2013 Permalink | Reply

        I managed to get some more testing done today. With a little research I found that placing a 100uF on the input of the 7805 improved the voltage level on the output. A 0.01 uF on the 7805 output really cleaned up the 5V rail and the signal. This also really ended up raising the signal highs to 5V. Once I fix up the 22 ohm resistor on the MC-2100 I am theorizing that the motor will work much better.

        I probably saw your copy of the MC-2100 schematic when I first saw your blog months ago because I had a printout but just forgot where I got it. Didn’t think to check here again, but no worries it didn’t take me long to find it. The nice thing is that it shows the external PWM circuit is isolated from the rest of the MC-2100 via the optocoupler. An additional resistor on the PWM output to the MC-2100 may be a good idea to limit current through the 22 ohm and optocoupler.

    • Terry 10:41 am on April 16, 2013 Permalink | Reply

      Well, interesting, very interesting.

      I write this to potentially assist anyone else trying to get the MC-2100 working and maybe offer a different perspective. Not to take away from this original blog because it has certainly helped me greatly.

      If you have read any of my previous posts, I managed to burn out a 22 ohm resistor. Well, I have replaced that resistor and did some testing again. With the scope attached I found the signal from my circuit greatly affected when I attached it to the MC-2100. With the PWM circuit attached I paid close attention to any smoke or overheating. I think now that the output of the circuit I am using is really not designed for direct input to the MC-2100… First is the voltage I used which blew the 22 ohm resistor so I definitely advise the addition of the 7805 voltage regulator. And now as I pay closer attention to it, I find that the optocoupler is also getting very warm. Although I haven’t yet found max ratings for the anode-to-cathode of the optocoupler it appears that I am exceeding the maximum current rating. Reviewing this document: suggests that the forward resistance on a good optocoupler which matches the device on the board (F817), there should be around 20 ohms. In conjunction with the external 22 ohm that means a direct 5V signal would set the current at 125 mA…seems a little much and may also explain why my 7805 voltage regulator gets warm only when the MC-2100 ‘pulse’ (blue) wire is connected to the PWM circuit. I will be removing the optocoupler to properly test it to see if it is still good and I have to rethink the link between my circuit and the MC-2100. Maybe adding an additional resistor in series would be a good start to limit the current through the optocoupler.


      • schoolie 8:10 am on April 17, 2013 Permalink | Reply


        You’re correct on the need for an additional resistor. I hadn’t noticed it previously, but now that you’ve brought it up, it’s definitely necessary.

        The LED in the optocoupler (like all LEDs) has a constant voltage drop regardless of current (unlike a resistor). According to this datasheet, the forward voltage drop of the LED in the F817 optocoupler (U1 on the schematic) is 1.2V. This leaves 3.8V to be dropped by the resistor(s) in series with it when 5V is applied. With only the 22ohm R2 resistor, that results in a current of 172mA, much higher than U1’s 50mA max rating. It’s not continuous, so it doesn’t cause instant failure, but it’s definitely not good.

        I looked at the circuit board from the treadmill’s dash panel, and sure enough there’s a 240ohm resistor in series with the control signal output. This brings the total resistance to 262ohms, and the current through the optocoupler to 12mA. Much better!

        With that understood, it’s likely ok to drive the circuit without the regulator, just using a larger series resistor to compensate for the increased voltage. For example, assuming the MC-2100 outputs 9v, the resistor needs to drop 7.8V. A 620ohm + 22ohm resistor pair would result in the same 12mA current through the optocoupler .

        I haven’t tested this at all, but I’m confident that it’s the right direction to head.

        Good catch!!

    • Terry 7:52 pm on April 20, 2013 Permalink | Reply


      I added in a 680 ohm resistor in series on the output of my circuit into the MC-2100. Works well and no more overheating. And with the addition of this resistor I was able to remove the voltage regulator and its associated capacitors to increase much needed realty on my prototype board. Thanks for the suggestion.

      I am running into a problem now which I didn’t see in any of your blog posts and I was wondering if you encountered a similar issue. This is the situation:

      1) With all pieces hooked up (PWM, MC-2100 and motor) and powered up, the frequency on the PWM is adjusted until the MC-2100 LED is blinking and the motor runs.
      2) The motor is left to run for a 1/2 hour to check for any overheating issues.
      3) Power is switched off which of course turns everything off.
      4) Power is switched back on.

      Now, at this point since the motor was running and the MC-2100 LED was blinking just before power was removed, it is expected that everything would just start up again when power was turned on again. However, it does not. The LED does not blink and the motor does not run until the trimpot on the PWM circuit is once again adjusted which gets everything going again. It is as if the MC-2100 needs to be manually reset until it can once again recognize the required frequency. I was thinking that once the frequency on the PWM circuit was set I wouldn’t need to adjust the trimpot ever again.

      Any suggestions or ideas from your testing?

      • Terry 9:30 am on April 21, 2013 Permalink | Reply

        Turns out the MC-2100 has a safety that requires ‘user input’ from the treadmill before it starts, to be sure it is not starting at full speed. Adding in a switch gets around this. All is good now.

        • schoolie 8:39 am on April 22, 2013 Permalink | Reply

          Yep. When the MC-2100 powers up, it doesn’t act on the control input until it sees a zero speed signal. I’m curious, what are you using the controller for? Sounds like a fixed speed application?

          • Terry 8:45 am on April 22, 2013 Permalink | Reply

            Actually it is not even mine but a friends. He just didn’t have a way to control it. He is attaching the whole thing to a lathe.

    • Raymond 8:54 pm on May 13, 2013 Permalink | Reply

      Hi Guys, I plan on building the PWM that you guys worked out. I was wondering if you could put together a complete parts list. If you could I would appreciate it

      • Terry 9:43 am on May 14, 2013 Permalink | Reply

        Hi Raymond,

        My final circuit differs from schoolie’s simply because I didn’t have all the parts for his design. I believe you can find everything you need here about schoolie’s design but I am putting a full document together (start to finish) of all the work I have done as well to help others whether they want to use the same circuit or not. I should have that completed over the following weekend. With schoolie’s permission maybe I can post that document here as well for you to obtain.


        • schoolie 10:20 am on May 14, 2013 Permalink | Reply

          Raymond, I’ve got a few changes that need to be made to the circuit to simplify and correct the output current. I’ve built the circuit, but haven’t had time to test it. Once I’m happy with it, I’ll post up the parts list and schematic.

          Terry, I’d love to have your solution documented as well. Whenever you get around to it, write something up and I’ll post it here for future reference.


          • Raymond 2:17 pm on May 14, 2013 Permalink | Reply

            Terry & schoolie

            Sounds great I’ll be patient & await the completion of the PWM project.
            Just to let you guys know I am so green at this Electronics stuff, but am learning allot.
            I think I should not have a problem putting one together.
            I wish I had the knowledge that you guys do.

            Thanks Again

          • Terry 9:44 pm on May 18, 2013 Permalink | Reply

            schoolie, I couldn’t find a way to upload my document (PDF) here. Maybe only you can do it. Let me know.

            • schoolie 2:58 pm on May 20, 2013 Permalink | Reply

              If you email it to me, I’ll include it in my next post. I think I’ve got the final version of my circuit ready to go as well. My address is brian(dot)p(dot)schoolcraft(at)gmail(dot)com


            • Amir 3:59 pm on June 28, 2015 Permalink | Reply

              Hey Terry & Schoolie,

              I’m having some weird issues with the MC 2100 control board, if you don’t mind me throwing a few questions at you guys I’d greatly appreciate it!


  • schoolie 2:10 pm on February 14, 2013 Permalink | Reply
    Tags: , , Hitachi V-152F Manual   

    Hitachi V-152F Oscilloscope Operation Manual 

    I had someone ask for a copy of the manual, so here it is:

    Click for the Full PDF


    • Robert 4:39 pm on July 7, 2013 Permalink | Reply

      thank you very much…I have this old , (maybe 40 years)V152 with both traces at the bottom of the screen, and it looks a power supply problem. and the vertical amp ..I have ben looking for info, a schematic that you published..For some reason I cannot print the file, but that’s another issue,

      • schoolie 10:27 am on July 8, 2013 Permalink | Reply

        Glad it’s been helpful. You should be able to download the PDF and print from there, I’m not sure why that wouldn’t be working. Let me know if you can’t get it working, and I’ll see if I can find the original scanned image. I’d love to hear if you can get your scope working also! -Brian

  • schoolie 5:43 pm on February 13, 2013 Permalink | Reply
    Tags: , , , ,   

    Getting acquainted with our new (old) Hitachi Oscilloscopes 

    With the goal of expanding our electronics tinkering/troubleshooting capabilities, I’ve had my eye out for a cheap oscilloscope on craigslist or eBay. The search paid off a couple months ago when I picked up two old analog Hitachi oscilloscopes, along with a square wave generator and a couple other vintage items.

    The scopes in question are the Hitachi V-152F and V-134, seen below. I haven’t been able to locate any date of manufacture for these things, but they’re completely analog. The 134 even has an analog storage function, which is pretty cool.

    Hitach V-134 (top) and V-152F (bottom)

    (Read the rest of this post…)

    • Greg Leeming 8:43 pm on November 3, 2015 Permalink | Reply

      Hi, noticed you have Hitachi V-134 scope – have you located a users manual for it?

      Just purchased the scope

      Am also building MC-2100 based controller for my lathe – really appreciate your posts – have been really helpful


      • schoolie 9:50 pm on November 3, 2015 Permalink | Reply

        I haven’t found a manual for the V-134. It’s pretty similar to the 152, with the exception of the trace storage function. I might be able to help you out if you’re trying to do anything in particular. Good luck!

  • schoolie 11:38 am on February 12, 2013 Permalink | Reply
    Tags: , , , ,   

    MC2100 Dashboard Replacement Control Circuit Update 

    This is another quick update on the MC-2100 PWM controller project. I’ve tweaked the schematic a bit to put the 5v regulator at the beginning of the circuit, which I think is a better configuration. This circuit is currently on a breadboard, and worked great until the connections in the breadboard started wearing out (around a month of occasional use, including our paintball gun build day). Here’s the latest (and probably final) revision:

    MC-2100 PWM Controller Circuit v4

    When I started this project, I wanted to get this circuit working without a microcontroller for the sake of education and simplicity. At this point, I’m comfortable with calling that goal achieved. Now it’s time to move on to more features, like a tachometer and possibly closed loop control!

    My current direction with this project is to develop a combined tachometer/speed control for the MC-2100 and my lathe. I plan to use an arduino to measure speed, display the speed via 4 digit 7 Segment modules (salvaged from the treadmill control panel), and send the PWM signal to the MC-2100. At this point, Joe and I have a working version of the code put together, and the circuit prototyped on a breadboard. I’ll update with progress once we’ve got something more final.

    • Terry 11:03 am on February 17, 2013 Permalink | Reply

      I am using your latest circuit to connect to an MC-2100 board. Did you find the 7805 voltage regulator to get extremely hot? I am finding the current on the output of the 7805 to be in excess of 250ma… With a 7V drop (12 – 5) that works to a minimum of 1.75W to dissipate at the regulator.

    • ajcharles 5:43 pm on April 3, 2014 Permalink | Reply

      I tried the circuit it work well except I haf to make some modification tp it. I had problems keeping the speed constant so I hsd to add a diode frpm output to controller input. Also the frequency of my controller was 57.7

Compose new post
Next post/Next comment
Previous post/Previous comment
Show/Hide comments
Go to top
Go to login
Show/Hide help
shift + esc