Jindra Fučík

Hrátky s ručičkovými hodinami

Elektronické ručičkové hodiny (obchodní značení quartz) nejsou dnes žádným překvapením. Dají se velice snadno koupit ve velkém množství obchodů. A v některých obchodech opravdu hodně levně - za cenu kolem 50,- Kč. Takto nízká cena může být důvodem k tomu, aby je člověk trochu prozkoumal. A tak se ukázalo, že mohou být celkem zajímavou hračkou pro začátečníky, kteří nemají velké prostředky a zajímají se spíše o programování, ale zároveň přemýšlejí nad tím, jak své dílo prezentovat laické veřejnosti.
Vzhledem k tomu, že levné hodiny až překvapivě dobře snášejí experimentování a začátečnické pokusy, rozhodl jsem se napsat tento článek, ve kterém bych chtěl udělat menší osvětu.

Princip fungování

Již pouhým pohledem člověk odhadne, že hodiny používají pro pohyb ručiček krokový motor. Kdo už někdy hodiny rozebral, tak zjistil, že uvnitř je jen jedna cívka a nikoli dvě, jak ukazují obrázky v učebnicích. V tomto případě totiž mluvíme o "jedno fázovém", nebo také "jedno pólovém" krokovém motoru. (Tato označení se nepoužívají často, jsou to spíše analogické deriváty značení pro plnohodnotné krokové motory).
Ten, kdo se zamýšlel nad principem fungování takového motoru, si celkem logicky položil otázku, jak je to vlastně zařízené, aby se motor otáčel na správnou stranu.
Pro vysvětlení fungování se celkem hodí následující obrázek, který ukazuje starší typy motorů.

Playing with hand wall clock

Electronic hand wall clock (commercial marking quartz) are nowadays nothing special. It can be bought in many shops. In some of them they are extremely cheap; with price about €2 (50CZK). That low prica can be motivation to take a closer look to them. Then I recognized, they can be interesting toy for newbies in electronic, who have not so many resources and who are mainly interested into programming. But would like to present own development to others.
Because cheap wall clock are very tolerant to experiments and beginners trials, I decided to write this article, where I would like to present basic ideas.

Working principle

It is eas ty recognize, that clock using for movement some kind of stepper motor. The one, who already break apart some clocks recognized, that it is only one coil instead of two in usual stepper motor. In this case we are talking about "single phase" or "single pole" stepper motor. (This name is not used so often, it is mostly analogical derivation for marking used for other full stack stepper motors).
The one who already start thinking about working principle has to ask question, how it is possible, that motor always rotate in right direction.
For working principle description is useful following image, that show older kinds of motors.
Základní konstrukce motoru
Obr. 1 - Základní konstrukce motoru
Na obrázku je zřejmá jedna cívka s vývody A a B, šedý stator a červeno-modrý rotor. Rotor je tvořen permanentním magnetem, proto je označen barevně, aby bylo zřejmé, v jakém směru je magnetizován (není úplně podstatné, který pól je severní a který je jižní).
Na straně statoru si všimněte dvou "zářezů" v blízkosti rotoru. Ty jsou pro fungování velice podstatné.
Motor funguje ve čtyřech krocích. Jednotlivé kroky si popíšeme s použitím obrázků.
On image is visible one coil with terminals A and B, gray stator and red-blue rotor. Rotor is made from permanent magnet, that is reason, why it is color marked, to be visible, in what direction is magnetized (it is not so crucial, what pole is north and what is south).
On stator you can see two "grooves" close to rotor. They are very crucial for working principle.
Motor works in four steps. We will describe each step using four images.

Obr. 2 - První krok - napětí na svorkách
V prvním kroku je připojeno napětí tak, že na vývod A je připojen kladný pól a na vývod B je připojen záporný pól. Tím je vytvořen ve statoru magnetický tok, například ve směru šipky. Rotor se tedy postaví tak, aby jeho poloha odpovídala tomuto magnetickému toku.
During first step is motor energized, that terminal A is connected to positive pole and terminal B is connected to negative pole. It make magnetic flux, for example in direction of arrow. Rotor will stop in position, that it's position will correspond with magnetic flux.
Druhý krok - motor bez napětí
Obr. 3 - Druhý krok - motor bez napětí
Druhý krok následuje po odpojení elektrického napětí. Tím dojde k zastavení magnetického toku ve statoru, takže se magnet má snahu se postavit tak, aby jeho polarizace byla ve směru největšího objemu magneticky měkkého materiálu statoru. A zde jsou právě důležité ty dva "zářezy", které vedou k mírnému vychýlení největšího objemu a proto se rotor mírně vychýlí ve směru hodinových ručiček, tak jak ukazuje příklad na obrázku 3.
Second step follows after disconnect of power. Then magnetic flux in stator is stopped, and magnet have tendency to rotate to position, it's polarization is in direction of maximum volume magnetic soft material of stator. And here are crucial those two grooves. They pointing to small deviation of maximum volume. Then rotor is rotate a little in clockwise direction. As shown on image 3.
Třetí krok - napětí s obrácenou polaritou
Obr. 4 - Třetí krok - napětí s obrácenou polaritou
Po připojení napětí s obrácenou polaritou (svorka A záporný pól, svorka B kladný pól), se magnet rotoru postaví ve směru magnetického toku vyvolaného cívkou k tomu použije nejkratší trasu (tedy po směru hodinových ručiček).
Next step is with voltage connected reverse polarity (terminal A to negative pole, terminal B to positive pole). It mean, magnet in rotor will rotate in direction of magnetic field by coil. Rotor use shortest direction, that is again clockwise.
Čtvrtý krok - motor znovu bez napětí
Obr. 5 - Čtvrtý krok - motor znovu bez napětí
Poslední (čtvrtý) krok je stejný jako druhý. Motor je znovu bez napětí. Jediný rozdíl je v tom, že výchozí poloha magnetu je obrácená, takže se rotor znovu postaví ve směru největšího objemu materiálu, což je poloha mírně vychýlená ve směru hodinových ručiček.
Následuje znovu první krok a tak opakování celého cyklu. Pro chod hodin se tedy považuje za stabilní stavy druhý a čtvrtý krok. Proto se mechanickým převodem s poměrem 1:30 převádí poloha motoru na výchylku vteřinové ručičky.
Last (fourth) step is same as second. Motor is without voltage again. Only one difference is, that magnet starting position is opposite, but rotor will again move to direction of maximum material volume. That is again position clockwise a little.
That is all cycle, first step follows again. For motor movement is steps two and four understand as stable. Then it is mechanically transfered to with gearbox 1:30 transfer rate to position of the second hand of watch.
Průběh napětí na svorkách motoru (poměr není v měřítku, slouží jen pro názornost)
Obr. 6 - Průběh napětí na svorkách motoru (poměr není v měřítku, slouží jen pro názornost)

První pulz
Druhý pulz
Několik hodinových pulzů

Záznamy z osciloskopu, pulz jednoho výstupu, pulz druhého výstupu a celkový pohled na několik pulzů (červeně rozdílový průběh)
Na obrázku 6 je pak znázorněn průběh napětí na svorkách motoru. Číslice označují celé vteřiny. Ve skutečnosti jsou pulzy vzhledem k mezerám mnohem menší, v řádu jednotek milisekund.
Vzhledem k tomu, že fáze bez napětí jsou velmi dlouhé, tak nezáleží na tom, jestli je v tu dobu napětí skutečně odpojeno a nebo je připojeno na stejný potenciál. Vliv elektrodynamického brzdění je prakticky zanedbatelný.

Praktický rozbor

Pro praktický rozbor jsem si zvolil jedny z nejlevnějších hodin na našem trhu. Předností těchto hodin je několik, jednak cena je taková, že si můžete dovolit pořídit větší množství vzorků. Vzhledem k tomu, že výroba je přísně orientované na cenu, tak neobsahují žádná komplikovaná chytrá řešení ani záludné šroubky. Vlastně neobsahují žádné šroubky, jen zacvakávací zámečky. Proto budete potřebovat jen minimum nářadí. Například šroubovák budete potřebovat pouze jako "dloubátko".
Figure 6 shows voltage waveform on motor terminals. Numbers means all seconds. In reality pulses are much smaller compare to spaces. They are about ones of milliseconds.

Practical disassemble

I used one of cheapest wall clock on market for practical disassemble. They have few pros. One is, that price is that low, that we can buy few of them for experiments. Because manufacturing is strongly oriented to price, they does not contain any complicated clever solutions as well as no complicated screws. In reality they does not contain any screws, only plastic click locks. The we need minimum tools only. For example we need screwdriver only for gouge out those locks.
Hodiny, včetně nářadí potřebného k rozebírání

Obr. 7 - Hodiny, včetně nářadí potřebného k rozebírání
Pro rozebírání hodin potřebujeme plochý šroubovák (nebo jiné dloubátko), kolík na prádlo a gumovou podložku s okrajem (ta není úplně nutná, ale zjednodušuje hledání koleček a ostatních drobných předmětů).
For disassemble of wall clock we need flat tip screwdriver (or any other poke stick), clothes peg and working mat with raised edges (that is not mandatory, but make search for wheels and other small parts more easy).
Rozebírání začíná na zadní straně

Obr. 8 - Rozebírání začíná na zadní straně
Na zadní straně hodin jsou tři západky. Horní dvě na pozici číslic 2 a 10 se dají vycvaknout a odklopit přední sklo.
Po vyndání skla stáhneme ručičky. Není potřeba si nijak značit jejich polohu, nezáleží na ní. Při vracení se vždy vrací v poloze 12:00:00
Po stažení ručiček lze vycvaknout vlastní strojek. Má dvě západky (na pozici 6 a 12). Je dobré strojek vytahovat pokud možno rovně, jinak se strojek má snahu vzpříčit.
On back side of wall clock can be found three latches. Two upper at position of numbers 2 and 10 can be unlocked and cover glass can be opened
When glass is open, it is possible to pull off clock hands. It is no necessary to mark position of them. We will always return them to position 12:00:00
When clock hands are off, we can unmount clock movement. It have two latches (at position 6 and 12). It is recommended pull out movement as straight as possible, otherwise movement can get stuck.
Hodiny bez ručiček
Hodinový strojek
Hodinový strojek

Obr. 9 - Hodiny bez ručiček, Hodinový strojek
Před rozebráním strojku je celkem dobré si zachytit osu pro ručičky pomocí kolíku. jinak není strojek jak položit a rozsypou se kolečka. Následně se vytáhne kolečko pro nařizování.
Before start opening of movement, it is good to hold axle by clothes peg. Otherwise it is not easy to lay down the movement without losing wheels. Then pull out wheel for setting clock.
Hodinový strojek
Hodinový strojek
Vnitřek hodinového strojku

Obr. 10 - Vnitřek hodinového strojku
Pak už je možné strojek otevřít. Má tři západky. Nejprve dvě na 3 a 9 hodinách a pak třetí na 6 hodinách. Po otevření stačí vyndat průhledné kolečko mezi motorem a převodovkou a pak pastorek, který je spojený s rotorem motoru.
Then it is possible to open movement. It have three latches. two on positions 3 and 9 hours and then third on 6 hours. When opened, it is enough to remove transparent cogwheel between motor and gearbox and then pinion, that is connected with rotor of motor.
Vnitřek hodinového strojku
Cívka se statorem

Obr. 11 - Cívka se statorem
Vlastní cívka a stator drží pouze na jednom zámečku (na 12 hodinách). Není nikde zachycená, k přívodům napájení je pouze přitisknutá, takže vyndavání není nijak obtížné.
Vlastní cívka je na statoru jednoduše navlečená a zase jí nic nedrží. Stačí jí svléknout.
Motor coil and stator holds on one latch only (at 12 hours). It not holds to any power rails, it apply to power rails only by press, then removing is not complicated.
Coil is threated on stator without any holder. It can be easily take off.
Cívka se statorem
Elektronika na spodní straně cívky

Obr. 12 - Elektronika na spodní straně cívky
Na spodní straně cívky je přichycená malá destička tištěných spojů, která obsahuje jeden CoB (Chip on Board), který má šest vývodů. Dva jsou pro napájení a jsou na desce zakončené na větších čtvercových ploškách pro přitisknutí napájecích vávodů. Dva vývody vedou ke krystalu. Jedná se mimochodem o krystal 32768Hz, je možné jej vypájet a znovu použít. Poslední dva vývody vedou k cívce.
Jako bezpečnější se mi osvědčilo přeškrábnout spoje na desce a připájet drátek přímo k existujícím ploškám. Cesta s odpájením cívky a pájením drátku k vývodům u mne většinou skončila utržením drátku nebo poškozením cívky.
Připájení drátku je jedna z možností, řekl bych ta primitivnější. Druhá, kreativnější možnost je propojit cívku na napájecí plošky, využít plechových vývodů a následně vlastní elektroniku vpasovat do prostoru pro baterii.
On bottom side of coil is glued small printed circuit board, that contains one CoB (Chip on Board) with six outputs. Two are for power and they are terminated on bigger square pads on board for apply power rails. two outputs are connected to crystal. By the way, the cristal is 32768Hz and can be desoldered for future use. Last two outputs are connected to coil.
I found as more safe to cut off traces on board and solder wires to existing pads on board. When I tried to unsolder coil and connect wire directly to coil, I always tear off coil wire or damaged the coil.
Soldering new wires to board is one of possibility. Let us say, that more primitive. More creative method is to connect coil to powering pads and keep powering rails for connection to battery box. Then electronics can be putted inside battery box.
Upravená elektronika
Upravená elektronika

Obr. 13 - Upravená elektronika
Po připájení drátků si pomocí ohmmetru můžeme prověřit správnost připájení. Cívka má odpor zhruba 200Ω. Pokud je vše v pořádku, hodiny poskládáme zpět. Já většinou vyhodím původní napájecí plíšky, tím získám víc prostoru pro drátky. Na fotkách je strojek ještě s plíšky, nějak jsem je v návalu focení zapomněl vyndat a vyndaval jsem je až dodatečně, když jsem se divil, proč mi strojek nejde zacvaknout.
Quality of soldering can be checked by using ohmmeter. Coil have resistivity about 200Ω. Once everything is OK, we cam assemble wall clock back. I usually throw power rails out, then I have more place for my new wires. Photos are taken before power rails are thrown. I forget to take next photo when they are removed.
Znovu složený strojek při testování
Znovu složený strojek při testování

Obr. 14 - Znovu složený strojek při testování
Po opětovném složení strojku si nejčastěji nasadím vteřinovou ručičku a pomocí baterie vyzkouším funkčnost (Při focení jsem použil článek 3V CR2032, ale lze použít i 1,5V AA). Jednoduše jej přiložíte k vodičům v jedné polaritě a pak ve druhé, hodiny tiknou a ručička se posune o jednu vteřinu.
Pokud se vám nedaří dostat cívku do prostoru proto, že jste si nevhodně připájeli drátky, klidně jí dejte jakkoli obráceně. Pokud nepoužíváte napájecí plíšky, je to jedno a na funkci hodin to nemá vliv.
Jak už zaznělo, při skládání ručiček je nasazujeme vždy tak, že ukazují 12:00:00, tím zajistíme správný rozestup a hodinová ručička ukazuje na celou hodinu když minutová ukazuje na dvanáctku.

Příklady použití hodin

Většina jednoduchých příkladů se zaměřuje na použití hodin k ukazování času, jen s různými modifikacemi. Velice oblíbená je třeba modifikace "hodiny lorda Vetinariho" (Vetinari Clock). Odkazují na knihy Terryho Pratchetta, ve kterých měl lord Vetinari v čekárně na audienci hodiny, která tikají nepravidelně, takže se čekající nemohl soustředit.
Druhá oblíbená modifikace jsou sinusové hodiny, ty zrychlují a zpomalují podle sinusovky, takže má člověk pocit, že je na vodě ve vlnách.
Mezi moje oblíbenější modifikace patří "Obědové hodiny" (Lunch Time). To jsou hodiny, které v čase mezi 11 a 12 hodinou jdou rychleji (0,8sec), aby byl oběd dřív a v čase oběda mezi 12 a 13 hodinou jdou pomaleji (1,2sec), aby bylo na oběd víc času a zároveň aby se čas vrátil do normálu.

Pro většinu těchto modifikací stačí použít nejjednodušší procesor, který taktujeme na kmitočtu 32768Hz. Tento kmitočet je u hodinových strojků velmi oblíbený, protože se pro něj dobře vyrábí krystal a zároveň je dobře binárně dělitelný na celé vteřiny. Při taktování procesoru má dvě přednosti: snadno získáme krystal z rozebraných hodin a procesor má v těchto kmitočtech opravdu malou spotřebu. Spotřeba je něco, co při hraní si s hodinami řešíme často, protože máme snahu je napájet z co nejmenší baterie, pokud možno co nejdéle.
Jak již zaznělo, cívka má odpor 200Ω a počítá s napájením cca 1,5V (jeden článek AA / tužková baterie). Levné procesory většinou pracují s napětím o něco větším, ale většinou na dva články (3V) pracují všechny. Mezi nejlevnější procesory na našem trhu patří procesory PIC12F629 firmy Microchip a nebo oblíbené Arduino moduly, proto si ukážeme možnosti použití právě těchto dvou platforem.
Procesor PIC12F629 má pracovní rozsah napětí 2,0V - 5,5V. Použití dvou "tužkových baterií" = článků AA (cca 3V) nebo dvou akumulátorů AA (cca 2,4V) je vyhovující. Pro cívku hodin se však jedná o dvojnásobné napětí než je potřeba. To vede hlavně ke zbytečně velké spotřebě. Proto je dobré přidat do série odpor, který vytvoří vhodný dělič. Hodnota odporu by se měla pohybovat v rozmezí cca 120Ω pro napájení akumulátory až 200Ω pro baterie. Počítáno pro čistě resistivní zátěž. V praxi se osvědčila hodnota odporu o něco menší, zhruba kolem 100Ω. Teoreticky stačí dát jeden rezistor do série s cívkou, já mám z nějakého důvodu potřebu vnímat motor jako symetrické zařízení a proto dávám rezistor poloviční hodnoty (47Ω nebo 51Ω) ke každému vývodu. Některé konstrukce přidávají ochranné diody proti zápornému napětí při odpojení napájení. Na druhou stranu zatížitelnost výstupů je dostatečná na to, aby se cívka motoru mohla připojit přímo na výstupy procesoru
Celkové schéma pro procesor PIC12F629 tedy bude vypadat tak, jak je uvedeno na obrázku 15. Toto schéma je vhodné pro hodiny, které nemají žádné další ovládací prvky. Stále však máme k dispozici jeden vstupně výstupní pin GP0 a jeden vstupní pin GP3.
When I'm finished with completing movement, I'm testing it by using second clock hand. I put the hand to it's axle and connect some power (I used CR2032 coin battery, but AA 1,5V can be used as well). Simply connect the power in one polarity to wires and then again with opposite polarity. Clock have to tick and hand shall move by one second.
Once you have problems to complete movement back, because wires take more place, simply rotate coil ant put it opposite side. Once not using power rails, it have no effect to clock movement.
As it was stated already, when putting hands back, you have to put them to pointing to 12:00:00. It is to have correct distance between hour and minute hand.

Wall clock usage examples

Majority of simple examples focusing to display time, but with various modifications. Very popular is modification is called "Vetinari Clock". Pointing to Terry Pratchett book, where lord Vetinari have wall clock in his waiting room, that ticking irregular. That irregularity unsettle waiting people.
Second popular application is "sinus clock". It mean clock, that accelerate and decelerate based on sinus curve, then people have feeling, they are sailing on waves.
one of my favorite is "lunch time". That modification mean, that clock go little faster in time between 11 to 12 hour (0.8 sec), to have lunch earlier; and little slower during lunch time between 12 to 13 hour (1,2 sec), to have little more time for lunch and to make up for lost time.

For majority of those modifications is enough to use simplest processor, using working frequency 32768Hz. This frequency is very popular with clock makers, because it is easy to make crystal with this frequency, and it ban be easy binary divided to complete seconds. It have two benefits to use this frequency for processor: we can easy re-cycle crystal from clock; and processors usually have minimal consumption on this frequency. Consumption is something we are solving so often when playing with wall clock. Especially to be able power clock from smallest battery, as long as possible.
As it was already stated, coil have resistivity 200Ω and is designed for cca 1,5V (one AA battery). Cheapest processors usually working with little bigger voltage, but with two batteries (3V) working all of them. One of cheapest processor on our market is Microchip PIC12F629, or very popular Arduino modules. Then we will show how to use both platforms.
Processor PIC12F629 have operating voltage 2.0V - 5.5V. Usage of two "mignon batteries" = AA cells (cca 3V) or two AA rechargeable AA accumulators (cca 2,4V) is sufficient. But for clock coil it is twice more than designed. It causes at minimum unwanted increase of consumption. Then it is good to add at minimum series resistor, that will create suitable voltage divider. Resistor value has to be about 120Ω for accumulator power or 200Ω for battery power calculated for pure resistive load. In practice the value can be little smaller about 100Ω. In the theory one resistor in series with coil is enough. I still have tendency, from somehow reason, to see motor as symmetric device and then putting resistor with half resistance (47Ω or 51Ω) next to each coil terminal. Some constructions adding protection diodes to avoid negative voltage to processor when coil is disconnected. From the other hand output power of processor outputs are enough to connect coil directly to processor without any amplifier.
Complete schematic for processor PIC12F629 will look like as described on figure 15. This schematic is valid for watches without additional control elements. We still have available one input/output pin GP0 and one input only GP3.

Obr. 15 - Schéma pro řízení hodin procesorem PIC12F629
Pokud chceme použít Arduino, lze vycházet z katalogového listu procesoru ATmega328, který má pracovní napájení 1,8V - 5,5V pro kmitočty do 4MHz a 2,7V - 5,5V pro kmitočty do 10MHz. Je však potřeba počítat s jednou podstatnou nectností Arduino desek a to je přítomnost stabilizátoru napětí na desce. Velké množství stabilizátorů má velké problémy s reverzním napájením. Asi nejlépe je tento problém popsaný pro stabilizátor 7805. Pro naše potřeby musíme použít desku, která je označená jako 3V3 (pro práci při napětí 3,33V) a to zejména proto, že taková deska pracuje s krystalem 8MHz a lze jí proto napájet napětím od 2,7V (tedy dvojicí článků AA), takže použitý stabilizátor nebude 7805, ale jeho 3,3V ekvivalent. Pokud chceme napájet procesor bez použití stabilizátoru, máte dvě možnosti - jedna je připojit napětí jak na svory "RAW" (nebo "Vin") a zároveň +3V3 (nebo Vcc) a doufat, že stabilizátor osazený na vaší desce nemá nějakou ochranu proti podpětí. Druhá možnost je stabilizátor prostě vyřadit. Na to se hodí deska Arduino Pro Mini, která má podle referenčního schématu propojku SJ1 (na obrázku 16 označena v červeném kroužku) pro odpojení interního stabilizátoru. Bohužel většina klonů tuto propojku neobsahuje. Once we would like to use Arduino, we can take a look to datasheet for processor ATmega328. That processor have working voltage defined as 1.8V - 5.5V for frequency up to 4MHz and 2.7V - 5,5V for frequency up to 10MHz. We have to be careful with one shortcoming of Arduino boards. That shortcoming is presence of voltage regulator on board. Big amount of voltage regulators have problems with reverse voltage. This problem is widely and best described for regulator 7805. For our needs we have to use board marked as 3V3 (designed for powering 3.3V) especially because this board contain crystal 8MHz and can be powered starting of 2,7V (it mean two AA batteries). Then used stabilizer will not be 7805 but its 3.3V equivalent. Once we would like to power board without using stabilizer, we have two options. First option is, connect voltage to pins "RAW" (or "Vin") and +3V3 (or Vcc) together and believe, that stabilizer used on your board have no under-voltage protection. Second option is simply eliminate stabilizer. For this is good to use Arduino Pro Mini, following reference schematic. That schematic contain jumper SJ1 (on figure 16 in red circle) designed for disconnecting internal stabilizer. Unfortunately majority of clones does not contain this jumper.
Arduino Pro mini

Obr. 16 - Arduino Pro Mini s vyznačenou propojkou na odpojení stabilizátoru
Další přednost Arduino Pro Mini je, že neobsahuje žádné další převodníky, které by spotřebovávali energii při vlastním chodu (což je částečná komplikace při programování).
Desky Arduino jsou osazeny stále komfortnějšími procesory, které však nemívají dostatečnou zatížitelnost výstupu, proto je vhodné udělat alespoň základní zesílení výstupu pomocí dvojice tranzistorů.
Základní zapojení pro napájení z baterie bude tedy vypadat tak, jak je uvedeno na obrázku 17.
Another advantage of Arduino Pro Mini is, that it does not contain any additional converters, that can consume electricity during normal run (that is small complication during programming).
Arduino boards are equipped by more and more comfortable processors, that have not enough power for single output. Then it is good to add at minimum small output amplifier using pair of transistors.
Basic schematic for battery power will look like as shown on figure 17.
Schema s Arduino Pro mini
Obr. 17 - Schéma pro řízení hodin deskou Arduino Pro Mini
Protože vlastní prostředí Arduina (jazyk "Wiring") má vlastnosti moderních operačních systémů (takže špatně sledují časové události), je vhodné se zamyslet nad použitím externího zdroje hodin pro časovače Timer0 nebo Timer1. Jedná se o vstupy T0 a T1, které na Arduino deskách najdeme pod označením 4 (T0) a 5 (T1). K těmto vstupům pak lze připojit jednoduchý oscilátor využívající krystalu z hodin. Záleží jak moc chceme být akurátní. Na obrázku 18 uvedu tři základní možnosti. První možnost je velice úsporná co do použitých součástek. Produkuje více méně trojúhelníkový průběh, nicméně v celém rozsahu napájení, takže je vhodný pro použití do CMOS vstupů. Druhé zapojení používá invertory a to buď CMOS 4069 nebo TTL 74HC04. Zapojení jsou v zásadě velmi podobná, jedná se v podstatě o základní zapojení. Třetí zapojení využívá obvodu CMOS 4060, který umožňuje přímé připojení krystalu (ekvivalent 74HC4060 používá stejné zapojení, ale jiné hodnoty odporů). Předností tohoto obvodu je, že obsahuje rovnou 14 bitovou děličku, takže je možné si zvolit, jaký kmitočet pro vstup časovače použijeme.
Because Arduino environment (the "Wiring" language) have attributes of modern operation systems (then have problems with accurate timing), it is good to think about usage of external clock source for Timer0 or Timer1. It mean inputs T0 and T1, they are marked as 4 (T0) and 4 (T1). Simple oscillator using crystal from wall clock can be connected to any of those inputs. It depend, how accurate clock you would like to produce. Figure 18 show three basic possibility. First schematic is very economical in meaning of used components. It provide more less triangular output, but in full voltage range, then it is good for powering CMOS inputs. Second schematic using inverters, they can be CMOS 4096 or TTL 74HC04. Schematics are more less similar each other, they are in basic form. Third schematic using chip CMOS 4060, that allow direct connection of crystal (equivalent 74HC4060 using same schematic, but different values of resistors). Advantage of this circuit is, that it contain 14 bit divider, then it is possible decide, what frequency is used as timer input.
Externí kristal s Arduino Pro mini
Obr. 18 - Schéma pro řízení hodin deskou Arduino Pro Mini
Výstup z takového obvodu se dá použít buď na vstup T0 (pin 4 ve značení Arduina) a pak provozovat Timer0 s externím vstupem. To je ale dost nepraktické, protože Timer0 je použit pro funkce jako delay(), millis() nebo micros(). Druhá možnost je připojení na vstup T1 (pin 5 v Arduino značení) a používat časovač Timer1 s externím vstupem. A nebo připojit výstup na vstup přerušení INT0 (pin 2 v Arduino značení) a nebo INT1 (pin 3) a pak použít funkci attachInterrupt() a registrovat si funkci, která je pravidelně vyvolávaná. Zde se uplatní dělička, kterou nabízí obvody typu 4060, takže volání nemusí být tak časté.

Ruchlé hodiny pro vláčková setkání

Pro zajímavost uvedu ještě jedno poučné schéma. Potřeboval jsem propojit několikero hodin na společné řízení. Hodiny jsou pochopitelně dál od sebe a navíc prostředí je spíše průmyslového typu, s větším rušením. Proto jsem se vrátil ke starým systémům sběrnic ošetřených použitím většího napětí. Pochopitelně jsem již neřešil provoz na baterie, ale spolehl jsem se na stabilizovaný napájecí zdroj 12V. Signál z procesoru jsem zesílil pomocí budiče TC4427 (má dobrou dostupnost a dobrou cenu). Po vedení tak přenáším signál 12V se zatížitelností větší než 0,5A. Jednotlivé hodinové strojky jsem pak doplnil o jednoduché odporové děliče (na obrázku 18 odpory R101 a R102; zase mám potřebu motor považovat za symetrický, ale není to nutné). Protože jsem chtěl zvětšit odolnost proti rušení tím, že budu spotřebovávat větší proud, použil jsem dva rezistory 100Ω. Pro omezení napětí na cívce hodin je paralelně s cívkou použit usměrňovací můstek B101, který má zkratovanou stejnosměrnou stranu. Toto představuje dvě dvojice antiparalelních diod. Dvě diody vytvářejí úbytek 1,4V, to je velice blízko běžného pracovního napětí pro motor. A antiparalelní potřebujeme proto, že motor je napájen střídavě v jedné i druhé polaritě. Výsledný proud který spotřebovávají jedny hodiny je tedy (12V - 1,5V) / (100Ω + 100Ω) = 53mA. To je hodnota přijatelně odolná proti rušení.
Output of this circuit can be used for input T0 (pin 4 with Arduino marking) and then use Timer0 with external input. That is not so practical, because Timer0 is used for functions like delay(), milis() or micros(). Second option is connect it to input T1 (pin 5 with Arduino marking) and use Timer1 with extra input. Next option is to connect it to interrupt input INT0 (pin 2 in Arduino marking) or INT1 (pin 3) and use function attachInterrupt() and register function, that is periodically called. Here is useful divider offered by chips 4060, then call must not be that often.

Fast Clock for model railroaders

For interest I will present one useful schematics. I need to connect more wall clocks to common control. Wall clocks are far away each other and on the top of it environment characteristic is more industrial with bigger electromagnetic noise. Then I returned back to old systems of buses using bigger voltage for communication. Of course I did not solved working on battery, but I used stabilized power supply 12V. I amplified signal from processor using driver TC4427 (it have good availability and good price). Then I'm carrying signal 12V with possible load up to 0.5A. I added simple resistor dividers to slave clocks (on figure 18 marked as R101 and R102; Again I understand motor as symmetric, that is no necessary). I would like to increase noise reduction by carrying more current, then I used two resistors 100Ω. To limit voltage on motor coil is connected bridge rectifier B101 in parallel with coil. The bridge have shorted DC side, then it represent two pairs of anti-parallel diodes. Two diodes mean voltage drop out about 1.4V, that is very close to normal working voltage for motor. We need anti-parallel because powering is alternating in one and opposite polarity. Total current used by one slave wall clock is then (12V - 1.5V) / (100Ω + 100Ω) = 53mA. That is value acceptable to avoid noise.
Externí kristal s Arduino Pro mini Externí kristal s Arduino Pro mini
Obr. 19 - Schéma pro řízení hodin pro dlouhá vedení
Na schématu jsou také dva spínače, které slouží k ovládání dalších funkcí hodin (násobku rychlosti v případě železničních modelů).

Dceřiné hodiny mají ještě jednu zvláštnost - připojují se pomocí dvou 4mm banánků, které drží hodiny na zdi. To je užitečné, pokud se mají hodiny nastavovat do nějakého konkrétního času před začátkem používání, tak je jednoduché je sundat a zase vrátit na zeď (dřevěný špalíček je připevněný na zeď). Pokud potřebujeme vytvořit "Big Ben", stačí dřevěná krabice se čtyřmi páry konektorů, která se dá navíc použít pro skladování hodin.
Here is two switches on schematics, they are for controlling additional functions of wall clock (speed multiplier in case of model railroaders).

Daughter clock have one more interesting feature. They are connected using two 4mm banana connectors. They are holding wall clock on the wall. It is useful especially once you would like to set some specific time before start using, you can simply unplug them and then plug back again (wooden block is fixed to wall). If you would like to create "Big Ben", you need wooden box with four pairs of sockets. That box can be used as storage for clocks when they are not used.
Hodiny pro dlouhá vedení
Hodiny pro dlouhá vedení
Hodiny pro dlouhá vedení
Hodiny pro dlouhá vedení
Hodiny pro dlouhá vedení
Hodiny pro dlouhá vedení

Obr. 20 - Elektronika a hodiny rychlého času pro hromadné žízení
Hodiny pro dlouhá vedení
Hodiny pro dlouhá vedení

Obr. 21 - Experimentální elektronika na univerzální desce určená k zasunutí místo baterie.

Software

Z pohledu software je úloha velmi jednoduchá. Popíšeme si realizaci na procesoru PIC12F629, který používá krystal 32768Hz (z původních hodin). Procesor má instrukční cyklus dlouhý čtyři hodinové cykly. Pokud použijeme interní zdroj hodin pro časovač, pak se jedná právě o instrukční cykly (neboli fosc/4). Dostupný je například časovač Timer0, takže jeho vstupní frekvence bude 32768 / 4 = 8192Hz. Časovač je osmibytový (256 kroků) a necháme jej bez nějakého řízení přetékat, jen si budeme sledovat příznak přetečení. Potom bude k přetečení docházet s frekvencí 8192 / 256 = 32Hz. Pokud tedy budeme vytvářet vteřinové pulzy, bude se jednat o pulz každých 32 přetečení časovače Timer0. Pokud bychom například chtěli hodiny 4× rychlejší, potom budeme potřebovat 32 / 4 = 8 přetečení. Pro případy hodin, které mají jít nepravidelně platí, že součet přetečení za několik vteřin má být stejný jako násobek 32× počet vteřin. Proto se u nepravidelných hodin setkáváme s maticí zhruba takovéhoto typu: [20, 40, 30, 38]. Tedy součet je 128 a to je 32×4 (pro sinusové hodiny [37, 42, 47, 51, 55, 58, 60, 61, 62, 61, 60, 58, 55, 51, 47, 42, 37, 32, 27, 22, 17, 13, 9, 6, 4, 3, 2, 3, 4, 6, 9, 13, 17, 22, 27, 32] = 1152 = 36*32).
Pro naše hodiny využijeme dva volné vývody jako vstupy s tím, že tabulka rychlostí je uložená v paměti EEPROM. Hlavní část programu může tedy vypadat takto:

Software

From software point of view is situation relative simple. Let us describe realization on chip PIC12F629 using crystal 32768Hz (recycled from original clock). Processor have one instruction cycle four oscillator cycles long. Once we will use internal clock source for any Timer, it mean instruction cycles (called fosc/4). We have available for example Timer0. Timer input frequency will be 32768 / 4 = 8192Hz. Timer is eight bit (256 steps) and we keep it overflow without any barriers. We will focus only for timer overflow event. The event will occur with frequency 8192 / 256 = 32Hz. Then when we would like to have pulses one second, we have to create pulse every 32 overflow of of Timer0. One we would like to have clock running for example four time faster, then we need 32 / 4 = 8 overflow for pulse. For cases we are interested to design clock with irregular but accurate, we have to have sum of overflows for few pulses same as 32× number of pulses. Then we are can fount in irregular clocks matrix like this: [20, 40, 30, 38]. Then sum is 128, that is same as 32×4. For sinus clock for example [37, 42, 47, 51, 55, 58, 60, 61, 62, 61, 60, 58, 55, 51, 47, 42, 37, 32, 27, 22, 17, 13, 9, 6, 4, 3, 2, 3, 4, 6, 9, 13, 17, 22, 27, 32] = 1152 = 36*32).
For our clock we will use two free inputs as definition of divider for fast run. Table dith dividers for speeds is stored in EEPROM memory. Main part of programm can look like this:
MainLoop:
	btfss	INTCON,T0IF
	goto	MainLoop			; wait for Timer0

	bcf 	INTCON,T0IF
	incf	CLKCNT,f

	btfss	SW_STOP				; if STOP switch is active,
	clrf	CLKCNT				; clear counter every time
	
	btfsc	SW_FAST				; if fast button is not pressed
	goto	NormalTime			; calculate only normal time
	
	movf	FCLK,w
	xorwf	CLKCNT,w

	btfsc	STATUS,Z			; if FCLK and CLKCNT are the same
	goto	SendPulse
       		         	    		                                  
NormalTime:
	movf	CLKCNT,w
	andlw	0xE0 				; bits 7,6,5
	btfsc	STATUS,Z			; if CLKCNT>=32
	goto	MainLoop
	goto	SendPulse
Program používá funkci SendPulse, která vytváří vlastní vteřinový pulz. Funkce si počítá sudou a lichou vteřinu a na základě toho generuje pulz na jednom nebo druhém druhém výstupu.
Funkce používá konstantu ENERGISE_TIME. Tato konstanta udává čas po který je napájena cívka motoru. Tím pádem má celkem zásadní vliv na spotřebu. Pokud je moc malá, hodiny nedokončí svůj krok a pak se stává, že vynechají vteřinu (nejčastěji když se vteřinová ručička pohybuje kolem číslice 9 kdy jde takzvaně "do kopce").
Program using function SendPulse, that function create motor pulse itself. Function count odd/even pulse and based on that create pulse on one or second output.
Function using constant ENERGISE_TIME. That constant define time during that is motor coil energized. Thus it have big impact to consumption. Once it is so small, motor is not able to finish step and sometimes it happens, that second get lost (usually when second hand goes around number 9, when it going "upwards").
SendPulse:
	incf	POLARITY,f
	clrf	CLKCNT

	btfss	POLARITY,0
	goto	SendPulseB
       		         	    		                                  
SendPulseA:
	bsf 	OUT_A
	goto	SendPulseE

SendPulseB:
	bsf 	OUT_B
	;goto	SendPulseE

SendPulseE:
	movlw	0x50
	movwf	ECNT
SendPulseLoop:
	decfsz	ECNT,f
	goto	SendPulseLoop
	bcf 	OUT_A
	bcf 	OUT_B
	goto	MainLoop
Kompletní programy lze stáhnout na konci stránky.

Při používání Arduina je situace malinko komplikovanější. Tím že se Arduino programuje ve vyšším jazyce a také používá vlastní krystal 8MHz, je nutné si dávat pozor na to, jaké funkce používáte. Používat klasické delay() je celkem riskantní (počítá čas od zavolání funkce). O mnoho lepších výsledků dosáhnete s používáním knihoven jako Timer1. Velké množství arduino projektů dokonce spoléhá na externí RTC obvody jako je PCF8563, DS1302, nebo podobné.

Zajímavosti

Tento systém používání hodinového strojku se považuje za velmi základní. Existuje však celá řada vylepšení. Například založených na sledování Back EMF (elektrické energie vzniklé pohybem magnetu rotoru ve statoru), kdy je elektronika schopna rozpoznat zda skutečně dochází k pohybu ručiček a případně podle potřeby opakovat pulz, nebo upravit hodnotu "ENERGISE_TIME".

Mnohem užitečnější zajímavost je "obrácený chod". Podle popisu se zdá, že motor je vytvořený pouze pro chod v jednom směru, nicméně možná jste se setkali s hodimani, které někdy udělají krok opačným směrem (jedno video jsem uložil na [2], najdete jej také stránce s doplňky [1]).
Podle popisu funkce se zdá, že motor je vyroben pro určitý směr otáčení a ten nelze změnit. Nicméně jak dokazují přiložená videa, tak změna je přecejen možná. Princip je celkem jednoduchý. Vrátíme se k popisu fungování motoru, předpokládejme, že motor je v ustáleném stavu druhého kroku (Obrázek 3). Pokud bychom připojili napětí odpovídající prvnímu kroku (Obrázek 2), tak se motor celkem logicky rozběhne v obráceném směru. Pokud bude tento pulz dostatečně krátký a skončí těsně před tím, než motor dosáhne stabilního stavu, dojde logicky k překmitu. Pokud v době překmitu přijde napěťový pulz odpovídající třetímu stavu (Obrázek 4), pak celkem logicky motor bude pokračovat v započatém směru otáčení, tedy v protisměru.
Trochu problém je, jak správně určit velikost toho prvního malého pulzu a také jestli udělat mezeru mezi prvním a druhým pulzem. A vůbec nejhorší je, že tyto konstanty jsou pro každé hodiny jiné a také se liší pro případy kdy jde vteřinová ručička "dolů" (kolem číslice 3) a nebo nahoru (kolem číslice 9) a pochopitelné v neutrálních polohách (kolem číslic 12 a 6). Pro příklad který je možné vidět na videu se mi osvědčily hodnoty a algoritmus zapsaný následovně:
Full source codes can be downloaded at the end of page.

Situation with Arduino is little complicated, because Arduino using higher programming language and using own crystal 8MHz, we have to be careful what functions we are using. Use of classical delay() is little risky (it calculate time from function start). Better results will have usage of libraries like Timer1. A lot of Arduino projects counts on external RTC devices like PCF8563, DS1302, etc.

Curiosities

This system of wall clock motor usage is understand as very basic. It exist a lot of improvements. For example based on measuring Back EMF (electrical energy produced by movement of rotor magnet). Then electronic is able to recognize, once hand are mover and if not, then quickly repeat the pulse or update the value of "ENERGISE_TIME".

more useful curiosity is "reverse step". Based on description it look like, that motor is designed for one direction of rotation only and it can not be changed. But as presented on attached videos, change of direction is possible. The principle is simple. Let us go back to motor principle. Imagine, that motor is in stable state of second step (Figure 3). Once we will connect voltage as presented in first step (Figure 2), motor will logically start rotation in reverse direction. Once the pulse will be short enough and will end up slightly before motor raise stable state, it will logically flicker over a little. Once in time of that flicker will arrive next voltage pulse as described on third state (Figure 4), then motor will continue with direction as it started, it mean in reverse direction.
A little problem is, how to determine duration of the first pulse and once to create some distance between first and second pulse. And most worst is, that those constants vary for each clock movement and sometime vary for cases, that hands goes "down" (around number 3) or up (around number 9) and as well in neutral positions (around numbers 12 and 6). For case presented on video I used values and algorithm as presented in following code:
#define		OUT_A_SET	0x02		; config for out a set out b clear
#define		OUT_B_SET	0x04		; config for out b set out a clear
       		         	    		                                  
#define		ENERGISE_TIME	0x30
#define		REVERT_TIME	0x06

SendPulse:
	incf	POLARITY,f
	clrf	CLKCNT

	btfss	POLARITY,0
	goto	SendPulseB

SendPulseA:
	movlw	REVERT_TIME
	movwf	ECNT
	movlw	OUT_B_SET			; start with pulse B
	movwf	GPIO
RevPulseLoopA:					; short time wait
	decfsz	ECNT,f
	goto	RevPulseLoopA
	movlw	OUT_A_SET			; then pulse A
	movwf	GPIO
	goto	SendPulseE

SendPulseB:
	movlw	REVERT_TIME
	movwf	ECNT
	movlw	OUT_A_SET			; start with pulse A
	movwf	GPIO
RevPulseLoopB:					; short time wait
	decfsz	ECNT,f
	goto	RevPulseLoopB
	movlw	OUT_B_SET			; then pulse B
	movwf	GPIO
	;goto	SendPulseE

SendPulseE:
	movlw	ENERGISE_TIME
	movwf	ECNT
SendPulseLoop:
	decfsz	ECNT,f
	goto	SendPulseLoop
	bcf		OUT_A
	bcf		OUT_B
	goto	MainLoop
Používáním reverzních kroků se ještě zvětšují možnosti, jak používat hodiny na hraní.

Někdy také můžete narazit na hodiny, které mají plynulý chod vteřinové ručičky. Ani těchto hodin se nemusíte bát. Používají jednoduchý trik. Vlastní motor je úplně stejný, jen jeho převod je ještě větší (většinou navíc 8:1) a motor se tedy otáčí rychleji (právě 8x rychleji) a tím je efekt pohybu vteřinové ručičky plynulý. Pokud se rozhodnete předělat právě tyto hodiny, nezapomeňte na potřebný násobek rychlosti.
Use of reverse steps increase possibility of playing with wall clock.

We can found sometimes wall clock, that have smooth movement of second hand. We have no scare about those clock, they are using simple trick. The motor itself is same as motor described here, only gear ratio is bigger (usually 8:1 more) and motor spinning faster (usually 8x faster) that makes effect of smooth movement. Once you decide to modify those wall clock, do not forget to calculate requested multiplier.
Download: HClock_v1.asm color HClock_v1.asm   HClock_v2.asm color HClock_v2.asm   HClock_v3.asm color HClock_v3.asm