├── .gitignore ├── CNAME ├── README.md ├── _config.yml ├── _config_offline.yml ├── _includes ├── foot.html ├── head.html └── nav.html ├── _layouts ├── default.html └── derivative.html ├── css └── style.css ├── derivatives ├── fromScratchEd.md └── howto │ ├── images │ └── rubber.jpg │ └── index.md ├── files ├── laser-cut │ ├── cubetto-4mm.dxf │ ├── fence-4mm.dxf │ ├── house-3mm.dxf │ ├── instruction-blocks-1mm.dxf │ ├── instruction-blocks-4mm.dxf │ ├── interface-board-1mm.dxf │ ├── interface-board-4mm.dxf │ └── tree-4mm.dxf ├── map.png ├── primo-prototype-laser.zip └── wheel-sticker │ └── slices.pdf ├── images ├── assets │ ├── kitemark.png │ ├── logo-derivatives.png │ ├── logo.png │ └── tick.png ├── illustrations │ ├── arduino-mega.jpg │ ├── arrow.png │ ├── ball-caster.jpg │ ├── board-1.jpg │ ├── board-2.jpg │ ├── board-3.jpg │ ├── board-4.jpg │ ├── board-5.jpg │ ├── board-6.jpg │ ├── board-7.jpg │ ├── board-8.jpg │ ├── board-9.jpg │ ├── board-button-mechanics.jpg │ ├── board-button.jpg │ ├── board-esploso.jpg │ ├── button-mechanics.jpg │ ├── button.jpg │ ├── cny70-header.jpg │ ├── cny70-physycs.jpg │ ├── cny70-wiring.jpg │ ├── colors.jpg │ ├── colour-blue.jpg │ ├── colour-green.jpg │ ├── colour-red.jpg │ ├── colour-yellow.jpg │ ├── cubetto-esploso.jpg │ ├── cubetto-guide.jpg │ ├── instruction-block-guide.jpg │ ├── instruction-esploso.jpg │ ├── left-to-right.jpg │ ├── motor-driver.jpg │ ├── motor-wiring.jpg │ ├── wireless-shield-connections-1.jpg │ ├── wireless-shield-connections.jpg │ └── wireless-shield.jpg ├── photo │ ├── cubetto.jpg │ ├── diy-docs-1.jpg │ ├── diy-docs-10.jpg │ ├── diy-docs-11.jpg │ ├── diy-docs-12.jpg │ ├── diy-docs-13.jpg │ ├── diy-docs-14.jpg │ ├── diy-docs-2.jpg │ ├── diy-docs-3.jpg │ ├── diy-docs-4.jpg │ ├── diy-docs-5.jpg │ ├── diy-docs-6.jpg │ ├── diy-docs-7.jpg │ ├── diy-docs-8.jpg │ ├── diy-docs-9.jpg │ ├── instruction-blocks.jpg │ ├── logo-turtle.jpg │ ├── maker-guide.jpg │ └── primo.jpg └── screenshots │ ├── edit-1.jpg │ ├── edit-2.jpg │ ├── pull-1.jpg │ └── pull-2.jpg ├── index.md └── languages ├── brazilianportuguese.md ├── croatian.md ├── dutch.md ├── english.md ├── french.md ├── italian.md ├── japanese.md ├── russian.md └── spanish.md /.gitignore: -------------------------------------------------------------------------------- 1 | _site -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | docs.primo.io -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | prototype-documentation 2 | ======================= 3 | 4 | DIY Instructions on how to make your own Primo prototype. 5 | 6 | Get Started Here: [http://docs.primo.io](http://docs.primo.io) -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | name: Primo DIY Documentation 2 | pygments: true 3 | markdown: kramdown 4 | baseurl: http://docs.primo.io/ -------------------------------------------------------------------------------- /_config_offline.yml: -------------------------------------------------------------------------------- 1 | name: Primo DIY Documentation 2 | pygments: true 3 | markdown: kramdown 4 | -------------------------------------------------------------------------------- /_includes/foot.html: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{ page.title }} 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /_includes/nav.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | {% include head.html %} 2 | {% include nav.html %} 3 | 4 | 5 | Edit this Document 6 | 7 | 8 |
9 | 12 |

{{ page.title }}

13 |
14 |

Read this first

15 | 16 | The documentation and instructions included in this document allows you to produce a Primo prototype, which is different from the product that we make and sell. Our product will be produced to a high standard of manufacturing, with custom design and electronic boards. These istructions are meant to be used to build a maker-friendly version of the product. This said, we will keep to maintain the open source nature of our product even with the commercial one, by releasing the necessary documentation for updates and new versions of the Primo Play Set, including files for the final product, as and when we have them tried and tested. 17 |

18 | The license under which we released the Primo Play Set gives you the freedom of building your own Prototype. However, you are not entitled to sell it as Primo, under any circumstances. Also, if you make a derivative of our product, you have to quote the original project (as we do with all our sources), and use our same license: CC by-nc-sa 4.0 International.
19 | This is not just to protect intellectual property, but also to keep a track of the flow of ideas. As we are spending a lot of time and resources to keep this documentation free and accessible, we also encourage you to "give back" and post your derivatives, results, suggestions, insults and praises. We are more than happy to hear and answer your feedbacks and blog cool stuff.

20 | Here on the left you can find the translation of this document in different languages. If you want to translate this in your language, scroll down a bit, there's a section called "Translate this document" with instructions.

21 | The boring stuff is over, enjoy making your diy Primo :) 22 |

23 | See it on GitHub 24 |
25 | {{ content }} 26 |
27 | {% include foot.html %} -------------------------------------------------------------------------------- /_layouts/derivative.html: -------------------------------------------------------------------------------- 1 | {% include head.html %} 2 | {% include nav.html %} 3 | 4 | Edit this Document 5 | 6 |
7 | 10 | 11 |

{{ page.title }}

12 | 13 | {{ content }} 14 |
15 | {% include foot.html %} -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'ginger'; 3 | src: url(http://primo.io/fonts/f37-regular.eot); 4 | src: url(http://primo.io/fonts/f37-regular.eot?#iefix) format('embedded-opentype'), 5 | url(http://primo.io/fonts/f37-regular.woff) format('woff'), 6 | url(http://primo.io/fonts/f37-regular.ttf) format('truetype'), 7 | url(http://primo.io/fonts/f37-regular.svg#f37_gingerbold) format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | @font-face { 13 | font-family: 'nationale'; 14 | src: url(http://primo.io/fonts/nationale.eot); 15 | src: url(http://primo.io/fonts/nationale.eot?#iefix) format('embedded-opentype'), 16 | url(http://primo.io/fonts/nationale.woff) format('woff'), 17 | url(http://primo.io/fonts/nationale.ttf) format('truetype'), 18 | url(http://primo.io/fonts/nationale.svg#nationale§) format('svg'); 19 | font-weight: normal; 20 | font-style: normal; 21 | } 22 | 23 | body { 24 | font-family: 'Inconsolata', sans-serif; 25 | background: #faf5eb; 26 | } 27 | 28 | h1, h2, h3 { 29 | font-weight: normal; 30 | font-family: 'ginger'; 31 | color: #692d55; 32 | } 33 | 34 | h1 { 35 | padding-bottom: 0.5em; 36 | } 37 | 38 | h2 { 39 | margin-top: 2em; 40 | } 41 | 42 | h3 { 43 | margin-bottom: -0.5em; 44 | } 45 | 46 | a { 47 | text-decoration: none; 48 | border-bottom: 2px solid #05DC94; 49 | color: inherit; 50 | } 51 | 52 | input[type=checkbox]{ 53 | display: none; 54 | } 55 | 56 | input[type=checkbox] + label{ 57 | display: block; 58 | padding-left: 40px; 59 | background-position: 0 0; 60 | background-repeat: no-repeat; 61 | line-height: 32px; 62 | cursor: pointer; 63 | margin-top: 5px; 64 | } 65 | 66 | input[type=checkbox]:checked + label{ 67 | background-position: left -32px; 68 | } 69 | 70 | label{ 71 | background-image:url('../images/assets/tick.png'); 72 | } 73 | 74 | .navs { 75 | position: absolute; 76 | top: 20px; 77 | left: 20px; 78 | } 79 | 80 | nav { 81 | width: 40%; 82 | margin-right: 1em; 83 | display: inline-block; 84 | } 85 | 86 | select { 87 | color: #FFF; 88 | outline: none; 89 | background: url('../images/illustrations/arrow.png') #FFA900 no-repeat 90%/8% ; 90 | border: none; 91 | -webkit-appearance: none; 92 | -moz-appearance: none; 93 | padding: 1em 4em 1em 1em; 94 | border-radius: 0; 95 | font-family: inconsolata; 96 | font-size: 1em; 97 | width: 100%; 98 | } 99 | 100 | option { 101 | margin: 0.5em 0; 102 | } 103 | 104 | option:hover { 105 | background-color: #FFF; 106 | color:#FFA900; 107 | } 108 | 109 | #logo { 110 | display: block; 111 | height: 65px; 112 | margin-bottom: 2.5em; 113 | border-bottom: none; 114 | } 115 | 116 | #logo img{ 117 | max-height:100%; 118 | max-width:100%; 119 | } 120 | 121 | #notes { 122 | background: #DDD; 123 | padding: 2em; 124 | line-height: 1.4em; 125 | } 126 | 127 | #edit { 128 | background: #F43C3C; 129 | font-family: 'ginger' !important; 130 | color: white; 131 | position: absolute; 132 | top: 20px; 133 | right: 20px; 134 | padding: 13px; 135 | border-bottom: none !important; 136 | } 137 | 138 | #container { 139 | width: 80%; 140 | max-width: 800px; 141 | color: #692d55; 142 | } 143 | 144 | #content img { 145 | max-width: 100%; 146 | margin-bottom: 1em; 147 | } 148 | 149 | #container p { 150 | line-height: 1.4em; 151 | } 152 | 153 | #content p { 154 | margin-bottom: 2em; 155 | line-height: 1.4em; 156 | } 157 | 158 | .videoWrapper { 159 | position: relative; 160 | padding-bottom: 56.25%; /* 16:9 */ 161 | padding-top: 25px; 162 | height: 0; 163 | margin-bottom: 2em; 164 | } 165 | .videoWrapper iframe { 166 | position: absolute; 167 | top: 0; 168 | left: 0; 169 | width: 100%; 170 | height: 100%; 171 | } 172 | 173 | #container img.float { 174 | float: left; 175 | margin: 3em 3em 3em 0; 176 | max-width: 40%; 177 | } 178 | 179 | .cf:after, 180 | .cf:before { 181 | content: ''; 182 | display: table; 183 | } 184 | .cf:after { 185 | clear: both; 186 | } 187 | .cf { 188 | zoom: 1; 189 | } 190 | 191 | /* tablets and desktop */ 192 | @media only screen and (min-width: 768px) { 193 | #container { 194 | margin: 160px auto; 195 | } 196 | 197 | .navs { 198 | width: 50%; 199 | } 200 | 201 | nav { 202 | display: inline-block; 203 | } 204 | } 205 | 206 | /* phones */ 207 | @media only screen and (max-width: 767px) { 208 | #container { 209 | margin: 140px auto; 210 | } 211 | 212 | .navs { 213 | width: 50%; 214 | } 215 | 216 | nav { 217 | display: inline-block; 218 | } 219 | } 220 | 221 | /* portrait phones */ 222 | @media only screen and (max-width: 767px) and (orientation: portrait) { 223 | #container { 224 | margin: 150px auto; 225 | } 226 | 227 | .navs { 228 | width: 100%; 229 | } 230 | 231 | nav { 232 | display: block; 233 | } 234 | } -------------------------------------------------------------------------------- /derivatives/fromScratchEd.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: derivative 3 | category: derivative 4 | title: fromScratchEd's Primo play set 5 | folder: fromScratchEd 6 | --- 7 | 8 |
9 | This document lists all necessary information needed to build your own prototype like fromScratchEd did.
10 | Please use this document side-by-side the original documentation of Primo for the building instructions.
11 |
12 | Please contact me when you need more information or have questions.
13 |
14 | Sjoerd Dirk Meijer, the Netherlands
15 | Blog: http://fromScratchEd.nl
16 | Twitter: @fromScratchEd (tweets in Dutch and English)
17 |
18 | License: CC BY-NC-SA 3.0 19 |
20 |
21 | 22 | ###Bill of materials 23 | ([Tayda publishes discount codes on their Facebook page regularly!][5]) 24 | 25 | ####Cubetto 26 | 27 | * 1 x Shrimp ([http://Shrimping.it)][6]: replacement of Arduino UNO (or Leonardo) 28 | * 1 x Stripboard ([Tayda][7]): replacement of Arduino Proto Wireless Shield 29 | * 1 x Active(!) XBBO - break out board for XBee shaped modules ([Ciseco][10]): replacement of Arduino Proto Wireless Shield 30 | * 1 x XRF wireless RF radio UART RS232 serial data module XBee shape ([Ciseco][9]): replacement of XBee 31 | * 1 x L293D ([Tayda][8]): replacement of SN754410 Motor Driver 32 | * 2 x SolarBotics Wheels ([Technobots][11]) 33 | * 2 x SolarBotics Gear Motors GM3 ([Technobots][12]) 34 | * 2 x Ball Casters 3/8 inch ([Technobots][13]): replacement of Ball Casters 1/2 inch 35 | * 2 x CNY70 ([AliExpress][14]) 36 | * 2 x 10KΩ Resistors 37 | * 2 x 220Ω Resistors 38 | * 1 x Battery Holder ([Tayda][15]) 39 | * 4 x Rechargeable Batteries (local store) 40 | * 1 x Voltage regulator kit ([Ciseco][16]) (not shown in schematics below) 41 | * 1 x Switch (local store) (to cut the power) 42 | 43 | ####Interface Board 44 | 45 | * 2 x Shrimp ([http://Shrimping.it)][17]: replacement of Arduino Mega 2560 46 | * 2 x Stripboard ([Tayda][18]): replacement of Arduino Proto Wireless Shield 47 | * 1 x Active(!) XBBO - break out board for XBee shaped modules ([Ciseco][20]): replacement of Arduino Proto Wireless Shield 48 | * 1 x XRF wireless RF radio UART RS232 serial data module XBee shape ([Ciseco][19]): replacement of XBee 49 | * 16 x 5mm Red LED ([Tayda][21]) 50 | * 16 x 220Ω Resistors ([Tayda][22]) 51 | * 16 x 10KΩ Resistors ([Tayda][23]) 52 | * 1 x Push Button ([Tayda][24]) 53 | * 16 x Magnets ø 4 h 4 ([Magnetenspecialist][25]): replacement of Magnets ø 4 h 3 54 | * 1 x Battery Holder ([Tayda][15]) 55 | * 4 x Rechargeable Batteries (local store) 56 | * 1 x Voltage regulator kit ([Ciseco][26]) (not shown in schematics below) 57 | * 2 x CD4052 ([Tayda][52]) (to add extra analog inputs) 58 | * 1 x Switch (local store) (to cut the power) 59 | 60 | ####Instruction Blocks 61 | 62 | * 4 x 4.7KΩ Resistor ([Tayda][27]) 63 | * 4 x 100KΩ Resistor ([Tayda][28]) 64 | * 4 x 220Ω Resistor ([Tayda][29]) 65 | * 4 x 10KΩ Resistor ([Tayda][30]) 66 | * 16 x Magnets ø 4 h 4 ([Magnetenspecialist][31]): replacement of Magnets ø 4 h 3 67 | 68 | ####Wood 69 | 70 | * 6 x 60cm x 30cm x 4mm plywood (local store) 71 | * 1 x 50cm x 30cm x 1mm plywood (a.k.a. flexible plywood, bendy plywood, flexiply of airplane plywood) ([Yvonne's Hobby-corner][32]) 72 | 73 | ###The adventures (links to my blog) 74 | * [Day 1][33]: Getting the source files 75 | * [Day 2][34]: Ordering materials 76 | * [Day 3][35]: Editing lasercutter files 77 | * [Day 4][36]: Buying the 4mm wood 78 | * [Day 5][37]: Buying the 1mm wood 79 | * [Day 6][38]: Sawing 80 | * [Day 7][39]: Reordering materials 81 | * [Day 8][40]: Lasercutting (with tips!) @[FabKlas][41] 82 | * [Day 9][42]: Wheels arrived 83 | * [Day 10][43]: CNY70's arrived 84 | * [Day 11][44]: GM3 alternative (don't use them!) 85 | * [Day 12][45]: Making the interface board and blocks 86 | * [Photos][46]: Photos of the building process 87 | * [Schematics and software][47] 88 | * [Finished][48]: Why I made Primo, what I'm going to do with Primo and who I am (and why I think programming with young children is important) 89 | 90 | ###Source files 91 | [Arduino files][49] 92 | 93 | [Lasercutter files][50] 94 | 95 | ###Schematics 96 | For the Interface Board I used two Shrimps connected with I2C (connect A4 at A4, A5 at A5, 5V at 5V and GND at GND). 97 | 98 | The primary Shrimp is connected to the block holes of the interface board, the secondary Shrimp is connected to the LED's. 99 | 100 | ![enter image description here][51] 101 | 102 | 103 | [1]: http://fromscratched.nl/index.php/category/primo/?lang=en 104 | [2]: http://fromscratched.nl/index.php/neem-contact-op/?lang=en 105 | [3]: http://fromScratchEd.nl/?lang=en 106 | [4]: https://twitter.com/fromScratchEd 107 | [5]: https://www.facebook.com/TaydaElectronics 108 | [6]: http://shrimping.it 109 | [7]: http://www.taydaelectronics.com/small-stripboard-94x53mm-copper.html 110 | [8]: http://www.taydaelectronics.com/catalogsearch/result/?q=l293d 111 | [9]: http://shop.ciseco.co.uk/xrf-wireless-rf-radio-uart-rs232-serial-data-module-xbee-shape-arduino-pic-etc/ 112 | [10]: http://shop.ciseco.co.uk/xbbo-break-out-board-for-xbee-shaped-modules/ 113 | [11]: http://www.technobotsonline.com/solarbotics-gmpw-plastic-red-wheel-33812.html 114 | [12]: http://www.technobotsonline.com/solarbotics-gm3-90-degree.html 115 | [13]: http://www.technobotsonline.com/pololu-ball-caster-3-8-inch-plastic-ball.html 116 | [14]: http://www.aliexpress.com/item/Free-Shipping-10pcs-CNY70-DIP-4/1644744700.html 117 | [15]: http://www.taydaelectronics.com/aa-battery-holder-4.html 118 | [16]: http://shop.ciseco.co.uk/voltage-regulator-kit-for-xino-basic-for-atmel/ 119 | [17]: http://shrimping.it 120 | [18]: http://www.taydaelectronics.com/small-stripboard-94x53mm-copper.html 121 | [19]: http://shop.ciseco.co.uk/xrf-wireless-rf-radio-uart-rs232-serial-data-module-xbee-shape-arduino-pic-etc/ 122 | [20]: http://shop.ciseco.co.uk/xbbo-break-out-board-for-xbee-shaped-modules/ 123 | [21]: http://www.taydaelectronics.com/ 124 | [22]: http://www.taydaelectronics.com/ 125 | [23]: http://www.taydaelectronics.com/ 126 | [24]: http://www.taydaelectronics.com/ 127 | [25]: http://www.magnetenspecialist.nl/?catalogproduct/1351262/SCHIJFMAGNEET%204x4mm.aspx 128 | [26]: http://shop.ciseco.co.uk/voltage-regulator-kit-for-xino-basic-for-atmel/ 129 | [27]: http://www.taydaelectronics.com/ 130 | [28]: http://www.taydaelectronics.com/ 131 | [29]: http://www.taydaelectronics.com/ 132 | [30]: http://www.taydaelectronics.com/ 133 | [31]: http://www.magnetenspecialist.nl/?catalogproduct/1351262/SCHIJFMAGNEET%204x4mm.aspx 134 | [32]: http://www.hobby-corner.nl/vliegtuigtriplex-triplex-berken-hout/vliegtuigtriplex-triplex-berken-hout-100x25cm 135 | [33]: http://fromscratched.nl/index.php/28-februari-2014/?lang=en 136 | [34]: http://fromscratched.nl/index.php/primo-1-maart-2014/?lang=en 137 | [35]: http://fromscratched.nl/index.php/primo-dag-3-2-maart-2014/?lang=en 138 | [36]: http://fromscratched.nl/index.php/primo-dag-4-3-maart-2014/?lang=en 139 | [37]: http://fromscratched.nl/index.php/primo-dag-5-4-maart-2014/?lang=en 140 | [38]: http://fromscratched.nl/index.php/primo-dag-6-5-maart-2014/?lang=en 141 | [39]: http://fromscratched.nl/index.php/primo-dag-7-6-maart-2014/?lang=en 142 | [40]: http://fromscratched.nl/index.php/primo-dag-8-7-maart-2014/?lang=en 143 | [41]: http://fabklas.nl 144 | [42]: http://fromscratched.nl/index.php/primo-dag-9-11-maart-2014/?lang=en 145 | [43]: http://fromscratched.nl/index.php/primo-dag-10-12-maart-2014/?lang=en 146 | [44]: http://fromscratched.nl/index.php/primo-dag-11-13-maart-2014/?lang=en 147 | [45]: http://fromscratched.nl/index.php/primo-dag-12-18-maart-2014/?lang=en 148 | [46]: http://fromscratched.nl/index.php/primo-foto-maartapril-2014/?lang=en 149 | [47]: http://fromscratched.nl/index.php/primo-schemas-en-software/?lang=en 150 | [48]: http://fromscratched.nl/index.php/primo-klaar/?lang=en 151 | [49]: https://github.com/sdmeijer/arduino-sketches/blob/master/fromScratchEd/fromScratchEd.zip?raw=true 152 | [50]: https://github.com/sdmeijer/arduino-sketches/blob/master/fromScratchEd/fromScratchEd_laser.zip?raw=true 153 | [51]: http://fromscratched.nl/wp-content/uploads/2014/04/Scan-140415-0001_small.jpg 154 | [52]: http://www.taydaelectronics.com/cd4052-4052-cmos-multiplex-demultiplexer-ic.html 155 | -------------------------------------------------------------------------------- /derivatives/howto/images/rubber.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/derivatives/howto/images/rubber.jpg -------------------------------------------------------------------------------- /derivatives/howto/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: derivative 3 | title: Publish your derivative 4 | category: derivative 5 | folder: howto 6 | --- 7 |
8 | 9 | 16 | If you worked on your Primo derivative, you can publish it here very easily.
17 | We created a checklist to help you build a meaningful document that other people can use. 18 | 19 | ###Tick all of them to see the next steps: 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 |
41 |
42 | 43 | ##How to publish your documentation 44 | 45 | 1. **super easy, no automation:**
46 | Write a document with your materials and mail it to us at [play@primo.io](mailto:play@primo.io). Mind that if you do it this way, we will just publish the download link to your document. To avoid this, please make your document in Markdown or HTML, like a single page website 47 | 48 | 2. **medium, light automation**
49 | Create a single-page website (markdown is preferred, but HTML is fine too) with your documentation, organized in sub-folders for images and files. 50 | Then zip the folder and send it at [play@primo.io](mailto:play@primo.io) 51 | 52 | 3. **advanced, full automation**
53 | Start by making a single-page website in Markdown with all your documentation, organized in sub-folders for images and files.
54 | At the top of your main .md file, include a [YAML header](http://jekyllrb.com/docs/frontmatter/), with the following properties:
55 |
56 | ---
57 | layout: derivative
58 | category: derivative
59 | title: My Derivative Title
60 | folder: folder-name
61 | ---
62 |
63 | /* your content in markdown or HTML here */
64 |
65 | Then [fork the repository on GitHub](https://github.com/primo-io/prototype-documentation), all the derivatives are located in the 'derivatives' folder, each one in its own subfolder. 66 | Paste here your website folder (your folder's name must be the same as the "folder" properties you indicated in the YAML header), then create a pull request on GitHub, to merge your files. 67 | 68 |
69 | 70 | 72 | 73 | -------------------------------------------------------------------------------- /files/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/files/map.png -------------------------------------------------------------------------------- /files/primo-prototype-laser.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/files/primo-prototype-laser.zip -------------------------------------------------------------------------------- /files/wheel-sticker/slices.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/files/wheel-sticker/slices.pdf -------------------------------------------------------------------------------- /images/assets/kitemark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/assets/kitemark.png -------------------------------------------------------------------------------- /images/assets/logo-derivatives.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/assets/logo-derivatives.png -------------------------------------------------------------------------------- /images/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/assets/logo.png -------------------------------------------------------------------------------- /images/assets/tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/assets/tick.png -------------------------------------------------------------------------------- /images/illustrations/arduino-mega.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/arduino-mega.jpg -------------------------------------------------------------------------------- /images/illustrations/arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/arrow.png -------------------------------------------------------------------------------- /images/illustrations/ball-caster.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/ball-caster.jpg -------------------------------------------------------------------------------- /images/illustrations/board-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-1.jpg -------------------------------------------------------------------------------- /images/illustrations/board-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-2.jpg -------------------------------------------------------------------------------- /images/illustrations/board-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-3.jpg -------------------------------------------------------------------------------- /images/illustrations/board-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-4.jpg -------------------------------------------------------------------------------- /images/illustrations/board-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-5.jpg -------------------------------------------------------------------------------- /images/illustrations/board-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-6.jpg -------------------------------------------------------------------------------- /images/illustrations/board-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-7.jpg -------------------------------------------------------------------------------- /images/illustrations/board-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-8.jpg -------------------------------------------------------------------------------- /images/illustrations/board-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-9.jpg -------------------------------------------------------------------------------- /images/illustrations/board-button-mechanics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-button-mechanics.jpg -------------------------------------------------------------------------------- /images/illustrations/board-button.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-button.jpg -------------------------------------------------------------------------------- /images/illustrations/board-esploso.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/board-esploso.jpg -------------------------------------------------------------------------------- /images/illustrations/button-mechanics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/button-mechanics.jpg -------------------------------------------------------------------------------- /images/illustrations/button.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/button.jpg -------------------------------------------------------------------------------- /images/illustrations/cny70-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/cny70-header.jpg -------------------------------------------------------------------------------- /images/illustrations/cny70-physycs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/cny70-physycs.jpg -------------------------------------------------------------------------------- /images/illustrations/cny70-wiring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/cny70-wiring.jpg -------------------------------------------------------------------------------- /images/illustrations/colors.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/colors.jpg -------------------------------------------------------------------------------- /images/illustrations/colour-blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/colour-blue.jpg -------------------------------------------------------------------------------- /images/illustrations/colour-green.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/colour-green.jpg -------------------------------------------------------------------------------- /images/illustrations/colour-red.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/colour-red.jpg -------------------------------------------------------------------------------- /images/illustrations/colour-yellow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/colour-yellow.jpg -------------------------------------------------------------------------------- /images/illustrations/cubetto-esploso.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/cubetto-esploso.jpg -------------------------------------------------------------------------------- /images/illustrations/cubetto-guide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/cubetto-guide.jpg -------------------------------------------------------------------------------- /images/illustrations/instruction-block-guide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/instruction-block-guide.jpg -------------------------------------------------------------------------------- /images/illustrations/instruction-esploso.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/instruction-esploso.jpg -------------------------------------------------------------------------------- /images/illustrations/left-to-right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/left-to-right.jpg -------------------------------------------------------------------------------- /images/illustrations/motor-driver.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/motor-driver.jpg -------------------------------------------------------------------------------- /images/illustrations/motor-wiring.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/motor-wiring.jpg -------------------------------------------------------------------------------- /images/illustrations/wireless-shield-connections-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/wireless-shield-connections-1.jpg -------------------------------------------------------------------------------- /images/illustrations/wireless-shield-connections.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/wireless-shield-connections.jpg -------------------------------------------------------------------------------- /images/illustrations/wireless-shield.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/illustrations/wireless-shield.jpg -------------------------------------------------------------------------------- /images/photo/cubetto.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/cubetto.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-1.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-10.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-11.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-12.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-13.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-14.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-2.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-3.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-4.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-5.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-6.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-7.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-8.jpg -------------------------------------------------------------------------------- /images/photo/diy-docs-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/diy-docs-9.jpg -------------------------------------------------------------------------------- /images/photo/instruction-blocks.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/instruction-blocks.jpg -------------------------------------------------------------------------------- /images/photo/logo-turtle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/logo-turtle.jpg -------------------------------------------------------------------------------- /images/photo/maker-guide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/maker-guide.jpg -------------------------------------------------------------------------------- /images/photo/primo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/photo/primo.jpg -------------------------------------------------------------------------------- /images/screenshots/edit-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/screenshots/edit-1.jpg -------------------------------------------------------------------------------- /images/screenshots/edit-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/screenshots/edit-2.jpg -------------------------------------------------------------------------------- /images/screenshots/pull-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/screenshots/pull-1.jpg -------------------------------------------------------------------------------- /images/screenshots/pull-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/primo-io/prototype-documentation/43c7f78aafa042d4f3296892ad42412052fd6a52/images/screenshots/pull-2.jpg -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Cubetto Prototype Documentation 4 | --- 5 |
6 | ##0. What is this document 7 | 8 | ![primo play set]({{ site.baseurl }}images/photo/maker-guide.jpg) 9 | This document gathers and organizes all the information necessary to build a Primo Prototype. 10 | You can find more info about the project on the [primo.io](http://primo.io) website. 11 | 12 |

13 | 14 | How to translate this document 15 | 16 |

17 | 18 | 19 |
20 | 21 | If you want to translate this page in your language, you have multiple options: 22 | 23 | 1. **super easy, no automation** Copy and paste this page in your text editor, translate it then mail it to us at [play@primo.io](mailto:play@primo.io) 24 | 25 | 2. **medium, light automation** Create an account on [GitHub](http://github.com), then open the [repository of this page](https://github.com/primo-io/prototype-documentation/blob/gh-pages/index.md) and click on 'EDIT', in the top menu bar: 26 | ![photo]({{ site.baseurl }}images/screenshots/edit-1.jpg) 27 | Then your page turns into a text editor, where you are able to modify the page source. The page is written in [markdown](http://daringfireball.net/projects/markdown/syntax), very easy to understand. 28 | ![photo]({{ site.baseurl }}images/screenshots/edit-2.jpg) 29 | You don't have to modify this code, but just copy and paste the whole text in your local text editor, then translate the textual parts in your language, without modifying the parenthesis and HTML parts. Save the text then mail it to us at [play@primo.io](mailto:play@primo.io) 30 | 31 | 3. **advanced, full automation** This is slightly advanced, but nothing too hard, if you are not familiar with GitHub you have the chance to learn something new :)
32 | If you are already familiar with git, you have to fork the repository, all the translations are located in the 'languages' folder. To translate the page, just copy it with the starting language ("english.md" for example) in the same folder, then change the file name with the final language (spanish.md). Change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter) then translate the rest of the document. Once finished, make a pull request to add your file to the folder, it will be automatically added to the menu.

33 | The steps above, expanded: 34 | 35 | 1. Make a GitHub account 36 | 2. Download the GitHub application ([Mac](http://mac.github.com/), [Windows](http://windows.github.com/)) 37 | 3. If it's the first time you use it, open it and input your GitHub login details 38 | 4. Go to [this documentation repository](https://github.com/primo-io/prototype-documentation) 39 | 5. Click on the "Fork" button in the top right corner, to fork this repository into your account. 40 | 6. Go to your giHub account, open the forked repository page and click on the "Clone in Desktop" button, on the right-hand sidebar. It will automatically open the GitHub application, asking where to save the local repository. 41 | 7. After selecting a folder path in your computer, click on "clone" 42 | 8. After downloading the files, navigate to your local folder where the repository has been downloaded. 43 | 9. Open the 'languages' folder, where all the translations are located. Select the starting language ("english.md" for example), then copy the file and rename it to your destination language ("spanish.md" for example), in the same folder. 44 | 10. Open the newly created file, change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter), then translate it to your language, keeping the markdown formatting 45 | 11. After the translation is completed and saved, it's time to re-upload it on GitHub. Open the GitHub application and double click on the repository. On the left sidebar, click on the "Changes" tab. It should say "Uncommitted Changes". 46 | 12. Give a title to your edits, like "spanish translation", then click on "commit" and then on the "sync" button. 47 | 13. Go to your GitHub profile, on the forked repository page. You should be able to see your newly created page in the 'languages' folder. On the top, there should be a green button with two arrows, click on it to issue a pull request. (see picture below) 48 | ![photo]({{ site.baseurl }}images/screenshots/pull-1.jpg) 49 | 50 | 14. Then click on "Create Pull Request" 51 | 52 | ![photo]({{ site.baseurl }}images/screenshots/pull-2.jpg) 53 | 54 | 15. Write a message for the pull request and that's it! Now we just have to approve the request. 55 |
56 |
57 | 58 | ##1. What is Primo 59 | 60 | ![primo play set]({{ site.baseurl }}images/photo/primo.jpg) 61 | 62 | Primo is a tangible interface designed to introduce programming logic to little children (3 to 7), without the need for literacy. The goal of the game is to drive a little robot called Cubetto back to his house. To accomplish the goal, children have to program the little robot using a limited set of instructions: forward, left, right and function. While the first three are rather intuitive, the last one calls a sub-routine, an extra line of instructions packed in a single command. 63 | 64 |
65 | 67 |
68 | 69 | ##2. Research 70 | 71 | Teaching programming to children is a widely debated topic. We are aware of a moderate number of solutions that try to accomplish this for children above the ages of 8. However, there aren't many of these solutions suitable for younger children, and there aren't any that work without a screen or without the need for literacy. We see an increasing number of Apps for tablets and computers that also work in combination with physical robots, but none of them are completely free from the pixel domain in the same way the Primo Play Set is. 72 | 73 | Wood was chose as the main material, first of all because it's natural; you get a warm feeling from it and it makes a nice sound. The second reason is cultural. Observations were conducted on games used in traditional kindergartens in Switzerland (where the product was originally designed) to discover that the games loved by children were all made out of wood. Wooden toys are very durable and you can see marks and scratches on them, signs of their past usage from other children. It's a material with memory. Wood was also chosen as a material because of the stark contrast it creates with technology. Inside of Primo there's a circuit board, but we wanted to create a "magical" experience, hiding the complexity of the play set. 74 | 75 | 76 | 77 | The concept behind Primo is heavily inspired by the work of Seymour Papert, a mathematician who co-founded the MIT Artificial Intelligence Laboratory with Marvin Minsky, in the sixties (if you are interested in the subject, we encourage you to read [Mindstorms](http://www.amazon.co.uk/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746/ref=sr_1_1?ie=UTF8&qid=1393675158&sr=8-1&keywords=mindstorms+papert), his most famous book). He was directing the team who invented [LOGO](http://en.wikipedia.org/wiki/Logo_(programming_language)), probably the most used and long lasting resource to teach programming to children. The goal of Seymour Papert was not just to teach code, but also to help children discover their own personal way of solving problems. Primo can be considered an extreme simplification of LOGO and the physical turtle. We limited the instructions, to their purest form, avoiding any kind of textual or numerical language. 78 | 79 | The first prototype was realised in SUPSI Lugano by Matteo Loglio (Primo.io co-founder and interaction designer), during the [MAInD - Master of Advanced Studies in Interaction Design](http://www.maind.supsi.ch/). Matteo's background is in product design, and after learning the Arduino basics and a bit of code to create the prototype, began to look around for technical solutions that were approachable for a novice, so as to develop an application like Primo. The main issues were two: making a robot car from scratch and an interface board that could easily recognize different instructions. 80 | 81 | The first issue was solved by using an [Oh_Oh board](http://david.cuartielles.com/w/Maquila2/Ohoh) from David Cuartielles, one of the Arduino founders who was holding a lecture in SUPSI. The Oh_Oh robot is an open project, you can find the source files in the link above. It is basically a car shaped Arduino, only an XBee for radio communication was added. 82 | 83 | The second issue was designing a reliable way to detect the blocks. A solution was inspired by a [CIID](http://ciid.dk/) project called ["Barcode Piano"](http://ciid.dk/education/portfolio/idp11/courses/physical-computing/projects/barcode-piano/). 84 | 85 |
86 | 88 |
89 | 90 | The idea is to use multiple blocks that can be recognized by a board using resistors. It's a basic voltage divider, with the analog pins of an Arduino reading the resistor values. It's a very simple method, but rather effective for a prototype. 91 | 92 | Design-wise, some features required testing; the actual design is the result of several iterations. 93 | 94 | The 'snake' or 'zig-zag' path of the instruction sequence was chosen to avoid literacy pre-conceptions. 95 | 96 | ![left to right]({{ site.baseurl }}images/illustrations/left-to-right.jpg) 97 | 98 | The 'D' shape of the block connectors, was designed so that blocks could be inserted just one way, to be consistent with the path design and the direction of the car. Multiple designs can be used for this. The D shape was chosen as it is basically an 'oriented circle' and as a shape, also recalls similar pin-board designs. 99 | 100 | ![instruction blocks]({{ site.baseurl }}images/photo/instruction-blocks.jpg) 101 | 102 | The design for the shape of the instruction blocks is still being tested. The actual design works quite well, children easily grasp their meaning, they just have some troubles at the first to get familiar with the left and right block. This is also because the "right" and "left" concept is generally quite new for them. We are currently testing other blocks design, to improve this even further. 103 | 104 |
105 | 108 |
109 | 110 | At the beginning the robot was a toy car. A very complicated and time consuming shape to produce, as it's a laser-cut shape glued together layer by layer, and subsequently sanded for over an hour. The car had another major issue, it was very boy oriented. We wanted to avoid entering in discussions about 'brain toy' producers being criticised of only producing boy-oriented toys. We wanted to stay neutral, we didn't want to create a toy specifically for boys or girls, and instead opted for a very neutral geometry, a box. 111 | 112 | A name was given to the little box, along with a personality and a similey face, making it even more appealing for children. The robot is called Cubetto (little cube in Italian). The idea with Cubetto is also to create a basic module that can be expanded and customized easily in the future. 113 | 114 | ![cubetto]({{ site.baseurl }}images/photo/cubetto.jpg) 115 | 116 | ##3. Getting Started 117 | 118 | ###3.1 The basics 119 | 120 | Primo is composed of three parts: An Interface Board, Cubetto and a set of Instruction Blocks. Children interact with the Interface Board by placing Instruction Blocks into the holes, to create a sequence (A program) that Cubetto executes. 121 | 122 | There are four types of Instruction Blocks, this means that resistors of 4 different values can be used, possibly quite distant between each other. 123 | 124 | The blocks are inserted into the holes of the Interface Board, where the resistor value is identified. After that, the values are processed into a string that is sent to Cubetto using two XBee modules. Cubetto then executes the instructions, one after the other. 125 | 126 | The brain of the prototype is made of two Arduino Boards, a UNO (A Leonardo or a Duemilanove will also do) for Cubetto, and a Mega for the Interface Board, where 16 analog inputs are required. 127 | 128 | ###3.2 Electronics 129 | 130 | ###Tools Required 131 | 132 | * Soldering Iron 133 | * Solder 134 | * Wires 135 | * Hot Glue Gun 136 | * Wood Glue 137 | * Copper Tape 5mm wide 138 | 139 | ###Materials (prices in euro) 140 | 141 | Cubetto ~ 88 € 142 | 143 | * Arduino UNO (or Leonardo) - 20 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195#.UxC5nfTV_bA) 144 | * Arduino Proto Wireless Shield - 14.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 145 | * SN754410 Motor Driver - 3.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_33&products_id=153#.UxC5-_TV_bB) 146 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 147 | * SolarBotics Wheels x 2 : 4.74 € - [Solarbotics Store](https://solarbotics.com/product/gmpw/) 148 | * SolarBotics Gear Motors GM3 x 2 : 8.36 € - [Solarbotics Store](https://solarbotics.com/product/gm3/) 149 | * 2 Ball Casters : 5.79 € - [Solarbotics Store](https://solarbotics.com/product/23160/) 150 | * CNY70 x 2 : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Vishay/CNY70/?qs=%2fha2pyFaduj8YpDhNNtXszq4w32cl%2fAjUjdOwQUvJUM%3d) 151 | * (optional) Battery Holder : 4 € - [Solarbotics Store](https://solarbotics.com/product/bholdaa_4_cell/) 152 | * (optional) 4 x Rechargeable Batteries 153 | 154 | Interface Board ~ 88 € (pure coincidence) 155 | 156 | * Arduino Mega 2560 : 39.00 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=196#.UxC_gPTV_bA) 157 | * Arduino Proto Wireless Shield : 14.90 - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 158 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 159 | * 16 5mm Red LED : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Lite-On/LTL-4223/?Lite-On/LTL-4223/&qs=sGAEpiMZZMusoohG2hS%252b15J8d1kHl%252bvkJpzS4atZNEA=) 160 | * 16 220 Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 161 | * 16 10K Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 162 | * 1 Push Button : 1 € 163 | * 50 Male Headers : 1 € 164 | * 16 Double male headers : 0.50 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=294#.UxC_3fTV_bA) 165 | * 50 female headers : 1 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=188#.UxDAAfTV_bA) 166 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 167 | 168 | Instruction Blocks ~ 4 € 169 | 170 | * 4 x 4.7K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-47K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2fbdyz6pU6a%252bvHlD5kaZWgo%3d) 171 | * 4 x 100K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-100K-RC/?qs=sGAEpiMZZMu61qfTUdNhG81NIhcRRUJQxII5Nsctha8%3d) 172 | * 4 x 220 Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 173 | * 4 x 10K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 174 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 175 | 176 | ###3.3 Energy 177 | 178 | Cubetto and (optionally) the Interface Board, are battery powered. For the prototype you can use a LiPo battery or regular AA batteries, that's entirely up to you. We used both, LiPo batteries are good but you need extra equipment, if you are starting from scratch we recommend AA batteries. Just remember they run out very quickly, so the best would be to use rechargeable batteries, like NiMh. 179 | 180 | ###3.4 Prototype Design 181 | 182 | The whole product is made out of laser cut wood, mainly 4 mm thick, with only one layer being 1mm thick. You can laser cut these parts using services like Ponoko, or in your local FabLab. The first prototype was laser cut inside [FabLab Lugano](http://fablab.supsi.ch/), while the product development advanced in [FabLab Torino](http://fablabtorino.org/), where part of Primo development team still resides. 183 | 184 | Building Cubetto and the Interface Board is a laborious but very simple procedure, their shells are basically boxes. The real complexity lays in the Instruction Blocks. They are a double 4mm wood layer with magnets and resistors soldered inside. 185 | 186 | ##4. Prototype Making 187 | 188 | ###[Download Source Files](files/primo-prototype-laser.zip) 189 | 190 | ###4.1 Interface Board 191 | 192 | To make the interface board you have to laser cut two files: interface-board-4mm.dxf and interface-board-1mm.dxf: the first one is for 4mm plywood and the second one for 1mm plywood. As you can see from the files, the parts are numbered, to ease the assembly process. The numbers are stored on a different layer, so you can easily remove them before lasering. We recommend adjusting the hole for the push button, based on the size of the button you wish to use or have. 193 | 194 | First of all, you have to glue parts 3 and 4 together, use the holes in the corners to align them with screws while gluing and let it rest for a night. 195 | 196 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. Once you finished, you can now glue all the remaining top layers of the interface board, this is the correct order: 197 | 198 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. 199 | 200 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-1.jpg) 201 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-2.jpg) 202 | 203 | Once you finished, you can now glue the previously glued parts, 1+2 with 3+4. 204 | 205 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-esploso.jpg) 206 | 207 | Once the glue has dried, put the magnets in the little holes. Turn your top layer upside-down and fill the little holes with the magnets, make sure they are all in the same direction, doesn't matter if north or south. Seal the hole with a drop of hot glue. 208 | 209 | Now the electronics. Start by making rails for the 5V and the GND, all along the hole lines like in the picture. The first ever prototype never had copper strips, it had wires (which you can also use), but in this prototype we used copper tape also for the rails. A real 100% time saver. It also makes things easier for creating connections. 210 | 211 | ![rails]({{ site.baseurl }}images/illustrations/board-3.jpg) 212 | 213 | The next step is to wire one of the two connectors of every hole, to the ground rail. If you used copper tape, you can just use a tiny extra bit of it, just enough to touch both ends. 214 | 215 | ![rails]({{ site.baseurl }}images/illustrations/board-5.jpg) 216 | 217 | Now we have to connect the other side of each connector to the 5V rail, but this time, with a 10KΩ resistor in-between. A cool thing of copper tape is that solder melts very well on top of it. This is the technique used: 218 | 219 | ![10k]({{ site.baseurl }}images/photo/diy-docs-1.jpg) 220 | 221 | At the end of this process, you should have something like this: 222 | 223 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-6.jpg) 224 | 225 | Now it's time to put the LEDs; stick one red LED in each one of the 16 holes, then use a drop of hot glue to seal them to the wood. Once the glue is cold, we have to connect them. Just mind that LEDs have a polarity: the long leg is the anode and the short one the cathode. Connect each cathode to the ground rail, using a 220Ω Resistor. 226 | 227 | ![10k]({{ site.baseurl }}images/photo/diy-docs-6.jpg) 228 | 229 | Connect each cathode to the ground rail, using a 220Ω Resistor. 230 | 231 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-7.jpg) 232 | 233 | The long leg of the LED, must be connected to a digital I/O pin on the Arduino Mega, these pins are numbered from 22 to 53. The LEDs must be connected in order, so that it will be much easier to access them later on in the code, in my prototype for example I started from pin number 30 up to 45 (there are 16 LEDs). 234 | The starting point is not important, as long as they are in the correct sequential order. This means for example that if we start from pin 30, the first LED must be attached to pin 30, the second to pin 31, the third to pin 32 and so on until LED 16 to pin 45. 235 | 236 | The cables are soldered to a rack of double male headers, as the digital pins on the Arduino Mega are laid out in a double line. In this way it's easy to plug and remove the Arduino from the board. 237 | 238 | ![rack]({{ site.baseurl }}images/photo/diy-docs-4.jpg) 239 | 240 | Once all the LEDs are soldered, we have to solder our hand made connectors. These must be wired to the Arduino Mega analog pins, to read the different resistor values. Just like the LEDs, these must be connected in order, starting from A0 for hole 1 to A15 for hole 16. The wire has to start from the same point where we soldered previously the 10K resistor. See the illustration: 241 | 242 | ![analog input board connections]({{ site.baseurl }}images/illustrations/board-8.jpg) 243 | 244 |
245 | 246 | 247 |

248 | Here I used some single male headers, as the analog pins are all on a single line. 249 | 250 |

251 | 252 |

253 | The last thing to connect is the button: take it and solder two cables to two opposite headers, then slip them trough the button hole, from the top, and push it all the way down, until it stops. Now flip the board, you should have the two wires coming out of the hole. Connect them as in the illustration: one straight to 5V, the other one to GND using a 10k Resistor. Then connect it to an Arduino digital pin from the button-end of the resistor, in this example we used pin number 50. 254 |

255 |
256 | 257 | 258 | ![photo]({{ site.baseurl }}images/photo/diy-docs-5.jpg) 259 | 260 | Almost done with the board, now you just have to plug the Wireless Shield on top of the Arduino Mega and stick the headers in place in the board. To recap, 30 to 45 for the LEDs, A0 to A15 for the connectors and 50 for the button. Use the A0 to A5 pins on the Wireless Shield for the first 5 connectors. Don't forget to connect the ground rail to the GND pin and the 5V to the 5V pin. 261 | 262 | ![rack]({{ site.baseurl }}images/photo/diy-docs-3.jpg) 263 | 264 | Now a little bit of fine-tuning: after that part 12 of the board has been painted, you can glue it with part 13 on top of the board. 265 | 266 | Same for the red button: after part 14 has been painted, put something soft like cardboard on top of part 2, around the push button, then some hot glue on top of the push button and before the glue dries off, place the red button. See the illustration: 267 | 268 | ![photo]({{ site.baseurl }}images/illustrations/button-mechanics.jpg) 269 | 270 | ###INSTRUCTION BLOCKS 271 | 272 | This is one instruction block, exploded: 273 | 274 | 275 | 276 | To make the Instruction Blocks, the first thing you have to do is laser cut the files, there's one for 4mm thick wood and one for 1mm wood. They are four layers, numbered from 1 to 4 and the drawings provided can be used to make 16 blocks, four of each kind. 277 | 278 | Each block has a different resistor. These are the resistors used in the prototype: 279 | 280 | FORWARD: 4.7K Ω
281 | LEFT: 100K Ω
282 | RIGHT: 220 Ω
283 | FUNCTION: 10K Ω 284 | 285 | To make blocks, first you have to glue part 4 with part 3. 286 | 287 | After the glue has dried, you can start painting. See the illustration below to see what part should be colored: 288 | 289 | ![image]({{ site.baseurl }}images/illustrations/colors.jpg) 290 | 291 | Now you have to cut two pieces of copper tape, 40mm long. Slip them in the holes of the two blocks that you just glued, making a ring around it using the upper and lower fissure, the ring must be quite tight. 292 | 293 | ![photo]({{ site.baseurl }}images/illustrations/instruction-block-guide.jpg) 294 | 295 | After that, you have to put the magnet in the hole. While doing this, BE SURE THAT IT IS CORRECTELY ORIENTED, so that the block 'sticks' into the hole. If you put it the other way, it's going to be repelled by the other magnet, a funny outcome but not what we want to achieve. 296 | 297 | Fix the magnet with a drop of hot glue and before the glue gets cold, put the right resistor on top, with the 'legs' laying on the copper tape. After that, the resistor must be soldered on the two pieces. After soldering, cut the extra leg length and glue part 2 on top of the resistor. 298 | 299 | Finish your block by gluing the last layer, part number 1, on the top, then repeat the entire process for every single block :) 300 | 301 | ###CUBETTO 302 | 303 | Electronics: 304 | 305 | The prototype for Cubetto can be built using an Arduino Uno or Leonardo, with a Proto Wireless Shield on top. The reason for the Proto Shield is because it has a small prototyping area, that is wide enough to put the motor driver, the connectors for the optical encoders, motors and power. 306 | 307 | Cubetto has to spin 90 degrees left and right. A very inaccurate way is to use timing event, like "spin right for one second" and you can expect more or less the same result. "More or less" because it depends a lot from different factors, such as the floor, the battery power and so on. The way I solved this problem, is by detecting the amount of rotation from the wheel using two CNY70 optical encoders in combination with a sticker. The round sticker goes in the inner wheel and it's something like this: 308 | 309 | ![photo]({{ site.baseurl }}images/photo/diy-docs-14.jpg) 310 | 311 | The sticker is split into black and white slices, this is because the CNY70 is able to detect the variation between a white slice and a black one. Basically inside it has an infrared LED that is always on and a phototransistor that is reading the amount of infrared light. When a black material is facing the component, almost no light is relfected, as the black color tends to absorb it. On the contrary, if the material is white, it reflects all the light, so the value read from the sensor it's very high. The difference between readings is used to count the rotation steps. 312 | 313 | ![photo]({{ site.baseurl }}images/illustrations/cny70-physycs.jpg) 314 | 315 | The prototyping area of the Wireless Proto Shield is where the motor driver and other connectors for the other parts are soldered. For these, simply use male headers as connector and female headers on the other part. 316 | 317 | 318 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections.jpg) 319 | 320 | For these I used simple male headers as connector and female headers on the other part. 321 | 322 | ![photo]({{ site.baseurl }}images/photo/diy-docs-12.jpg) 323 | 324 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections-1.jpg) 325 | 326 | The SN754410 motor driver has 16 pins that must be connected following this scheme: 327 | 328 | ![photo]({{ site.baseurl }}images/illustrations/motor-driver.jpg) 329 | 330 | The CNY70 scheme: 331 | 332 | 333 | 334 | Design: 335 | 336 | Start by lasering cubetto.dxf; All Cubetto parts are cut from 4mm plywood, follow these visual instructions to build the base: 337 | 338 | ![photo]({{ site.baseurl }}images/illustrations/cubetto-guide.jpg) 339 | 340 | Don't mount the motors for now, first you have to mount the ball casters. 341 | 342 | ![photo]({{ site.baseurl }}images/illustrations/ball-caster.jpg) 343 | 344 | ![photo]({{ site.baseurl }}images/photo/diy-docs-9.jpg) 345 | 346 | Now the CNY70. Solder the two opposite headers, that must be connected to 5V, together with a wire; then solder three wires to the remaining headers of the CNY70. At the end of these wires solder a row of three female headers. They will later be connected on to the headers of the proto shield. 347 | 348 | The two cny70 must be placed on the edge of the bottom layer, with the LED and the photoransistot horizontally aligned. To fix them you can use some hot glue (or other types of glue). 349 | 350 | See the picture to understand the location. 351 | 352 | ![photo]({{ site.baseurl }}images/photo/diy-docs-11.jpg) 353 | 354 | Just like for the CNY70, solder two wires to the little flaps that come out of each motor. You can twist the two wires to make them more resistent, then at the end, solder a row of two female header, just like in the illustration. 355 | 356 | Now print the inner drawing with the black and white slices, glue them on a piece of cardboard (or laser cut wood, that's up to you), cut the perimeter and make a hole in the middle, as they will be inserted between the motor and the wheel. The white and black slices must point towards the inner side of Cubetto and the distance between the print and the CNY70 must be between 1 and 3 millimeters for the CNY70 to work properly. 357 | 358 | ![photo]({{ site.baseurl }}images/photo/diy-docs-10.jpg) 359 | 360 | Now you can put the wheels on the motors, if you used the Solarbotics wheels, you can fasten them with the screw provided, don't make it too tight. 361 | 362 | Glue three out of the four 'walls' of Cubetto, parts 5, 7 and 8. We are going to leave the back removable, just in case we want to modify something. 363 | 364 | Take the battery holder and solder the black and red cable to other 2 female connectors. The headers on the shield will go to VIN and ground. A switch that breaks the red wire is heavily suggested. 365 | 366 | ![photo]({{ site.baseurl }}images/photo/diy-docs-13.jpg) 367 | 368 | Now you can place the Arduino + Proto shield on top of the motors, plug all the headers on the shield and you have finished making Cubetto. 369 |
370 | 371 | ##Arduino 372 | 373 | ###[Download Arduino Files](https://github.com/primo-io/arduino-sketches/raw/master/primo-prototype-arduino.zip) 374 | 375 | Instructions in the sketch comments. -------------------------------------------------------------------------------- /languages/croatian.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Cubetto prototip dokumentacija 4 | language: Hrvatski 5 | category: language 6 | --- 7 | 8 |
9 | 10 |
11 | ##0. Što se nalazi u ovom dokumentu? 12 | 13 | ![primo play set]({{ site.baseurl }}images/photo/maker-guide.jpg) 14 | U ovom dokumentu se nalaze prikupljene sve informacije i uputstva potrebna da biste izgradili Primo prototip. Više o samom projektu možete naći na stranicama [primo.io](http://primo.io). 15 | 16 |

17 | 18 | How to translate this document 19 | 20 |

21 | 22 | 23 |
24 | 25 | If you want to translate this page in your language, you have multiple options: 26 | 27 | 1. **super easy, no automation** Copy and paste this page in your text editor, translate it then mail it to us at [play@primo.io](mailto:play@primo.io) 28 | 29 | 2. **medium, light automation** Create an account on [GitHub](http://github.com), then open the [repository of this page](https://github.com/primo-io/prototype-documentation/blob/gh-pages/index.md) and click on 'EDIT', in the top menu bar: 30 | ![photo]({{ site.baseurl }}images/screenshots/edit-1.jpg) 31 | Then your page turns into a text editor, where you are able to modify the page source. The page is written in [markdown](http://daringfireball.net/projects/markdown/syntax), very easy to understand. 32 | ![photo]({{ site.baseurl }}images/screenshots/edit-2.jpg) 33 | You don't have to modify this code, but just copy and paste the whole text in your local text editor, then translate the textual parts in your language, without modifying the parenthesis and HTML parts. Save the text then mail it to us at [play@primo.io](mailto:play@primo.io) 34 | 35 | 3. **advanced, full automation** This is slightly advanced, but nothing too hard, if you are not familiar with GitHub you have the chance to learn something new :)
36 | If you are already familiar with git, you have to fork the repository, all the translations are located in the 'languages' folder. To translate the page, just copy it with the starting language ("english.md" for example) in the same folder, then change the file name with the final language (spanish.md). Change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter) then translate the rest of the document. Once finished, make a pull request to add your file to the folder, it will be automatically added to the menu.

37 | The steps above, expanded: 38 | 39 | 1. Make a GitHub account 40 | 2. Download the GitHub application ([Mac](http://mac.github.com/), [Windows](http://windows.github.com/)) 41 | 3. If it's the first time you use it, open it and input your GitHub login details 42 | 4. Go to [this documentation repository](https://github.com/primo-io/prototype-documentation) 43 | 5. Click on the "Fork" button in the top right corner, to fork this repository into your account. 44 | 6. Go to your giHub account, open the forked repository page and click on the "Clone in Desktop" button, on the right-hand sidebar. It will automatically open the GitHub application, asking where to save the local repository. 45 | 7. After selecting a folder path in your computer, click on "clone" 46 | 8. After downloading the files, navigate to your local folder where the repository has been downloaded. 47 | 9. Open the 'languages' folder, where all the translations are located. Select the starting language ("english.md" for example), then copy the file and rename it to your destination language ("spanish.md" for example), in the same folder. 48 | 10. Open the newly created file, change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter), then translate it to your language, keeping the markdown formatting 49 | 11. After the translation is completed and saved, it's time to re-upload it on GitHub. Open the GitHub application and double click on the repository. On the left sidebar, click on the "Changes" tab. It should say "Uncommitted Changes". 50 | 12. Give a title to your edits, like "spanish translation", then click on "commit" and then on the "sync" button. 51 | 13. Go to your GitHub profile, on the forked repository page. You should be able to see your newly created page in the 'languages' folder. On the top, there should be a green button with two arrows, click on it to issue a pull request. (see picture below) 52 | ![photo]({{ site.baseurl }}images/screenshots/pull-1.jpg) 53 | 54 | 14. Then click on "Create Pull Request" 55 | 56 | ![photo]({{ site.baseurl }}images/screenshots/pull-2.jpg) 57 | 58 | 15. Write a message for the pull request and that's it! Now we just have to approve the request. 59 |
60 |
61 | 62 | ##1. Što je Primo? 63 | ![primo play set]({{ site.baseurl }}images/photo/primo.jpg) 64 | 65 | Primo je opipljivo sučelje, dizajnirano s ciljem približavanja i upoznavanja mlađe djece (od 3 do 7 godina starosti) s logikom programiranja, bez potrebe za pismenošću. Cilj igre je navesti malog robota, koji se zove Cubetto, do njegove kuće. Da bi se ostvario cilj, djeca moraju programirati kretanje robota koristeći ograničen skup naredbi: "naprijed", "lijevo", "desno" i "funkcija". Dočim su prve tri naredbe prilično intuitivne, naredba "funkcija" poziva potprogram (podrutinu) - dodatnu liniju naredbi povezane u jednu naredbu. 66 | 67 |
68 | 70 |
71 | 72 | ##2. Istraživanje 73 | 74 | Podučavanje djece programiranju je naširoko raspravljana tema. Poznat nam je umjeren broj rješenja koja pokušavaju ostvariti cilj za djecu iznad 8 godina starosti. Međutim, ne postoje brojna rješenja koja su pogodna za mlađu djecu, a uopće ne postoje ona koja ne zahtijevaju ekran ili potrebu za pismenošću. Zamjećujemo sve veći broj programa za tablete i računala koji također rade u kombinaciji sa stvarnim robotima, ali niti jedan od njih nije potpuno oslobođen pikselastog okružja kao što je to slučaj s Primo Play setom. 75 | 76 | Kao glavni materijal odabrali smo drvo, prije svega zato što je prirodno; drvo puža ugodan osjećaj i proizvodi privlačan zvuk. Drugi razlog je kulturološki. Promatranjem igranja, obavljenih u tradicionalnim vrtićima u Švicarskoj gdje je Primo izvorno dizajniran, zamijećeno je da su djeca više voljela igračke od drveta. Drvene igračke su otporne i dugotrajne te se na njima mogu vidjeti oznake i ogrebotine, znamenje prethodnog igranja s drugom djecom. Drvo je materijal koji pamti. Osim toga, drvo je izabrano kao materijal i zato što predstavlja potpunu suprotnost modernoj tehnologiji. Unutar Prima nalazi se elektronika, ali mi smo željeli stvoriti "magično" iskustvo, skrivajući izvornu kompleksnost same igračke. 77 | 78 | 79 | 80 | Značajna inspiracija za Primo je rad Seymoura Paperta, matematičara i suosnivača s Marvinom Minskyjem, u šezdesetima, Laboratorija za umjetnu inteligenciju na MIT (ako vas zanima područje, preporučamo vam da pročitate njegovu najslavniju knjigu - [Mindstorms](http://www.amazon.co.uk/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746/ref=sr_1_1?ie=UTF8&qid=1393675158&sr=8-1&keywords=mindstorms+papert). 81 | On je upravljao timom koji je izmislio programski jezik [LOGO](http://en.wikipedia.org/wiki/Logo_(programming_language), vjerojatno najkorišteniji izvor za podučavanje djece programiranju (možda u svijetu, ali ne i u HR, op.pr.) Njegov cilj nije bio samo podučiti programiranje, nego također pomoći djeci da razviju svoj osobni način rješavanja problema. Primo može biti smatran ektremnim pojednostavljenjem programskog jezika LOGO. Ograničili smo instrukcije na njihovu suštinu, izbjegavajući pritom bilo kakav tekstualni ili brojčani jezik. 82 | 83 | Prvi prototip je stvorio Matteo Loglio (Primo.io suosnivač i dizajner sučelja) u SUPSI Lugano za vrijeme [MAInD - Master of Advanced Studies in Interaction Design](http://www.maind.supsi.ch/). Matteovo obrazovanje je iz područja dizajna proizvoda i nakon što je naučio osnove Arduino platforme i dovoljno programiranja da stvori prototip, počeo je tražiti rješenja koja su dostupna početnicima kako bi razvili aplikaciju kao što je Primo. Postojala su dva glavna problema: napraviti auto-robota od nule i upravljačko sučelje u kojem će biti jednostavno razabrati različite naredbe. 84 | 85 | Prvi problem je rješen koristeći [Oh_Oh ploču](http://david.cuartielles.com/w/Maquila2/Ohoh) Davida Cuartiellesa, jednog od Arduinovih osnivača koji je držao predavanje na SUPSIu. Oh_Oh robot je otvoreni projekt, možete naći izvorni kod u prethodnom linku. U suštini, to je Arduino u obliku auta s dodatkom XBee ploče za radio komunikaciju. 86 | 87 | Drugi problem je bio dizajniranje pouzdanog načina raspoznavanja naredbi. Rješenje je inspirirano [CIID](http://ciid.dk/) pojektom zvanim ["Barcode Piano"](http://ciid.dk/education/portfolio/idp11/courses/physical-computing/projects/barcode-piano/). 88 | 89 |
90 | 92 |
93 | 94 | Ideja je koristiti raznovrsne blokove umjesto naredbi. Procesor može razaznati blokove pomoću otpornika. U svojoj osnovi, sustav je djelitelj napona te analogni ulazi Arduino ploče mogu očitati vrijednosti otpornika. Metoda je vrlo jednostavna, ali i vrlo prikladna za prototip. 95 | 96 | U pogledu dizajna, neke pojedinosti su zahtijevale testiranje; trenutni dizajn je rezultat nekoliko iteracija. 97 | 98 | Zmijoliki ili "zig-zag" slijed naredbi je odabran da bi se izbjegle predrasude izvedene iz pismenosti. 99 | 100 | ![left to right]({{ site.baseurl }}images/illustrations/left-to-right.jpg) 101 | 102 | "D" oblik naredbi je dizajniran tako da naredbe mogu biti umetnute na samo jedan način, dosljedan s nizom naredbi i smjerom kretanja auta. Postoje višestruki načini kako se to moglo izvesti. D oblik je izabran zato što je to u svojoj osnovi usmjereni krug. 103 | 104 | ![instruction blocks]({{ site.baseurl }}images/photo/instruction-blocks.jpg) 105 | 106 | Dizajn oblika naredbi još se uvijek testira. Trenutni dizajn je prilično zadovoljavajući te djeca s lakoćom shvaćaju njihovo značenje. U početku postoje manje poteškoće u prepoznavanju naredbi "lijevo" i "desno". To je posljedica i činjenice da su koncepti "lijevo" i "desno" općenito novost za njih. Trenutno testiramo drugačije dizajne kako bi i taj aspekt unaprijedili. 107 | 108 |
109 | 112 |
113 | 114 | U početku, robot je bio auto igračka te je njegova izrada bila vrlo komplicirana i vremenski zahtijevna jer je laserski izrezane komade trebalo zalijepiti sloj po sloj i nakon toga preko sat vremena brusiti. Auto je imao još jednu manu. Bio je izrazio dječački orjentiran. Željeli smo ostati neutralni i stvoriti igračku koja nije specifično igračka za dječake ili za djevojčice te smo se odlučili za vrlo neutalan geometrijski oblik - kvadar (kutiju). 115 | 116 | Maloj kutiji smo zatim dali ime, zajedno s osobnošću i nasmješenim lice, čineći ju tako još privlačnijom za djecu. Mali robot nazvan je Cubetto (talijanska riječ za malu kocku). Ideja s Cubettom je također napraviti osnovni modul koji može lagano biti proširen i nadograđen u budućnosti. 117 | 118 | ![cubetto]({{ site.baseurl }}images/photo/cubetto.jpg) 119 | 120 | ##3. Početak 121 | 122 | ###3.1 Osnove 123 | 124 | Primo se sastoji od tri dijela: upavljačke ploče, Cubetta i skupa naredbi. Djeca upravljaju Cubettom stavljajući blokove (naredbe) u rupe na upravljačkoj ploči, stvarajući pritom niz naredbi (program) koji zatim Cubetto izvrši. 125 | 126 | Postoje četri vrste blokova, što znači da trebamo koristiti otpornike s četri različite vrijednosti, po mogućnosti poprilično različite jedne od drugih. 127 | 128 | Blokovi se umeću u rupe na upravljačkoj ploči, gdje se razluči vrijednost otpornika. Nakon toga, vrijednosti se obrade u tekst koji se pošalje Cubettu koristeći dva XBee bežična modula te Cubetto izvrši niz naredbi, jednu po jednu. 129 | 130 | Mozak prototipa su dvije Arduino ploče; UNO (mogu poslužiti i Leonardo ili Duemilanove) za Cubetto i Mega za upravljačku ploču, gdje nam treba 16 analognih ulaza. 131 | 132 | ###3.2 Elektronika 133 | 134 | ###Potreban alat 135 | 136 | * lemilica 137 | * žica za lemljenje (tinol) 138 | * vodiči 139 | * pištolj za ljepilo (vruće) 140 | * ljepilo za drvo 141 | * bakrena traka široka 5mm 142 | 143 | ###Materijal (cijene u eurima) 144 | 145 | Cubetto ~ 88 € 146 | 147 | * Arduino UNO (ili Leonardo) - 20 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195#.UxC5nfTV_bA) 148 | * Arduino Proto Wireless Shield - 14.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 149 | * SN754410 Motor Driver - 3.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_33&products_id=153#.UxC5-_TV_bB) 150 | * XBee (serija 1 ili 2, ne čini nikakvu razliku) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 151 | * SolarBotics kotači x 2 : 4.74 € - [Solarbotics Store](https://solarbotics.com/product/gmpw/) 152 | * SolarBotics Gear Motors GM3 x 2 : 8.36 € - [Solarbotics Store](https://solarbotics.com/product/gm3/) 153 | * 2 Ball Casters : 5.79 € - [Solarbotics Store](https://solarbotics.com/product/23160/) 154 | * CNY70 x 2 : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Vishay/CNY70/?qs=%2fha2pyFaduj8YpDhNNtXszq4w32cl%2fAjUjdOwQUvJUM%3d) 155 | * (optional) držač za baterije : 4 € - [Solarbotics Store](https://solarbotics.com/product/bholdaa_4_cell/) 156 | * (optional) 4 x punjive baterije 157 | 158 | Upravljačka ploča ~ 88 € (puka slučajnost) 159 | 160 | * Arduino Mega 2560 : 39.00 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=196#.UxC_gPTV_bA) 161 | * Arduino Proto Wireless Shield : 14.90 - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 162 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 163 | * 16 5mm LED (crvene): 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Lite-On/LTL-4223/?Lite-On/LTL-4223/&qs=sGAEpiMZZMusoohG2hS%252b15J8d1kHl%252bvkJpzS4atZNEA=) 164 | * 16 220 Ω otpornika : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 165 | * 16 10 KΩ otpornika : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 166 | * 1 kontaktni prekidač : 1 € 167 | * 50 jednorednih muških pin kontaktata (male headers) : 1 € 168 | * 16 dvorednih muških pin kontakata (double male headers) : 0.50 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=294#.UxC_3fTV_bA) 169 | * 50 jednorednih ženskih pin kontakata (female headers) : 1 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=188#.UxDAAfTV_bA) 170 | * 16 magneta promjera 4mm i visine 3mm : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 171 | 172 | Naredbe ~ 4 € 173 | 174 | * 4 x 4.7 KΩ otpornika : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-47K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2fbdyz6pU6a%252bvHlD5kaZWgo%3d) 175 | * 4 x 100 KΩ otpornika : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-100K-RC/?qs=sGAEpiMZZMu61qfTUdNhG81NIhcRRUJQxII5Nsctha8%3d) 176 | * 4 x 220 Ω otpornika : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 177 | * 4 x 10 KΩ otpornika : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 178 | * 16 magneta promjera 4mm i visine 3mm : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 179 | 180 | ###3.3 Napajanje 181 | 182 | Cubetto se napaja pomoću baterija, a upravljačka ploča može, ali i ne mora - već prema izboru. Za prototip možete koristiti LiPo baterije ili obične AA baterije, prema želji. Mi smo koristili obje, LiPo baterije su dobre, ali vam treba dodatna oprema. Ako počinjete "od nule" preporučamo vam AA baterije. Imajte na umu da se baterije potroše prilično brzo, tako da je puno bolje koristiti punjive baterije poput NiMh. 183 | 184 | ###3.4 Dizajn prototipa 185 | 186 | Cijeli proizvod je napravljen od laserski izezanog drveta (šperploče), uglavnom debljine 4 mm sa samo jednim slojem od 1mm. Laserski možete izrezati ove dijelove koristeći servis kao što je Ponoko, ili u lokanom FabLabu (nažalost u HR još uvijek ne postoji FabLab podružnica, ali postoje komercijalni servisi). Prvi prototip je bio laserski izrezan u [FabLabu Lugano](http://fablab.supsi.ch/), dok je daljnji razvoj nastavljen u [FabLabu Torino](http://fablabtorino.org/), gdje dio razvojnog tima još uvijek boravi. 187 | 188 | Pravljenje Cubetta i upravljačke ploče je dugotrajna ali vrlo jednostavna procedura, njihove ljuske su u osnovi kutije. Malo kompliciranije je pravljenje naredbenih blokova. Oni se sastoje od drvenih slojeva od 4mm s magnetima i otpornicima zalemljenim unutra. 189 | 190 | ##4. Izgradnja prototipa 191 | 192 | ###[Download Source Files](files/primo-prototype-laser.zip) 193 | 194 | ###4.1 Upravljačka ploča 195 | 196 | Za konstrukciju upravljačke ploče prvo je potrebno izrezati drvene dijelove iz dviju datoteka: interface-board-4mm.dxf i interface-board-1mm.dxf: prva je za dijelove od šperploče debljine 4mm, a druga za dijelove od šperploče debljine 1mm. 197 | Kao što se može vidjeti iz priloženih datoteka, dijelovi su označeni brojevima da bi se olakšalo slaganje. Brojevi su spremljeni u različitom sloju (layer) tako da se mogu jednostavno ukloniti prije samog laserskog rezanja. Preporučamo da podesite veličinu rupe za startni gumb, baziran na veličini gumba koji želite koristiti. 198 | 199 | Prvo morate zalijepiti zajedno dijelove "3" i "4" pri čemu iskoristite rupe u kutevima da bi pomoću vijaka uskladili ploče te ih ostavite da se zalijepe preko noći. 200 | 201 | Zatim uzmite bakrenu traku i izrežite 32 komada od 70mm postavite ih unutar pravokutnih rupa na komadu koji ste upravo zalijepili. Trake trebaju imati najmanje 30mm sa svake strane. Jednom kad ste to završili, možete nastaviti i zalijepiti ostale slojeve koji dolaze iznad (prema skici): 202 | 203 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-1.jpg) 204 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-2.jpg) 205 | 206 | Jednostavnije je ako ujedno prvo zalijepite komade "1" i "2" zajedno te ih onda zalijepite s komadima "3" i "4" obrađenim na prethodno opisani način. 207 | 208 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-esploso.jpg) 209 | 210 | Nakon što se ljepilo osušilo, stavite magnete u male, za njih predviđene rupice. Okrenite zaljepljene ploče i jednostavno popunite rupice magnetima pri čemu obratite pozornost da svi magneti imaju istu orijentaciju, nije važno sjever ili jug. Začepite rupice pištoljem za ljepilo. 211 | 212 | Potom na red dolazi elektronika. Započnite postavljanjem vodova za fazu (5V) i nulu duž rupa kao na slici. Za prvi prototip nismo koristili bakrenu traku nego obične vodljive žice (koje dakako možete i sami koristiti), ali za ovaj prototip smo također uporabili bakrenu traku i za vodove. Puno je jednostavnije spajati komponente uz znatnu uštedu vremena. 213 | 214 | ![rails]({{ site.baseurl }}images/illustrations/board-3.jpg) 215 | 216 | U sljedećem koraku električki povežite jednu od bakrenih konektora na svakoj rupi sa granom "nula". Ako ste koristili bakrenu traku, najjednostavnije je iskoristiti još mali komad iste trake, dovoljan da dotakne oba kraja. 217 | 218 | ![rails]({{ site.baseurl }}images/illustrations/board-5.jpg) 219 | 220 | Nakon toga spojite drugu stranu svakog konektora sa granom od 5V (faza), ali ovaj put, koristeći otpornik od 10kΩ. Vrlo korisno svojstvo bakrene trake je da izvrsno prihvaća lemljenje. Na slici možete vidjeti korištenu tehniku: 221 | 222 | ![10k]({{ site.baseurl }}images/photo/diy-docs-1.jpg) 223 | 224 | Na kraju ovog dijela trebali biste imati nešto poput ovog: 225 | 226 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-6.jpg) 227 | 228 | Sad je vrijeme da postavite svijetleće diode (LED) - stavite diodu u svaku od 16 rupica. Imajte na umu da diode imaju polaritet i već sad ih prikladno orijentirajte. Koristeći vruće ljepilo zaljepite ih za drvo. Nakon što se ljepilo ohladi spojite katodu (kraći kontakt) sa otpornikom od 220Ω kojeg zatim spojite na nultu granu. 229 | 230 | ![10k]({{ site.baseurl }}images/photo/diy-docs-6.jpg) 231 | 232 | Spojite svaku katodu na nultu granu preko 220Ω otpornika. 233 | 234 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-7.jpg) 235 | 236 | Dulji kontakt diode treba spojiti na Arduinov (Mega) digitalni I/O kontakt (pin). Ovi pinovi su označeni brojevima od 22 do 53. Da bi vam život bio lakši i kasnije bilo jednostavnije pristupiti svakoj diodi, spojite diode u nizu: u prototipu smo počeli sa pinom 30 za završili sa pinom 45 (ukupno 16 dioda). Početna vrijednost nije bitna, samo to da diode slijede jedna drugu. 237 | 238 | Jedan od jednstavnijih načina je da se vodiči zaleme na dvoredne muške kontakte. Konektori na Aruino Mega ploči su posloženi u dvoredu te je ovim rješenjem jednostavno spojiti i odspojiti Arduino ploču. 239 | 240 | ![rack]({{ site.baseurl }}images/photo/diy-docs-4.jpg) 241 | 242 | Nakon što završite lemljenje dioda, zalemite i ručno izrađene konektore. Oni moraju biti spojeni na Arduinove analogne pinove da bi mogli očitati vrijednosti otpornika. Kao i pri spajanju dioda, konektori moraju biti povezani u nizu; počevši od kontakta A0 za prvu rupu pa do kontakta A15 za rupu 16. Žice moraju biti spojene na istom mjestu gdje smo prethodno zalemili 10kΩ otpornik (prema ilustraciji): 243 | 244 | ![analog input board connections]({{ site.baseurl }}images/illustrations/board-8.jpg) 245 | 246 |
247 | 248 | 249 |

250 | Ovdje smo koristili jednoredne kontakte zato što su analogni kontakti na Aruduinu posloženi u jednoj liniji. 251 | 252 |

253 | 254 |

255 | Na kraju spojite startni prekidač; zalemite dvije žice na suprotne kontakte i nakon toga ih s gornje strane provucite kroz rupe na ploči i pritisnite prekidač do kraja. Zatim okrnite ploču i trebali biste imati dvije žice koje spojite prema shemi: jednu izravno na na 5V, a drugu preko otpornika od 10kΩ na nulu. Nakon toga spojite Arduinov digitalni pin na prekidač. U našem primjeru iskoristili smo pin 50. 256 | 257 |

258 |
259 | 260 | 261 | ![photo]({{ site.baseurl }}images/photo/diy-docs-5.jpg) 262 | 263 | Sad smo skoro gotovi s upravljačkom pločom, još samo trebate spojiti štit za bežičnu komunikaciju (wireless shield) povrh Arduino Mega ploče te spojiti kontakte za naredbe, diode i prekidač u za to odgovarajuća mjesta na Arduino ploči: 30-45 za diode, A0-A15 za naredbe i 50 za startni prekidač. Iskoristite A0 do A5 kontakte na bežičnom štitu. Ne zaboravite spojiti nulu na GND pin i 5V na 5V pin. 264 | 265 | ![rack]({{ site.baseurl }}images/photo/diy-docs-3.jpg) 266 | 267 | Zatim je potrebno malo podešavanja: nakon što je dio broj 12 obojan, možete ga zalijepiti s dijelom broj 13 na vrhu ploče. Isto vrijedi i za startni "crveni" gumb: nakon što je dio broj 14 obojan, postavite nešto mekano poput kartona povrh ploče broj 2 - oko startnog prekidača. Nakon toga stavite malo vrućeg ljepila povrh prekidača i prije nego se ljepilo ohladi postavite crveni disk (prema slici). 268 | 269 | ![photo]({{ site.baseurl }}images/illustrations/button-mechanics.jpg) 270 | 271 | ###Naredbeni blokovi 272 | 273 | Ovo je jedan blok, rastavljen u sastavne dijelove: 274 | 275 | 276 | 277 | Da biste složili blok, prvo je potrebno izrezati dijelove prema nacrtima u datotekama; postoji jedna za 4mm debelu drvenu ploču (šperploču) i jedna za 1mm debelu (tanku) ploču. Poželjno je ploče izrezati laserskim rezačem. Ukupno se nalaze četiri sloja, označeni brojevima od 1 do 4 i prema priloženim nacrtima može se napraviti 16 naredbi - četiri od svake vrste. 278 | 279 | Svaka vrsta naredbi ima svoj određeni otpornik: 280 | 281 | NAPRIJED: 4.7 KΩ
282 | LIJEVO: 100 KΩ
283 | DESNO: 220 Ω
284 | FUNKCIJA: 10 KΩ 285 | 286 | Slaganje bloka započinje se sljepljivanjem slojeva 3 i 4. 287 | 288 | Nakon što se ljepilo osušilo, možete obojati ploču. Na ilustraciji ispod su označeni dijelovi koji se trebaju obojati. 289 | 290 | ![image]({{ site.baseurl }}images/illustrations/colors.jpg) 291 | 292 | Sada odrežite dva komada bakrene trake, svaki dugačak 40mm. Provucite ih kroz rupe u komadima koje ste upravo zalijepili, praveći ovojnicu oko njih. Ovojnica mora biti poprilično zategnuta. 293 | 294 | ![photo]({{ site.baseurl }}images/illustrations/instruction-block-guide.jpg) 295 | 296 | Nakon toga, stavite magnet u rupu. OPREZ, PROVJERITE DA JE MAGNET PRAVILNO ORIJENTIRAN, tako da se blok privlači u rupu. Ako magnet stavite naopako, naredbeni blokovi će biti izbacivani iz rupa što može biti zabavno, ali nije uporabljivo u našem slučaju. 297 | 298 | Učvrstite magnet s kapljicom vrućeg ljepila i prije nego se ljepilo ohladi prislonite otpornik na vrh s "krakovima" oslonjenim na bakrene vrpce. U sljedećem koraku zalemite krajeve otpornika na bakrene vrpce, zatim odrežite višak krakova i zalijepite drveni dio broj 2 povrh otpornika. 299 | 300 | Završite blok ljepljenjem posljednjeg sloja, označenog brojem 1 te ponovite proceduru za svaki naredbeni blok :) 301 | 302 | ###CUBETTO 303 | 304 | Elektronika: 305 | 306 | Cubetto prototip možete izgraditi oko Arduino Uno ili Leonardo ploče, s proto bežičnim štitom povrh. Razlog za korištenje proto štita je taj što ima i mali razvojni dio, doboljno velik da se na njega učvrsti motor driver te konektori za optičke encodere, motore i napajanje. 307 | 308 | Cubetto se mora okretati 90 stupnjeva na lijevo i desno. Nažalost, korištenje vremenskog intervala poput "okreći se nadesno jednu sekundu" je vrlo nepouzdana metoda. Razlog leži skriven u brojnim parametrima o kojima operacija ovisi kao što su vrsta poda, snaga baterije, itd. Način na koji smo to riješili je razaznavanjem okreta kotača korištenjem optičkih encodera u paru sa naljepnicama. Naljepnica je okrugla i zaljepi se na unutrašnju stranu kotača gdje se nalazi CNY70 optički encoder (prema slici)... 309 | 310 | ![photo]({{ site.baseurl }}images/photo/diy-docs-14.jpg) 311 | 312 | Naljepnica je podijeljena u crne i bijele kriške. CNY70 u sebi sadrži infracrvenu diodu koja je stalno upaljena i fototranzistor koji očitava količinu infracrvenog svjetla koja se odbija od naljepnice na kotaču te pada na njega. Budući da se svjetlost različito odbija od bijele i crne površine (bijela odbija skoro svu svjetlost dok crna apsorbira skoro svu svjetlost), varijacija signala koji izlazi iz fototranzistora je povezana s rotacijom kotača. 313 | 314 | ![photo]({{ site.baseurl }}images/illustrations/cny70-physycs.jpg) 315 | 316 | Razvojni dio bežičnog proto štita na kojem se nalaze motor driver i ostali konektori za druge dijelove (zalemljeni na ploču). Za konektore jednostavno koristite muške i ženske pin konektore. 317 | 318 | 319 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections.jpg) 320 | 321 | Za ove konektore smo iskoristili muške i ženske pin konektore. 322 | 323 | ![photo]({{ site.baseurl }}images/photo/diy-docs-12.jpg) 324 | 325 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections-1.jpg) 326 | 327 | SN754410 motor driver ima 16 kontakata koji moraju biti spojeni prema slijedećoj shemi: 328 | 329 | ![photo]({{ site.baseurl }}images/illustrations/motor-driver.jpg) 330 | 331 | CNY70 shema kontakata: 332 | 333 | 334 | 335 | Dizajn: 336 | 337 | Započnite laserskim rezačem datoteke cubetto.dxf. Svi dijelovi Cubetta su izrezani od 4mm debele šperploče. Slijedite vizualne upute za izgradnju osnove: 338 | 339 | ![photo]({{ site.baseurl }}images/illustrations/cubetto-guide.jpg) 340 | 341 | Nemojte još staviti motore, prvo trebate pričvrstiti kuglice na podnožje (ball casters). 342 | 343 | ![photo]({{ site.baseurl }}images/illustrations/ball-caster.jpg) 344 | 345 | ![photo]({{ site.baseurl }}images/photo/diy-docs-9.jpg) 346 | 347 | Zatim slijede CNY70 encoderi. Zalemite na žicu dva suprotna pin konektora koji moraju biti spojeni na 5V. Zatim zalemite tri žice na preostale konektore CNY70 encodera s jedne strane te na niz od 3 ženska pin konektora. Oni će kasnije biti spojeni na pinove na proto štitu. 348 | 349 | Dva CNY70 encodera moraju biti postavljena na rub donjeg sloja, s LED i fototranzistorom u vodoravnom položaju. Da biste ih pričvrstili možete koristiti vruće ljepilo (ili neko drugo ljepilo). 350 | 351 | Pogledajte sliku da biste bolje razumjeli položaj CNY70 encodera... 352 | 353 | ![photo]({{ site.baseurl }}images/photo/diy-docs-11.jpg) 354 | 355 | Isto kao i pri CNY70, zalemite dvije žice na mala kontaktna krilca koja izviruju iz svakog motora. Možete i uplesti dvije žice kako biste ih napravili čvršćima te na kraju zalemite par ženskih pin kontakata, kao na ilustraciji: 356 | 357 | Sada isprintajte nacrt s bijelim i crnim kriškama, zalijepite ih na komad kartona (ili laserski izrezanog drveta/šperploče, što god vam se više sviđa) i napravite rupu u sredini budući da će biti umetnuti između motora i kotača. Crno-bijele kriške moraju biti okrenute prema unutrašnjosti Cubetta te udaljenost između crteža i CNY70 encodera mora biti između 1 i 3 milimetra da bi CNY70 encoder radio ispravno. 358 | 359 | ![photo]({{ site.baseurl }}images/photo/diy-docs-10.jpg) 360 | 361 | Sad možete staviti kotače na motore, ukoliko ste koristili Solarbotics kotače, možete ih pričvrstiti priloženim vijkom - ne zatežite vijak prejako. 362 | 363 | Zalijepite tri od četiri zida Cubetta, dijelove označene s 5, 7 i 8. Ostavite stražnju stranu sobodnu, za slučaj da želite nešto promijeniti. 364 | 365 | Uzmite kućište za baterije i zalemite dva ženska pin kontakta na crnu i crvenu žicu. Kontakti će na štitu biti spojeni na VIN i GND. Vrlo je poželjno ugraditi i prekidač kojim možete isključiti Cubetta. 366 | 367 | ![photo]({{ site.baseurl }}images/photo/diy-docs-13.jpg) 368 | 369 | Sad možete staviti Arduino i proto štit povrh motora, spojite sve konektore i završili ste pravljenje svog Cubetta. 370 |
371 | 372 | ##Arduino 373 | 374 | ###[Download Arduino dokumente](https://github.com/primo-io/arduino-sketches/raw/master/primo-prototype-arduino.zip) 375 | 376 | Upute su na engleskom u komentarima crteža. -------------------------------------------------------------------------------- /languages/dutch.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Cubetto prototype documentatie 4 | language: Nederlands 5 | category: language 6 | --- 7 | 8 |
9 | 10 |
11 | ##0. Doel van dit document 12 | 13 | ![primo play set]({{ site.baseurl }}images/photo/maker-guide.jpg) 14 | Dit document bevat alle informatie die nodig is om een Primo Prototype te maken. 15 | Meer informatie over het project vind je op de [primo.io](http://primo.io)-website. 16 | 17 |
18 | 19 | ##1. Wat is Primo? 20 | 21 | ![primo play set]({{ site.baseurl }}images/photo/primo.jpg) 22 | 23 | Primo is een tastbare interface, ontworpen om programmeerlogica te introduceren bij jonge kinderen (3 tot 7 jaar), zonder dat ze hoeven te kunnen lezen. Het doel van het spel is om een kleine robot, genaamd Cubetto, naar zijn huis te laten rijden. Om dit doel te bereiken, zullen kinderen de robot moeten programmeren met behulp van een beperkte set instructies: vooruit, linksom, rechtsom en functie. De eerste drie zijn redelijk intuïtief. De laatste roept een subroutine aan; een extra regel met instructies aangeroepen door één commando. 24 | 25 |
26 | 28 |
29 | 30 | ##2. Onderzoek 31 | 32 | Kinderen leren programmeren is een wereldwijd besproken onderwerp. We zijn ons bewust van een bescheiden aantal oplossingen die dit proberen te bereiken voor kinderen van 8 jaar en ouder. Echter, de meeste van deze oplossingen zijn niet geschikt voor jonge kinderen. En geen enkele werken zonder een beeldscherm of zonder te hoeven lezen. Er verschijnt een groeiend aantal apps voor tablets en computers die ook werken in combinatie met fysieke robots, maar geen van deze zijn volledig vrij van het pixeldomein, zoals de Primo speelset dat wel is. 33 | 34 | Er is voor hout gekozen als primair materiaal, vooral omdat het natuurlijk is; je krijgt er warme gevoelens van en het maakt een mooi geluid. De tweede reden is cultureel. Er is gekeken naar spelletjes in traditionele kleuterscholen in Zwitserland (waar dit product oorspronkelijk is ontworpen) en daaruit bleek dat de geliefde spelletjes allemaal gemaakt zijn van hout. Houten speelgoed is zeer duurzaam en je kunt er krassen en deuken io zien, tekenen van het gebruik van andere kinderen. Het is een materiaal met geheugen. Hout is ook gekozen als materiaal, omdat het een sterk contrast heeft met technologie. Er zit een printplaat binnenin Primo, maar we wilden een "magische" beleving maken door de complexiteit van de speelset te verbergen. 35 | 36 | 37 | 38 | Het concept achter Primo is sterk geïnspireerd door het werk van Seymour Papert, een wiskundige die in de jaren zestig het MIT Artificial Intelligence Laboratory oprichtte, samen met Marvin Minsky (indien je meer wilt weten of dit onderwerp, dan raden we je aan om [Mindstorms](http://www.amazon.co.uk/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746/ref=sr_1_1?ie=UTF8&qid=1393675158&sr=8-1&keywords=mindstorms+papert) te lezen, zijn meest bekende boek). Hij gaf leiding aan het team dat [LOGO](http://en.wikipedia.org/wiki/Logo_(programming_language)) bedacht, waarschijnlijk de meest en langst gebruikte bron om kinderen te leren programmeren. Het doel van Seymour Papert was niet om kinderen alleen te leren coderen, maar ook om kinderen hun eigen manier van probleemoplossing te laten ontdekken. Primo mag beschouwd worden als een extreme versimpeling van LOGO en de fysieke schildpad. We hebben het aantal instructies beperkt, in zijn puurste vorm, om enige tekstuele of numerieke taal te omzeilen. 39 | 40 | Het eerste prototype werd gemaakt in SUPSI Lugano door Matteo Loglio (medeoprichter van Primo.io en interactie ontwerper), tijdens zijn [MAInD - Master of Advanced Studies in Interaction Design](http://www.maind.supsi.ch/). Matteo heeft als achtergrond productontwerp. Nadat hij de basis van Arduino had geleerd en een beetje kon programmeren om het prototype te maken, is hij op zoek gegaan naar technische oplossingen, die toegankelijk zijn voor een beginner, om een applicatie te kunnen ontwikkelen, zoals Primo. Er waren twee uitdagingen: een robotauto maken (vanaf nul) en een interfacebord dat makkelijke verschillende instructies herkent. 41 | 42 | De eerste uitdaging werd opgelost door een [Oh_Oh board](http://david.cuartielles.com/w/Maquila2/Ohoh) van David Cuartielles te gebruiken, één van de Arduino oprichters die een lezing gaf in SUPSI. De Oh_Oh robot is een open project, je kunt de bronbestanden vinden via bovenstaande link. Het is Arduino in een autovorm; alleen voor de draadloze communicatie werd een XBee toegevoegd. 43 | 44 | De tweede uitdaging was het ontwerpen van een betrouwbare manier om de blokken te onderscheiden. De oplossing was geïnspireerd door een [CIID](http://ciid.dk/)-project genaamd ["Barcode Piano"](http://ciid.dk/education/portfolio/idp11/courses/physical-computing/projects/barcode-piano/). 45 | 46 |
47 | 49 |
50 | 51 | 52 | Het idee is om meerdere blokken te gebruiken, die door weerstandwaardes herkend worden door een bord. Het is een eenvoudige spanningsdeler, waarbij de analoge pinnen van de Arduino de weerstandwaardes uitlezen. Het is een simpele methode, maar zeer effectief voor een prototype. 53 | 54 | Sommige mogelijkheden moesten getest worden; het uiteindelijke ontwerp is het resultaat van meerdere iteraties. 55 | 56 | Het 'slang'- of 'zigzag'-pad van de instructievolgorde werd gekozen om invloeden van aangeleerd leesgedrag uit te sluiten. 57 | 58 | ![left to right]({{ site.baseurl }}images/illustrations/left-to-right.jpg) 59 | 60 | De 'D'-vorm van de blokconnectoren zorgt ervoor dat de blokken maar op één manier gebruikt kunnen worden en om consistent te zijn met het padontwerp en de richting van de auto. 61 | 62 | ![instruction blocks]({{ site.baseurl }}images/photo/instruction-blocks.jpg) 63 | 64 | Het ontwerp voor de vorm van de instructieblokken wordt nog steeds getest. Het huidige ontwerp werkt redelijk goed; kinderen pakken makkelijk het juiste blok, ze hebben in het begin alleen wat moeite om te wennen aan de linksom- en rechtsomblokken. Dit komt ook omdat "links" en "rechts" redelijk nieuwe begrippen voor ze zijn. We testen op dit moment andere vormen, om dit nog verder te verbeteren. 65 | 66 |
67 | 70 |
71 | 72 | In eerste instantie was de robot een speelgoedauto. Een zeer complexe en tijdrovende vorm om te maken, omdat het een vorm (uitgesneden met een lasercutter) is die laag voor laag aan elkaar geplakt is en daarna meer dan een uur geschuurd moet worden. De auto had ook een andere beperking; het was zeer gericht op jongens. Als 'breinspeelgoed'-maker wilden we discussies en opmerkingen over jongensgericht speelgoed voorkomen. We wilden neutraal blijven en wilden geen speelgoed ontwerpen speciaal voor jongens of meisjes. Daarom hebben we gekozen voor een zeer neutrale vorm, een doos. 73 | 74 | Er werd een naam, persoonlijkheid en een glimlach gegeven aan het doosje, zodat het aantrekkelijker werd voor kinderen. De robot heet "Cubetto" (Italiaans voor "kleine kubus"). Het idee is ook om een basismodule te maken van Cubetto, dat later makkelijk uitgebreid en aangepast kan worden in de toekomst. 75 | 76 | ![cubetto]({{ site.baseurl }}images/photo/cubetto.jpg) 77 | 78 | ##3. Om te beginnen 79 | 80 | ###3.1 De basis 81 | 82 | Primo bestaat uit drie delen: een interfacebord, Cubetto en een set instructieblokken. Door instructieblokken in het interfacebord te plaatsen, maken kinderen een instructieset (een programma) welke Cubette uitvoert. 83 | 84 | Er zijn vier type instructieblokken. Hierdoor moeten 4 verschillende weerstandwaardes gebruikt worden; het liefst met een groot waardeverschil tussen elkaar. 85 | 86 | De blokken worden in de gaten van het interfacebord geplaatst, waar de weerstandwaarde wordt herkent. Daarna worden de waardes verwerkt in een tekenreeks welke naar Cubetto worden gestuurd met behulp van twee XBee-modules. Cubette voert deze instructies vervolgens uit, één voor één. 87 | 88 | Het brein van het prototype is gemaakt met twee Arduino's, een UNO (een Leonardo of Duemilanove kan ook) voor Cubetto en een Mega voor het interfacebord, waar 16 analoge inputs nodig zijn. 89 | 90 | ###3.2 Electronica 91 | 92 | ###Benodige gereedschappen 93 | 94 | * Soldeerbout 95 | * Soldeertin 96 | * Draad 97 | * Lijmpistool 98 | * Houtlijm 99 | * Kopertape (5mm breed) 100 | 101 | ###Materialen (prijzen in Euro) 102 | 103 | Cubetto ~ 88 € 104 | 105 | * Arduino UNO (of Leonardo) - 20 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195#.UxC5nfTV_bA) 106 | * Arduino Proto Wireless Shield - 14.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 107 | * SN754410 motor driver - 3.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_33&products_id=153#.UxC5-_TV_bB) 108 | * XBee (serie 1 of 2, maakt niet uit welke) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 109 | * 2 x SolarBotics wielen : 4.74 € - [Solarbotics Store](https://solarbotics.com/product/gmpw/) 110 | * 2 x SolarBotics Gear Motors GM3 : 8.36 € - [Solarbotics Store](https://solarbotics.com/product/gm3/) 111 | * 2 x ball casters : 5.79 € - [Solarbotics Store](https://solarbotics.com/product/23160/) 112 | * CNY70 x 2 : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Vishay/CNY70/?qs=%2fha2pyFaduj8YpDhNNtXszq4w32cl%2fAjUjdOwQUvJUM%3d) 113 | * (optioneel) batterijhouder : 4 € - [Solarbotics Store](https://solarbotics.com/product/bholdaa_4_cell/) 114 | * (optioneel) 4 x oplaadbare batterijen 115 | 116 | Interfacebord ~ 88 € (puur toeval) 117 | 118 | * Arduino Mega 2560 : 39.00 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=196#.UxC_gPTV_bA) 119 | * Arduino Proto Wireless Shield : 14.90 - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 120 | * XBee (serie 1 of 2, maakt niet uit welke) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 121 | * 16 x 5mm rode LED's : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Lite-On/LTL-4223/?Lite-On/LTL-4223/&qs=sGAEpiMZZMusoohG2hS%252b15J8d1kHl%252bvkJpzS4atZNEA=) 122 | * 16 x 220Ω-weerstand : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 123 | * 16 x 10KΩ-weerstand : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 124 | * 1 x knop : 1 € 125 | * 50 x male headers : 1 € 126 | * 16 x dubbele male headers : 0.50 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=294#.UxC_3fTV_bA) 127 | * 50 x female headers : 1 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=188#.UxDAAfTV_bA) 128 | * 16 x magneten ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 129 | 130 | Instructie blokken ~ 4 € 131 | 132 | * 4 x 4.7KΩ-weerstand : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-47K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2fbdyz6pU6a%252bvHlD5kaZWgo%3d) 133 | * 4 x 100KΩ-weerstand : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-100K-RC/?qs=sGAEpiMZZMu61qfTUdNhG81NIhcRRUJQxII5Nsctha8%3d) 134 | * 4 x 220Ω-weerstand : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 135 | * 4 x 10KΩ-weerstand : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 136 | * 16 magneten ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 137 | 138 | ###3.3 Spanning 139 | 140 | Cubetto en (optioneel) het interfacebord worden gevoed door batterijen. Je kunt LiPo- of AA-batterijen gebruiken voor het prototype, die keuze is aan jou. Wij hebben beide gebruikt; LiPo-batterijen zijn erg goed, maar hebben extra benodigheden nodig. Als je vanaf nul begint, raden we AA-batterijen aan. Ze raken wel snel leeg; daarom kun je het beste oplaadbare batterijen gebruiken, zoals NiMh. 141 | 142 | ###3.4 Ontwerp van het prototype 143 | 144 | Het hele product is gemaakt van hout en uitgesneden met behulp van een lasercutter. Er is voornamelijk triplex van 4 mm gebruikt, terwijl voor één laag 1 mm dik hout (vliegtuigtriplex) gebruikt is. Je kunt deze onderdelen laten snijden door een dienst zoals Ponoko of in een FabLab bij je in de buurt. Het eerste prototype werd gemaakt in [FabLab Lugano](http://fablab.supsi.ch/). Het ontwerp werd verder ontwikkeld in [FabLab Torino](http://fablabtorino.org/), waar een deel van het Primo-ontwerpteam nog steeds zit. 145 | 146 | Het maken van Cubetto en het interfacebord is een bewerkelijk, maar erg simpel proces. Hun buitenkanten zijn in de basis dozen. De echte complexiteit ligt in de instructieblokken. Deze zijn gemaakt van een dubbele 4mm houten laag met een magneet en een gesoldeerde weerstand binnenin. 147 | 148 | ##4. Het prototype maken 149 | 150 | ###[Download de lasercutter-bestanden](files/primo-prototype-laser.zip) 151 | 152 | ###4.1 Interfacebord 153 | 154 | Om het interfacebord te maken heb je twee bestanden nodig: interface-board-4mm.dxf en interface-board-1mm.dxf: het eerst is voor het triplex van 4 mm dik en de tweede voor het triplex van 1 mm dik. De onderdelen zijn genummerd, zodat je ze makkelijk kunt samenvoegen. De nummers zitten in een aparte laag in het bestand, dus je kunt ze makkelijk verwijderen voordat je gaat snijden. We raden je aan om het gat voor de knop aan te passen aan de grootte van de knop die je gaat gebruiken. 155 | 156 | Lijm de delen 1 en 2 aan elkaar. Lijm ook de delen 3 en 4 aan elkaar. Je kunt de gaten in de hoeken gebruiken om de delen te positioneren met behulp van boutjes en moertjes terwijl de lijm een nachtje droogt. 157 | 158 | Knip daarna 32 stukken kopertape van 70 mm lang per stuk en plak deze in de rechthoekige gaten in het deel (laag 3+4) dat je zojuist gelijmd hebt; aan beide zijden moet minimaal 30 mm zitten. 159 | 160 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-1.jpg) 161 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-2.jpg) 162 | 163 | Zodra je klaar bent, kun je de twee delen aan elkaar plakken, 1+2 aan 3+4. 164 | 165 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-esploso.jpg) 166 | 167 | Zodra de lijm droog is, plaats je de magneten in de kleine gaten. Leg de toplaag op de kop en plaats de magneten in de kleine gaten, zorg ervoor dat de polariteit van de magneten allemaal gelijk is, het maakt niet uit of dat noord of zuid is. Lijm de magneten vast met een druppel lijm. 168 | 169 | Nu verder met de electronica. Maak twee sporen voor 5V en GND, zoals je hieronder ziet in de afbeelding. Het eerste prototype had geen kopersporen, het had draden (dat kun je ook gebruiken), maar in dit prototype hebben we kopertape gebruikt voor de sporen. Dat scheelt je 100% van de tijd. Het maakt het maken van verbindingen ook makkelijker. 170 | 171 | ![rails]({{ site.baseurl }}images/illustrations/board-3.jpg) 172 | 173 | De volgende stap is het verbinden van één van de connectoren van elk gat aan het GND-spoor. Als je kopertape hebt gebruikt, kun je een extra stukje toevoegen, zodat deze beide uiteinden raakt. 174 | 175 | ![rails]({{ site.baseurl }}images/illustrations/board-5.jpg) 176 | 177 | Nu gaan we de andere connector verbinden aan het 5V-spoort, maar nu met een 10KΩ-weerstand ertussen. Een mooie bijkomstigheid van kopertape is dat het soldeertin makkelijk erop smelt. Deze techniek is gebruikt: 178 | 179 | ![10k]({{ site.baseurl }}images/photo/diy-docs-1.jpg) 180 | 181 | Dit is wat je ongeveer moet hebben als je klaar bent: 182 | 183 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-6.jpg) 184 | 185 | Nu kun je de LED's plaatsen; stop één rode LED in elk van de 16 gaten en zet deze vast m.b.v. het lijmpistool. Zodra de lijm koud is, kun je 'm verbinden. Houd er rekening mee dat LED's polariteit hebben: de lange draad is de anode en de korte de cathode. 186 | 187 | ![10k]({{ site.baseurl }}images/photo/diy-docs-6.jpg) 188 | 189 | Verbind elke cathode aan het GND-spoor met een 220Ω-weerstand ertussen in. 190 | 191 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-7.jpg) 192 | 193 | De lange draad van een LED wordt verbonden aan een digitale I/O-pin van de Arduino Mega; deze pinnen zijn genummerd van 22 t/m 53. De LED's moeten in volgorde aangesloten worden, zodat het makkelijker wordt om ze in de code aan te sturen. In mijn prototype heb ik, bijvoorbeeld, de pinnen 30 t/m 45 gebruikt (er zijn 16 LED's). 194 | Het startpunt is niet belangrijk, zolang je ze maar in de juiste volgorde aansluit. Dit betekent dat, als we, bijvoorbeeld, beginnen met pin 30, de eerste LED aan pin 30 verbonden moet worden, de tweede aan pin 31, de derde aan pin 32, enzovoorts, tot en met LED 16 aan pin 45. 195 | 196 | De draden zijn gesoldeerd aan de dubbele male headers, omdat de digitale pinnen van de Arduino Mega in een dubbele lijn zijn gepositioneerd. Op deze manier is het makkelijk om de LED's aan te sluiten en om de Arduino uit het bord te kunnen halen. 197 | 198 | ![rack]({{ site.baseurl }}images/photo/diy-docs-4.jpg) 199 | 200 | Zodra alle LED's zijn gesoldeerd, moeten we onze handgemaakte connector solderen. Deze wordt aangesloten op de analoge pinnen van de Arduino Mega, om de verschillende weerstandwaardes uit te lezen. Net zoals bij de LED's moeten deze in de juiste volgorde worden aangesloten, te beginnen bij A0 voor gat 1 t/m A15 voor gat 16. De draad begint op dezelfde plek als waar we de 10KΩ-weerstand hebben vastgemaakt. Zie deze illustratie: 201 | 202 | ![analog input board connections]({{ site.baseurl }}images/illustrations/board-8.jpg) 203 | 204 |
205 | 206 | 207 |

208 | Hier heb ik enkele male headers gebruikt, omdat de analoge pinnen op één lijn staan. 209 | 210 |

211 | 212 |

213 | Het laatste om te verbinden is de knop: pak het en soldeer twee draden aan de tegen overelkaar gelegen headers. Plaats de knop dan in het bijbehorende gat vanaf de bovenkant en druk het helemaal naar beneden, totdat het niet verder kan. Draai nu het bord om; er moeten nu twee draden uit de gaten komen. Verbind deze, zoals je in de afbeelding ziet: één direct naar het 5V-spoor, de andere naar het GND-spoor met een 10KΩ-weerstand ertussen. Verbind het dan met een digitale pin van de Arduino vanaf de 'knop'-kant van de weerstand. In dit voorbeeld gebruiken we pin 50. 214 |

215 |
216 | 217 | ![photo]({{ site.baseurl }}images/photo/diy-docs-5.jpg) 218 | 219 | Het bord is nu bijna klaar, we hoeven nu alleen nog maar het Wireless Shield op de Arduino Mega te plaatsen en de headers op de juiste plaats in het bord te steken. Ter herinnering, 30 t/m 45 zijn voor de LED's, A0 t/m A15 voor de blokconnectoren en 50 voor de knop. Gebruik de A0 t/m A5-pinnen voor de eerste 5 connectoren van het Wireless Shield. Vergeet niet om het GND-spoor te verbinden aan de GND-pin en het 5V-spoor aan de 5V-pin. 220 | 221 | ![rack]({{ site.baseurl }}images/photo/diy-docs-3.jpg) 222 | 223 | Nu een beetje afwerking: nadat je deel 12 van het bord hebt geverfd, kun je het vastlijmen aan deel 13 van het bord. 224 | 225 | Hetzelfde geldt voor de rode knop: nadat deel 14 is geverfd, bevestig je iets zachts (zoals karton) op deel 2 rondom de knop en dan wat lijm op de knop en, voordat de lijm droog is, bevestig je de rode knop. Zie de afbeeldingen: 226 | 227 | ![photo]({{ site.baseurl }}images/illustrations/button-mechanics.jpg) 228 | 229 | ###INSTRUCTIEBLOKKEN 230 | 231 | Dit is één van de instructieblokken, in onderdelen: 232 | 233 | 234 | 235 | Om de instructieblokken te maken, begin je met het snijden van het hout (m.b.v. een lasercutter). Er zijn twee bestanden nodig: één voor het 4 mm triplex en één voor het 1 mm triplex. De blokken bestaan uit 4 lagen, genummerd 1 t/m 4. Met de onderdelen uit de twee bestanden, kun je precies 16 blokken maken, vier van elk type. 236 | 237 | Elk blok heeft een andere weerstand. Dit zijn de weerstanden die gebruikt zijn in het prototype: 238 | 239 | VOORUIT: 4.7K Ω
240 | LINKSOM: 10K Ω
241 | RECHTSOM: 220 Ω
242 | FUNCTIE: 100K Ω 243 | 244 | Lijm eerst de delen 3 en 4 aan elkaar. 245 | 246 | Zodra de lijm droog is, kun je gaan verven. In de afbeelding hieronder zie je welke kleur elk onderdeel moet krijgen: 247 | 248 | ![image]({{ site.baseurl }}images/illustrations/colors.jpg) 249 | 250 | Per blok heb je twee stukken kopertape van 40 mm lang nodig. Steek deze door de gaten van de delen die je net gelijmd hebt en maak hier een strakke ring van. 251 | 252 | ![photo]({{ site.baseurl }}images/illustrations/instruction-block-guide.jpg) 253 | 254 | Daarna plaats je een magneet in het gat. Zorg ervoor dat deze CORRECT GEORIENTEERD is, zodat het blok later 'plakt' in het interfacebord. Als je 'm andersom plaatst, dan wordt deze afgestoten door de andere magneet. Een grappig effect, maar niet wat we willen bereiken. 255 | 256 | Fixeer de magneet met een drup lijm en plak daarop de juiste weerstand met de draden op het kopertape. 257 | Soldeer daarna de weerstand aan de beide stukken kopertape. Knip, na het solderen, de extra draadlengte af en lijm deel 2 op de weerstand. 258 | 259 | Maak je blok af door de laatste laag, deel nummer 1, erop te lijmen. Herhaal dan dit proces voor elk blok :) 260 | 261 | ###CUBETTO 262 | 263 | Electronica: 264 | 265 | Het prototype voor Cubetto kan gemaakt worden met een Arduino UNO of Leonardo, met een Proto Wireless Shield erop. We gebruiken het Proto Shield, omdat er een klein prototypegebied op zit dat breed genoeg is voor de motor driver en de connectoren voor de optische encoders, motoren en stroom. 266 | 267 | Cubetto moet 90 graden naar links of recht draaien. Een zeer onnauwkeurige manier om dit te doen is op basis van tijd, zoals "draai 1 seconde naar rechts"; je kunt dan elke keer ongeveer hetzelfde resultaat verwachten. "Ongeveer", omdat het afhankelijk is van vele factoren, zoals de vloer, batterijspanning enz. Ik heb dit probleem opgelost door de draaiafstand van het wiel te detecteren m.b.v. twee CNY70 optische encoders in combinatie met een sticker. De ronde sticker komt aan de binnenkant van het wiel en ziet er ongeveer zo uit: 268 | 269 | ![photo]({{ site.baseurl }}images/photo/diy-docs-14.jpg) 270 | 271 | De sticker is verdeeld in witte en zwarte punten, omdat de CNY70 het verschil kan detecteren tussen de witte en zwarte stukken. De CNY70 heeft een infrarood-LED die continu aan is en een fototransistor die de hoeveelheid infraroodlicht meet. Als zwart materiaal voor het onderdeel staat, wordt er bijna geen licht gereflecteerd, omdat zwart materiaal licht absorbeert. Als het materiaal wit is, dan wordt al het licht gereflecteerd en daarom zal de sensorwaarde heel hoog zijn. Het verschil tussen de waardes wordt gebruikt om de draaiafstand te meten. 272 | 273 | ![photo]({{ site.baseurl }}images/illustrations/cny70-physycs.jpg) 274 | 275 | De motor driver en de connectoren voor de andere onderdelen worden op het prototypinggebied van het Wireless Proto Shield gesoldeerd. Hiervoor kun je male headers gebruiken als connector en female headers voor de andere onderdelen. 276 | 277 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections.jpg) 278 | 279 | Hier heb ik simpele male headers gebruikt als connector en female headers voor de andere connector. 280 | 281 | ![photo]({{ site.baseurl }}images/photo/diy-docs-12.jpg) 282 | 283 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections-1.jpg) 284 | 285 | De SN754410 motor driver heeft 16 pinnen, die als volgt aangesloten moeten worden: 286 | 287 | ![photo]({{ site.baseurl }}images/illustrations/motor-driver.jpg) 288 | 289 | CNY70-schema: 290 | 291 | ![image]({{ site.baseurl }}images/illustrations/cny70-wiring.jpg) 292 | 293 | Ontwerp: 294 | 295 | Snij (m.b.v. een lasercutter) eerst alle onderdelen van cubetto.dxf; alle Cubetto-onderdelen komen uit 4 mm dik triplex. Volg deze visuele instructies om de basis te bouwen: 296 | 297 | ![photo]({{ site.baseurl }}images/illustrations/cubetto-guide.jpg) 298 | 299 | Monteer de motoren nog niet, begin met het monteren van de ball casters. 300 | 301 | ![photo]({{ site.baseurl }}images/illustrations/ball-caster.jpg) 302 | 303 | ![photo]({{ site.baseurl }}images/photo/diy-docs-9.jpg) 304 | 305 | Nu de CNY70. Soldeer de twee tegenover elkaar gelegen headers (diagonaal) (die aan de 5V verbonden moeten worden) en een draad; soldeer daarna twee draden aan de overige twee headers. Soldeer deze drie draden aan een rij van drie female headers. Deze wordt later aangesloten op de headers van het proto shield. 306 | 307 | ![image]({{ site.baseurl }}images/illustrations/cny70-header.jpg) 308 | 309 | De twee CNY70's moeten aan de rand van de grondplaat vastgemaakt worden, met de LED en de fototransistor horizontaal. Je kunt lijm gebruiken om ze vast te maken. 310 | 311 | Op de foto zie je de exacte locatie. 312 | 313 | ![photo]({{ site.baseurl }}images/photo/diy-docs-11.jpg) 314 | 315 | Soldeer draden aan de kleine aansluitingen van de motoren. Je kunt de draden om elkaar draaien om het sterker te maken. Soldeer twee female headers aan het eind, zoals je op de afbeelding ziet: 316 | 317 | ![image]({{ site.baseurl }}images/illustrations/motor-wiring.jpg) 318 | 319 | Print nu de tekening met witte en zwarte punten en plak deze op een stuk karton (of hout, dat is aan jou). Knip de randen bij en maak een gat in het midden, omdat dit onderdeel tussen het wiel en de motor komt. De witte en zwarte punten moeten naar de binnenkant van Cubetto wijzen en de afstand tussen de print en de CNY70 moet tussen de 1 en 3 mm liggen, om ervoor te zorgen dat de CNY70 goed werkt. 320 | 321 | ![photo]({{ site.baseurl }}images/photo/diy-docs-10.jpg) 322 | 323 | Nu kun je de wielen vastmaken aan de motoren. Als je de Solarbotics wielen gebruikt, dan kun de deze vastmaken met de meegeleverde schroef (niet te vast draaien). 324 | 325 | Lijm drie van de vier 'muren' van Cubetto, delen 5, 7 en 8. De achterkant laten we los, voor het geval we nog iets moeten aanpssen. 326 | 327 | Pak de batterijhouder en soldeer de zwarte en rode draad aan 2 female headers. De headers op het shield gaan naar VIN en GND. Een schakelaar die de rode draad onderbreekt, wordt sterk aangeraden. 328 | 329 | ![photo]({{ site.baseurl }}images/photo/diy-docs-13.jpg) 330 | 331 | Nu kun je de Arduino + Protoshield op de motoren plaatsen, alle headers aansluiten op het shield en je bent klaar met het maken van Cubetto. 332 |
333 | 334 | ##Arduino 335 | 336 | ###[Download de Arduino-bestanden](https://github.com/primo-io/arduino-sketches/raw/master/primo-prototype-arduino.zip) 337 | 338 | De instructies staan als commentaar in de sketches. 339 | -------------------------------------------------------------------------------- /languages/english.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Cubetto Prototype Documentation 4 | language: English 5 | category: language 6 | --- 7 | 8 |
9 | 10 |
11 | ##0. What is this document 12 | 13 | ![primo play set]({{ site.baseurl }}images/photo/maker-guide.jpg) 14 | This document gathers and organizes all the information necessary to build a Primo Prototype. 15 | You can find more info about the project on the [primo.io](http://primo.io) website. 16 | 17 |

18 | 19 | How to translate this document 20 | 21 |

22 | 23 | 24 |
25 | 26 | If you want to translate this page in your language, you have multiple options: 27 | 28 | 1. **super easy, no automation** Copy and paste this page in your text editor, translate it then mail it to us at [play@primo.io](mailto:play@primo.io) 29 | 30 | 2. **medium, light automation** Create an account on [GitHub](http://github.com), then open the [repository of this page](https://github.com/primo-io/prototype-documentation/blob/gh-pages/index.md) and click on 'EDIT', in the top menu bar: 31 | ![photo]({{ site.baseurl }}images/screenshots/edit-1.jpg) 32 | Then your page turns into a text editor, where you are able to modify the page source. The page is written in [markdown](http://daringfireball.net/projects/markdown/syntax), very easy to understand. 33 | ![photo]({{ site.baseurl }}images/screenshots/edit-2.jpg) 34 | You don't have to modify this code, but just copy and paste the whole text in your local text editor, then translate the textual parts in your language, without modifying the parenthesis and HTML parts. Save the text then mail it to us at [play@primo.io](mailto:play@primo.io) 35 | 36 | 3. **advanced, full automation** This is slightly advanced, but nothing too hard, if you are not familiar with GitHub you have the chance to learn something new :)
37 | If you are already familiar with git, you have to fork the repository, all the translations are located in the 'languages' folder. To translate the page, just copy it with the starting language ("english.md" for example) in the same folder, then change the file name with the final language (spanish.md). Change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter) then translate the rest of the document. Once finished, make a pull request to add your file to the folder, it will be automatically added to the menu.

38 | The steps above, expanded: 39 | 40 | 1. Make a GitHub account 41 | 2. Download the GitHub application ([Mac](http://mac.github.com/), [Windows](http://windows.github.com/)) 42 | 3. If it's the first time you use it, open it and input your GitHub login details 43 | 4. Go to [this documentation repository](https://github.com/primo-io/prototype-documentation) 44 | 5. Click on the "Fork" button in the top right corner, to fork this repository into your account. 45 | 6. Go to your giHub account, open the forked repository page and click on the "Clone in Desktop" button, on the right-hand sidebar. It will automatically open the GitHub application, asking where to save the local repository. 46 | 7. After selecting a folder path in your computer, click on "clone" 47 | 8. After downloading the files, navigate to your local folder where the repository has been downloaded. 48 | 9. Open the 'languages' folder, where all the translations are located. Select the starting language ("english.md" for example), then copy the file and rename it to your destination language ("spanish.md" for example), in the same folder. 49 | 10. Open the newly created file, change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter), then translate it to your language, keeping the markdown formatting 50 | 11. After the translation is completed and saved, it's time to re-upload it on GitHub. Open the GitHub application and double click on the repository. On the left sidebar, click on the "Changes" tab. It should say "Uncommitted Changes". 51 | 12. Give a title to your edits, like "spanish translation", then click on "commit" and then on the "sync" button. 52 | 13. Go to your GitHub profile, on the forked repository page. You should be able to see your newly created page in the 'languages' folder. On the top, there should be a green button with two arrows, click on it to issue a pull request. (see picture below) 53 | ![photo]({{ site.baseurl }}images/screenshots/pull-1.jpg) 54 | 55 | 14. Then click on "Create Pull Request" 56 | 57 | ![photo]({{ site.baseurl }}images/screenshots/pull-2.jpg) 58 | 59 | 15. Write a message for the pull request and that's it! Now we just have to approve the request. 60 |
61 |
62 | 63 | ##1. What is Primo 64 | 65 | ![primo play set]({{ site.baseurl }}images/photo/primo.jpg) 66 | 67 | Primo is a tangible interface designed to introduce programming logic to little children (3 to 7), without the need for literacy. The goal of the game is to drive a little robot called Cubetto back to his house. To accomplish the goal, children have to program the little robot using a limited set of instructions: forward, left, right and function. While the first three are rather intuitive, the last one calls a sub-routine, an extra line of instructions packed in a single command. 68 | 69 |
70 | 72 |
73 | 74 | ##2. Research 75 | 76 | Teaching programming to children is a widely debated topic. We are aware of a moderate number of solutions that try to accomplish this for children above the ages of 8. However, there aren't many of these solutions suitable for younger children, and there aren't any that work without a screen or without the need for literacy. We see an increasing number of Apps for tablets and computers that also work in combination with physical robots, but none of them are completely free from the pixel domain in the same way the Primo Play Set is. 77 | 78 | Wood was chose as the main material, first of all because it's natural; you get a warm feeling from it and it makes a nice sound. The second reason is cultural. Observations were conducted on games used in traditional kindergartens in Switzerland (where the product was originally designed) to discover that the games loved by children were all made out of wood. Wooden toys are very durable and you can see marks and scratches on them, signs of their past usage from other children. It's a material with memory. Wood was also chosen as a material because of the stark contrast it creates with technology. Inside of Primo there's a circuit board, but we wanted to create a "magical" experience, hiding the complexity of the play set. 79 | 80 | 81 | 82 | The concept behind Primo is heavily inspired by the work of Seymour Papert, a mathematician who co-founded the MIT Artificial Intelligence Laboratory with Marvin Minsky, in the sixties (if you are interested in the subject, we encourage you to read [Mindstorms](http://www.amazon.co.uk/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746/ref=sr_1_1?ie=UTF8&qid=1393675158&sr=8-1&keywords=mindstorms+papert), his most famous book). He was directing the team who invented [LOGO](http://en.wikipedia.org/wiki/Logo_(programming_language)), probably the most used and long lasting resource to teach programming to children. The goal of Seymour Papert was not just to teach code, but also to help children discover their own personal way of solving problems. Primo can be considered an extreme simplification of LOGO and the physical turtle. We limited the instructions, to their purest form, avoiding any kind of textual or numerical language. 83 | 84 | The first prototype was realised in SUPSI Lugano by Matteo Loglio (Primo.io co-founder and interaction designer), during the [MAInD - Master of Advanced Studies in Interaction Design](http://www.maind.supsi.ch/). Matteo's background is in product design, and after learning the Arduino basics and a bit of code to create the prototype, began to look around for technical solutions that were approachable for a novice, so as to develop an application like Primo. The main issues were two: making a robot car from scratch and an interface board that could easily recognize different instructions. 85 | 86 | The first issue was solved by using an [Oh_Oh board](http://david.cuartielles.com/w/Maquila2/Ohoh) from David Cuartielles, one of the Arduino founders who was holding a lecture in SUPSI. The Oh_Oh robot is an open project, you can find the source files in the link above. It is basically a car shaped Arduino, only an XBee for radio communication was added. 87 | 88 | The second issue was designing a reliable way to detect the blocks. A solution was inspired by a [CIID](http://ciid.dk/) project called ["Barcode Piano"](http://ciid.dk/education/portfolio/idp11/courses/physical-computing/projects/barcode-piano/). 89 | 90 |
91 | 93 |
94 | 95 | The idea is to use multiple blocks that can be recognized by a board using resistors. It's a basic voltage divider, with the analog pins of an Arduino reading the resistor values. It's a very simple method, but rather effective for a prototype. 96 | 97 | Design-wise, some features required testing; the actual design is the result of several iterations. 98 | 99 | The 'snake' or 'zig-zag' path of the instruction sequence was chosen to avoid literacy pre-conceptions. 100 | 101 | ![left to right]({{ site.baseurl }}images/illustrations/left-to-right.jpg) 102 | 103 | The 'D' shape of the block connectors, was designed so that blocks could be inserted just one way, to be consistent with the path design and the direction of the car. Multiple designs can be used for this. The D shape was chosen as it is basically an 'oriented circle' and as a shape, also recalls similar pin-board designs. 104 | 105 | ![instruction blocks]({{ site.baseurl }}images/photo/instruction-blocks.jpg) 106 | 107 | The design for the shape of the instruction blocks is still being tested. The actual design works quite well, children easily grasp their meaning, they just have some troubles at the first to get familiar with the left and right block. This is also because the "right" and "left" concept is generally quite new for them. We are currently testing other blocks design, to improve this even further. 108 | 109 |
110 | 113 |
114 | 115 | At the beginning the robot was a toy car. A very complicated and time consuming shape to produce, as it's a laser-cut shape glued together layer by layer, and subsequently sanded for over an hour. The car had another major issue, it was very boy oriented. We wanted to avoid entering in discussions about 'brain toy' producers being criticised of only producing boy-oriented toys. We wanted to stay neutral, we didn't want to create a toy specifically for boys or girls, and instead opted for a very neutral geometry, a box. 116 | 117 | A name was given to the little box, along with a personality and a similey face, making it even more appealing for children. The robot is called Cubetto (little cube in Italian). The idea with Cubetto is also to create a basic module that can be expanded and customized easily in the future. 118 | 119 | ![cubetto]({{ site.baseurl }}images/photo/cubetto.jpg) 120 | 121 | ##3. Getting Started 122 | 123 | ###3.1 The basics 124 | 125 | Primo is composed of three parts: An Interface Board, Cubetto and a set of Instruction Blocks. Children interact with the Interface Board by placing Instruction Blocks into the holes, to create a sequence (A program) that Cubetto executes. 126 | 127 | There are four types of Instruction Blocks, this means that resistors of 4 different values can be used, possibly quite distant between each other. 128 | 129 | The blocks are inserted into the holes of the Interface Board, where the resistor value is identified. After that, the values are processed into a string that is sent to Cubetto using two XBee modules. Cubetto then executes the instructions, one after the other. 130 | 131 | The brain of the prototype is made of two Arduino Boards, a UNO (A Leonardo or a Duemilanove will also do) for Cubetto, and a Mega for the Interface Board, where 16 analog inputs are required. 132 | 133 | ###3.2 Electronics 134 | 135 | ###Tools Required 136 | 137 | * Soldering Iron 138 | * Solder 139 | * Wires 140 | * Hot Glue Gun 141 | * Wood Glue 142 | * Copper Tape 5mm wide 143 | 144 | ###Materials (prices in euro) 145 | 146 | Cubetto ~ 88 € 147 | 148 | * Arduino UNO (or Leonardo) - 20 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195#.UxC5nfTV_bA) 149 | * Arduino Proto Wireless Shield - 14.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 150 | * SN754410 Motor Driver - 3.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_33&products_id=153#.UxC5-_TV_bB) 151 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 152 | * SolarBotics Wheels x 2 : 4.74 € - [Solarbotics Store](https://solarbotics.com/product/gmpw/) 153 | * SolarBotics Gear Motors GM3 x 2 : 8.36 € - [Solarbotics Store](https://solarbotics.com/product/gm3/) 154 | * 2 Ball Casters : 5.79 € - [Solarbotics Store](https://solarbotics.com/product/23160/) 155 | * CNY70 x 2 : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Vishay/CNY70/?qs=%2fha2pyFaduj8YpDhNNtXszq4w32cl%2fAjUjdOwQUvJUM%3d) 156 | * (optional) Battery Holder : 4 € - [Solarbotics Store](https://solarbotics.com/product/bholdaa_4_cell/) 157 | * (optional) 4 x Rechargeable Batteries 158 | 159 | Interface Board ~ 88 € (pure coincidence) 160 | 161 | * Arduino Mega 2560 : 39.00 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=196#.UxC_gPTV_bA) 162 | * Arduino Proto Wireless Shield : 14.90 - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 163 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 164 | * 16 5mm Red LED : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Lite-On/LTL-4223/?Lite-On/LTL-4223/&qs=sGAEpiMZZMusoohG2hS%252b15J8d1kHl%252bvkJpzS4atZNEA=) 165 | * 16 220 Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 166 | * 16 10K Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 167 | * 1 Push Button : 1 € 168 | * 50 Male Headers : 1 € 169 | * 16 Double male headers : 0.50 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=294#.UxC_3fTV_bA) 170 | * 50 female headers : 1 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=188#.UxDAAfTV_bA) 171 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 172 | 173 | Instruction Blocks ~ 4 € 174 | 175 | * 4 x 4.7K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-47K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2fbdyz6pU6a%252bvHlD5kaZWgo%3d) 176 | * 4 x 100K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-100K-RC/?qs=sGAEpiMZZMu61qfTUdNhG81NIhcRRUJQxII5Nsctha8%3d) 177 | * 4 x 220 Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 178 | * 4 x 10K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 179 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 180 | 181 | ###3.3 Energy 182 | 183 | Cubetto and (optionally) the Interface Board, are battery powered. For the prototype you can use a LiPo battery or regular AA batteries, that's entirely up to you. We used both, LiPo batteries are good but you need extra equipment, if you are starting from scratch we recommend AA batteries. Just remember they run out very quickly, so the best would be to use rechargeable batteries, like NiMh. 184 | 185 | ###3.4 Prototype Design 186 | 187 | The whole product is made out of laser cut wood, mainly 4 mm thick, with only one layer being 1mm thick. You can laser cut these parts using services like Ponoko, or in your local FabLab. The first prototype was laser cut inside [FabLab Lugano](http://fablab.supsi.ch/), while the product development advanced in [FabLab Torino](http://fablabtorino.org/), where part of Primo development team still resides. 188 | 189 | Building Cubetto and the Interface Board is a laborious but very simple procedure, their shells are basically boxes. The real complexity lays in the Instruction Blocks. They are a double 4mm wood layer with magnets and resistors soldered inside. 190 | 191 | ##4. Prototype Making 192 | 193 | ###[Download Source Files](files/primo-prototype-laser.zip) 194 | 195 | ###4.1 Interface Board 196 | 197 | To make the interface board you have to laser cut two files: interface-board-4mm.dxf and interface-board-1mm.dxf: the first one is for 4mm plywood and the second one for 1mm plywood. As you can see from the files, the parts are numbered, to ease the assembly process. The numbers are stored on a different layer, so you can easily remove them before lasering. We recommend adjusting the hole for the push button, based on the size of the button you wish to use or have. 198 | 199 | First of all, you have to glue parts 3 and 4 together, use the holes in the corners to align them with screws while gluing and let it rest for a night. 200 | 201 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. Once you finished, you can now glue all the remaining top layers of the interface board, this is the correct order: 202 | 203 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. 204 | 205 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-1.jpg) 206 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-2.jpg) 207 | 208 | Once you finished, you can now glue the previously glued parts, 1+2 with 3+4. 209 | 210 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-esploso.jpg) 211 | 212 | Once the glue has dried, put the magnets in the little holes. Turn your top layer upside-down and fill the little holes with the magnets, make sure they are all in the same direction, doesn't matter if north or south. Seal the hole with a drop of hot glue. 213 | 214 | Now the electronics. Start by making rails for the 5V and the GND, all along the hole lines like in the picture. The first ever prototype never had copper strips, it had wires (which you can also use), but in this prototype we used copper tape also for the rails. A real 100% time saver. It also makes things easier for creating connections. 215 | 216 | ![rails]({{ site.baseurl }}images/illustrations/board-3.jpg) 217 | 218 | The next step is to wire one of the two connectors of every hole, to the ground rail. If you used copper tape, you can just use a tiny extra bit of it, just enough to touch both ends. 219 | 220 | ![rails]({{ site.baseurl }}images/illustrations/board-5.jpg) 221 | 222 | Now we have to connect the other side of each connector to the 5V rail, but this time, with a 10KΩ resistor in-between. A cool thing of copper tape is that solder melts very well on top of it. This is the technique used: 223 | 224 | ![10k]({{ site.baseurl }}images/photo/diy-docs-1.jpg) 225 | 226 | At the end of this process, you should have something like this: 227 | 228 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-6.jpg) 229 | 230 | Now it's time to put the LEDs; stick one red LED in each one of the 16 holes, then use a drop of hot glue to seal them to the wood. Once the glue is cold, we have to connect them. Just mind that LEDs have a polarity: the long leg is the anode and the short one the cathode. Connect each cathode to the ground rail, using a 220Ω Resistor. 231 | 232 | ![10k]({{ site.baseurl }}images/photo/diy-docs-6.jpg) 233 | 234 | Connect each cathode to the ground rail, using a 220Ω Resistor. 235 | 236 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-7.jpg) 237 | 238 | The long leg of the LED, must be connected to a digital I/O pin on the Arduino Mega, these pins are numbered from 22 to 53. The LEDs must be connected in order, so that it will be much easier to access them later on in the code, in my prototype for example I started from pin number 30 up to 45 (there are 16 LEDs). 239 | The starting point is not important, as long as they are in the correct sequential order. This means for example that if we start from pin 30, the first LED must be attached to pin 30, the second to pin 31, the third to pin 32 and so on until LED 16 to pin 45. 240 | 241 | The cables are soldered to a rack of double male headers, as the digital pins on the Arduino Mega are laid out in a double line. In this way it's easy to plug and remove the Arduino from the board. 242 | 243 | ![rack]({{ site.baseurl }}images/photo/diy-docs-4.jpg) 244 | 245 | Once all the LEDs are soldered, we have to solder our hand made connectors. These must be wired to the Arduino Mega analog pins, to read the different resistor values. Just like the LEDs, these must be connected in order, starting from A0 for hole 1 to A15 for hole 16. The wire has to start from the same point where we soldered previously the 10K resistor. See the illustration: 246 | 247 | ![analog input board connections]({{ site.baseurl }}images/illustrations/board-8.jpg) 248 | 249 |
250 | 251 | 252 |

253 | Here I used some single male headers, as the analog pins are all on a single line. 254 | 255 |

256 | 257 |

258 | The last thing to connect is the button: take it and solder two cables to two opposite headers, then slip them trough the button hole, from the top, and push it all the way down, until it stops. Now flip the board, you should have the two wires coming out of the hole. Connect them as in the illustration: one straight to 5V, the other one to GND using a 10k Resistor. Then connect it to an Arduino digital pin from the button-end of the resistor, in this example we used pin number 50. 259 |

260 |
261 | 262 | 263 | ![photo]({{ site.baseurl }}images/photo/diy-docs-5.jpg) 264 | 265 | Almost done with the board, now you just have to plug the Wireless Shield on top of the Arduino Mega and stick the headers in place in the board. To recap, 30 to 45 for the LEDs, A0 to A15 for the connectors and 50 for the button. Use the A0 to A5 pins on the Wireless Shield for the first 5 connectors. Don't forget to connect the ground rail to the GND pin and the 5V to the 5V pin. 266 | 267 | ![rack]({{ site.baseurl }}images/photo/diy-docs-3.jpg) 268 | 269 | Now a little bit of fine-tuning: after that part 12 of the board has been painted, you can glue it with part 13 on top of the board. 270 | 271 | Same for the red button: after part 14 has been painted, put something soft like cardboard on top of part 2, around the push button, then some hot glue on top of the push button and before the glue dries off, place the red button. See the illustration: 272 | 273 | ![photo]({{ site.baseurl }}images/illustrations/button-mechanics.jpg) 274 | 275 | ###INSTRUCTION BLOCKS 276 | 277 | This is one instruction block, exploded: 278 | 279 | 280 | 281 | To make the Instruction Blocks, the first thing you have to do is laser cut the files, there's one for 4mm thick wood and one for 1mm wood. They are four layers, numbered from 1 to 4 and the drawings provided can be used to make 16 blocks, four of each kind. 282 | 283 | Each block has a different resistor. These are the resistors used in the prototype: 284 | 285 | FORWARD: 4.7K Ω
286 | LEFT: 100K Ω
287 | RIGHT: 220 Ω
288 | FUNCTION: 10K Ω 289 | 290 | To make blocks, first you have to glue part 4 with part 3. 291 | 292 | After the glue has dried, you can start painting. See the illustration below to see what part should be colored: 293 | 294 | ![image]({{ site.baseurl }}images/illustrations/colors.jpg) 295 | 296 | Now you have to cut two pieces of copper tape, 40mm long. Slip them in the holes of the two blocks that you just glued, making a ring around it using the upper and lower fissure, the ring must be quite tight. 297 | 298 | ![photo]({{ site.baseurl }}images/illustrations/instruction-block-guide.jpg) 299 | 300 | After that, you have to put the magnet in the hole. While doing this, BE SURE THAT IT IS CORRECTELY ORIENTED, so that the block 'sticks' into the hole. If you put it the other way, it's going to be repelled by the other magnet, a funny outcome but not what we want to achieve. 301 | 302 | Fix the magnet with a drop of hot glue and before the glue gets cold, put the right resistor on top, with the 'legs' laying on the copper tape. After that, the resistor must be soldered on the two pieces. After soldering, cut the extra leg length and glue part 2 on top of the resistor. 303 | 304 | Finish your block by gluing the last layer, part number 1, on the top, then repeat the entire process for every single block :) 305 | 306 | ###CUBETTO 307 | 308 | Electronics: 309 | 310 | The prototype for Cubetto can be built using an Arduino Uno or Leonardo, with a Proto Wireless Shield on top. The reason for the Proto Shield is because it has a small prototyping area, that is wide enough to put the motor driver, the connectors for the optical encoders, motors and power. 311 | 312 | Cubetto has to spin 90 degrees left and right. A very inaccurate way is to use timing event, like "spin right for one second" and you can expect more or less the same result. "More or less" because it depends a lot from different factors, such as the floor, the battery power and so on. The way I solved this problem, is by detecting the amount of rotation from the wheel using two CNY70 optical encoders in combination with a sticker. The round sticker goes in the inner wheel and it's something like this: 313 | 314 | ![photo]({{ site.baseurl }}images/photo/diy-docs-14.jpg) 315 | 316 | The sticker is split into black and white slices, this is because the CNY70 is able to detect the variation between a white slice and a black one. Basically inside it has an infrared LED that is always on and a phototransistor that is reading the amount of infrared light. When a black material is facing the component, almost no light is relfected, as the black color tends to absorb it. On the contrary, if the material is white, it reflects all the light, so the value read from the sensor it's very high. The difference between readings is used to count the rotation steps. 317 | 318 | ![photo]({{ site.baseurl }}images/illustrations/cny70-physycs.jpg) 319 | 320 | The prototyping area of the Wireless Proto Shield is where the motor driver and other connectors for the other parts are soldered. For these, simply use male headers as connector and female headers on the other part. 321 | 322 | 323 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections.jpg) 324 | 325 | For these I used simple male headers as connector and female headers on the other part. 326 | 327 | ![photo]({{ site.baseurl }}images/photo/diy-docs-12.jpg) 328 | 329 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections-1.jpg) 330 | 331 | The SN754410 motor driver has 16 pins that must be connected following this scheme: 332 | 333 | ![photo]({{ site.baseurl }}images/illustrations/motor-driver.jpg) 334 | 335 | The CNY70 scheme: 336 | 337 | 338 | 339 | Design: 340 | 341 | Start by lasering cubetto.dxf; All Cubetto parts are cut from 4mm plywood, follow these visual instructions to build the base: 342 | 343 | ![photo]({{ site.baseurl }}images/illustrations/cubetto-guide.jpg) 344 | 345 | Don't mount the motors for now, first you have to mount the ball casters. 346 | 347 | ![photo]({{ site.baseurl }}images/illustrations/ball-caster.jpg) 348 | 349 | ![photo]({{ site.baseurl }}images/photo/diy-docs-9.jpg) 350 | 351 | Now the CNY70. Solder the two opposite headers, that must be connected to 5V, together with a wire; then solder three wires to the remaining headers of the CNY70. At the end of these wires solder a row of three female headers. They will later be connected on to the headers of the proto shield. 352 | 353 | The two cny70 must be placed on the edge of the bottom layer, with the LED and the photoransistot horizontally aligned. To fix them you can use some hot glue (or other types of glue). 354 | 355 | See the picture to understand the location. 356 | 357 | ![photo]({{ site.baseurl }}images/photo/diy-docs-11.jpg) 358 | 359 | Just like for the CNY70, solder two wires to the little flaps that come out of each motor. You can twist the two wires to make them more resistent, then at the end, solder a row of two female header, just like in the illustration. 360 | 361 | Now print the inner drawing with the black and white slices, glue them on a piece of cardboard (or laser cut wood, that's up to you), cut the perimeter and make a hole in the middle, as they will be inserted between the motor and the wheel. The white and black slices must point towards the inner side of Cubetto and the distance between the print and the CNY70 must be between 1 and 3 millimeters for the CNY70 to work properly. 362 | 363 | ![photo]({{ site.baseurl }}images/photo/diy-docs-10.jpg) 364 | 365 | Now you can put the wheels on the motors, if you used the Solarbotics wheels, you can fasten them with the screw provided, don't make it too tight. 366 | 367 | Glue three out of the four 'walls' of Cubetto, parts 5, 7 and 8. We are going to leave the back removable, just in case we want to modify something. 368 | 369 | Take the battery holder and solder the black and red cable to other 2 female connectors. The headers on the shield will go to VIN and ground. A switch that breaks the red wire is heavily suggested. 370 | 371 | ![photo]({{ site.baseurl }}images/photo/diy-docs-13.jpg) 372 | 373 | Now you can place the Arduino + Proto shield on top of the motors, plug all the headers on the shield and you have finished making Cubetto. 374 |
375 | 376 | ##Arduino 377 | 378 | ###[Download Arduino Files](https://github.com/primo-io/arduino-sketches/raw/master/primo-prototype-arduino.zip) 379 | 380 | Instructions in the sketch comments. -------------------------------------------------------------------------------- /languages/italian.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Documentazione del Prototipo di Cubetto 4 | language: Italiano (coming soon) 5 | category: language 6 | --- 7 | 8 |
9 | 10 |
11 | ##0. What is this document 12 | 13 | ![primo play set]({{ site.baseurl }}images/photo/maker-guide.jpg) 14 | This document gathers and organizes all the information necessary to build a Primo Prototype. 15 | You can find more info about the project on the [primo.io](http://primo.io) website. 16 | 17 |

18 | 19 | How to translate this document 20 | 21 |

22 | 23 | 24 |
25 | 26 | If you want to translate this page in your language, you have multiple options: 27 | 28 | 1. **super easy, no automation** Copy and paste this page in your text editor, translate it then mail it to us at [play@primo.io](mailto:play@primo.io) 29 | 30 | 2. **medium, light automation** Create an account on [GitHub](http://github.com), then open the [repository of this page](https://github.com/primo-io/prototype-documentation/blob/gh-pages/index.md) and click on 'EDIT', in the top menu bar: 31 | ![photo]({{ site.baseurl }}images/screenshots/edit-1.jpg) 32 | Then your page turns into a text editor, where you are able to modify the page source. The page is written in [markdown](http://daringfireball.net/projects/markdown/syntax), very easy to understand. 33 | ![photo]({{ site.baseurl }}images/screenshots/edit-2.jpg) 34 | You don't have to modify this code, but just copy and paste the whole text in your local text editor, then translate the textual parts in your language, without modifying the parenthesis and HTML parts. Save the text then mail it to us at [play@primo.io](mailto:play@primo.io) 35 | 36 | 3. **advanced, full automation** This is slightly advanced, but nothing too hard, if you are not familiar with GitHub you have the chance to learn something new :)
37 | If you are already familiar with git, you have to fork the repository, all the translations are located in the 'languages' folder. To translate the page, just copy it with the starting language ("english.md" for example) in the same folder, then change the file name with the final language (spanish.md). Change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter) then translate the rest of the document. Once finished, make a pull request to add your file to the folder, it will be automatically added to the menu.

38 | The steps above, expanded: 39 | 40 | 1. Make a GitHub account 41 | 2. Download the GitHub application ([Mac](http://mac.github.com/), [Windows](http://windows.github.com/)) 42 | 3. If it's the first time you use it, open it and input your GitHub login details 43 | 4. Go to [this documentation repository](https://github.com/primo-io/prototype-documentation) 44 | 5. Click on the "Fork" button in the top right corner, to fork this repository into your account. 45 | 6. Go to your giHub account, open the forked repository page and click on the "Clone in Desktop" button, on the right-hand sidebar. It will automatically open the GitHub application, asking where to save the local repository. 46 | 7. After selecting a folder path in your computer, click on "clone" 47 | 8. After downloading the files, navigate to your local folder where the repository has been downloaded. 48 | 9. Open the 'languages' folder, where all the translations are located. Select the starting language ("english.md" for example), then copy the file and rename it to your destination language ("spanish.md" for example), in the same folder. 49 | 10. Open the newly created file, change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter), then translate it to your language, keeping the markdown formatting 50 | 11. After the translation is completed and saved, it's time to re-upload it on GitHub. Open the GitHub application and double click on the repository. On the left sidebar, click on the "Changes" tab. It should say "Uncommitted Changes". 51 | 12. Give a title to your edits, like "spanish translation", then click on "commit" and then on the "sync" button. 52 | 13. Go to your GitHub profile, on the forked repository page. You should be able to see your newly created page in the 'languages' folder. On the top, there should be a green button with two arrows, click on it to issue a pull request. (see picture below) 53 | ![photo]({{ site.baseurl }}images/screenshots/pull-1.jpg) 54 | 55 | 14. Then click on "Create Pull Request" 56 | 57 | ![photo]({{ site.baseurl }}images/screenshots/pull-2.jpg) 58 | 59 | 15. Write a message for the pull request and that's it! Now we just have to approve the request. 60 |
61 |
62 | 63 | ##1. What is Primo 64 | 65 | ![primo play set]({{ site.baseurl }}images/photo/primo.jpg) 66 | 67 | Primo is a tangible interface designed to introduce programming logic to little children (3 to 7), without the need for literacy. The goal of the game is to drive a little robot called Cubetto back to his house. To accomplish the goal, children have to program the little robot using a limited set of instructions: forward, left, right and function. While the first three are rather intuitive, the last one calls a sub-routine, an extra line of instructions packed in a single command. 68 | 69 |
70 | 72 |
73 | 74 | ##2. Research 75 | 76 | Teaching programming to children is a widely debated topic. We are aware of a moderate number of solutions that try to accomplish this for children above the ages of 8. However, there aren't many of these solutions suitable for younger children, and there aren't any that work without a screen or without the need for literacy. We see an increasing number of Apps for tablets and computers that also work in combination with physical robots, but none of them are completely free from the pixel domain in the same way the Primo Play Set is. 77 | 78 | Wood was chose as the main material, first of all because it's natural; you get a warm feeling from it and it makes a nice sound. The second reason is cultural. Observations were conducted on games used in traditional kindergartens in Switzerland (where the product was originally designed) to discover that the games loved by children were all made out of wood. Wooden toys are very durable and you can see marks and scratches on them, signs of their past usage from other children. It's a material with memory. Wood was also chosen as a material because of the stark contrast it creates with technology. Inside of Primo there's a circuit board, but we wanted to create a "magical" experience, hiding the complexity of the play set. 79 | 80 | 81 | 82 | The concept behind Primo is heavily inspired by the work of Seymour Papert, a mathematician who co-founded the MIT Artificial Intelligence Laboratory with Marvin Minsky, in the sixties (if you are interested in the subject, we encourage you to read [Mindstorms](http://www.amazon.co.uk/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746/ref=sr_1_1?ie=UTF8&qid=1393675158&sr=8-1&keywords=mindstorms+papert), his most famous book). He was directing the team who invented [LOGO](http://en.wikipedia.org/wiki/Logo_(programming_language)), probably the most used and long lasting resource to teach programming to children. The goal of Seymour Papert was not just to teach code, but also to help children discover their own personal way of solving problems. Primo can be considered an extreme simplification of LOGO and the physical turtle. We limited the instructions, to their purest form, avoiding any kind of textual or numerical language. 83 | 84 | The first prototype was realised in SUPSI Lugano by Matteo Loglio (Primo.io co-founder and interaction designer), during the [MAInD - Master of Advanced Studies in Interaction Design](http://www.maind.supsi.ch/). Matteo's background is in product design, and after learning the Arduino basics and a bit of code to create the prototype, began to look around for technical solutions that were approachable for a novice, so as to develop an application like Primo. The main issues were two: making a robot car from scratch and an interface board that could easily recognize different instructions. 85 | 86 | The first issue was solved by using an [Oh_Oh board](http://david.cuartielles.com/w/Maquila2/Ohoh) from David Cuartielles, one of the Arduino founders who was holding a lecture in SUPSI. The Oh_Oh robot is an open project, you can find the source files in the link above. It is basically a car shaped Arduino, only an XBee for radio communication was added. 87 | 88 | The second issue was designing a reliable way to detect the blocks. A solution was inspired by a [CIID](http://ciid.dk/) project called ["Barcode Piano"](http://ciid.dk/education/portfolio/idp11/courses/physical-computing/projects/barcode-piano/). 89 | 90 |
91 | 93 |
94 | 95 | The idea is to use multiple blocks that can be recognized by a board using resistors. It's a basic voltage divider, with the analog pins of an Arduino reading the resistor values. It's a very simple method, but rather effective for a prototype. 96 | 97 | Design-wise, some features required testing; the actual design is the result of several iterations. 98 | 99 | The 'snake' or 'zig-zag' path of the instruction sequence was chosen to avoid literacy pre-conceptions. 100 | 101 | ![left to right]({{ site.baseurl }}images/illustrations/left-to-right.jpg) 102 | 103 | The 'D' shape of the block connectors, was designed so that blocks could be inserted just one way, to be consistent with the path design and the direction of the car. Multiple designs can be used for this. The D shape was chosen as it is basically an 'oriented circle' and as a shape, also recalls similar pin-board designs. 104 | 105 | ![instruction blocks]({{ site.baseurl }}images/photo/instruction-blocks.jpg) 106 | 107 | The design for the shape of the instruction blocks is still being tested. The actual design works quite well, children easily grasp their meaning, they just have some troubles at the first to get familiar with the left and right block. This is also because the "right" and "left" concept is generally quite new for them. We are currently testing other blocks design, to improve this even further. 108 | 109 |
110 | 113 |
114 | 115 | At the beginning the robot was a toy car. A very complicated and time consuming shape to produce, as it's a laser-cut shape glued together layer by layer, and subsequently sanded for over an hour. The car had another major issue, it was very boy oriented. We wanted to avoid entering in discussions about 'brain toy' producers being criticised of only producing boy-oriented toys. We wanted to stay neutral, we didn't want to create a toy specifically for boys or girls, and instead opted for a very neutral geometry, a box. 116 | 117 | A name was given to the little box, along with a personality and a similey face, making it even more appealing for children. The robot is called Cubetto (little cube in Italian). The idea with Cubetto is also to create a basic module that can be expanded and customized easily in the future. 118 | 119 | ![cubetto]({{ site.baseurl }}images/photo/cubetto.jpg) 120 | 121 | ##3. Getting Started 122 | 123 | ###3.1 The basics 124 | 125 | Primo is composed of three parts: An Interface Board, Cubetto and a set of Instruction Blocks. Children interact with the Interface Board by placing Instruction Blocks into the holes, to create a sequence (A program) that Cubetto executes. 126 | 127 | There are four types of Instruction Blocks, this means that resistors of 4 different values can be used, possibly quite distant between each other. 128 | 129 | The blocks are inserted into the holes of the Interface Board, where the resistor value is identified. After that, the values are processed into a string that is sent to Cubetto using two XBee modules. Cubetto then executes the instructions, one after the other. 130 | 131 | The brain of the prototype is made of two Arduino Boards, a UNO (A Leonardo or a Duemilanove will also do) for Cubetto, and a Mega for the Interface Board, where 16 analog inputs are required. 132 | 133 | ###3.2 Electronics 134 | 135 | ###Tools Required 136 | 137 | * Soldering Iron 138 | * Solder 139 | * Wires 140 | * Hot Glue Gun 141 | * Wood Glue 142 | * Copper Tape 5mm wide 143 | 144 | ###Materials (prices in euro) 145 | 146 | Cubetto ~ 88 € 147 | 148 | * Arduino UNO (or Leonardo) - 20 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195#.UxC5nfTV_bA) 149 | * Arduino Proto Wireless Shield - 14.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 150 | * SN754410 Motor Driver - 3.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_33&products_id=153#.UxC5-_TV_bB) 151 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 152 | * SolarBotics Wheels x 2 : 4.74 € - [Solarbotics Store](https://solarbotics.com/product/gmpw/) 153 | * SolarBotics Gear Motors GM3 x 2 : 8.36 € - [Solarbotics Store](https://solarbotics.com/product/gm3/) 154 | * 2 Ball Casters : 5.79 € - [Solarbotics Store](https://solarbotics.com/product/23160/) 155 | * CNY70 x 2 : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Vishay/CNY70/?qs=%2fha2pyFaduj8YpDhNNtXszq4w32cl%2fAjUjdOwQUvJUM%3d) 156 | * (optional) Battery Holder : 4 € - [Solarbotics Store](https://solarbotics.com/product/bholdaa_4_cell/) 157 | * (optional) 4 x Rechargeable Batteries 158 | 159 | Interface Board ~ 88 € (pure coincidence) 160 | 161 | * Arduino Mega 2560 : 39.00 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=196#.UxC_gPTV_bA) 162 | * Arduino Proto Wireless Shield : 14.90 - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 163 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 164 | * 16 5mm Red LED : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Lite-On/LTL-4223/?Lite-On/LTL-4223/&qs=sGAEpiMZZMusoohG2hS%252b15J8d1kHl%252bvkJpzS4atZNEA=) 165 | * 16 220 Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 166 | * 16 10K Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 167 | * 1 Push Button : 1 € 168 | * 50 Male Headers : 1 € 169 | * 16 Double male headers : 0.50 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=294#.UxC_3fTV_bA) 170 | * 50 female headers : 1 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=188#.UxDAAfTV_bA) 171 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 172 | 173 | Instruction Blocks ~ 4 € 174 | 175 | * 4 x 4.7K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-47K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2fbdyz6pU6a%252bvHlD5kaZWgo%3d) 176 | * 4 x 100K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-100K-RC/?qs=sGAEpiMZZMu61qfTUdNhG81NIhcRRUJQxII5Nsctha8%3d) 177 | * 4 x 220 Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 178 | * 4 x 10K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 179 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 180 | 181 | ###3.3 Energy 182 | 183 | Cubetto and (optionally) the Interface Board, are battery powered. For the prototype you can use a LiPo battery or regular AA batteries, that's entirely up to you. We used both, LiPo batteries are good but you need extra equipment, if you are starting from scratch we recommend AA batteries. Just remember they run out very quickly, so the best would be to use rechargeable batteries, like NiMh. 184 | 185 | ###3.4 Prototype Design 186 | 187 | The whole product is made out of laser cut wood, mainly 4 mm thick, with only one layer being 1mm thick. You can laser cut these parts using services like Ponoko, or in your local FabLab. The first prototype was laser cut inside [FabLab Lugano](http://fablab.supsi.ch/), while the product development advanced in [FabLab Torino](http://fablabtorino.org/), where part of Primo development team still resides. 188 | 189 | Building Cubetto and the Interface Board is a laborious but very simple procedure, their shells are basically boxes. The real complexity lays in the Instruction Blocks. They are a double 4mm wood layer with magnets and resistors soldered inside. 190 | 191 | ##4. Prototype Making 192 | 193 | ###[Download Source Files](files/primo-prototype-laser.zip) 194 | 195 | ###4.1 Interface Board 196 | 197 | To make the interface board you have to laser cut two files: interface-board-4mm.dxf and interface-board-1mm.dxf: the first one is for 4mm plywood and the second one for 1mm plywood. As you can see from the files, the parts are numbered, to ease the assembly process. The numbers are stored on a different layer, so you can easily remove them before lasering. We recommend adjusting the hole for the push button, based on the size of the button you wish to use or have. 198 | 199 | First of all, you have to glue parts 3 and 4 together, use the holes in the corners to align them with screws while gluing and let it rest for a night. 200 | 201 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. Once you finished, you can now glue all the remaining top layers of the interface board, this is the correct order: 202 | 203 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. 204 | 205 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-1.jpg) 206 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-2.jpg) 207 | 208 | Once you finished, you can now glue the previously glued parts, 1+2 with 3+4. 209 | 210 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-esploso.jpg) 211 | 212 | Once the glue has dried, put the magnets in the little holes. Turn your top layer upside-down and fill the little holes with the magnets, make sure they are all in the same direction, doesn't matter if north or south. Seal the hole with a drop of hot glue. 213 | 214 | Now the electronics. Start by making rails for the 5V and the GND, all along the hole lines like in the picture. The first ever prototype never had copper strips, it had wires (which you can also use), but in this prototype we used copper tape also for the rails. A real 100% time saver. It also makes things easier for creating connections. 215 | 216 | ![rails]({{ site.baseurl }}images/illustrations/board-3.jpg) 217 | 218 | The next step is to wire one of the two connectors of every hole, to the ground rail. If you used copper tape, you can just use a tiny extra bit of it, just enough to touch both ends. 219 | 220 | ![rails]({{ site.baseurl }}images/illustrations/board-5.jpg) 221 | 222 | Now we have to connect the other side of each connector to the 5V rail, but this time, with a 10KΩ resistor in-between. A cool thing of copper tape is that solder melts very well on top of it. This is the technique used: 223 | 224 | ![10k]({{ site.baseurl }}images/photo/diy-docs-1.jpg) 225 | 226 | At the end of this process, you should have something like this: 227 | 228 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-6.jpg) 229 | 230 | Now it's time to put the LEDs; stick one red LED in each one of the 16 holes, then use a drop of hot glue to seal them to the wood. Once the glue is cold, we have to connect them. Just mind that LEDs have a polarity: the long leg is the anode and the short one the cathode. Connect each cathode to the ground rail, using a 220Ω Resistor. 231 | 232 | ![10k]({{ site.baseurl }}images/photo/diy-docs-6.jpg) 233 | 234 | Connect each cathode to the ground rail, using a 220Ω Resistor. 235 | 236 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-7.jpg) 237 | 238 | The long leg of the LED, must be connected to a digital I/O pin on the Arduino Mega, these pins are numbered from 22 to 53. The LEDs must be connected in order, so that it will be much easier to access them later on in the code, in my prototype for example I started from pin number 30 up to 45 (there are 16 LEDs). 239 | The starting point is not important, as long as they are in the correct sequential order. This means for example that if we start from pin 30, the first LED must be attached to pin 30, the second to pin 31, the third to pin 32 and so on until LED 16 to pin 45. 240 | 241 | The cables are soldered to a rack of double male headers, as the digital pins on the Arduino Mega are laid out in a double line. In this way it's easy to plug and remove the Arduino from the board. 242 | 243 | ![rack]({{ site.baseurl }}images/photo/diy-docs-4.jpg) 244 | 245 | Once all the LEDs are soldered, we have to solder our hand made connectors. These must be wired to the Arduino Mega analog pins, to read the different resistor values. Just like the LEDs, these must be connected in order, starting from A0 for hole 1 to A15 for hole 16. The wire has to start from the same point where we soldered previously the 10K resistor. See the illustration: 246 | 247 | ![analog input board connections]({{ site.baseurl }}images/illustrations/board-8.jpg) 248 | 249 |
250 | 251 | 252 |

253 | Here I used some single male headers, as the analog pins are all on a single line. 254 | 255 |

256 | 257 |

258 | The last thing to connect is the button: take it and solder two cables to two opposite headers, then slip them trough the button hole, from the top, and push it all the way down, until it stops. Now flip the board, you should have the two wires coming out of the hole. Connect them as in the illustration: one straight to 5V, the other one to GND using a 10k Resistor. Then connect it to an Arduino digital pin from the button-end of the resistor, in this example we used pin number 50. 259 |

260 |
261 | 262 | 263 | ![photo]({{ site.baseurl }}images/photo/diy-docs-5.jpg) 264 | 265 | Almost done with the board, now you just have to plug the Wireless Shield on top of the Arduino Mega and stick the headers in place in the board. To recap, 30 to 45 for the LEDs, A0 to A15 for the connectors and 50 for the button. Use the A0 to A5 pins on the Wireless Shield for the first 5 connectors. Don't forget to connect the ground rail to the GND pin and the 5V to the 5V pin. 266 | 267 | ![rack]({{ site.baseurl }}images/photo/diy-docs-3.jpg) 268 | 269 | Now a little bit of fine-tuning: after that part 12 of the board has been painted, you can glue it with part 13 on top of the board. 270 | 271 | Same for the red button: after part 14 has been painted, put something soft like cardboard on top of part 2, around the push button, then some hot glue on top of the push button and before the glue dries off, place the red button. See the illustration: 272 | 273 | ![photo]({{ site.baseurl }}images/illustrations/button-mechanics.jpg) 274 | 275 | ###INSTRUCTION BLOCKS 276 | 277 | This is one instruction block, exploded: 278 | 279 | 280 | 281 | To make the Instruction Blocks, the first thing you have to do is laser cut the files, there's one for 4mm thick wood and one for 1mm wood. They are four layers, numbered from 1 to 4 and the drawings provided can be used to make 16 blocks, four of each kind. 282 | 283 | Each block has a different resistor. These are the resistors used in the prototype: 284 | 285 | FORWARD: 4.7K Ω
286 | LEFT: 100K Ω
287 | RIGHT: 220 Ω
288 | FUNCTION: 10K Ω 289 | 290 | To make blocks, first you have to glue part 4 with part 3. 291 | 292 | After the glue has dried, you can start painting. See the illustration below to see what part should be colored: 293 | 294 | ![image]({{ site.baseurl }}images/illustrations/colors.jpg) 295 | 296 | Now you have to cut two pieces of copper tape, 40mm long. Slip them in the holes of the two blocks that you just glued, making a ring around it using the upper and lower fissure, the ring must be quite tight. 297 | 298 | ![photo]({{ site.baseurl }}images/illustrations/instruction-block-guide.jpg) 299 | 300 | After that, you have to put the magnet in the hole. While doing this, BE SURE THAT IT IS CORRECTELY ORIENTED, so that the block 'sticks' into the hole. If you put it the other way, it's going to be repelled by the other magnet, a funny outcome but not what we want to achieve. 301 | 302 | Fix the magnet with a drop of hot glue and before the glue gets cold, put the right resistor on top, with the 'legs' laying on the copper tape. After that, the resistor must be soldered on the two pieces. After soldering, cut the extra leg length and glue part 2 on top of the resistor. 303 | 304 | Finish your block by gluing the last layer, part number 1, on the top, then repeat the entire process for every single block :) 305 | 306 | ###CUBETTO 307 | 308 | Electronics: 309 | 310 | The prototype for Cubetto can be built using an Arduino Uno or Leonardo, with a Proto Wireless Shield on top. The reason for the Proto Shield is because it has a small prototyping area, that is wide enough to put the motor driver, the connectors for the optical encoders, motors and power. 311 | 312 | Cubetto has to spin 90 degrees left and right. A very inaccurate way is to use timing event, like "spin right for one second" and you can expect more or less the same result. "More or less" because it depends a lot from different factors, such as the floor, the battery power and so on. The way I solved this problem, is by detecting the amount of rotation from the wheel using two CNY70 optical encoders in combination with a sticker. The round sticker goes in the inner wheel and it's something like this: 313 | 314 | ![photo]({{ site.baseurl }}images/photo/diy-docs-14.jpg) 315 | 316 | The sticker is split into black and white slices, this is because the CNY70 is able to detect the variation between a white slice and a black one. Basically inside it has an infrared LED that is always on and a phototransistor that is reading the amount of infrared light. When a black material is facing the component, almost no light is relfected, as the black color tends to absorb it. On the contrary, if the material is white, it reflects all the light, so the value read from the sensor it's very high. The difference between readings is used to count the rotation steps. 317 | 318 | ![photo]({{ site.baseurl }}images/illustrations/cny70-physycs.jpg) 319 | 320 | The prototyping area of the Wireless Proto Shield is where the motor driver and other connectors for the other parts are soldered. For these, simply use male headers as connector and female headers on the other part. 321 | 322 | 323 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections.jpg) 324 | 325 | For these I used simple male headers as connector and female headers on the other part. 326 | 327 | ![photo]({{ site.baseurl }}images/photo/diy-docs-12.jpg) 328 | 329 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections-1.jpg) 330 | 331 | The SN754410 motor driver has 16 pins that must be connected following this scheme: 332 | 333 | ![photo]({{ site.baseurl }}images/illustrations/motor-driver.jpg) 334 | 335 | Design: 336 | 337 | Start by lasering cubetto.dxf; All Cubetto parts are cut from 4mm plywood, follow these visual instructions to build the base: 338 | 339 | ![photo]({{ site.baseurl }}images/illustrations/cubetto-guide.jpg) 340 | 341 | Don't mount the motors for now, first you have to mount the ball casters. 342 | 343 | ![photo]({{ site.baseurl }}images/illustrations/ball-caster.jpg) 344 | 345 | ![photo]({{ site.baseurl }}images/photo/diy-docs-9.jpg) 346 | 347 | Now the CNY70. Solder the two opposite headers, that must be connected to 5V, together with a wire; then solder three wires to the remaining headers of the CNY70. At the end of these wires solder a row of three female headers. They will later be connected on to the headers of the proto shield. 348 | 349 | The two cny70 must be placed on the edge of the bottom layer, with the LED and the photoransistot horizontally aligned. To fix them you can use some hot glue (or other types of glue). 350 | 351 | See the picture to understand the location. 352 | 353 | ![photo]({{ site.baseurl }}images/photo/diy-docs-11.jpg) 354 | 355 | Just like for the CNY70, solder two wires to the little flaps that come out of each motor. You can twist the two wires to make them more resistent, then at the end, solder a row of two female header, just like in the illustration. 356 | 357 | Now print the inner drawing with the black and white slices, glue them on a piece of cardboard (or laser cut wood, that's up to you), cut the perimeter and make a hole in the middle, as they will be inserted between the motor and the wheel. The white and black slices must point towards the inner side of Cubetto and the distance between the print and the CNY70 must be between 1 and 3 millimeters for the CNY70 to work properly. 358 | 359 | ![photo]({{ site.baseurl }}images/photo/diy-docs-10.jpg) 360 | 361 | Now you can put the wheels on the motors, if you used the Solarbotics wheels, you can fasten them with the screw provided, don't make it too tight. 362 | 363 | Glue three out of the four 'walls' of Cubetto, parts 5, 7 and 8. We are going to leave the back removable, just in case we want to modify something. 364 | 365 | Take the battery holder and solder the black and red cable to other 2 female connectors. The headers on the shield will go to VIN and ground. A switch that breaks the red wire is heavily suggested. 366 | 367 | ![photo]({{ site.baseurl }}images/photo/diy-docs-13.jpg) 368 | 369 | Now you can place the Arduino + Proto shield on top of the motors, plug all the headers on the shield and you have finished making Cubetto. 370 |
371 | 372 | ##Arduino 373 | 374 | ###[Download Arduino Files](https://github.com/primo-io/arduino-sketches/raw/master/primo-prototype-arduino.zip) 375 | 376 | Instructions in the sketch comments. 377 | -------------------------------------------------------------------------------- /languages/japanese.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Cubetto chan プロトタイプのドキュメント 4 | language: 日本の (coming soon) 5 | category: language 6 | --- 7 |
8 | 9 |
10 | ##0. What is this document 11 | 12 | ![primo play set]({{ site.baseurl }}images/photo/maker-guide.jpg) 13 | This document gathers and organizes all the information necessary to build a Primo Prototype. 14 | You can find more info about the project on the [primo.io](http://primo.io) website. 15 | 16 |

17 | 18 | How to translate this document 19 | 20 |

21 | 22 | 23 |
24 | 25 | If you want to translate this page in your language, you have multiple options: 26 | 27 | 1. **super easy, no automation** Copy and paste this page in your text editor, translate it then mail it to us at [play@primo.io](mailto:play@primo.io) 28 | 29 | 2. **medium, light automation** Create an account on [GitHub](http://github.com), then open the [repository of this page](https://github.com/primo-io/prototype-documentation/blob/gh-pages/index.md) and click on 'EDIT', in the top menu bar: 30 | ![photo]({{ site.baseurl }}images/screenshots/edit-1.jpg) 31 | Then your page turns into a text editor, where you are able to modify the page source. The page is written in [markdown](http://daringfireball.net/projects/markdown/syntax), very easy to understand. 32 | ![photo]({{ site.baseurl }}images/screenshots/edit-2.jpg) 33 | You don't have to modify this code, but just copy and paste the whole text in your local text editor, then translate the textual parts in your language, without modifying the parenthesis and HTML parts. Save the text then mail it to us at [play@primo.io](mailto:play@primo.io) 34 | 35 | 3. **advanced, full automation** This is slightly advanced, but nothing too hard, if you are not familiar with GitHub you have the chance to learn something new :)
36 | If you are already familiar with git, you have to fork the repository, all the translations are located in the 'languages' folder. To translate the page, just copy it with the starting language ("english.md" for example) in the same folder, then change the file name with the final language (spanish.md). Change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter) then translate the rest of the document. Once finished, make a pull request to add your file to the folder, it will be automatically added to the menu.

37 | The steps above, expanded: 38 | 39 | 1. Make a GitHub account 40 | 2. Download the GitHub application ([Mac](http://mac.github.com/), [Windows](http://windows.github.com/)) 41 | 3. If it's the first time you use it, open it and input your GitHub login details 42 | 4. Go to [this documentation repository](https://github.com/primo-io/prototype-documentation) 43 | 5. Click on the "Fork" button in the top right corner, to fork this repository into your account. 44 | 6. Go to your giHub account, open the forked repository page and click on the "Clone in Desktop" button, on the right-hand sidebar. It will automatically open the GitHub application, asking where to save the local repository. 45 | 7. After selecting a folder path in your computer, click on "clone" 46 | 8. After downloading the files, navigate to your local folder where the repository has been downloaded. 47 | 9. Open the 'languages' folder, where all the translations are located. Select the starting language ("english.md" for example), then copy the file and rename it to your destination language ("spanish.md" for example), in the same folder. 48 | 10. Open the newly created file, change the page header values 'title' (title in your language) and 'language' (the destination language with Capital letter), then translate it to your language, keeping the markdown formatting 49 | 11. After the translation is completed and saved, it's time to re-upload it on GitHub. Open the GitHub application and double click on the repository. On the left sidebar, click on the "Changes" tab. It should say "Uncommitted Changes". 50 | 12. Give a title to your edits, like "spanish translation", then click on "commit" and then on the "sync" button. 51 | 13. Go to your GitHub profile, on the forked repository page. You should be able to see your newly created page in the 'languages' folder. On the top, there should be a green button with two arrows, click on it to issue a pull request. (see picture below) 52 | ![photo]({{ site.baseurl }}images/screenshots/pull-1.jpg) 53 | 54 | 14. Then click on "Create Pull Request" 55 | 56 | ![photo]({{ site.baseurl }}images/screenshots/pull-2.jpg) 57 | 58 | 15. Write a message for the pull request and that's it! Now we just have to approve the request. 59 |
60 |
61 | 62 | ##1. What is Primo 63 | 64 | ![primo play set]({{ site.baseurl }}images/photo/primo.jpg) 65 | 66 | Primo is a tangible interface designed to introduce programming logic to little children (3 to 7), without the need for literacy. The goal of the game is to drive a little robot called Cubetto back to his house. To accomplish the goal, children have to program the little robot using a limited set of instructions: forward, left, right and function. While the first three are rather intuitive, the last one calls a sub-routine, an extra line of instructions packed in a single command. 67 | 68 |
69 | 71 |
72 | 73 | ##2. Research 74 | 75 | Teaching programming to children is a widely debated topic. We are aware of a moderate number of solutions that try to accomplish this for children above the ages of 8. However, there aren't many of these solutions suitable for younger children, and there aren't any that work without a screen or without the need for literacy. We see an increasing number of Apps for tablets and computers that also work in combination with physical robots, but none of them are completely free from the pixel domain in the same way the Primo Play Set is. 76 | 77 | Wood was chose as the main material, first of all because it's natural; you get a warm feeling from it and it makes a nice sound. The second reason is cultural. Observations were conducted on games used in traditional kindergartens in Switzerland (where the product was originally designed) to discover that the games loved by children were all made out of wood. Wooden toys are very durable and you can see marks and scratches on them, signs of their past usage from other children. It's a material with memory. Wood was also chosen as a material because of the stark contrast it creates with technology. Inside of Primo there's a circuit board, but we wanted to create a "magical" experience, hiding the complexity of the play set. 78 | 79 | 80 | 81 | The concept behind Primo is heavily inspired by the work of Seymour Papert, a mathematician who co-founded the MIT Artificial Intelligence Laboratory with Marvin Minsky, in the sixties (if you are interested in the subject, we encourage you to read [Mindstorms](http://www.amazon.co.uk/Mindstorms-Children-Computers-Powerful-Ideas/dp/0465046746/ref=sr_1_1?ie=UTF8&qid=1393675158&sr=8-1&keywords=mindstorms+papert), his most famous book). He was directing the team who invented [LOGO](http://en.wikipedia.org/wiki/Logo_(programming_language)), probably the most used and long lasting resource to teach programming to children. The goal of Seymour Papert was not just to teach code, but also to help children discover their own personal way of solving problems. Primo can be considered an extreme simplification of LOGO and the physical turtle. We limited the instructions, to their purest form, avoiding any kind of textual or numerical language. 82 | 83 | The first prototype was realised in SUPSI Lugano by Matteo Loglio (Primo.io co-founder and interaction designer), during the [MAInD - Master of Advanced Studies in Interaction Design](http://www.maind.supsi.ch/). Matteo's background is in product design, and after learning the Arduino basics and a bit of code to create the prototype, began to look around for technical solutions that were approachable for a novice, so as to develop an application like Primo. The main issues were two: making a robot car from scratch and an interface board that could easily recognize different instructions. 84 | 85 | The first issue was solved by using an [Oh_Oh board](http://david.cuartielles.com/w/Maquila2/Ohoh) from David Cuartielles, one of the Arduino founders who was holding a lecture in SUPSI. The Oh_Oh robot is an open project, you can find the source files in the link above. It is basically a car shaped Arduino, only an XBee for radio communication was added. 86 | 87 | The second issue was designing a reliable way to detect the blocks. A solution was inspired by a [CIID](http://ciid.dk/) project called ["Barcode Piano"](http://ciid.dk/education/portfolio/idp11/courses/physical-computing/projects/barcode-piano/). 88 | 89 |
90 | 92 |
93 | 94 | The idea is to use multiple blocks that can be recognized by a board using resistors. It's a basic voltage divider, with the analog pins of an Arduino reading the resistor values. It's a very simple method, but rather effective for a prototype. 95 | 96 | Design-wise, some features required testing; the actual design is the result of several iterations. 97 | 98 | The 'snake' or 'zig-zag' path of the instruction sequence was chosen to avoid literacy pre-conceptions. 99 | 100 | ![left to right]({{ site.baseurl }}images/illustrations/left-to-right.jpg) 101 | 102 | The 'D' shape of the block connectors, was designed so that blocks could be inserted just one way, to be consistent with the path design and the direction of the car. Multiple designs can be used for this. The D shape was chosen as it is basically an 'oriented circle' and as a shape, also recalls similar pin-board designs. 103 | 104 | ![instruction blocks]({{ site.baseurl }}images/photo/instruction-blocks.jpg) 105 | 106 | The design for the shape of the instruction blocks is still being tested. The actual design works quite well, children easily grasp their meaning, they just have some troubles at the first to get familiar with the left and right block. This is also because the "right" and "left" concept is generally quite new for them. We are currently testing other blocks design, to improve this even further. 107 | 108 |
109 | 112 |
113 | 114 | At the beginning the robot was a toy car. A very complicated and time consuming shape to produce, as it's a laser-cut shape glued together layer by layer, and subsequently sanded for over an hour. The car had another major issue, it was very boy oriented. We wanted to avoid entering in discussions about 'brain toy' producers being criticised of only producing boy-oriented toys. We wanted to stay neutral, we didn't want to create a toy specifically for boys or girls, and instead opted for a very neutral geometry, a box. 115 | 116 | A name was given to the little box, along with a personality and a similey face, making it even more appealing for children. The robot is called Cubetto (little cube in Italian). The idea with Cubetto is also to create a basic module that can be expanded and customized easily in the future. 117 | 118 | ![cubetto]({{ site.baseurl }}images/photo/cubetto.jpg) 119 | 120 | ##3. Getting Started 121 | 122 | ###3.1 The basics 123 | 124 | Primo is composed of three parts: An Interface Board, Cubetto and a set of Instruction Blocks. Children interact with the Interface Board by placing Instruction Blocks into the holes, to create a sequence (A program) that Cubetto executes. 125 | 126 | There are four types of Instruction Blocks, this means that resistors of 4 different values can be used, possibly quite distant between each other. 127 | 128 | The blocks are inserted into the holes of the Interface Board, where the resistor value is identified. After that, the values are processed into a string that is sent to Cubetto using two XBee modules. Cubetto then executes the instructions, one after the other. 129 | 130 | The brain of the prototype is made of two Arduino Boards, a UNO (A Leonardo or a Duemilanove will also do) for Cubetto, and a Mega for the Interface Board, where 16 analog inputs are required. 131 | 132 | ###3.2 Electronics 133 | 134 | ###Tools Required 135 | 136 | * Soldering Iron 137 | * Solder 138 | * Wires 139 | * Hot Glue Gun 140 | * Wood Glue 141 | * Copper Tape 5mm wide 142 | 143 | ###Materials (prices in euro) 144 | 145 | Cubetto ~ 88 € 146 | 147 | * Arduino UNO (or Leonardo) - 20 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=195#.UxC5nfTV_bA) 148 | * Arduino Proto Wireless Shield - 14.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 149 | * SN754410 Motor Driver - 3.90 € : [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_33&products_id=153#.UxC5-_TV_bB) 150 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 151 | * SolarBotics Wheels x 2 : 4.74 € - [Solarbotics Store](https://solarbotics.com/product/gmpw/) 152 | * SolarBotics Gear Motors GM3 x 2 : 8.36 € - [Solarbotics Store](https://solarbotics.com/product/gm3/) 153 | * 2 Ball Casters : 5.79 € - [Solarbotics Store](https://solarbotics.com/product/23160/) 154 | * CNY70 x 2 : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Vishay/CNY70/?qs=%2fha2pyFaduj8YpDhNNtXszq4w32cl%2fAjUjdOwQUvJUM%3d) 155 | * (optional) Battery Holder : 4 € - [Solarbotics Store](https://solarbotics.com/product/bholdaa_4_cell/) 156 | * (optional) 4 x Rechargeable Batteries 157 | 158 | Interface Board ~ 88 € (pure coincidence) 159 | 160 | * Arduino Mega 2560 : 39.00 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=11&products_id=196#.UxC_gPTV_bA) 161 | * Arduino Proto Wireless Shield : 14.90 - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_5&products_id=145#.UxC53vTV_bA) 162 | * XBee (series 1 or 2, doesn't make any difference) : 23.90 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=37_38&products_id=292#.UxC6cvTV_bA) 163 | * 16 5mm Red LED : 1 € - [Mouser](http://uk.mouser.com/ProductDetail/Lite-On/LTL-4223/?Lite-On/LTL-4223/&qs=sGAEpiMZZMusoohG2hS%252b15J8d1kHl%252bvkJpzS4atZNEA=) 164 | * 16 220 Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 165 | * 16 10K Ω Resistors : 0.16 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 166 | * 1 Push Button : 1 € 167 | * 50 Male Headers : 1 € 168 | * 16 Double male headers : 0.50 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=294#.UxC_3fTV_bA) 169 | * 50 female headers : 1 € - [Arduino Store](http://store.arduino.cc/index.php?main_page=product_info&cPath=6_32&products_id=188#.UxDAAfTV_bA) 170 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 171 | 172 | Instruction Blocks ~ 4 € 173 | 174 | * 4 x 4.7K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-47K-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2fbdyz6pU6a%252bvHlD5kaZWgo%3d) 175 | * 4 x 100K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-100K-RC/?qs=sGAEpiMZZMu61qfTUdNhG81NIhcRRUJQxII5Nsctha8%3d) 176 | * 4 x 220 Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-220-RC/?qs=sGAEpiMZZMu61qfTUdNhG%2f1uGo5nxyCVqn6ChOCvUEE%3d) 177 | * 4 x 10K Ω Resistor : 0.04 € - [Mouser](http://uk.mouser.com/ProductDetail/Xicon/291-10K-RC/?qs=sGAEpiMZZMu61qfTUdNhG6xwTrVwTvbz8PPav3aExs8%3d) 178 | * 16 Magnets ø 4 h 3 : 3.5 € - [Supermagnete](http://www.supermagnete.ch/eng/S-04-03-N) 179 | 180 | ###3.3 Energy 181 | 182 | Cubetto and (optionally) the Interface Board, are battery powered. For the prototype you can use a LiPo battery or regular AA batteries, that's entirely up to you. We used both, LiPo batteries are good but you need extra equipment, if you are starting from scratch we recommend AA batteries. Just remember they run out very quickly, so the best would be to use rechargeable batteries, like NiMh. 183 | 184 | ###3.4 Prototype Design 185 | 186 | The whole product is made out of laser cut wood, mainly 4 mm thick, with only one layer being 1mm thick. You can laser cut these parts using services like Ponoko, or in your local FabLab. The first prototype was laser cut inside [FabLab Lugano](http://fablab.supsi.ch/), while the product development advanced in [FabLab Torino](http://fablabtorino.org/), where part of Primo development team still resides. 187 | 188 | Building Cubetto and the Interface Board is a laborious but very simple procedure, their shells are basically boxes. The real complexity lays in the Instruction Blocks. They are a double 4mm wood layer with magnets and resistors soldered inside. 189 | 190 | ##4. Prototype Making 191 | 192 | ###[Download Source Files](files/primo-prototype-laser.zip) 193 | 194 | ###4.1 Interface Board 195 | 196 | To make the interface board you have to laser cut two files: interface-board-4mm.dxf and interface-board-1mm.dxf: the first one is for 4mm plywood and the second one for 1mm plywood. As you can see from the files, the parts are numbered, to ease the assembly process. The numbers are stored on a different layer, so you can easily remove them before lasering. We recommend adjusting the hole for the push button, based on the size of the button you wish to use or have. 197 | 198 | First of all, you have to glue parts 3 and 4 together, use the holes in the corners to align them with screws while gluing and let it rest for a night. 199 | 200 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. Once you finished, you can now glue all the remaining top layers of the interface board, this is the correct order: 201 | 202 | Then take the copper tape, cut 32 pieces of 70mm each and put them inside the rectangular holes in the part that you just glued, they should be at least 30mm wide on each side. 203 | 204 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-1.jpg) 205 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-2.jpg) 206 | 207 | Once you finished, you can now glue the previously glued parts, 1+2 with 3+4. 208 | 209 | ![copper connectors]({{ site.baseurl }}images/illustrations/board-esploso.jpg) 210 | 211 | Once the glue has dried, put the magnets in the little holes. Turn your top layer upside-down and fill the little holes with the magnets, make sure they are all in the same direction, doesn't matter if north or south. Seal the hole with a drop of hot glue. 212 | 213 | Now the electronics. Start by making rails for the 5V and the GND, all along the hole lines like in the picture. The first ever prototype never had copper strips, it had wires (which you can also use), but in this prototype we used copper tape also for the rails. A real 100% time saver. It also makes things easier for creating connections. 214 | 215 | ![rails]({{ site.baseurl }}images/illustrations/board-3.jpg) 216 | 217 | The next step is to wire one of the two connectors of every hole, to the ground rail. If you used copper tape, you can just use a tiny extra bit of it, just enough to touch both ends. 218 | 219 | ![rails]({{ site.baseurl }}images/illustrations/board-5.jpg) 220 | 221 | Now we have to connect the other side of each connector to the 5V rail, but this time, with a 10KΩ resistor in-between. A cool thing of copper tape is that solder melts very well on top of it. This is the technique used: 222 | 223 | ![10k]({{ site.baseurl }}images/photo/diy-docs-1.jpg) 224 | 225 | At the end of this process, you should have something like this: 226 | 227 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-6.jpg) 228 | 229 | Now it's time to put the LEDs; stick one red LED in each one of the 16 holes, then use a drop of hot glue to seal them to the wood. Once the glue is cold, we have to connect them. Just mind that LEDs have a polarity: the long leg is the anode and the short one the cathode. Connect each cathode to the ground rail, using a 220Ω Resistor. 230 | 231 | ![10k]({{ site.baseurl }}images/photo/diy-docs-6.jpg) 232 | 233 | Connect each cathode to the ground rail, using a 220Ω Resistor. 234 | 235 | ![10k scheme]({{ site.baseurl }}images/illustrations/board-7.jpg) 236 | 237 | The long leg of the LED, must be connected to a digital I/O pin on the Arduino Mega, these pins are numbered from 22 to 53. The LEDs must be connected in order, so that it will be much easier to access them later on in the code, in my prototype for example I started from pin number 30 up to 45 (there are 16 LEDs). 238 | The starting point is not important, as long as they are in the correct sequential order. This means for example that if we start from pin 30, the first LED must be attached to pin 30, the second to pin 31, the third to pin 32 and so on until LED 16 to pin 45. 239 | 240 | The cables are soldered to a rack of double male headers, as the digital pins on the Arduino Mega are laid out in a double line. In this way it's easy to plug and remove the Arduino from the board. 241 | 242 | ![rack]({{ site.baseurl }}images/photo/diy-docs-4.jpg) 243 | 244 | Once all the LEDs are soldered, we have to solder our hand made connectors. These must be wired to the Arduino Mega analog pins, to read the different resistor values. Just like the LEDs, these must be connected in order, starting from A0 for hole 1 to A15 for hole 16. The wire has to start from the same point where we soldered previously the 10K resistor. See the illustration: 245 | 246 | ![analog input board connections]({{ site.baseurl }}images/illustrations/board-8.jpg) 247 | 248 |
249 | 250 | 251 |

252 | Here I used some single male headers, as the analog pins are all on a single line. 253 | 254 |

255 | 256 |

257 | The last thing to connect is the button: take it and solder two cables to two opposite headers, then slip them trough the button hole, from the top, and push it all the way down, until it stops. Now flip the board, you should have the two wires coming out of the hole. Connect them as in the illustration: one straight to 5V, the other one to GND using a 10k Resistor. Then connect it to an Arduino digital pin from the button-end of the resistor, in this example we used pin number 50. 258 |

259 |
260 | 261 | 262 | ![photo]({{ site.baseurl }}images/photo/diy-docs-5.jpg) 263 | 264 | Almost done with the board, now you just have to plug the Wireless Shield on top of the Arduino Mega and stick the headers in place in the board. To recap, 30 to 45 for the LEDs, A0 to A15 for the connectors and 50 for the button. Use the A0 to A5 pins on the Wireless Shield for the first 5 connectors. Don't forget to connect the ground rail to the GND pin and the 5V to the 5V pin. 265 | 266 | ![rack]({{ site.baseurl }}images/photo/diy-docs-3.jpg) 267 | 268 | Now a little bit of fine-tuning: after that part 12 of the board has been painted, you can glue it with part 13 on top of the board. 269 | 270 | Same for the red button: after part 14 has been painted, put something soft like cardboard on top of part 2, around the push button, then some hot glue on top of the push button and before the glue dries off, place the red button. See the illustration: 271 | 272 | ![photo]({{ site.baseurl }}images/illustrations/button-mechanics.jpg) 273 | 274 | ###INSTRUCTION BLOCKS 275 | 276 | This is one instruction block, exploded: 277 | 278 | 279 | 280 | To make the Instruction Blocks, the first thing you have to do is laser cut the files, there's one for 4mm thick wood and one for 1mm wood. They are four layers, numbered from 1 to 4 and the drawings provided can be used to make 16 blocks, four of each kind. 281 | 282 | Each block has a different resistor. These are the resistors used in the prototype: 283 | 284 | FORWARD: 4.7K Ω
285 | LEFT: 100K Ω
286 | RIGHT: 220 Ω
287 | FUNCTION: 10K Ω 288 | 289 | To make blocks, first you have to glue part 4 with part 3. 290 | 291 | After the glue has dried, you can start painting. See the illustration below to see what part should be colored: 292 | 293 | ![image]({{ site.baseurl }}images/illustrations/colors.jpg) 294 | 295 | Now you have to cut two pieces of copper tape, 40mm long. Slip them in the holes of the two blocks that you just glued, making a ring around it using the upper and lower fissure, the ring must be quite tight. 296 | 297 | ![photo]({{ site.baseurl }}images/illustrations/instruction-block-guide.jpg) 298 | 299 | After that, you have to put the magnet in the hole. While doing this, BE SURE THAT IT IS CORRECTELY ORIENTED, so that the block 'sticks' into the hole. If you put it the other way, it's going to be repelled by the other magnet, a funny outcome but not what we want to achieve. 300 | 301 | Fix the magnet with a drop of hot glue and before the glue gets cold, put the right resistor on top, with the 'legs' laying on the copper tape. After that, the resistor must be soldered on the two pieces. After soldering, cut the extra leg length and glue part 2 on top of the resistor. 302 | 303 | Finish your block by gluing the last layer, part number 1, on the top, then repeat the entire process for every single block :) 304 | 305 | ###CUBETTO 306 | 307 | Electronics: 308 | 309 | The prototype for Cubetto can be built using an Arduino Uno or Leonardo, with a Proto Wireless Shield on top. The reason for the Proto Shield is because it has a small prototyping area, that is wide enough to put the motor driver, the connectors for the optical encoders, motors and power. 310 | 311 | Cubetto has to spin 90 degrees left and right. A very inaccurate way is to use timing event, like "spin right for one second" and you can expect more or less the same result. "More or less" because it depends a lot from different factors, such as the floor, the battery power and so on. The way I solved this problem, is by detecting the amount of rotation from the wheel using two CNY70 optical encoders in combination with a sticker. The round sticker goes in the inner wheel and it's something like this: 312 | 313 | ![photo]({{ site.baseurl }}images/photo/diy-docs-14.jpg) 314 | 315 | The sticker is split into black and white slices, this is because the CNY70 is able to detect the variation between a white slice and a black one. Basically inside it has an infrared LED that is always on and a phototransistor that is reading the amount of infrared light. When a black material is facing the component, almost no light is relfected, as the black color tends to absorb it. On the contrary, if the material is white, it reflects all the light, so the value read from the sensor it's very high. The difference between readings is used to count the rotation steps. 316 | 317 | ![photo]({{ site.baseurl }}images/illustrations/cny70-physycs.jpg) 318 | 319 | The prototyping area of the Wireless Proto Shield is where the motor driver and other connectors for the other parts are soldered. For these, simply use male headers as connector and female headers on the other part. 320 | 321 | 322 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections.jpg) 323 | 324 | For these I used simple male headers as connector and female headers on the other part. 325 | 326 | ![photo]({{ site.baseurl }}images/photo/diy-docs-12.jpg) 327 | 328 | ![photo]({{ site.baseurl }}images/illustrations/wireless-shield-connections-1.jpg) 329 | 330 | The SN754410 motor driver has 16 pins that must be connected following this scheme: 331 | 332 | ![photo]({{ site.baseurl }}images/illustrations/motor-driver.jpg) 333 | 334 | Design: 335 | 336 | Start by lasering cubetto.dxf; All Cubetto parts are cut from 4mm plywood, follow these visual instructions to build the base: 337 | 338 | ![photo]({{ site.baseurl }}images/illustrations/cubetto-guide.jpg) 339 | 340 | Don't mount the motors for now, first you have to mount the ball casters. 341 | 342 | ![photo]({{ site.baseurl }}images/illustrations/ball-caster.jpg) 343 | 344 | ![photo]({{ site.baseurl }}images/photo/diy-docs-9.jpg) 345 | 346 | Now the CNY70. Solder the two opposite headers, that must be connected to 5V, together with a wire; then solder three wires to the remaining headers of the CNY70. At the end of these wires solder a row of three female headers. They will later be connected on to the headers of the proto shield. 347 | 348 | The two cny70 must be placed on the edge of the bottom layer, with the LED and the photoransistot horizontally aligned. To fix them you can use some hot glue (or other types of glue). 349 | 350 | See the picture to understand the location. 351 | 352 | ![photo]({{ site.baseurl }}images/photo/diy-docs-11.jpg) 353 | 354 | Just like for the CNY70, solder two wires to the little flaps that come out of each motor. You can twist the two wires to make them more resistent, then at the end, solder a row of two female header, just like in the illustration. 355 | 356 | Now print the inner drawing with the black and white slices, glue them on a piece of cardboard (or laser cut wood, that's up to you), cut the perimeter and make a hole in the middle, as they will be inserted between the motor and the wheel. The white and black slices must point towards the inner side of Cubetto and the distance between the print and the CNY70 must be between 1 and 3 millimeters for the CNY70 to work properly. 357 | 358 | ![photo]({{ site.baseurl }}images/photo/diy-docs-10.jpg) 359 | 360 | Now you can put the wheels on the motors, if you used the Solarbotics wheels, you can fasten them with the screw provided, don't make it too tight. 361 | 362 | Glue three out of the four 'walls' of Cubetto, parts 5, 7 and 8. We are going to leave the back removable, just in case we want to modify something. 363 | 364 | Take the battery holder and solder the black and red cable to other 2 female connectors. The headers on the shield will go to VIN and ground. A switch that breaks the red wire is heavily suggested. 365 | 366 | ![photo]({{ site.baseurl }}images/photo/diy-docs-13.jpg) 367 | 368 | Now you can place the Arduino + Proto shield on top of the motors, plug all the headers on the shield and you have finished making Cubetto. 369 |
370 | 371 | ##Arduino 372 | 373 | ###[Download Arduino Files](https://github.com/primo-io/arduino-sketches/raw/master/primo-prototype-arduino.zip) 374 | 375 | Instructions in the sketch comments. 376 | --------------------------------------------------------------------------------