300x250 AD TOP

Search This Blog

Paling Dilihat

Powered by Blogger.

Friday, March 8, 2019

A Million Times

A while ago someone at work approached me with an idea to build a replica of  "A Million Times" by Humans Since 1982, while the project did eventually die off as far as I know, the idea looked very interesting, many clocks, synchronized to display animation, text and time, what can be bad about it? or as the original creator wrote:

"Metaphorically speaking, we liberated the clock from its sole function of measuring and reporting the time by taking the clock hands out of their 'administrative' roles and turning them into dancers." – Humans since 1982

A Million Times at Changi, 2014-2018
While they did not expose much of the design for their work, David Cox, who is the engineer of this project, shared a few hints in his facebook:

Source



From what I could deduce, the project is probably using 2 types of MCUs, one to control each of the motors (such as ATtiny85) and another to control the whole block (ATmega of sort) and then connected via USB to a PC to control the entire assembly.

This article has been collecting links and paragraphs for quite some time (since July 2017!), I've decided to finish it after I've started to learn more about PCB design and actually took it off the breadboard.

Assuming we would like to design our own, my first thought was that I'll need to use pipes, gears, Plexiglas and plenty of patience, just like Cornelius Franz tried:

source
He actually implemented what I thought to make, I've had a single motor with the same driver, I've had to add a step up (since the driver needed a minimum of 8v and used an ATmega328 instead of the STM32F103), I've had to use a a higher voltage than actually needed since the motor would miss steps and the maximum speed wasn't great since I've used AccelStepper which isn't very efficient. I've also thought about using the micro-switches for addressing but i don't think its a good use of available pins, even if used with resistor ladder.

I've thought about the following options for controllers:
- ATmega328 for board MCU, connected to a driver, hall effect sensor and canbus, which can be used without a transceiver on short distances.
- ATmega328 for board MCU, connected to a driver, hall effect sensor and i2c/spi bus
- ATmega32u2/4 for USB connectivity to i2c/spi

My colleague, Allan Schwartz from whatimade.today suggested the i2c route, I had doubts it will work over long distance, but as it turns out there have been uses for i2c over long distances with repeaters (such as PCA9515), I still didn't get around to test the long distance repeater solution, but the datasheet does specify you may not use more than one repeater, but does it also include parallel repeaters?...) Using the i2c as a bus for the entire assembly makes things simpler over communicating with 20 or more USB virtual com ports.

Different layouts, either a PCB per motor or a PCB for 4 motors, which makes things a lot simpler on one hand but won't work if I wanted to add some more visual effects such as addressable Leds.

For drivers, the following options:
- no driver, these motors do not consume too much power (about 20ma VERIFY), so in theory the Arduino can power it, however, when I tried it, the motor produced inconsistent movement for various speeds, I suspect due to the fact I didn't implement micro-stepping in my source code. I did find out that Wojtek Kosak did make it work without any driver, so it might have been my fault it did not work.
- 2 x ULN2003 ($0.2) or DRV8836 ($1.5) (there are many alternatives, just an h-bridge) per motor
- 2 x A3967SLB ($2) per motor
DRV8821 ($4.5), minimum 8v which might complicate things
- L298N ($1) might work
X12.017 stepper driver / VID6606BY8920 /  AX1201728SG ($1), should be able to control 4 motors (or two dual shaft motors) - source, I've tested the AX1201728SG  and it was very stable even in high speeds as long as acceleration control is implemented.

After testing a few drivers, the one that worked best is the AX1201728SG.

And for motors it turns out there are dual shaft stepper motors, the following look pretty promising:
- X40 8798 Stepper Motor ($6.8) - datasheet
- Sonceboz 6407 (27€)
- vid28-05 Stepper Motor
- BKA30D-R5 ($3.8) with a stop, but it turns out the manufacturer already realized that people would like to use them without a stop, so they started manufacturing them without a stop!!

Last but not least is to use a real clock and modify the circuit, the motor is Lavet-type stepping motor and someone made a crazy clock with it, I love it!



All in all, I think Cornelius Franz did a some amazing work, it seems like he's on a good path to have a working replica!


source

I've also found out that Wojtek Kosak Główczewski actually completed a replica, you might want to look at his schematic and his project:

source

Eventually I wanted to build my own, so I went with the parts I could source from Aliexpress as it was available and didn't cost $50 to ship unlike packages from DigiKey or Mouser.

I got a recommendation to check the VID28-05, however it was harder to find, it seems like they are either no longer manufactured or perhaps I didn't look very hard after finding the replica BKA30D-R5, it's also a plus that the manufacturer is on Aliexpress, its a drop in replacement anyway.

source
The original BKA30D-R5 had a hard stop, which should be removed if you want to rotate it 360 degrees


However, the manufacturer took it upon themselves to supply motors without stops!

The vid28 series comes with a thorough datasheet, explaining how to drive the motors, the pinout, measurements and a lot more, if you're planning to use these motors, its definitely worth to read!

I've made a small breadboard with the motor, an arduino and DRV8825 and it kinda worked, I had to jack up the voltage to 12v (outside the specs) so it won't miss any steps and I've even tried the A4988, but it produced a high pitched noise.


So Allan attempted the same thing using shift register (74HC595), from a video he sent me, I saw it was missing some steps and made a-lot of noise, I suspect its due to the lack of micro-stepping.

To zero the hands, I chose a hall effect sensor + 2mm magnets, I've attempted to use the SS49E but it turned out to be not sensitive enough (1.8mV/G), so I'm now attempting to use the SS495 and while its a bit more sensitive (3.3mV/G), its a lot more expensive, so perhaps using a larger magnet or a a sort of magnetic flux concentrator will be a better solution.

It did work properly on one side, I'm not sure if its the N or P, so I'm thinking about building a 3D magnetic sensor (using MLX90393) to diagnose the problem more precisely.

Alternative methods can be to use a reflective optical sensor or a reed switch, but the magnet needed for the reed is too big and heavy to fit on the hands.

I think the research we did on this project makes it relatively simple to implement hardware wise, you may find software other developers wrote in the end of this article. in my opinion,probably the easiest build will be a combination of the original PCB form factor, X12.017 driver, a hall sensor and atmega328p, wire a few assemblies with i2c and to a PC via USB.

I've started to design a more modular PCB, you can shape it into cubes, spheres, towers, what ever your imagination can conjure.


The first revision was a partial success, the motor fits perfectly, the lights work, the homing more or less works.

A few design issues were discovered during the first test, the brownout trips when either the leds turn on or the motor driver resets, and although I covered most of the power requirements by adjusting the trace widths, you can guess what the problem was, decoupling capacitors for example and a main capacitor.

I've also used relatively heavy acrylic hands with magnets on them, so the motors missed steps here and there, I've rewrote AccelStepper to use interrupts and s-curve instead of linear acceleration, which was a lot of fun and should probably affect the overall life of the motors but no noticeable difference except for top speed.

I've also added the famous WS2812B addressable Leds to see what else can this board do.

Eventually I've decided to learn KiCad and the redesign was done from the ground up while learning, at first, I've hated it, but now I'm really enjoying myself designing PCBs!

I'm not sure where this little project is going, but my key take away are the interesting research, the world of stepper motors is not a complete stranger, but this is not NEMA, magnetism and of-curse KiCad!

References:
Humans since 1982 are Bastian Bischoff (b. 1982, Germany) and Per Emanuelsson (b. 1982, Sweden). Since meeting as postgraduate students at HDK Göteborg in 2008, the duo have produced works that defy easy categorisation, situated between visual art and product design. Creating objects and experiential installations, their work manages to be analytical with a healthy dose of escapism.
Facebook: https://www.facebook.com/HumansSince1982/

If you want to buy one and not interested in the engineering part, just head to MoMA Design and you can also get a black one!

Another interesting idea which is somewhat related is Clock by Christiaan Postma, not sure if they are related in any way, still worth a look.

If you're looking only for source code:
Conor Hunt was also inspired by Humans since 1982 and wrote a javascript demo and shared the source code.
Jos Fabre was also inspired and made this demo.
Dmitry Yakimenko wrote an iOS app and published the source code and a demo.
Carlos Cabo wrote a webGL demo and shared the source code.
Takahashi Yuto wrote a demo in elm and shared the source code.
Nicolas Daniel wrote a demo and shared the source code.
Malte Wessel wrote a demo and shared the source code.
Ubayd Rahmonzoda wrote a demo and shared the source code.


There are already existing projects for trying to build a replica:
https://hackaday.com/2014/09/21/ask-hackaday-how-would-you-build-a-clock-clock/
https://hackaday.io/project/7872-clock-clock-clone
https://hackaday.io/project/4164-clock-clock

You might want to take a look at a discussion from mikrocontroller.net, its pretty old but there is some progress there and people are sharing their experiences.

Also, there's a single motor with breakout that someone sells on tindie.

Tags:

6 comments:

  1. Hi there, I am building one as well. I use the BKA30d-R5 and drive it directly from an arduino pro mini. I wrote a library for it to work with the AccelStepper library (see https://github.com/GewoonGijs/VID28). I needed to make some modifications to the arduin core as well, also available on my Github.

    For postition calibration of the hands I wanted to use magnets and HAll sensors, but now I will try to do it with an opto reflective sensor (RPR220). Need to drill some small holes in the clock face plate.

    ReplyDelete
    Replies
    1. Hi, The RPR220 looks very interesting, I'll test it as well since the hall effect sensors are not as sensitive as I would like them to be.

      Delete
  2. Hi Dror,
    thank you very much for writing up your research, it helped me build my own clock:
    https://mcuoneclipse.com/2019/12/29/diy-meta-clock-with-24-analog-clocks/

    Erich

    ReplyDelete
  3. Hey,

    You've made great progress so far and I was wondering if this project has gone any further?

    Thanks,
    Dan

    ReplyDelete
    Replies
    1. Hi Dan,

      Please see Erich's comment/blog.

      Delete
    2. Hi Dan,
      I have created an article on the possible legal aspects here: https://mcuoneclipse.com/2020/02/24/copyright-law-for-makers-and-educators/

      My current design is using WS2812B LEDs, see https://mcuoneclipse.com/2020/05/24/60-billion-lights-2400-rgb-leds-and-120-stepper-motors-hiding-behind-canvas-art/ with the making details in https://mcuoneclipse.com/2020/06/07/behind-the-canvas-making-of-60-billion-lights/ .

      I'm working on a new iteration of that project with a more modular design.

      Erich

      Delete