<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://studio.cse.chalmers.se/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Studio+Director</id>
	<title>IxD Studio - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://studio.cse.chalmers.se/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Studio+Director"/>
	<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Special:Contributions/Studio_Director"/>
	<updated>2026-10-31T23:23:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Simulators&amp;diff=201</id>
		<title>Simulators</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Simulators&amp;diff=201"/>
		<updated>2026-10-20T09:40:08Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* Circuit Simulators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Circuit Simulators ==&lt;br /&gt;
&lt;br /&gt;
* [[WOKWI]]&lt;br /&gt;
* https://www.falstad.com/circuit/&lt;br /&gt;
* Fritzing&lt;br /&gt;
** Build instrucitons: https://github.com/fritzing/fritzing-app/wiki/1.-Building-Fritzing&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=CAD&amp;diff=200</id>
		<title>CAD</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=CAD&amp;diff=200"/>
		<updated>2026-10-18T18:20:14Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* 3d printing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 3d printing ==&lt;br /&gt;
=== TinkerCad ===&lt;br /&gt;
&lt;br /&gt;
https://www.tinkercad.com/&lt;br /&gt;
&lt;br /&gt;
- Good: For fast designs using shape primitives, easy to use&lt;br /&gt;
&lt;br /&gt;
- Bad: For precision, parametric and generative designs&lt;br /&gt;
&lt;br /&gt;
=== OpenSCAD ===&lt;br /&gt;
&lt;br /&gt;
https://openscad.org/&lt;br /&gt;
&lt;br /&gt;
- Good: Programming interface, generative and parametric designs, open-source&lt;br /&gt;
&lt;br /&gt;
- Bad: For fast detailed designs&lt;br /&gt;
&lt;br /&gt;
==== Documentation ====&lt;br /&gt;
- https://openscad.org/documentation.html&lt;br /&gt;
- https://openscad.org/cheatsheet/&lt;br /&gt;
&lt;br /&gt;
=== Blender ===&lt;br /&gt;
&lt;br /&gt;
https://www.blender.org/&lt;br /&gt;
&lt;br /&gt;
- Good: For precision, parametric and generative designs, open-source software&lt;br /&gt;
&lt;br /&gt;
- Bad: For fast designs, not easy to use&lt;br /&gt;
&lt;br /&gt;
=== Rhino 3D ===&lt;br /&gt;
&lt;br /&gt;
https://www.rhino3d.com/&lt;br /&gt;
&lt;br /&gt;
- Good: For precision, parametric and generative designs&lt;br /&gt;
&lt;br /&gt;
- Bad: For fast designs, not easy to use, license required&lt;br /&gt;
&lt;br /&gt;
=== Autodesk Fusion ===&lt;br /&gt;
&lt;br /&gt;
https://www.autodesk.com/solutions/fusion-360-3d-modeling&lt;br /&gt;
&lt;br /&gt;
- Good: For precision, simulations&lt;br /&gt;
&lt;br /&gt;
- Bad: For fast designs, not easy to use, license required&lt;br /&gt;
&lt;br /&gt;
=== FreeCAD ===&lt;br /&gt;
&lt;br /&gt;
https://www.freecad.org/&lt;br /&gt;
&lt;br /&gt;
- Good: For precise designs, free software&lt;br /&gt;
&lt;br /&gt;
- Bad: For fast designs, not easy to use&lt;br /&gt;
&lt;br /&gt;
=== SolidCraft ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/tangency-labs/solidcraft&lt;br /&gt;
&lt;br /&gt;
- Good: Open-source parametric CAD, MCP (Model Context Protocol) server&lt;br /&gt;
&lt;br /&gt;
- Bad: Early-stages of development&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Microprocessors&amp;diff=199</id>
		<title>Microprocessors</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Microprocessors&amp;diff=199"/>
		<updated>2026-10-08T19:44:25Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* Micro:bit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Arduino =&lt;br /&gt;
&lt;br /&gt;
- [[Arduino UNO]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Leonardo]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Mega]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Due]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino MKR WiFi 1010]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino MKR Zero]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Nano 33 BLE Sense]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Nano RP2040 Connect]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Rasperry Pi =&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pi 3 Model B]]&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pi 4]]&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pico]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Micro:bit =&lt;br /&gt;
- [[Micro:bit v2]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Microprocessors&amp;diff=198</id>
		<title>Microprocessors</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Microprocessors&amp;diff=198"/>
		<updated>2026-10-08T19:44:13Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* Micro:bit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Arduino =&lt;br /&gt;
&lt;br /&gt;
- [[Arduino UNO]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Leonardo]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Mega]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Due]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino MKR WiFi 1010]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino MKR Zero]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Nano 33 BLE Sense]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Nano RP2040 Connect]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Rasperry Pi =&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pi 3 Model B]]&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pi 4]]&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pico]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Micro:bit =&lt;br /&gt;
- [[micro:bit v2]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Microprocessors&amp;diff=197</id>
		<title>Microprocessors</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Microprocessors&amp;diff=197"/>
		<updated>2026-10-08T19:43:53Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Arduino =&lt;br /&gt;
&lt;br /&gt;
- [[Arduino UNO]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Leonardo]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Mega]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Due]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino MKR WiFi 1010]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino MKR Zero]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Nano 33 BLE Sense]]&lt;br /&gt;
&lt;br /&gt;
- [[Arduino Nano RP2040 Connect]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Rasperry Pi =&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pi 3 Model B]]&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pi 4]]&lt;br /&gt;
&lt;br /&gt;
- [[Raspberry Pico]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Micro:bit =&lt;br /&gt;
- [[micro:bit-v2]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=196</id>
		<title>Mp3 Player</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=196"/>
		<updated>2026-10-08T16:19:16Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DF mini player ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps: &lt;br /&gt;
  1. Use the SD Card Formatter software to flash the SD card: https://www.sdcard.org/downloads/formatter/&lt;br /&gt;
  2. Upload mp3 files (other audio formats will not be readable by the player)&lt;br /&gt;
&lt;br /&gt;
[[File:DFPlayer-mini-mp3.png|800px|center|thumb|DFPlayer Mini wiring diagram]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/***************************************************&lt;br /&gt;
DFPlayer - A Mini MP3 Player For Arduino&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=1121&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ***************************************************&lt;br /&gt;
 This example shows the basic function of library for DFPlayer.&lt;br /&gt;
 &lt;br /&gt;
 Created 2016-12-07&lt;br /&gt;
 By [Angelo qiao](Angelo.qiao@dfrobot.com)&lt;br /&gt;
 &lt;br /&gt;
 GNU Lesser General Public License.&lt;br /&gt;
 See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
 All above must be included in any redistribution&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
/***********Notice and Trouble shooting***************&lt;br /&gt;
 1.Connection and Diagram can be found here&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram&amp;gt;&lt;br /&gt;
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#include &amp;quot;SoftwareSerial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;DFRobotDFPlayerMini.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
void printDetail(uint8_t type, int value);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  mySoftwareSerial.begin(9600);&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(F(&amp;quot;DFRobot DFPlayer Mini Demo&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;Initializing DFPlayer ... (May take 3~5 seconds)&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.&lt;br /&gt;
    Serial.println(F(&amp;quot;Unable to begin:&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;1.Please recheck the connection!&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;2.Please insert the SD card!&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(F(&amp;quot;DFPlayer Mini online.&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30&lt;br /&gt;
  myDFPlayer.play(1);  //Play the first mp3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long timer = millis();&lt;br /&gt;
  &lt;br /&gt;
  if (millis() - timer &amp;gt; 3000) {&lt;br /&gt;
    timer = millis();&lt;br /&gt;
    myDFPlayer.next();  //Play next mp3 every 3 second.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (myDFPlayer.available()) {&lt;br /&gt;
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void printDetail(uint8_t type, int value){&lt;br /&gt;
  switch (type) {&lt;br /&gt;
    case TimeOut:&lt;br /&gt;
      Serial.println(F(&amp;quot;Time Out!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case WrongStack:&lt;br /&gt;
      Serial.println(F(&amp;quot;Stack Wrong!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardInserted:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Inserted!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardRemoved:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Removed!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardOnline:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Online!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerPlayFinished:&lt;br /&gt;
      Serial.print(F(&amp;quot;Number:&amp;quot;));&lt;br /&gt;
      Serial.print(value);&lt;br /&gt;
      Serial.println(F(&amp;quot; Play Finished!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerError:&lt;br /&gt;
      Serial.print(F(&amp;quot;DFPlayerError:&amp;quot;));&lt;br /&gt;
      switch (value) {&lt;br /&gt;
        case Busy:&lt;br /&gt;
          Serial.println(F(&amp;quot;Card not found&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Sleeping:&lt;br /&gt;
          Serial.println(F(&amp;quot;Sleeping&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case SerialWrongStack:&lt;br /&gt;
          Serial.println(F(&amp;quot;Get Wrong Stack&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case CheckSumNotMatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Check Sum Not Match&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileIndexOut:&lt;br /&gt;
          Serial.println(F(&amp;quot;File Index Out of Bound&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileMismatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Cannot Find File&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Advertise:&lt;br /&gt;
          Serial.println(F(&amp;quot;In Advertise&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    default:&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:DFPlayer-mini-mp3.png&amp;diff=195</id>
		<title>File:DFPlayer-mini-mp3.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:DFPlayer-mini-mp3.png&amp;diff=195"/>
		<updated>2026-10-08T16:19:06Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DFPlayer mini MP3 player with Arduino UNO&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=194</id>
		<title>Mp3 Player</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=194"/>
		<updated>2026-10-08T16:16:39Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DF mini player ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps: &lt;br /&gt;
  1. Use the SD Card Formatter software to flash the SD card: https://www.sdcard.org/downloads/formatter/&lt;br /&gt;
  2. Upload mp3 files (other audio formats will not be readable by the player)&lt;br /&gt;
&lt;br /&gt;
[[File:DFPlayer-mini_bb.png|800px|center|thumb|DFPlayer Mini wiring diagram]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/***************************************************&lt;br /&gt;
DFPlayer - A Mini MP3 Player For Arduino&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=1121&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ***************************************************&lt;br /&gt;
 This example shows the basic function of library for DFPlayer.&lt;br /&gt;
 &lt;br /&gt;
 Created 2016-12-07&lt;br /&gt;
 By [Angelo qiao](Angelo.qiao@dfrobot.com)&lt;br /&gt;
 &lt;br /&gt;
 GNU Lesser General Public License.&lt;br /&gt;
 See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
 All above must be included in any redistribution&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
/***********Notice and Trouble shooting***************&lt;br /&gt;
 1.Connection and Diagram can be found here&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram&amp;gt;&lt;br /&gt;
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#include &amp;quot;SoftwareSerial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;DFRobotDFPlayerMini.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
void printDetail(uint8_t type, int value);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  mySoftwareSerial.begin(9600);&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(F(&amp;quot;DFRobot DFPlayer Mini Demo&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;Initializing DFPlayer ... (May take 3~5 seconds)&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.&lt;br /&gt;
    Serial.println(F(&amp;quot;Unable to begin:&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;1.Please recheck the connection!&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;2.Please insert the SD card!&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(F(&amp;quot;DFPlayer Mini online.&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30&lt;br /&gt;
  myDFPlayer.play(1);  //Play the first mp3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long timer = millis();&lt;br /&gt;
  &lt;br /&gt;
  if (millis() - timer &amp;gt; 3000) {&lt;br /&gt;
    timer = millis();&lt;br /&gt;
    myDFPlayer.next();  //Play next mp3 every 3 second.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (myDFPlayer.available()) {&lt;br /&gt;
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void printDetail(uint8_t type, int value){&lt;br /&gt;
  switch (type) {&lt;br /&gt;
    case TimeOut:&lt;br /&gt;
      Serial.println(F(&amp;quot;Time Out!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case WrongStack:&lt;br /&gt;
      Serial.println(F(&amp;quot;Stack Wrong!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardInserted:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Inserted!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardRemoved:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Removed!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardOnline:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Online!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerPlayFinished:&lt;br /&gt;
      Serial.print(F(&amp;quot;Number:&amp;quot;));&lt;br /&gt;
      Serial.print(value);&lt;br /&gt;
      Serial.println(F(&amp;quot; Play Finished!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerError:&lt;br /&gt;
      Serial.print(F(&amp;quot;DFPlayerError:&amp;quot;));&lt;br /&gt;
      switch (value) {&lt;br /&gt;
        case Busy:&lt;br /&gt;
          Serial.println(F(&amp;quot;Card not found&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Sleeping:&lt;br /&gt;
          Serial.println(F(&amp;quot;Sleeping&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case SerialWrongStack:&lt;br /&gt;
          Serial.println(F(&amp;quot;Get Wrong Stack&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case CheckSumNotMatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Check Sum Not Match&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileIndexOut:&lt;br /&gt;
          Serial.println(F(&amp;quot;File Index Out of Bound&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileMismatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Cannot Find File&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Advertise:&lt;br /&gt;
          Serial.println(F(&amp;quot;In Advertise&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    default:&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=193</id>
		<title>Mp3 Player</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=193"/>
		<updated>2026-10-08T16:15:34Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DF mini player ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps: &lt;br /&gt;
  1. Use the SD Card Formatter software to flash the SD card: https://www.sdcard.org/downloads/formatter/&lt;br /&gt;
  2. Upload mp3 files (other audio formats will not be readable by the player)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/***************************************************&lt;br /&gt;
DFPlayer - A Mini MP3 Player For Arduino&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=1121&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ***************************************************&lt;br /&gt;
 This example shows the basic function of library for DFPlayer.&lt;br /&gt;
 &lt;br /&gt;
 Created 2016-12-07&lt;br /&gt;
 By [Angelo qiao](Angelo.qiao@dfrobot.com)&lt;br /&gt;
 &lt;br /&gt;
 GNU Lesser General Public License.&lt;br /&gt;
 See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
 All above must be included in any redistribution&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
/***********Notice and Trouble shooting***************&lt;br /&gt;
 1.Connection and Diagram can be found here&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram&amp;gt;&lt;br /&gt;
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#include &amp;quot;SoftwareSerial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;DFRobotDFPlayerMini.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
void printDetail(uint8_t type, int value);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  mySoftwareSerial.begin(9600);&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(F(&amp;quot;DFRobot DFPlayer Mini Demo&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;Initializing DFPlayer ... (May take 3~5 seconds)&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.&lt;br /&gt;
    Serial.println(F(&amp;quot;Unable to begin:&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;1.Please recheck the connection!&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;2.Please insert the SD card!&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(F(&amp;quot;DFPlayer Mini online.&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30&lt;br /&gt;
  myDFPlayer.play(1);  //Play the first mp3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long timer = millis();&lt;br /&gt;
  &lt;br /&gt;
  if (millis() - timer &amp;gt; 3000) {&lt;br /&gt;
    timer = millis();&lt;br /&gt;
    myDFPlayer.next();  //Play next mp3 every 3 second.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (myDFPlayer.available()) {&lt;br /&gt;
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void printDetail(uint8_t type, int value){&lt;br /&gt;
  switch (type) {&lt;br /&gt;
    case TimeOut:&lt;br /&gt;
      Serial.println(F(&amp;quot;Time Out!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case WrongStack:&lt;br /&gt;
      Serial.println(F(&amp;quot;Stack Wrong!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardInserted:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Inserted!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardRemoved:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Removed!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardOnline:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Online!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerPlayFinished:&lt;br /&gt;
      Serial.print(F(&amp;quot;Number:&amp;quot;));&lt;br /&gt;
      Serial.print(value);&lt;br /&gt;
      Serial.println(F(&amp;quot; Play Finished!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerError:&lt;br /&gt;
      Serial.print(F(&amp;quot;DFPlayerError:&amp;quot;));&lt;br /&gt;
      switch (value) {&lt;br /&gt;
        case Busy:&lt;br /&gt;
          Serial.println(F(&amp;quot;Card not found&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Sleeping:&lt;br /&gt;
          Serial.println(F(&amp;quot;Sleeping&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case SerialWrongStack:&lt;br /&gt;
          Serial.println(F(&amp;quot;Get Wrong Stack&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case CheckSumNotMatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Check Sum Not Match&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileIndexOut:&lt;br /&gt;
          Serial.println(F(&amp;quot;File Index Out of Bound&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileMismatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Cannot Find File&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Advertise:&lt;br /&gt;
          Serial.println(F(&amp;quot;In Advertise&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    default:&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:DFPlayer-mini_bb.png&amp;diff=192</id>
		<title>File:DFPlayer-mini bb.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:DFPlayer-mini_bb.png&amp;diff=192"/>
		<updated>2026-10-08T16:14:34Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DFPlayer mini&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=191</id>
		<title>Mp3 Player</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Mp3_Player&amp;diff=191"/>
		<updated>2026-10-08T16:13:45Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== DF mini player ==&lt;br /&gt;
&lt;br /&gt;
https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Steps: &lt;br /&gt;
  1. Use the SD Card Formatter software to flash the SD card: https://www.sdcard.org/downloads/formatter/&lt;br /&gt;
  2. Upload mp3 files (other audio formats will not be readable by the player)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/***************************************************&lt;br /&gt;
DFPlayer - A Mini MP3 Player For Arduino&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=1121&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 ***************************************************&lt;br /&gt;
 This example shows the basic function of library for DFPlayer.&lt;br /&gt;
 &lt;br /&gt;
 Created 2016-12-07&lt;br /&gt;
 By [Angelo qiao](Angelo.qiao@dfrobot.com)&lt;br /&gt;
 &lt;br /&gt;
 GNU Lesser General Public License.&lt;br /&gt;
 See &amp;lt;http://www.gnu.org/licenses/&amp;gt; for details.&lt;br /&gt;
 All above must be included in any redistribution&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
/***********Notice and Trouble shooting***************&lt;br /&gt;
 1.Connection and Diagram can be found here&lt;br /&gt;
 &amp;lt;https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Connection_Diagram&amp;gt;&lt;br /&gt;
 2.This code is tested on Arduino Uno, Leonardo, Mega boards.&lt;br /&gt;
 ****************************************************/&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
#include &amp;quot;SoftwareSerial.h&amp;quot;&lt;br /&gt;
#include &amp;quot;DFRobotDFPlayerMini.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX&lt;br /&gt;
DFRobotDFPlayerMini myDFPlayer;&lt;br /&gt;
void printDetail(uint8_t type, int value);&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  mySoftwareSerial.begin(9600);&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  &lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(F(&amp;quot;DFRobot DFPlayer Mini Demo&amp;quot;));&lt;br /&gt;
  Serial.println(F(&amp;quot;Initializing DFPlayer ... (May take 3~5 seconds)&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.&lt;br /&gt;
    Serial.println(F(&amp;quot;Unable to begin:&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;1.Please recheck the connection!&amp;quot;));&lt;br /&gt;
    Serial.println(F(&amp;quot;2.Please insert the SD card!&amp;quot;));&lt;br /&gt;
    while(true);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println(F(&amp;quot;DFPlayer Mini online.&amp;quot;));&lt;br /&gt;
  &lt;br /&gt;
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30&lt;br /&gt;
  myDFPlayer.play(1);  //Play the first mp3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  static unsigned long timer = millis();&lt;br /&gt;
  &lt;br /&gt;
  if (millis() - timer &amp;gt; 3000) {&lt;br /&gt;
    timer = millis();&lt;br /&gt;
    myDFPlayer.next();  //Play next mp3 every 3 second.&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  if (myDFPlayer.available()) {&lt;br /&gt;
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void printDetail(uint8_t type, int value){&lt;br /&gt;
  switch (type) {&lt;br /&gt;
    case TimeOut:&lt;br /&gt;
      Serial.println(F(&amp;quot;Time Out!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case WrongStack:&lt;br /&gt;
      Serial.println(F(&amp;quot;Stack Wrong!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardInserted:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Inserted!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardRemoved:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Removed!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerCardOnline:&lt;br /&gt;
      Serial.println(F(&amp;quot;Card Online!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerPlayFinished:&lt;br /&gt;
      Serial.print(F(&amp;quot;Number:&amp;quot;));&lt;br /&gt;
      Serial.print(value);&lt;br /&gt;
      Serial.println(F(&amp;quot; Play Finished!&amp;quot;));&lt;br /&gt;
      break;&lt;br /&gt;
    case DFPlayerError:&lt;br /&gt;
      Serial.print(F(&amp;quot;DFPlayerError:&amp;quot;));&lt;br /&gt;
      switch (value) {&lt;br /&gt;
        case Busy:&lt;br /&gt;
          Serial.println(F(&amp;quot;Card not found&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Sleeping:&lt;br /&gt;
          Serial.println(F(&amp;quot;Sleeping&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case SerialWrongStack:&lt;br /&gt;
          Serial.println(F(&amp;quot;Get Wrong Stack&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case CheckSumNotMatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Check Sum Not Match&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileIndexOut:&lt;br /&gt;
          Serial.println(F(&amp;quot;File Index Out of Bound&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case FileMismatch:&lt;br /&gt;
          Serial.println(F(&amp;quot;Cannot Find File&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        case Advertise:&lt;br /&gt;
          Serial.println(F(&amp;quot;In Advertise&amp;quot;));&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
      break;&lt;br /&gt;
    default:&lt;br /&gt;
      break;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=190</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=190"/>
		<updated>2026-05-21T13:39:49Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley-rev.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Code for OpenSCAD: https://openscad.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulley v2 ==&lt;br /&gt;
&lt;br /&gt;
[[File:Pulley v2.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn = 32;&lt;br /&gt;
&lt;br /&gt;
r = 25; // disc radius - outer&lt;br /&gt;
w = 5.3; // disc thickness for XL330 -- adjust for different servo types&lt;br /&gt;
d = 3;  // inner hole radius -- inner&lt;br /&gt;
t = 4;&lt;br /&gt;
h = 1.5; // boundary thickness&lt;br /&gt;
&lt;br /&gt;
rr = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
ll = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
tt = 2; // t=2mm, global thickness&lt;br /&gt;
inner = 6;&lt;br /&gt;
&lt;br /&gt;
module pins(rr, ll, tt){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([-inner,0,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([0,inner,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([0,-inner,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([3*inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-3*inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,3*inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-3*inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(r, w, d, h){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                cylinder(w, r, r);&lt;br /&gt;
                translate([0, 0, w-h]) cylinder(h, r + t, r + t);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0, 0, 0]) cylinder(h, r + t, r + t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(w, 3, 3);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//&lt;br /&gt;
//union(){&lt;br /&gt;
//    disc(r, w, d);&lt;br /&gt;
//    translate([0, 0, w - t]) cylinder(h, r + t, r + t);&lt;br /&gt;
//}&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            disc(r, w, d, h);&lt;br /&gt;
    //        mounts(h, d, r);&lt;br /&gt;
            pins(rr, ll, w);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,0,w/2]) rotate([90,0,0])  cylinder(2*r, 1, 1); // string attachment&lt;br /&gt;
    }&lt;br /&gt;
    translate([0,-1.5*w,w/2]) rotate([0,90,0]) cylinder(2*r, 1, 1); // string attachment&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other servo accessories =&lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=189</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=189"/>
		<updated>2026-05-21T13:37:51Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley-rev.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Code for OpenSCAD: https://openscad.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulley v2 ==&lt;br /&gt;
&lt;br /&gt;
[[File:Pulley v2.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn = 32;&lt;br /&gt;
&lt;br /&gt;
r = 25; // disc radius - outer&lt;br /&gt;
w = 8; // disc thickness &lt;br /&gt;
d = 3;  // inner hole radius -- inner&lt;br /&gt;
t = 4;&lt;br /&gt;
h = 2; // boundary thickness&lt;br /&gt;
&lt;br /&gt;
rr = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
ll = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
tt = 2; // t=2mm, global thickness&lt;br /&gt;
inner = 6;&lt;br /&gt;
&lt;br /&gt;
module pins(rr, ll, tt){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([-inner,0,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([0,inner,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([0,-inner,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([3*inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-3*inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,3*inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-3*inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(r, w, d, h){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                cylinder(w, r, r);&lt;br /&gt;
                translate([0, 0, w-h]) cylinder(h, r + t, r + t);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0, 0, 0]) cylinder(h, r + t, r + t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(w, 3, 3);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//&lt;br /&gt;
//union(){&lt;br /&gt;
//    disc(r, w, d);&lt;br /&gt;
//    translate([0, 0, w - t]) cylinder(h, r + t, r + t);&lt;br /&gt;
//}&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            disc(r, w, d, h);&lt;br /&gt;
    //        mounts(h, d, r);&lt;br /&gt;
            pins(rr, ll, w);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,0,w/2]) rotate([90,0,0])  cylinder(2*r, 1, 1); // string attachment&lt;br /&gt;
    }&lt;br /&gt;
    translate([0,-1.5*w,w/2]) rotate([0,90,0]) cylinder(2*r, 1, 1); // string attachment&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other servo accessories =&lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Pulley_v2.png&amp;diff=188</id>
		<title>File:Pulley v2.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Pulley_v2.png&amp;diff=188"/>
		<updated>2026-05-21T13:37:31Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pulley with string attachment points&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=187</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=187"/>
		<updated>2026-05-21T13:36:16Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley-rev.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Code for OpenSCAD: https://openscad.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pulley v2 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn = 32;&lt;br /&gt;
&lt;br /&gt;
r = 25; // disc radius - outer&lt;br /&gt;
w = 8; // disc thickness &lt;br /&gt;
d = 3;  // inner hole radius -- inner&lt;br /&gt;
t = 4;&lt;br /&gt;
h = 2; // boundary thickness&lt;br /&gt;
&lt;br /&gt;
rr = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
ll = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
tt = 2; // t=2mm, global thickness&lt;br /&gt;
inner = 6;&lt;br /&gt;
&lt;br /&gt;
module pins(rr, ll, tt){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([-inner,0,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([0,inner,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
    translate([0,-inner,0]) cylinder(2*w, rr, rr);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([3*inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-3*inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,3*inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-3*inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(r, w, d, h){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                cylinder(w, r, r);&lt;br /&gt;
                translate([0, 0, w-h]) cylinder(h, r + t, r + t);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0, 0, 0]) cylinder(h, r + t, r + t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(w, 3, 3);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
//&lt;br /&gt;
//union(){&lt;br /&gt;
//    disc(r, w, d);&lt;br /&gt;
//    translate([0, 0, w - t]) cylinder(h, r + t, r + t);&lt;br /&gt;
//}&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            disc(r, w, d, h);&lt;br /&gt;
    //        mounts(h, d, r);&lt;br /&gt;
            pins(rr, ll, w);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,0,w/2]) rotate([90,0,0])  cylinder(2*r, 1, 1); // string attachment&lt;br /&gt;
    }&lt;br /&gt;
    translate([0,-1.5*w,w/2]) rotate([0,90,0]) cylinder(2*r, 1, 1); // string attachment&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other servo accessories =&lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Main_Page&amp;diff=186</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Main_Page&amp;diff=186"/>
		<updated>2026-05-14T09:04:44Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* Useful Documents */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== IxD Studio Equipment ==&lt;br /&gt;
&lt;br /&gt;
The wiki mostly serves as technical support and inquiry for available equipment related to:&lt;br /&gt;
&lt;br /&gt;
* [[3D printing]]&lt;br /&gt;
* [[Electronics]]&lt;br /&gt;
* [[Laser cutting]]&lt;br /&gt;
* [[Printers]]&lt;br /&gt;
&amp;lt;!-- [[Wood workshop]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Useful Documents ==&lt;br /&gt;
&lt;br /&gt;
* [[3D printing models]]&lt;br /&gt;
* [[Studio internal]]&lt;br /&gt;
&lt;br /&gt;
== Useful Software ==&lt;br /&gt;
&lt;br /&gt;
* [[CAD]]&lt;br /&gt;
* [[Programming]]&lt;br /&gt;
* [[Simulators]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=185</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=185"/>
		<updated>2026-05-14T09:04:30Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley-rev.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
Code for OpenSCAD: https://openscad.org&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other servo accessories ==&lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=184</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=184"/>
		<updated>2026-05-14T09:02:51Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley-rev.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other servo accessories ==&lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=183</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=183"/>
		<updated>2026-05-13T11:31:30Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley-rev.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-pulley-rev.png&amp;diff=182</id>
		<title>File:Xl330-pulley-rev.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-pulley-rev.png&amp;diff=182"/>
		<updated>2026-05-13T11:31:19Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XL330 pulley design&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=181</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=181"/>
		<updated>2026-05-13T11:30:03Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        // string hanging point&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=180</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=180"/>
		<updated>2026-05-13T11:29:13Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // pulley thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        translate([outer+0.5, 0, 0]) cylinder(2*w, screw/2, screw/2); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=179</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=179"/>
		<updated>2026-05-13T11:26:57Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
inner = 6; // fixed number (inner radius non-overlapping with the servo&#039;s screw)&lt;br /&gt;
outer = 10; // adjust this number to increase the outer radius&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    // disc to &#039;cover&#039; the gear library holes in your design&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        translate([outer+0.5, 0, 2]) cylinder(10, 0.5, 0.5); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=178</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=178"/>
		<updated>2026-05-13T08:46:07Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
inner = 6; // fixed number&lt;br /&gt;
outer = 10; // adjust this number to the edge of the teeth so that it &#039;hides&#039; the holes&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    // disc to &#039;cover&#039; the gear library holes in your design&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        translate([outer+0.5, 0, 2]) cylinder(10, 0.5, 0.5); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=177</id>
		<title>Dynamixel XL330 pulley</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_pulley&amp;diff=177"/>
		<updated>2026-05-13T08:40:15Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: Created page with &amp;quot;thumb &amp;lt;pre&amp;gt; use &amp;lt;gears/gears.scad&amp;gt;; // or include --&amp;gt; include &amp;lt;gears/gears.scad&amp;gt;;  $fn=32; //spur_gear(modul=2, tooth_number=20, width=10, bore=10); w = 5.3; // cog thickness  teeth = 24; // adjust number of teeth based on design inner = 6; // fixed number outer = 10; // adjust this number to the edge of the teeth so that it &amp;#039;hides&amp;#039; the holes screw = 1;  module mounts(screw, inner, outer){     // module for screw mounts     union(){         unio...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Xl330-pulley.png|thumb]]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or include --&amp;gt; include &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
//spur_gear(modul=2, tooth_number=20, width=10, bore=10);&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
teeth = 24; // adjust number of teeth based on design&lt;br /&gt;
inner = 6; // fixed number&lt;br /&gt;
outer = 10; // adjust this number to the edge of the teeth so that it &#039;hides&#039; the holes&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    // disc to &#039;cover&#039; the gear library holes in your design&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
module pully(inner, outer, r, w){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + 2, w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
            rotate_extrude(convexity = 10) &lt;br /&gt;
                translate([outer + (inner/2), w/2, 0]) &lt;br /&gt;
                    circle(r);&lt;br /&gt;
        }&lt;br /&gt;
        translate([outer+0.5, 0, 2]) cylinder(10, 0.5, 0.5); &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        pully(inner, outer, w/2, w);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-pulley.png&amp;diff=176</id>
		<title>File:Xl330-pulley.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-pulley.png&amp;diff=176"/>
		<updated>2026-05-13T08:40:03Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XL330 pulley&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&amp;diff=175</id>
		<title>Servo accessories</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&amp;diff=175"/>
		<updated>2026-05-13T08:38:41Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Dynamixel XL330 horns]]&lt;br /&gt;
* [[Dynamixel XL330 mounts]]&lt;br /&gt;
* [[Dynamixel XL330 cogs]]&lt;br /&gt;
* [[Dynamixel XL330 pulley]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Simulators&amp;diff=174</id>
		<title>Simulators</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Simulators&amp;diff=174"/>
		<updated>2026-05-10T10:46:30Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Circuit Simulators ==&lt;br /&gt;
&lt;br /&gt;
* [[WOKWI]]&lt;br /&gt;
* https://www.falstad.com/circuit/&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Simulators&amp;diff=173</id>
		<title>Simulators</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Simulators&amp;diff=173"/>
		<updated>2026-05-10T10:46:05Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Circuit Simulators&lt;br /&gt;
&lt;br /&gt;
* [[WOKWI]]&lt;br /&gt;
* https://www.falstad.com/circuit/&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=172</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=172"/>
		<updated>2026-05-07T12:26:09Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
&lt;br /&gt;
- How to install Libraries in OpenSCAD: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries&lt;br /&gt;
&lt;br /&gt;
XL 330 manual: https://emanual.robotis.com/docs/en/dxl/x/xl330-m288/&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or include --&amp;gt; include &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // cog thickness -- good size for the large screws included in the XL330&lt;br /&gt;
teeth = 24; // adjust number of teeth based on design&lt;br /&gt;
inner = 6; // fixed number&lt;br /&gt;
outer = 10; // adjust this number to the edge of the teeth so that it &#039;hides&#039; the holes&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    // disc to &#039;cover&#039; the gear library holes in your design&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        spur_gear(modul=1, tooth_number=teeth, width=w, bore=inner);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other XL330 servo accessories == &lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=171</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=171"/>
		<updated>2026-05-07T11:41:04Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
&lt;br /&gt;
- How to install Libraries in OpenSCAD: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or include --&amp;gt; include &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
w = 5.3; // cog thickness -- good size for the large screws included in the XL330&lt;br /&gt;
teeth = 24; // adjust number of teeth based on design&lt;br /&gt;
inner = 6; // fixed number&lt;br /&gt;
outer = 10; // adjust this number to the edge of the teeth so that it &#039;hides&#039; the holes&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    // disc to &#039;cover&#039; the gear library holes in your design&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        spur_gear(modul=1, tooth_number=teeth, width=w, bore=inner);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other XL330 servo accessories == &lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=170</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=170"/>
		<updated>2026-05-07T11:40:26Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
&lt;br /&gt;
- How to install Libraries in OpenSCAD: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or include --&amp;gt; include &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
//spur_gear(modul=2, tooth_number=20, width=10, bore=10);&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
teeth = 24; // adjust number of teeth based on design&lt;br /&gt;
inner = 6; // fixed number&lt;br /&gt;
outer = 10; // adjust this number to the edge of the teeth so that it &#039;hides&#039; the holes&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
module mounts(screw, inner, outer){&lt;br /&gt;
    // module for screw mounts&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                translate([inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                translate([-inner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
            translate([0,inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
        translate([0,-inner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
module disc(inner, outer){&lt;br /&gt;
    // disc to &#039;cover&#039; the gear library holes in your design&lt;br /&gt;
    difference(){&lt;br /&gt;
        cylinder(w, outer, outer);&lt;br /&gt;
        cylinder(w, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    union(){&lt;br /&gt;
        spur_gear(modul=1, tooth_number=teeth, width=w, bore=inner);&lt;br /&gt;
        disc(inner, outer);&lt;br /&gt;
    }&lt;br /&gt;
    mounts(screw, inner, outer);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other XL330 servo accessories == &lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=169</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=169"/>
		<updated>2026-05-07T10:38:11Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
&lt;br /&gt;
- How to install Libraries in OpenSCAD: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or: include &amp;lt;gears/gears.scad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
//spur_gear(modul=2, tooth_number=20, width=10, bore=10);&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
teeth = 24;&lt;br /&gt;
innner = 6;&lt;br /&gt;
outer = 10;&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            difference(){&lt;br /&gt;
                union(){&lt;br /&gt;
                    difference(){&lt;br /&gt;
                        cylinder(w, outer, outer);&lt;br /&gt;
                        cylinder(w, 3, 3);&lt;br /&gt;
                    }&lt;br /&gt;
                    spur_gear(modul=1, tooth_number=teeth, width=w, bore=innner);&lt;br /&gt;
                }&lt;br /&gt;
                translate([innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                }&lt;br /&gt;
            translate([-innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
        translate([0,innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
    translate([0,-innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Other XL330 servo accessories == &lt;br /&gt;
&lt;br /&gt;
https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=168</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=168"/>
		<updated>2026-05-07T09:34:48Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
&lt;br /&gt;
- How to install Libraries in OpenSCAD: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or: include &amp;lt;gears/gears.scad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
//spur_gear(modul=2, tooth_number=20, width=10, bore=10);&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
teeth = 24;&lt;br /&gt;
innner = 6;&lt;br /&gt;
outer = 10;&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            difference(){&lt;br /&gt;
                union(){&lt;br /&gt;
                    difference(){&lt;br /&gt;
                        cylinder(w, outer, outer);&lt;br /&gt;
                        cylinder(w, 3, 3);&lt;br /&gt;
                    }&lt;br /&gt;
                    spur_gear(modul=1, tooth_number=teeth, width=w, bore=innner);&lt;br /&gt;
                }&lt;br /&gt;
                translate([innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                }&lt;br /&gt;
            translate([-innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
        translate([0,innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
    translate([0,-innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=167</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=167"/>
		<updated>2026-05-07T09:34:41Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
- How to install Libraries in OpenSCAD: https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or: include &amp;lt;gears/gears.scad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
//spur_gear(modul=2, tooth_number=20, width=10, bore=10);&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
teeth = 24;&lt;br /&gt;
innner = 6;&lt;br /&gt;
outer = 10;&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            difference(){&lt;br /&gt;
                union(){&lt;br /&gt;
                    difference(){&lt;br /&gt;
                        cylinder(w, outer, outer);&lt;br /&gt;
                        cylinder(w, 3, 3);&lt;br /&gt;
                    }&lt;br /&gt;
                    spur_gear(modul=1, tooth_number=teeth, width=w, bore=innner);&lt;br /&gt;
                }&lt;br /&gt;
                translate([innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                }&lt;br /&gt;
            translate([-innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
        translate([0,innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
    translate([0,-innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=166</id>
		<title>Dynamixel XL330 cogs</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_cogs&amp;diff=166"/>
		<updated>2026-05-07T09:22:57Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: Created page with &amp;quot;Download this OpenSCAD Library: https://github.com/chrisspen/gears  Example cog for XL330: &amp;lt;pre&amp;gt; use &amp;lt;gears/gears.scad&amp;gt;; // or: include &amp;lt;gears/gears.scad&amp;gt;  $fn=32; //spur_gear(modul=2, tooth_number=20, width=10, bore=10); w = 5.3; // cog thickness  teeth = 24; innner = 6; outer = 10; screw = 1;  difference(){     difference(){         difference(){             difference(){                 union(){                     difference(){                         cylinder(w, out...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download this OpenSCAD Library: https://github.com/chrisspen/gears&lt;br /&gt;
&lt;br /&gt;
Example cog for XL330:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use &amp;lt;gears/gears.scad&amp;gt;;&lt;br /&gt;
// or: include &amp;lt;gears/gears.scad&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$fn=32;&lt;br /&gt;
//spur_gear(modul=2, tooth_number=20, width=10, bore=10);&lt;br /&gt;
w = 5.3; // cog thickness &lt;br /&gt;
teeth = 24;&lt;br /&gt;
innner = 6;&lt;br /&gt;
outer = 10;&lt;br /&gt;
screw = 1;&lt;br /&gt;
&lt;br /&gt;
difference(){&lt;br /&gt;
    difference(){&lt;br /&gt;
        difference(){&lt;br /&gt;
            difference(){&lt;br /&gt;
                union(){&lt;br /&gt;
                    difference(){&lt;br /&gt;
                        cylinder(w, outer, outer);&lt;br /&gt;
                        cylinder(w, 3, 3);&lt;br /&gt;
                    }&lt;br /&gt;
                    spur_gear(modul=1, tooth_number=teeth, width=w, bore=innner);&lt;br /&gt;
                }&lt;br /&gt;
                translate([innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
                }&lt;br /&gt;
            translate([-innner,0,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
            }&lt;br /&gt;
        translate([0,innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
        }&lt;br /&gt;
    translate([0,-innner,-2]) cylinder(outer, screw, screw);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:XL330-cog.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:XL330-cog.png&amp;diff=165</id>
		<title>File:XL330-cog.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:XL330-cog.png&amp;diff=165"/>
		<updated>2026-05-07T09:22:42Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;servo cog&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&amp;diff=164</id>
		<title>Servo accessories</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Servo_accessories&amp;diff=164"/>
		<updated>2026-05-07T09:20:28Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Dynamixel XL330 horns]]&lt;br /&gt;
* [[Dynamixel XL330 mounts]]&lt;br /&gt;
* [[Dynamixel XL330 cogs]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=3D_printing&amp;diff=163</id>
		<title>3D printing</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=3D_printing&amp;diff=163"/>
		<updated>2026-05-06T12:49:56Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 3D printers ==&lt;br /&gt;
&lt;br /&gt;
We have three Prusa printers in the Studio, one MK4 and two [https://www.prusa3d.com/product/original-prusa-mk4s/ MK4S].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Install Prusa Software - PrusaSlicer ====&lt;br /&gt;
&lt;br /&gt;
Download and install the PrusaSlicer software -- the software translates your 3D model into machine readable instructions for the 3D printer.&lt;br /&gt;
* https://github.com/prusa3d/PrusaSlicer/releases&lt;br /&gt;
* https://www.prusa3d.com/page/prusaslicer_424/ &lt;br /&gt;
&lt;br /&gt;
A configuration wizard might open up when install is complete, if this happens click through all steps and make sure the correct Prusa is selected in step 4 (see image).&lt;br /&gt;
[[File:ConfigurationWizard.png|thumb|Correct setting for PrusaSlicer for MK4 and MK4S]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to print&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Export your 3D model into .stl or .f3d file format&lt;br /&gt;
* Open 3D model with PrusaSlicer&lt;br /&gt;
* Check that all settings are correct, make sure to add support when needed&lt;br /&gt;
* Press button &amp;quot;Slice now&amp;quot; in the bottom right corner&lt;br /&gt;
* If everything looks ok, export the file by pressing &amp;quot;Export G-code&amp;quot; in the bottom right corner&lt;br /&gt;
* Now you have a .gcode file, put the file into a USB stick and plug it into the 3D printer&lt;br /&gt;
** After plugging the USB stick you should see your model on the Prusa screen&lt;br /&gt;
** If you don&#039;t see your model on the Prusa screen turn the knob on the screen panel to find your file&lt;br /&gt;
* Press the knob to start printing your model&lt;br /&gt;
* Stay and check that the print start correctly. If the print fails, something with the settings on the slice is wrong and you need to go back and change the settings&lt;br /&gt;
&lt;br /&gt;
[[File:MK4S-1.png|thumb|Prusa MK4S]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[File:MK4S-head-1.png|thumb|Prusa MK4S head]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== How the settings look like in the PrusaSlicer ====&lt;br /&gt;
&lt;br /&gt;
Settings for the &#039;&#039;&#039;Prusa MK4&#039;&#039;&#039; on the Prusaslicer (with enclosure):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Print settings&#039;&#039;&#039;: 0.20mm SPEED&lt;br /&gt;
* &#039;&#039;&#039;Filament&#039;&#039;&#039;: Generic PLA&lt;br /&gt;
* &#039;&#039;&#039;Printer&#039;&#039;&#039;: Original Prusa MK4 Input Shaper 0.4 nozzle&lt;br /&gt;
* &#039;&#039;&#039;Supports&#039;&#039;&#039;: None (change to &amp;quot;Support on the build plate only&amp;quot; in case you get error messages after the slicing is done -- this setting depends on your geometry)&lt;br /&gt;
* &#039;&#039;&#039;Infill&#039;&#039;&#039;: 15% (recommended)&lt;br /&gt;
* &#039;&#039;&#039;Brim&#039;&#039;&#039;: [unticked] (Select to print a so-called brim in case is necessary for your geometry, typically when you have little touching surface with the build plate)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:prusa-slicer-settings.png|thumb|Prusaslicer settings for MK4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Settings for the &#039;&#039;&#039;Prusa MK4S&#039;&#039;&#039; on the Prusaslicer (no enclosure):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Print settings&#039;&#039;&#039;: 0.20mm SPEED&lt;br /&gt;
* &#039;&#039;&#039;Filament&#039;&#039;&#039;: Generic PLA&lt;br /&gt;
* &#039;&#039;&#039;Printer&#039;&#039;&#039;: Original Prusa MK4S 0.4 nozzle&lt;br /&gt;
* &#039;&#039;&#039;Supports&#039;&#039;&#039;: None (change to &amp;quot;Support on the build plate only&amp;quot; in case you get error messages after the slicing is done -- this setting depends on your geometry)&lt;br /&gt;
* &#039;&#039;&#039;Infill&#039;&#039;&#039;: 15% (recommended)&lt;br /&gt;
* &#039;&#039;&#039;Brim&#039;&#039;&#039;: [unticked] (Select to print a so-called brim in case is necessary for your geometry, typically when you have little touching surface with the build plate)&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=162</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=162"/>
		<updated>2026-05-05T13:13:28Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.7; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 17; // d=16mm, front/back hand distance&lt;br /&gt;
h = 29; // h=30mm, upper hand distance&lt;br /&gt;
fac = 1.25;&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-(fac*t)]) cylinder(fac*t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Xl330-rotating-horn-modular.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=161</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=161"/>
		<updated>2026-05-05T12:58:49Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.7; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 17; // d=16mm, front/back hand distance&lt;br /&gt;
h = 29; // h=30mm, upper hand distance&lt;br /&gt;
fac = 1.5;&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-(fac*t)]) cylinder(fac*t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Xl330-rotating-horn-modular.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-rotating-horn-modular.png&amp;diff=160</id>
		<title>File:Xl330-rotating-horn-modular.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-rotating-horn-modular.png&amp;diff=160"/>
		<updated>2026-05-05T12:58:35Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;XL330 attachable horn, programmed in modules.&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=159</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=159"/>
		<updated>2026-05-05T12:57:09Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.7; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 17; // d=16mm, front/back hand distance&lt;br /&gt;
h = 29; // h=30mm, upper hand distance&lt;br /&gt;
fac = 1.5;&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-(fac*t)]) cylinder(fac*t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=158</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=158"/>
		<updated>2026-05-05T12:56:42Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* XL330 horns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.7; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 17; // d=16mm, front/back hand distance&lt;br /&gt;
h = 29; // h=30mm, upper hand distance&lt;br /&gt;
fac = 1.5;&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-(fac*t)]) cylinder(fac*t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=157</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=157"/>
		<updated>2026-05-02T04:23:23Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XL330 horns =&lt;br /&gt;
&lt;br /&gt;
OpenSCAD code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 16; // d=16mm, front/back hand distance&lt;br /&gt;
h = 30; // h=30mm, upper hand distance&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-t]) cylinder(t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Xl330-horn-modular.png|thumb]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-horn-modular.png&amp;diff=156</id>
		<title>File:Xl330-horn-modular.png</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=File:Xl330-horn-modular.png&amp;diff=156"/>
		<updated>2026-05-02T04:23:03Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dynamixel XL330 servo horn.&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=155</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=155"/>
		<updated>2026-05-02T04:21:09Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XL330 horns =&lt;br /&gt;
&lt;br /&gt;
OpenSCAD code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 16; // d=16mm, front/back hand distance&lt;br /&gt;
h = 30; // h=30mm, upper hand distance&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-t]) cylinder(t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:xl330-rotating-horn-modular.png.png|thumb|Dynamixel XL330 horn]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=154</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=154"/>
		<updated>2026-05-02T04:20:51Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: /* XL330 horns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XL330 horns =&lt;br /&gt;
&lt;br /&gt;
OpenSCAD code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 16; // d=16mm, front/back hand distance&lt;br /&gt;
h = 30; // h=30mm, upper hand distance&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-t]) cylinder(t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:xl330-rotating-horn-modular.png|thumb|Dynamixel XL330 horn]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=153</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=153"/>
		<updated>2026-05-02T04:20:33Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XL330 horns =&lt;br /&gt;
&lt;br /&gt;
OpenSCAD code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 16; // d=16mm, front/back hand distance&lt;br /&gt;
h = 30; // h=30mm, upper hand distance&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-t]) cylinder(t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:xl330-rotating-hornet-modular.png|thumb|Dynamixel XL330 horn]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
	<entry>
		<id>https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=152</id>
		<title>Dynamixel XL330 horns</title>
		<link rel="alternate" type="text/html" href="https://studio.cse.chalmers.se/mediawiki/index.php?title=Dynamixel_XL330_horns&amp;diff=152"/>
		<updated>2026-05-02T04:20:05Z</updated>

		<summary type="html">&lt;p&gt;Studio Director: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= XL330 horns =&lt;br /&gt;
&lt;br /&gt;
OpenSCAD code&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$fn=32;&lt;br /&gt;
&lt;br /&gt;
inner = 6; // 6mm inner empty space for front hornet screw&lt;br /&gt;
outer = 8.25;  // 8.25mm outer radius of XL330 servo hornet&lt;br /&gt;
&lt;br /&gt;
r = 0.8; // d=1.6mm pins on the XL330 servo hornet (inlet)&lt;br /&gt;
l = 2.5; // l=2.5mm, how deep the inlet travel in the hornet -- 2.5mm&lt;br /&gt;
t = 2; // t=2mm, global thickness&lt;br /&gt;
d = 16; // d=16mm, front/back hand distance&lt;br /&gt;
h = 30; // h=30mm, upper hand distance&lt;br /&gt;
&lt;br /&gt;
module pins(r, l, t){&lt;br /&gt;
    /* r: radius, l: length, t: thickness */&lt;br /&gt;
    translate([inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([-inner,0,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,inner,t]) cylinder(l, r, r);&lt;br /&gt;
    translate([0,-inner,t]) cylinder(l, r, r);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module disc(thichness=t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        union(){&lt;br /&gt;
            cylinder(t, outer, outer);&lt;br /&gt;
            cylinder(t, t, t);&lt;br /&gt;
        }&lt;br /&gt;
        cylinder(t, inner/2, inner/2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module frontArm(d, t){&lt;br /&gt;
    difference(){&lt;br /&gt;
        translate([-outer/2, 0, 0]) cube([outer, d, t]);&lt;br /&gt;
        cube([2*inner,2*inner,2*t],true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module upperArm(d, h, t){&lt;br /&gt;
    rotate([90,0,0]) translate([-outer/2, 0, -d]) cube([outer, h, t]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
module backArm(d, h, t){&lt;br /&gt;
    union(){&lt;br /&gt;
        translate([-outer/2, -(2*t), h]) cube([outer, d+(2*t), t]);&lt;br /&gt;
        translate([0, 0, h-t]) cylinder(t, inner/2, inner/2);&lt;br /&gt;
    }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
union(){&lt;br /&gt;
    union(){&lt;br /&gt;
        union(){&lt;br /&gt;
            union(){&lt;br /&gt;
                pins(r, l, t);&lt;br /&gt;
                disc(t);&lt;br /&gt;
                }&lt;br /&gt;
            frontArm(d, t);&lt;br /&gt;
            }&lt;br /&gt;
        upperArm(d, h, t);&lt;br /&gt;
    }&lt;br /&gt;
    backArm(d, h, t);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:xl330-rotating-hornet-modular.png.png|thumb|Dynamixel XL330 horn]]&lt;/div&gt;</summary>
		<author><name>Studio Director</name></author>
	</entry>
</feed>