{"id":3298,"date":"2026-04-16T11:28:45","date_gmt":"2026-04-16T08:28:45","guid":{"rendered":"https:\/\/blog.edu.turku.fi\/allu\/?page_id=3298"},"modified":"2026-05-29T10:04:14","modified_gmt":"2026-05-29T07:04:14","slug":"robotti-ohjelmointi","status":"publish","type":"page","link":"https:\/\/blog.edu.turku.fi\/allu\/sivu-2\/robotti-ohjelmointi\/","title":{"rendered":"Robottiohjelmointi"},"content":{"rendered":"\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-black-color has-text-color has-background has-link-color wp-element-button\" href=\"https:\/\/blog.edu.turku.fi\/allu\/sivu-2\/\" style=\"background-color:#e6f3b7\">Palaa takaisin<\/a><\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:30px\"><strong>Robottiohjelmointi &#8211; Lego Spike Prime<\/strong><\/h2>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-7387b849 wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-full is-style-default\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"573\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/1-1.png\" alt=\"\" class=\"wp-image-3440\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/1-1.png 573w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/1-1-300x267.png 300w\" sizes=\"auto, (max-width: 573px) 100vw, 573px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/2-1.png\" alt=\"\" class=\"wp-image-3441\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/2-1.png 577w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/2-1-300x265.png 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"475\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/3-1.png\" alt=\"\" class=\"wp-image-3442\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/3-1.png 475w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/3-1-279x300.png 279w\" sizes=\"auto, (max-width: 475px) 100vw, 475px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\" style=\"margin-top:0;margin-right:0;margin-bottom:0;margin-left:0\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"510\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2.png\" alt=\"\" class=\"wp-image-3443\" style=\"object-fit:cover\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2.png 512w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-300x300.png 300w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-150x150.png 150w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-270x270.png 270w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/4-2-230x230.png 230w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-1&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-1-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-1\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Opintojakson suorittaminen<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-1\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-1-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Lego-yleisohje-3.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston Lego yleisohje upotus.\"><\/object><a id=\"wp-block-file--media-fb81edac-bc18-4a88-8be1-a3a7186a444f\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Lego-yleisohje-3.pdf\">Lego yleisohje<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/Lego-yleisohje-3.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-fb81edac-bc18-4a88-8be1-a3a7186a444f\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-2&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-3218f6a990a82094b3149d5540578240\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-2-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-2\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Ohje: Lego Spike Prime k\u00e4ytt\u00f6\u00f6n<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-2\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-2-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/LEGO-ohjelmointitehtavien-ohje.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Tiedoston LEGO-ohjelmointiteht\u00e4vien ohje upotus.\"><\/object><a id=\"wp-block-file--media-74e92134-6366-4569-90cd-61ffa4adb9e1\" href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/LEGO-ohjelmointitehtavien-ohje.pdf\">LEGO-ohjelmointiteht\u00e4vien ohje<\/a><a href=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/05\/LEGO-ohjelmointitehtavien-ohje.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-74e92134-6366-4569-90cd-61ffa4adb9e1\">Lataa<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:25px\"><strong>1. Perusteht\u00e4v\u00e4t<\/strong><\/h3>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c9d48ef3fcb8ed4d145ac8a5324bb1de wp-block-paragraph\" style=\"font-size:16px\">Tee teht\u00e4v\u00e4t Pythonilla. Tarvittaessa voit harjoitella ensin lohkomuodossa, mutta lopputeht\u00e4v\u00e4 on teht\u00e4v\u00e4 Pythonilla. Kuvaa jokaisesta teht\u00e4v\u00e4st\u00e4 oma video ja nime\u00e4 ne teht\u00e4v\u00e4nannon mukaisesti, kuten Teht\u00e4v\u00e4_1. <\/p>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\" style=\"font-size:20px\"><strong>Liike<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 1.<\/strong> Liikkuminen eteen- ja taaksep\u00e4in<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3579e122e2731badf355ef7a54aa5001 wp-block-paragraph\">Kirjoita koodi, jonka avulla robotti liikkuu ensin suoraan eteenp\u00e4in ja sitten taaksep\u00e4in, eli palaa alkupisteeseen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-3&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-76f8bc8c1ad1ca46f0118695b9766ad1\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-3-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-3\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-3\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-3-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>f<strong>rom hub import port \nimport runloop \nimport motor_pair \n\nasync def main(): \n\u202f \u202f #alustetaan moottoripari \n\u202f \u202f motor_pair.pair(motor_pair.PAIR_1, port.C, port.D) \n\n\u202f \u202f #Ajetaan suoraan \u202f10s asetetulla nopeudella. \n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=500) \n\n\u202f \u202f #Ajetaan suoraan10s asetetulla nopeudella. \n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=-500) \n\nrunloop.run(main()) <\/strong><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"355\" height=\"266\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-6.png\" alt=\"\" class=\"wp-image-3315\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-6.png 355w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-6-300x225.png 300w\" sizes=\"(max-width: 355px) 100vw, 355px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 2.<\/strong> K\u00e4\u00e4ntyminen<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b41c24bd3f5ae3fee357190571aa9438 wp-block-paragraph\">Kirjoita koodi, joka k\u00e4\u00e4nt\u00e4\u00e4 robotin paikallaan ensin oikealle ja sitten vasemmalle.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-4&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-4-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-4\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-4\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-4-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port \nimport runloop \nimport motor_pair \n\nasync def main(): \n\u202f \u202f # alustetaan moottoripari \n\u202f \u202f motor_pair.pair(motor_pair.PAIR_1, port.C, port.D) \n\n\u202f \u202f #k\u00e4\u00e4nny oikealle \n\u202f \u202f await motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 1000, 0) \n\n\u202f \u202f #k\u00e4\u00e4nny vasemmalle \n\u202f \u202f await motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 0, 1000) \n\nrunloop.run(main()) <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"387\" height=\"256\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-7.png\" alt=\"\" class=\"wp-image-3320\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-7.png 387w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-7-300x198.png 300w\" sizes=\"(max-width: 387px) 100vw, 387px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 3. <\/strong>Liikkuminen + k\u00e4\u00e4ntyminen<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-edbe0a234577790bbe52c57135a91184 wp-block-paragraph\">Aja robotilla aluksi suoraan taaksep\u00e4in ja sitten k\u00e4\u00e4nny oikealle. Aja lopuksi viel\u00e4 eteenp\u00e4in.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-5&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-5-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-5\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-5\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-5-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port\nimport runloop\nimport motor_pair\n\nasync def main(): \n\u202f \u202f # alustetaan moottoripari \n\u202f \u202f motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n\n\u202f \u202f #suoraan taaksep\u00e4in\n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=-500)\n\n\u202f \u202f #k\u00e4\u00e4ntyminen oikealle\n\u202f \u202f await motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 0, 1000)\n\n\u202f \u202f #suoraan eteenp\u00e4in\n\u202f \u202f await motor_pair.move_for_time(motor_pair.PAIR_1, 5000, 0, velocity=500)\n\nrunloop.run(main())<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"389\" height=\"316\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-9.png\" alt=\"\" class=\"wp-image-3329\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-9.png 389w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-9-300x244.png 300w\" sizes=\"(max-width: 389px) 100vw, 389px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Anturit<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 4.<\/strong> Valomatriisi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-5bdf8222bacb1b6fe13f1433d0a310c2 wp-block-paragraph\"><strong>a)<\/strong> <strong> <\/strong>Teksti valomatriisiin. Tulosta robotin valomatriisiin teksti.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-6&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-6-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-6\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-6\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-6-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix\n\n#n\u00e4ytt\u00e4\u00e4 Terve!-tekstin robotin valomatriisilla\nlight_matrix.write(\"Terve!\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"252\" height=\"141\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-8.png\" alt=\"\" class=\"wp-image-3327\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>b)<\/strong> Kuva valomatriisiin. Tulosta robotin valomatriisiin kuva ja vaihda robotin k\u00e4ynnistyspainikkeen v\u00e4ri haluamaksesi.<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-7&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-7-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-7\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-7\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-7-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light, light_matrix\nimport color\n\n#N\u00e4ytt\u00e4\u00e4 kirahvin kuvan robotin valomatriisilla\nlight_matrix.show_image(light_matrix.IMAGE_GIRAFFE)\n\n#V\u00e4rj\u00e4\u00e4 k\u00e4ynnistyspainikkeen violetiksi\nlight.color(light.POWER, color.PURPLE)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ratkaisun voi toteuttaa my\u00f6s palikoita k\u00e4ytt\u00e4en seuraavasti:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"402\" height=\"198\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-10.png\" alt=\"\" class=\"wp-image-3332\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-10.png 402w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-10-300x148.png 300w\" sizes=\"(max-width: 402px) 100vw, 402px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 5. <\/strong>V\u00e4ri- ja valosensori<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ed2abdee68b8cd1f8111e7b5be6a84c4 wp-block-paragraph\">Tulosta tietokoneen n\u00e4yt\u00f6lle, ett\u00e4 asettamasi v\u00e4ri on havaittu.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-8&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-8-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-8\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-8\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-8-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import color_sensor\nfrom hub import port\nimport color\n\nif color_sensor.color(port.B) == color.YELLOW:\n    print(\"Keltainen havaittu\")<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 6. <\/strong>Gyroanturi<\/h5>\n\n\n\n<h5 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-e6cf8c2470699d96a5a76b85f16c498a\" style=\"font-size:16px\"><strong>a)<\/strong> K\u00e4\u00e4nn\u00e4 robottia komennolla n. 90 astetta k\u00e4ytt\u00e4en liikeanturia (motion_sensor-moduuli). K\u00e4\u00e4nn\u00e4 sitten robotti takaisin alkuasentoon.&nbsp;<\/h5>\n\n\n\n<h5 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-45de987edf6d1e13b1f1ccc0268f2340\" style=\"font-size:16px\">Arvot voivat vaihdella, sill\u00e4 robotit ovat yksil\u00f6llisi\u00e4.&nbsp;<br>K\u00e4ytet\u00e4\u00e4n yksitt\u00e4isi\u00e4 moottoreita, my\u00f6s tankkik\u00e4\u00e4nn\u00f6s kenties mahdollinen.&nbsp;<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-9&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-9-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-9\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-9\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-9-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, motion_sensor as ms\nimport runloop, motor \n\nmoottori1 = port.C\nmoottori2 = port.D \n\nasync def main():\n    ms.reset_yaw(0)\n    motor.run(moottori1, 300)\n    motor.run(moottori2, 300)\n    while ms.tilt_angles()&#091;0] &lt; 850:\n        await runloop.sleep_ms(5)\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\n    await runloop.sleep_ms(600)\n\n    motor.run(moottori1, -300)\n    motor.run(moottori2, -300)\n    ms.reset_yaw(0)\n    while ms.tilt_angles()&#091;0] &gt; -850:\n        await runloop.sleep_ms(5)\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>b)<\/strong> Robotti on t\u00e4ss\u00e4 teht\u00e4v\u00e4ss\u00e4 oikein p\u00e4in, kun valomatriisi on kohti kattoa. Kirjoita koodi, joka havaitsee robotin kolmiulotteisen asennon ja n\u00e4ytt\u00e4\u00e4 valomatriisilla oikeanlaisen kuvion. Jos robotti on oikein p\u00e4in, matriisilla n\u00e4ytet\u00e4\u00e4n hymi\u00f6. Jos se on v\u00e4\u00e4rinp\u00e4in, n\u00e4ytet\u00e4\u00e4n surunaama. Muuten n\u00e4ytet\u00e4\u00e4n se suunta, johon robottia olisi k\u00e4\u00e4nnett\u00e4v\u00e4, jotta se olisi oikein p\u00e4in.&nbsp;<\/h5>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-10&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-10-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-10\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-10\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-10-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, motion_sensor\nimport orientation, runloop\n\nasync def main():\n\u202f \u202f while True:\n\u202f \u202f \u202f \u202f side = motion_sensor.up_face()\n\n\u202f \u202f \u202f \u202f # Oikein p\u00e4in\n\u202f \u202f \u202f \u202f if side == motion_sensor.TOP:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_HAPPY)\n\n\u202f \u202f \u202f \u202f # Yl\u00f6salaisin\n\u202f \u202f \u202f \u202f elif side == motion_sensor.BOTTOM:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_SAD)\n\n\u202f \u202f \u202f \u202f # Kaiutin yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 taakse\n\u202f \u202f \u202f \u202f elif side == motion_sensor.FRONT:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.DOWN)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N)\n\n\u202f \u202f \u202f \u202f # USB-portti yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 eteen \n\u202f \u202f \u202f \u202f elif side == motion_sensor.BACK:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.UP)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N)\n\n\u202f \u202f \u202f \u202f # Vasen sivu yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 oikealle\n\u202f \u202f \u202f \u202f elif side == motion_sensor.LEFT:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.LEFT)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N) \n\n\u202f \u202f \u202f \u202f # Oikea sivu yl\u00f6sp\u00e4in \u2192 k\u00e4\u00e4nn\u00e4 vasemmalle \n\u202f \u202f \u202f \u202f elif side == motion_sensor.RIGHT:\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.set_orientation(orientation.RIGHT)\n\u202f \u202f \u202f \u202f \u202f \u202f light_matrix.show_image(light_matrix.IMAGE_ARROW_N)\n\n\u202f \u202f \u202f \u202f await runloop.sleep_ms(100)\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 7. <\/strong>Et\u00e4isyysanturi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-8836b9d3c93c15eaf9c2e02f92e86f3f wp-block-paragraph\">Aja robotilla eteenp\u00e4in, kunnes robotti n\u00e4kee sein\u00e4n. Sein\u00e4n havaittuaan robotti peruuttaa v\u00e4h\u00e4n matkaa (esim. sekunnin) ja n\u00e4ytt\u00e4\u00e4 et\u00e4isyysanturilla mitatun et\u00e4isyyden n\u00e4yt\u00f6ll\u00e4.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-11&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-11-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-11\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-11\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-11-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, port\nimport runloop, distance_sensor as ds, motor, time\n\nmoottori1 = port.C\nmoottori2 = port.D\n\nasync def main():\n    while True:\n\n        et\u00e4isyys = ds.distance(port.A)\n        motor.run(moottori1, -600)\n        motor.run(moottori2, 600)\n\n        if et\u00e4isyys &gt; 200 or et\u00e4isyys == -1 or et\u00e4isyys is None:\n            time.sleep_ms(100)\n\n        else:\n            motor.run(moottori1, 600)\n            motor.run(moottori2, -600)\n            time.sleep_ms(1000)\n            motor.stop(moottori1)\n            motor.stop(moottori2)\n            break\n\n    await light_matrix.write(str(et\u00e4isyys))\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 8. <\/strong>Voima-anturi<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f62f7a952d9975793b2e7181f77c333e wp-block-paragraph\">Toteuta voimapeli, johon voi osallistua 1\u20135 pelaajaa. Jokainen pelaaja painaa vuorollaan voima-anturia t\u00e4ysill\u00e4. T\u00e4m\u00e4 tehd\u00e4\u00e4n kolme kertaa ja korkein tulos j\u00e4\u00e4 voimaan. Korkeimman tuloksen saanut pelaaja voittaa.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-12&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-12-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-12\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-12\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-12-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import button, port\nimport force_sensor\nimport time\n\nplayers = 1\nmin_players = 1\nmax_players = 5\n\nprint(\"Valitse kilpailijoiden m\u00e4\u00e4r\u00e4\")\nprint(\"Oikea = lis\u00e4\u00e4, vasen = aloittaa pelin\")\nprint(\"Kilpailijoita:\", players)\n\nwhile True:\n    if button.pressed(button.RIGHT):\n        if players &lt; max_players:\n            players += 1\n            print(\"Kilpailijoita:\", players)\n        time.sleep(0.3)\n\n    if button.pressed(button.LEFT):\n        print(\"\\nKISA ALKAA!\")\n        time.sleep(0.5)\n        break\n\n    time.sleep(0.05)\n\nall_results = &#091;]\n\nfor player in range(1, players + 1):\n    print(\"\\nKILPAILIJA\", player)\n    results = &#091;]\n\n    for press in range(1, 4):\n        max_force = 0\n        print(\"Painallus\", press, \": paina anturia\")\n\n        # Odota painalluksen alkua\n        while force_sensor.force(port.E) == 0:\n            time.sleep(0.01) \n\n        # Mittaa painalluksen ajan\n        while force_sensor.force(port.E) &gt; 0:\n            f = force_sensor.force(port.E)\n            if f &gt; max_force:\n                max_force = f\n            time.sleep(0.01)\n\n        results.append(max_force)\n        print(\"\u2192 Tulos:\", max_force, \"%\\n\")\n        time.sleep(0.5)\n\n    best = max(results)\n    all_results.append(best)\n\n    print(\"Kilpailijan\", player, \"paras tulos:\", best, \"%\")\n\n# VOITTAJA\n\nprint(\"\\nLOPPUTULOKSET\")\nfor i, score in enumerate(all_results):\n    print(\"Kilpailija\", i + 1, \":\", score, \"%\")\n\nwinner_force = max(all_results)\nwinner_index = all_results.index(winner_force) + 1\n\nprint(\"\\nVOITTAJA\")\nprint(\"Kilpailija\", winner_index, \"voitti voimalla\", winner_force, \"%\") <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 9. <\/strong>\u00c4\u00e4ni<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0d01801459d698a27f1824c4d4735dec wp-block-paragraph\">Laita robotti soittamaan Ukko Nooa -laulun alku. Pyyd\u00e4 kappaleen alun s\u00e4velten taajuudet hertsein\u00e4 esimerkiksi teko\u00e4lylt\u00e4, \u00e4l\u00e4 kuitenkaan kopioi koko koodia.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-13&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-13-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-13\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-13\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-13-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import sound\nimport time\n\nsound.beep(440, 300, 100)\ntime.sleep_ms(300)\nsound.beep(440, 300, 100)\ntime.sleep_ms(300)\nsound.beep(440, 300, 100)\ntime.sleep_ms(300)\nsound.beep(555, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(587, 300, 100)\ntime.sleep_ms(300)\nsound.beep(555, 300, 100)\ntime.sleep_ms(300)\nsound.beep(555, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(494, 300, 100)\ntime.sleep_ms(300)\nsound.beep(440, 300, 100)\ntime.sleep_ms(600)<\/code><\/pre>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Ratkaistavissa my\u00f6s palikoilla:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"272\" height=\"529\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-11.png\" alt=\"\" class=\"wp-image-3347\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-11.png 272w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-11-154x300.png 154w\" sizes=\"(max-width: 272px) 100vw, 272px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 10. <\/strong>Painikkeet<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f469efba1a17d7b9de17f90812011776 wp-block-paragraph\">Toteuta koodi, jossa oikeaa painiketta painamalla robotti k\u00e4\u00e4ntyy oikealle ja vasenta painiketta painamalla vasemmalle.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-14&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-14-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-14\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-14\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-14-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import button, port\nimport motor_pair\nimport runloop\n\nasync def main():\n    motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n     \n    while True:\n        if button.pressed(button.LEFT):\n            motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 1000, 0)\n\n        elif button.pressed(button.RIGHT):\n            motor_pair.move_tank_for_degrees(motor_pair.PAIR_1, 180, 0, 1000)\n        await runloop.sleep_ms(10)\n\nrunloop.run(main())<\/code><\/pre>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-7387b849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"591\" height=\"241\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-12.png\" alt=\"\" class=\"wp-image-3350\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-12.png 591w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-12-300x122.png 300w\" sizes=\"(max-width: 591px) 100vw, 591px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>Ohjelmoinnin perusominaisuudet<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 11. <\/strong>Silmukat<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-859fda5d7492c8ed0acd42cf2ae387e6 wp-block-paragraph\">Ohjelmoi robotti ajamaan ymp\u00e4ri siten, ett\u00e4 se p\u00e4\u00e4tyy suurin piirtein samaan aloitusasemaan ja -asentoon. K\u00e4\u00e4nn\u00f6ksi\u00e4 voi olla vapaavalintainen m\u00e4\u00e4r\u00e4. Robotti voi ajaa esim. neli\u00f6n mallisesti, kuten esimerkiss\u00e4. Esimerkki on tehty k\u00e4ytt\u00e4en robotin asentoanturia.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-15&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-15-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-15\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-15\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-15-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, port, motion_sensor as ms\nimport runloop, motor\n\nmoottori1 = port.C\nmoottori2 = port.D\n\nasync def main():\n\n    for i in range(8):\n        print(i)\n        ms.reset_yaw(0)\n\n        motor.run(moottori1, 300)\n        motor.run(moottori2, 300)\n\n        while ms.tilt_angles()&#091;0] &lt; 700:\n            await runloop.sleep_ms(5)\n        motor.stop(moottori1)\n        motor.stop(moottori2)\n\n        print(i)\n\n        motor.run(moottori1, -500)\n        motor.run(moottori2, 500)\n        await runloop.sleep_ms(500)\n\n        motor.stop(moottori1)\n        motor.stop(moottori2)\n\n    await light_matrix.write(\"Ymp\u00e4ri\")\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 12. <\/strong>Ehdot<\/h2>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c29eba998c44267f178edbb452b19eb2 wp-block-paragraph\">Toteuta koodi, jonka avulla havaitaan, mink\u00e4 v\u00e4rinen objekti on n\u00e4ytetty v\u00e4rianturille. Valomatriisille tulostetaan teksti ja k\u00e4ynnistyspainikkeen v\u00e4ri vaihtuu n\u00e4ytetyn objektin v\u00e4rin mukaisesti. Jos v\u00e4rianturille n\u00e4ytet\u00e4\u00e4n esim. punainen palikka, valomatriisille tulee tulostaa PUNAINEN ja k\u00e4ynnistyspainikkeen v\u00e4ri muuttuu punaiseksi.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e0495fbc2f7a4a0ae259a684af5550ef wp-block-paragraph\">Koodissa tulee huomioida kaikki v\u00e4rianturin tunnistamat v\u00e4rit.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-16&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-16-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-16\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-16\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-16-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, light_matrix, light\nimport color_sensor\nimport color\n\nwhile True:\n    if color_sensor.color(port.F) == color.RED:\n        light_matrix.write(\"PUNAINEN\")\n        light.color(light.POWER, color.RED)\n    elif color_sensor.color(port.F) == color.GREEN:\n        light_matrix.write(\"VIHRE\u00c4\")\n        light.color(light.POWER, color.GREEN)\n    elif color_sensor.color(port.F) == color.BLUE:\n        light_matrix.write(\"SININEN\")\n        light.color(light.POWER, color.BLUE)\n    elif color_sensor.color(port.F) == color.MAGENTA:\n        light_matrix.write(\"MAGENTA\")\n        light.color(light.POWER, color.MAGENTA)\n    elif color_sensor.color(port.F) == color.YELLOW:\n        light_matrix.write(\"KELTAINEN\")\n        light.color(light.POWER, color.YELLOW)\n    elif color_sensor.color(port.F) == color.ORANGE:\n        light_matrix.write(\"ORANSSI\")\n        light.color(light.POWER, color.ORANGE)\n    elif color_sensor.color(port.F) == color.AZURE:\n        light_matrix.write(\"TAIVAANSININEN\")\n        light.color(light.POWER, color.AZURE)\n    elif color_sensor.color(port.F) == color.BLACK:\n        light_matrix.write(\"MUSTA\")\n        light.color(light.POWER, color.BLACK)\n    elif color_sensor.color(port.F) == color.WHITE:\n        light_matrix.write(\"VALKOINEN\")\n        light.color(light.POWER, color.WHITE)\n    else:\n        pass<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 13. <\/strong>Muuttujat<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-75af2ba0fcc955bdfc84fd3e28498161 wp-block-paragraph\">N\u00e4yt\u00e4 luvut 1\u201310 robotin valomatriisilla sekunnin v\u00e4lein.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-17&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-17-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-17\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-17\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-17-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix as lm\nimport runloop\n\nasync def main():\n    for i in range(1,11):\n        await runloop.sleep_ms(1000)\n        lm.write(str(i))\n\nrunloop.run(main())\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 14. <\/strong>Yhdistelm\u00e4<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-424ed160c0c1c39461f8ec73251800cc wp-block-paragraph\">Yhdistet\u00e4\u00e4np\u00e4 hieman edellisiss\u00e4 teht\u00e4viss\u00e4 mainittuja asioita. Luo ohjelma, jossa asetetaan erisuuruiset arvot kahdelle muuttujalle. Lis\u00e4ksi ohjelmassa tulee olla silmukka, jossa v\u00e4hennet\u00e4\u00e4n suuremman muuttujan arvosta, kunnes sen arvo on toisen muuttujan arvoa pienempi. Robotin tulee liikkua sek\u00e4 n\u00e4ytt\u00e4\u00e4 valomatriisilla jokin kuvio silmukan suorituksen ajan. Kun silmukan suoritus p\u00e4\u00e4ttyy, robotin tulee pys\u00e4hty\u00e4 ja valomatriisilla n\u00e4ytett\u00e4v\u00e4n kuvion vaihtua.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-18&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-18-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-18\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-18\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-18-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import light_matrix, port\nimport runloop, motor_pair\n\nmotor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n\nasync def main():\n    var1 = 1\n    var2 = 4\n    while var1 &lt; var2:\n        var2 -= 1\n        await light_matrix.write(\"M\")\n        motor_pair.move(motor_pair.PAIR_1, 0, velocity=500)\n        await runloop.sleep_ms(1000)\n\n    motor_pair.stop(motor_pair.PAIR_1)\n    await light_matrix.write(\"S\")\n\nrunloop.run(main())\n<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 15. <\/strong>Funktiot<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-337e003ce0fb5c5b630ca30722c857d9 wp-block-paragraph\">Ohjelmoi robotti ajamaan siksakkia annetuin parametrein (pituus, k\u00e4\u00e4ntymiskulma). Pituuden tai kulman yksikk\u00f6\u00e4 ei tarvitse olla m\u00e4\u00e4riteltyn\u00e4. Mahdollista my\u00f6s pidemm\u00e4n siksakin ajaminen hy\u00f6dynt\u00e4m\u00e4ll\u00e4 funktiokutsuja, jotta siksakin ajaminen voidaan tarvittaessa toistaa.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-19&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-19-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-19\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-19\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-19-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, motion_sensor as ms\nimport runloop, motor\n\nmoottori1 = port.C\nmoottori2 = port.D\n\nasync def suorita_siksakki(matka, k\u00e4\u00e4nn\u00f6s):\n\n    motor.run(moottori1, -500)\n    motor.run(moottori2, 500)\n\n    await runloop.sleep_ms(matka)\n\n    ms.reset_yaw(0)\n\n    motor.run(moottori1, 300)\n    motor.run(moottori2, 300)\n\n    while ms.tilt_angles()&#091;0] &lt; k\u00e4\u00e4nn\u00f6s:\n        await runloop.sleep_ms(5)\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\n    motor.run(moottori1, -500)\n    motor.run(moottori2, 500)\n\n    await runloop.sleep_ms(matka)\n\n    ms.reset_yaw(0)\n\n    motor.run(moottori1, -300)\n    motor.run(moottori2, -300)\n\n    while ms.tilt_angles()&#091;0] &gt; -k\u00e4\u00e4nn\u00f6s:\n        await runloop.sleep_ms(5)\n\n    motor.stop(moottori1)\n    motor.stop(moottori2)\n\nasync def main():\n\n    for i in range(3):\n        await suorita_siksakki(500, 700)\n\nrunloop.run(main())<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h5 class=\"wp-block-heading\" style=\"font-size:16px\"><strong>Teht\u00e4v\u00e4 16. <\/strong>Ajastus<\/h5>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6d2018353fc887af2a3d416efcc52359 wp-block-paragraph\">Kirjoita ohjelma, joka toteuttaa seuraavat toiminnot j\u00e4rjestyksess\u00e4:&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-71a398b61cad308b684a0c3d8c0e64c9 wp-block-paragraph\">&#8211; Ohjelma alkaa viisi sekuntia k\u00e4ynnistyksen j\u00e4lkeen.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d8d206d1d51aca1cd42ce30c484425a2 wp-block-paragraph\">&#8211; Robotti liikkuu suoraan eteenp\u00e4in viiden sekunnin ajan.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d73985b415017e8a6468a975c82e18f5 wp-block-paragraph\">&#8211; Sitten robotti odottaa j\u00e4lleen viisi sekuntia.&nbsp;<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a4ed75e32dda4b9d587032e60dee6a13 wp-block-paragraph\">&#8211; Robotti tekee seuraavaksi viisi sekuntia kest\u00e4v\u00e4n tankkik\u00e4\u00e4nn\u00f6ksen.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-7803120db14a4b5cee1292764b9bf906 wp-block-paragraph\">&#8211; Robotti odottaa viiden sekunnin ajan, mink\u00e4 j\u00e4lkeen se tekee viisi sekuntia kest\u00e4v\u00e4n \u00e4\u00e4nen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-20&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-20-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-20\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Vastaus<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-20\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-20-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Esimerkkikoodi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from hub import port, sound\nimport motor_pair\nimport runloop\nimport time\n\nasync def main():\n    motor_pair.pair(motor_pair.PAIR_1, port.C, port.D)\n    time.sleep_ms(5000)\n    motor_pair.move_tank_for_time(motor_pair.PAIR_1, 5000, 5000, 5000)\n    time.sleep_ms(5000)\n    motor_pair.move_tank_for_time(motor_pair.PAIR_1, 5000, -5000, 5000)\n    time.sleep_ms(5000)\n    sound.beep(500, 5000, 100)\n\nrunloop.run(main())<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Voi luoda vastaavan my\u00f6s ohjelmointipalikoita k\u00e4ytt\u00e4en.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"395\" height=\"458\" fetchpriority=\"low\" src=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-13.png\" alt=\"\" class=\"wp-image-3363\" srcset=\"https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-13.png 395w, https:\/\/blog.edu.turku.fi\/allu\/files\/2026\/04\/kuva-13-259x300.png 259w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:25px\"><strong>2. Lopputy\u00f6<\/strong><\/h3>\n\n\n\n<div style=\"height:23px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a591ce9d7c9dd36205777de29cbf8199 wp-block-paragraph\"><strong>Valitse kaksi projektiteht\u00e4v\u00e4\u00e4 tai projektiteht\u00e4v\u00e4 6.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6faeb0f29aa62f3019dbc9a92d9c8e75 wp-block-paragraph\">Mallivideon, malliratkaisujen sek\u00e4 pitkien tekstip\u00e4tkien kopioiminen LEGO SPIKE:n tietokannasta teko\u00e4lylle on kielletty\u00e4. Muutoin teko\u00e4lyn hy\u00f6dynt\u00e4minen on sallittua. Kuvaa jokaisesta projektity\u00f6st\u00e4 oma video ja nime\u00e4 ne teht\u00e4v\u00e4nannon mukaisesti, kuten Projektiteht\u00e4v\u00e4_1. Toteuta koodi, jossa robotti noudattaa seuraavia kriteerej\u00e4.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-21&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-d0d5cb3b3de47c919749df4c038e4f2f\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-21-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-21\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">K\u00e4yt\u00e4nn\u00f6n ohjeita<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-21\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-21-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Jos et\u00e4isyysanturi ei havaitse mit\u00e4\u00e4n, se palauttaa arvon -1. Projektiteht\u00e4viin on sallittua lis\u00e4t\u00e4 omia parannuksia, kuten arvojen tulostamista komentokehotteeseen sek\u00e4 aloitus- ja lopetusehtoja, kunhan kaikki vaaditut asiat toteutuvat. Koodiin on suositeltavaa lis\u00e4t\u00e4 omia selitt\u00e4vi\u00e4 kommentteja #-merkill\u00e4. Pid\u00e4 robotin nopeudet aluksi matalina ja nosta niit\u00e4 vasta siin\u00e4 vaiheessa, kun koodi toimii luotettavasti. Jos akku on v\u00e4hiss\u00e4, robotti toimii huonommin. Liian alhainen nopeus voi kuitenkin tehd\u00e4 robotista tarpeettoman hitaan ja aiheuttaa toiminnallisia ongelmia.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-22&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-black-color has-text-color has-background has-link-color has-medium-font-size wp-elements-d4d89a536751ee06a87c41d46cf7ed31\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-22-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-22\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Arviointikriteerit<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-22\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-22-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Tee teht\u00e4v\u00e4t Pythonilla. Projektiteht\u00e4vien tulee toimia vaadittavien ominaisuuksien mukaisesti. Robotin ei tarvitse toimia t\u00e4ysin virheett\u00f6m\u00e4sti, kunhan sen toiminta on p\u00e4\u00e4osin samankaltainen kuin mallivideolla. Lopullisen koodin tulee ymm\u00e4rt\u00e4\u00e4 riveitt\u00e4in ja osata selitt\u00e4\u00e4, mit\u00e4 kukin koodirivi tekee.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c0db98cbcba4e1fe9ae8cef29d275379 wp-block-paragraph\" style=\"font-size:16px\"><strong><strong>Projektiteht\u00e4v\u00e4<\/strong> 1<\/strong>.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3fd7933fd590ac9566aeccbd0e72e468 wp-block-paragraph\">Robotti liikkuu automaattisesti suoraan eteenp\u00e4in tasaisella perusnopeudella. Valkoisella paperilla robotin nopeus kasvaa ja se kiihdytt\u00e4\u00e4. Nopeuden kasvulle on asetettu aikaehto, jonka j\u00e4lkeen robotti palaa normaaliin ajonopeuteen, vaikka se olisi edelleen valkoisella paperilla. T\u00e4m\u00e4 ominaisuus ei n\u00e4y mallivideolla. Robotti pys\u00e4htyy havaitessaan edess\u00e4\u00e4n esteen ja k\u00e4\u00e4ntyy sen j\u00e4lkeen 180 astetta. Ajon aikana n\u00e4ytet\u00e4\u00e4n itse toteutettu valomatriisikuvio vapaavalintaisessa kohdassa. Valmiita valomatriiseja ei saa tuoda kirjastoista.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-23&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-23-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-23\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-23\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-23-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 1\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/x5KkvSuQJ24?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a563fa83a72c934d164b0ba11697fc00 wp-block-paragraph\" style=\"font-size:16px\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 2.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-3772b1fc994f3ff945d4af1b1eef0005 wp-block-paragraph\">Robotti liikkuu ainoastaan silloin, kun voima-anturia painetaan. Robotin nopeus m\u00e4\u00e4r\u00e4ytyy painamisen voimakkuuden ja v\u00e4riin sidotun nopeuskertoimen tulona. V\u00e4rianturin tulee tunnistaa kolme eri v\u00e4ri\u00e4. K\u00e4yt\u00f6ss\u00e4 on kolme nopeuskerrointa: hidas, keskinopea ja nopea. Suurimman ja pienimm\u00e4n kertoimen v\u00e4lisen eron tulee olla selke\u00e4sti havaittavissa robotin liikkeess\u00e4. Havaittu v\u00e4ri esitet\u00e4\u00e4n palkkikaaviossa. Valitun v\u00e4rin tulee olla sidottu palkkikaavion v\u00e4riin silloin, kun kyseinen v\u00e4ri on palkkikaaviossa k\u00e4ytett\u00e4viss\u00e4. V\u00e4ri valitaan ohjelman alussa. V\u00e4rin valinnan j\u00e4lkeen ei tarvitse tarjota mahdollisuutta muuttaa v\u00e4ri\u00e4 my\u00f6hemmin.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-24&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-24-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-24\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-24\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-24-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 2\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/w3voJzsQHPU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-110b207140946cd6b79b267602efccae wp-block-paragraph\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 3.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-08c723601e5f67d1657136ebd9d3b78c wp-block-paragraph\">Piirr\u00e4 A4\u2011paperille mustalla tussilla rata. Puuv\u00e4rej\u00e4 tai lyijykyn\u00e4\u00e4 ei saa k\u00e4ytt\u00e4\u00e4, sill\u00e4 niist\u00e4 irtoava materiaali voi tarttua robotin renkaisiin ja j\u00e4tt\u00e4\u00e4 paperiin j\u00e4lki\u00e4, joita robotti voi virheellisesti seurata. Radassa tulee olla loiva kaari, 90 asteen kulma sek\u00e4 S\u2011mutka, jossa on selke\u00e4sti kaartuvat osuudet. Robotti seuraa mustaa viivaa. Se voi hetkellisesti etsi\u00e4 viivaa, mutta ei saa selke\u00e4sti poiketa radalta ja sattumalta palata takaisin mustalle viivalle. L\u00e4ht\u00f6viivan p\u00e4\u00e4lt\u00e4 aloittaminen on sallittua. &nbsp;V\u00e4rianturin n\u00e4kem\u00e4t arvot tulostetaan viivakaaviona. Robotin pit\u00e4\u00e4 l\u00e4p\u00e4ist\u00e4 rata molempiin suuntiin. Eli l\u00e4ht\u00f6piste vaihdetaan ensimm\u00e4isen ajon j\u00e4lkeen.&nbsp;<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-25&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-25-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-25\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-25\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-25-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 3\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/MN-3cQzlPX0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-77027c7279bfca10bbac8f1285cdc556 wp-block-paragraph\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 4<\/strong>.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-af0c360395decf2b6447e1d4166ae540 wp-block-paragraph\">Ajo k\u00e4ynnistyy painamalla vasenta painiketta. Robotti havaitsee esteen ja kiert\u00e4\u00e4 sen. T\u00e4m\u00e4n j\u00e4lkeen robotti jatkaa etenemist\u00e4 samaan suuntaan kuin ennen estett\u00e4. Kun robotti k\u00e4\u00e4nnet\u00e4\u00e4n yl\u00f6salaisin, valomatriisiin ilmestyy surunaama. Toteutuksen tarvitsee toimia vain tietyn ennalta m\u00e4\u00e4ritellyn esteen kanssa, eik\u00e4 sen tarvitse olla yleiskelpoinen muihin esteisiin.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-26&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-26-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-26\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-26\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-26-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 4\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/VQHjWRFXlCA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-bcf20653d7467f1321d15c7d32bd9928 wp-block-paragraph\"><strong><strong><strong>Projektiteht\u00e4v\u00e4<\/strong><\/strong> 5<\/strong>.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-b29f5183b3c53d345a15d0e79d66fb9a wp-block-paragraph\">Kun este esimerkiksi k\u00e4si on l\u00e4hell\u00e4, robotti peruuttaa. Kun k\u00e4si on tietyill\u00e4, hieman kauempana olevilla et\u00e4isyyksill\u00e4, robotti liikkuu eteenp\u00e4in. Jos k\u00e4tt\u00e4 ei havaita lainkaan, robotti pysyy paikoillaan. Sein\u00e4\u00e4n peruuttaessa robotti pys\u00e4htyy, kun voima-anturin painike painautuu alasp\u00e4in sein\u00e4\u00e4n t\u00f6rm\u00e4yksen seurauksena. Robottiin tulee valomatriisiin rasti, kun osuu sein\u00e4\u00e4n. Robotti liikkuu t\u00e4m\u00e4n j\u00e4lkeen hieman eteenp\u00e4in, mink\u00e4 j\u00e4lkeen se ei reagoi hetkeen mihink\u00e4\u00e4n komentoihin. Liikkeen arvot tulee lis\u00e4ksi esitt\u00e4\u00e4 viivakaaviossa siten, ett\u00e4 paikoillaan olemista vastaa arvo 0, peruutusta arvo -1 ja eteenp\u00e4in liikkumista arvo 1.<\/p>\n\n\n\n<div data-wp-context=\"{ &quot;autoclose&quot;: false, &quot;accordionItems&quot;: [] }\" data-wp-interactive=\"core\/accordion\" role=\"group\" class=\"wp-block-accordion is-layout-flow wp-block-accordion-is-layout-flow\">\n<div data-wp-class--is-open=\"state.isOpen\" data-wp-context=\"{ &quot;id&quot;: &quot;accordion-item-27&quot;, &quot;openByDefault&quot;: false }\" data-wp-init=\"callbacks.initAccordionItems\" data-wp-on-window--hashchange=\"callbacks.hashChange\" class=\"wp-block-accordion-item is-layout-flow wp-block-accordion-item-is-layout-flow\">\n<h3 class=\"wp-block-accordion-heading has-background has-medium-font-size\" style=\"background-color:#e6f3b7\"><button aria-expanded=\"false\" aria-controls=\"accordion-item-27-panel\" data-wp-bind--aria-expanded=\"state.isOpen\" data-wp-on--click=\"actions.toggle\" data-wp-on--keydown=\"actions.handleKeyDown\" id=\"accordion-item-27\" type=\"button\" class=\"wp-block-accordion-heading__toggle\"><span class=\"wp-block-accordion-heading__toggle-title\">Mallivideo<\/span><span class=\"wp-block-accordion-heading__toggle-icon\" aria-hidden=\"true\">+<\/span><\/button><\/h3>\n\n\n\n<div inert aria-labelledby=\"accordion-item-27\" data-wp-bind--inert=\"!state.isOpen\" id=\"accordion-item-27-panel\" role=\"region\" class=\"wp-block-accordion-panel is-layout-flow wp-block-accordion-panel-is-layout-flow\">\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"ALLU - Algoritmeja ja lukuteoriaa oppimassa - Robottiohjelmointi - projektiteht\u00e4v\u00e4 5\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/gltQ649_z9I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:45px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-08cb3c32d518e29df1b69f6958668ecd wp-block-paragraph\" style=\"font-size:16px\"><strong>Projektiteht\u00e4v\u00e4 6.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-114e226ec4dc1044ca4a1cf225295de1 wp-block-paragraph\" style=\"font-size:16px\">Toteutus sek\u00e4 ohjelmoinnin ett\u00e4 robotin rakenteen osalta on vapaavalintainen. Ty\u00f6n tulee sis\u00e4lt\u00e4\u00e4 kaikki LEGO Spike -ymp\u00e4rist\u00f6n \u201cAloita\u201d-osion Prime-oppitunneissa k\u00e4ytetyt robottiosat. Kolmen moottorin k\u00e4ytt\u00f6 lasketaan kahdeksi osaksi ja yhden moottoriparin k\u00e4ytt\u00f6 yhdeksi osaksi. Yhden osan voi korvata pylv\u00e4s- tai viivakuvaajan k\u00e4yt\u00f6ll\u00e4 ja toisen osan rakentamalla ymp\u00e4rist\u00f6\u00e4. Ymp\u00e4rist\u00f6 voi olla viivarata, labyrintti, v\u00e4rialueet sek\u00e4 erilaiset rakennetut kokonaisuudet, kuten useista palikoista muodostetut rakenteet. Rakenteella tulee olla selke\u00e4 toiminnallinen tarkoitus, kuten korkeus tai v\u00e4ri, eik\u00e4 se saa olla pelk\u00e4st\u00e4\u00e4n esteettinen.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-455d62e54d8534ab58c290eeb3321e51 wp-block-paragraph\" style=\"font-size:16px\">Kaikkien k\u00e4ytett\u00e4vien osien tulee toimia tietyill\u00e4 ehdoilla. Esimerkiksitilanteessa valomatriisi on p\u00e4\u00e4ll\u00e4 kymmenen sekunnin ajan. Lis\u00e4ksi joidenkin robottiosien tulee olla riippuvaisia toisistaan, kuten moottorien pys\u00e4htyminen voima-anturin painalluksesta. Koodissa tulee olla main-funktion lis\u00e4ksi v\u00e4hint\u00e4\u00e4n kolme funktiota. Robotin tulee liikkua v\u00e4hint\u00e4\u00e4n kahteen suuntaan sek\u00e4 reagoida ymp\u00e4rist\u00f6\u00f6n jollakin tavalla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Robottiohjelmointi &#8211; Lego Spike Prime 1. Perusteht\u00e4v\u00e4t Tee teht\u00e4v\u00e4t Pythonilla. Tarvittaessa voit harjoitella ensin lohkomuodossa, mutta lopputeht\u00e4v\u00e4 on teht\u00e4v\u00e4 Pythonilla. Kuvaa jokaisesta teht\u00e4v\u00e4st\u00e4 oma video ja nime\u00e4 ne teht\u00e4v\u00e4nannon mukaisesti, kuten Teht\u00e4v\u00e4_1. Liike Teht\u00e4v\u00e4 1. Liikkuminen eteen- ja taaksep\u00e4in Kirjoita<\/p>\n","protected":false},"author":3745,"featured_media":0,"parent":6,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3298","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3298","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/users\/3745"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/comments?post=3298"}],"version-history":[{"count":147,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3298\/revisions"}],"predecessor-version":[{"id":4473,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/3298\/revisions\/4473"}],"up":[{"embeddable":true,"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/pages\/6"}],"wp:attachment":[{"href":"https:\/\/blog.edu.turku.fi\/allu\/wp-json\/wp\/v2\/media?parent=3298"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}