{"id":1935,"date":"2023-11-06T12:34:03","date_gmt":"2023-11-06T11:34:03","guid":{"rendered":"https:\/\/www.rommelkist.nl\/elec\/?p=1935"},"modified":"2023-12-14T10:19:51","modified_gmt":"2023-12-14T09:19:51","slug":"n-spoor-treintjes-deel-8-servos","status":"publish","type":"post","link":"https:\/\/www.rommelkist.nl\/elec\/elektronica\/n-spoor-treintjes-deel-8-servos\/","title":{"rendered":"N-spoor &#8211; deel 8 &#8211; Wissels &amp; ATtiny85s"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Circa drie jaar geleden is er hier een laatste bericht geplaatst over mijn spoorbaantje. In de tussentijd wel nog een proefbaantje gemaakt, vooral om een aantal zaken zoals blokken en detectie uit te proberen, maar dat heb ik hier niet uitgewerkt. Het laatste deel (<a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/n-spoor-treintjes-deel-7-wissels\/\" data-type=\"post\" data-id=\"1411\">N-spoor treintjes \u2013 deel 7 \u2013 Wissels<\/a>) ging over het inzetten van servomotortjes voor het omzetten van wissels. Ik wilde gebruikmaken van een ATtiny85 microcontroller-module (oorspronkelijk van <a href=\"https:\/\/digistump.com\/wiki\/digispark\/tutorials\/connecting\">DigiSpark<\/a>) die nogal weerbarstig was: ik kreeg &#8216;m niet geprogrammeerd. Het lag daarmee stil.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Toch spookte die modules en\/of de losse ATtiny85-chippies (waarvan ik er ook een aantal had liggen) al die tijd wel door mijn hoofd. Afgelopen dagen de zaak dus weer opgepakt!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wat ik wilde was de AVR-microcontroller programmeren vanuit de Arduino-IDE. Een programmer had ik daarvoor ooit wel eens aangeschaft, maar vervolgens nooit iets mee gedaan: een USBasp kloon. Her en der te koop voor een paar euro&#8217;s. <a href=\"https:\/\/www.fischl.de\/usbasp\/\">Hier<\/a> staat het originele ding beschreven.<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"256\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image-2-300x256.png\" alt=\"\" class=\"wp-image-1941\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-2-300x256.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-2-425x363.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-2.png 531w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Met behulp van het programma <a href=\"https:\/\/zadig.akeo.ie\/\">Zadig<\/a> eerst de juiste firmware\/driver uploaden: kies libusbK (v.3.1.0.0), of hogere versie. Onder Windows 11 wordt ie dan keurig herkend in &#8220;Apparaatbeheer&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"597\" height=\"269\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image-4.png\" alt=\"\" class=\"wp-image-1946\" style=\"width:493px;height:auto\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-4.png 597w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-4-300x135.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-4-425x191.png 425w\" sizes=\"auto, (max-width: 597px) 100vw, 597px\" \/><\/a><figcaption class=\"wp-element-caption\">Inmiddels was versie 3.1.0.0 dus beschikbaar.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">De programmer zelf heeft een 10-pinnige ISP-aansluiting. Het bijgeleverde adapterbordje zet dit om naar een connector met 6 aansluitingen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"371\" height=\"227\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image-3.png\" alt=\"\" class=\"wp-image-1945\" style=\"width:206px;height:auto\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-3.png 371w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-3-300x184.png 300w\" sizes=\"auto, (max-width: 371px) 100vw, 371px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Op een gaatjesprint heb ik een 6-pins ISP-aansluiting gemaakt met een 8-pins voetje ernaast waar een ATtiny ingezet kan worden om te programmeren.<\/p>\n\n\n\n\n\n<p class=\"wp-block-paragraph\">Standaard kan de Arduino IDE geen ATtiny&#8217;s programmeren, maar gelukkig bestaat er een speciale Arduino library voor: <a href=\"https:\/\/github.com\/SpenceKonde\/ATTinyCore\">ATtinyCore<\/a>. Na installatie daarvan het &#8220;Blink&#8221; programma aangepast tot &#8220;USBasp_test_Blink.ino&#8221;. In de Arduino IDE kies je onder &#8216;Tools&#8217; als programmer de USBasp. Een knipperend ledje (met 1K weerstand) op pin 2 van de ATtiny85 (is PB3) laat zien dat het gelukt is. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1051\" height=\"336\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/image.png\" alt=\"\" class=\"wp-image-1937\" style=\"width:841px;height:auto\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image.png 1051w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-300x96.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-1024x327.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-768x246.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/image-425x136.png 425w\" sizes=\"auto, (max-width: 1051px) 100vw, 1051px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Daarna het programma aangepast om een servo te bedienen. Als kloksnelheid in eerste instantie 8MHz (intern) gekozen, maar dat werkte niet goed. Blijkbaar werkt de AVR zonder bootloader intern op 1MHz. Door het programma in te stellen op 8MHz, schakelt ie wel over naar 8MHz, maar start op met 1MHz. Ok\u00e9. Door eerst vanuit de Arduino IDE een <a href=\"https:\/\/nl.wikipedia.org\/wiki\/Bootloader\">bootloader<\/a> en aansluitend het programma (ino-file) te sturen werkt e.e.a. wel goed!<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Servo &amp; ATtiny85\" width=\"1260\" height=\"709\" src=\"https:\/\/www.youtube.com\/embed\/8zK1jNMYHmM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">De ATtiny85 aan de scope. Hier is de zwenkhoek in het programma nog ca. 180 graden.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hieronder het programma.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>\/* Servo schakelaar\n\n    Bestuur een servomotor \n \n*\/\n\n#include &lt;Servo_ATTinyCore.h&gt;\n\nint pos = 0;              \/\/ servo positie\n\nServo myservo1;           \/\/ creeer een servo object \n\nint schakel1 = 2;         \/\/ PB2 is pin 7 = input voor besturing servo\nint stand1 = 0;           \/\/ stand 0 of 1: aan\/uit, li\/re, enz.\n\nvoid setup() {\n  myservo1.attach(3);     \/\/ servo op PB3 is pin 2 van ATtiny85  \n  pinMode (schakel1, INPUT_PULLUP);\n}\n\nvoid loop() {\n  int schakel_status1 = digitalRead(schakel1);\n  \n  if (schakel_status1 == HIGH &amp;&amp; stand1 == 1){\n  for (pos = 0; pos &lt;= 40; pos += 1) { \n    myservo1.write(pos);\n    delay(15);\n    stand1 = 0;\n  }\n  }\n  \n  if (schakel_status1 == LOW &amp;&amp; stand1 == 0){\n  for (pos = 40; pos &gt;= 0; pos -= 1) {\n    myservo1.write(pos);\n    delay(15);\n    stand1 = 1;\n  }\n  }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De aan te sturen servo moet dus een handmatig te bedienen wissel omzetten op mijn treinbaantje. Zo&#8217;n wissel heeft een klein handeltje dat in de lengte richting langs het spoor naar voren en naar achter bewogen moet worden over ca. 7 &#8211; 10 mm. In eerste instantie had ik een ingewikkelde constructie bedacht met een messing buisje en een verenstalen draad (zie hiervoor <a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/n-spoor-treintjes-deel-7-wissels\/\" data-type=\"post\" data-id=\"1411\">deel 7<\/a>). Misschien kan het toch wat eenvoudiger. Een 3D ontwerpje gemaakt voor een aangepaste &#8216;hoorn&#8217; voor de servo (rood gearceerd  in onderstaande plaatje) die grijpt in handeltje van de wissel (het rode bolletje in het plaatje).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/Scan_20140101043237.png\"><img loading=\"lazy\" decoding=\"async\" width=\"356\" height=\"205\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/Scan_20140101043237.png\" alt=\"\" class=\"wp-image-1957\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/Scan_20140101043237.png 356w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2023\/11\/Scan_20140101043237-300x173.png 300w\" sizes=\"auto, (max-width: 356px) 100vw, 356px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">De afstand van het draaipunt van de servo onder de baan, tot daar waar het wisselhandeltje zit bovenop de baan is ca. 14 mm. Om te berekenen met hoeveel graden de servo moet uitslaan om het wissel om te zetten (er moet ca. 10 mm overbrugd worden) berekenen we de omtrek van de cirkel met een diameter van 14 mm. <br>Een volledige omwenteling van 360 graden is dus 2 x 14 mm x Pi = 28 x 3,14 = 87,9 mm. Een beweging van 1 mm is dan (360\/88 mm) ca. 4,1 graad, dus een beweging van ca. 10 mm is ongeveer 40 graden. In de praktijk komt het ook net zo uit dus dat is wel fijn. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Onderstaand het uiteindelijke schema met 2 servo&#8217;s (SG90). Met de knop op PB2 is servo 1 om te zetten, met de knop op PB1 wordt servo 2 bestuurd. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/Schema-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"228\" height=\"188\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2023\/11\/Schema-1.png\" alt=\"\" class=\"wp-image-1947\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Uiteindelijk moet deze module vanuit het besturingsprogramma via I2C aangestuurd worden, zoals aangegeven in onderstaand schema.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2020\/12\/wissel.png\"><img decoding=\"async\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2020\/12\/wissel.png\" alt=\"\" class=\"wp-image-1415\" style=\"width:645px;height:auto\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In het <a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/n-spoor-treintjes-deel-9-servos-en-seinen\/\" data-type=\"post\" data-id=\"1965\">volgende deel<\/a> verder met het testen van de wissel- en seinaansturing.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Circa drie jaar geleden is er hier een laatste bericht geplaatst over mijn spoorbaantje. In de tussentijd wel nog een proefbaantje gemaakt, vooral om een aantal zaken zoals blokken en detectie uit te proberen, maar dat heb ik hier niet uitgewerkt. Het laatste deel (N-spoor treintjes \u2013 deel 7 \u2013 Wissels) ging over het inzetten van servomotortjes voor het omzetten van wissels. Ik wilde gebruikmaken van een ATtiny85 microcontroller-module (oorspronkelijk van DigiSpark) die nogal weerbarstig was: ik kreeg &#8216;m niet geprogrammeerd. Het lag daarmee stil. Toch spookte die modules en\/of de losse ATtiny85-chippies (waarvan ik er ook een aantal had liggen)<span class=\"more-link\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/n-spoor-treintjes-deel-8-servos\/\">Read More &rarr;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":1279,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[5,6,95,3,104],"tags":[122,20,107,106,123],"class_list":["entry","author-admin","post-1935","post","type-post","status-publish","format-standard","has-post-thumbnail","category-3d-printen","category-arduino","category-diy","category-elektronica","category-modeltreinbaan","tag-attiny85","tag-module","tag-n-spoor","tag-treintje","tag-usbasp"],"_links":{"self":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/1935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/comments?post=1935"}],"version-history":[{"count":0,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/1935\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media\/1279"}],"wp:attachment":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media?parent=1935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/categories?post=1935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/tags?post=1935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}