{"id":65611,"date":"2022-08-28T23:27:06","date_gmt":"2022-08-29T04:27:06","guid":{"rendered":"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/"},"modified":"2022-08-28T23:27:06","modified_gmt":"2022-08-29T04:27:06","slug":"gor-en-knight-rider-led-skanner-med-arduino","status":"publish","type":"post","link":"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/","title":{"rendered":"G\u00f6r en Knight Rider LED-skanner med Arduino"},"content":{"rendered":"<div>\n<p>Har du n\u00e5gonsin \u00f6nskat att du hade din egen Knight Industries Two Thousand (KITT) bil \u2014 du vet, fr\u00e5n Knight Rider?  G\u00f6r din dr\u00f6m ett steg n\u00e4rmare verkligheten genom att bygga en LED-skanner!  H\u00e4r \u00e4r slutresultatet:<\/p>\n<h2 id=\"what-you-need\"><span class=\"ez-toc-section\" id=\"Vad_du_behover\"><\/span>  Vad du beh\u00f6ver<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Det beh\u00f6vs inte m\u00e5nga delar f\u00f6r det h\u00e4r projektet, och du kanske redan har m\u00e5nga av dem:<\/p>\n<p>  1 x Arduino UNO eller liknande 1 x Breadboard 8 x r\u00f6da lysdioder 8 x 220 ohm motst\u00e5nd 1 x 10k ohm potentiometer Hane till hane anslutningskablar  <\/p>\n<p>Om du har ett Arduino startpaket \u00e4r det troligt att du har alla dessa delar (vad kan du g\u00f6ra med ett startpaket?).<\/p>\n<p>N\u00e4stan alla Arduino kommer att fungera, f\u00f6rutsatt att den har \u00e5tta tillg\u00e4ngliga stift (Har du aldrig anv\u00e4nt en Arduino tidigare? Kom ig\u00e5ng h\u00e4r).  Du kan anv\u00e4nda ett Shift Register f\u00f6r att styra lysdioderna, \u00e4ven om detta inte beh\u00f6vs f\u00f6r detta projekt, eftersom Arduino har tillr\u00e4ckligt med stift.<\/p>\n<h2 id=\"build-plan\"><span class=\"ez-toc-section\" id=\"Byggplan\"><\/span>  Byggplan<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure>\n<\/figure>\n<p>Detta \u00e4r ett mycket enkelt projekt.  \u00c4ven om det kan se komplicerat ut fr\u00e5n det stora antalet ledningar, \u00e4r varje enskild del v\u00e4ldigt enkel.  Varje lysdiod (LED) \u00e4r ansluten till sin egen Arduino-stift.  Detta inneb\u00e4r att varje LED kan t\u00e4ndas och sl\u00e4ckas individuellt.  En potentiometer \u00e4r ansluten till Arduino analoga stift, som kommer att anv\u00e4ndas f\u00f6r att justera hastigheten p\u00e5 skannern.<\/p>\n<h2 id=\"the-circuit\"><span class=\"ez-toc-section\" id=\"Kretsen\"><\/span>  Kretsen<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure>\n<\/figure>\n<p>Anslut potentiometerns yttre v\u00e4nstra stift (om du tittar p\u00e5 framsidan, med stiften i botten) till jord.  Anslut det motsatta yttre stiftet till +5v.  Om det inte fungerar korrekt, v\u00e4nd p\u00e5 dessa stift.  Anslut mittstiftet till Arduino analog i 2.<\/p>\n<p>Anslut anoden (l\u00e5ngt ben) p\u00e5 varje lysdiod till digitala stift ett till \u00e5tta.  Anslut katoderna (kort ben) till Arduino jord.<\/p>\n<h2 id=\"the-code\"><span class=\"ez-toc-section\" id=\"Koden\"><\/span>  Koden<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Skapa en ny skiss och spara den som \u201cknightRider\u201d.  H\u00e4r \u00e4r koden:<\/p>\n<pre>const int leds[] = {1,2,3,4,5,6,7,8}; \/\/ Led pins<br\/>const int totalLeds = 8;<br\/>int time = 50; \/\/ Default speed<br\/>void setup() {<br\/>\/\/ Initialize all outputs<br\/>for(int i = 0; i &lt;= totalLeds; ++i) {<br\/>pinMode(leds[i], OUTPUT);<br\/>}<br\/>}<br\/>void loop() {<br\/>for(int i = 0; i &lt; totalLeds - 1; ++i) {<br\/>\/\/ Scan left to right<br\/>time = analogRead(2);<br\/>digitalWrite(leds[i], HIGH);<br\/>delay(time);<br\/>digitalWrite(leds[i + 1], HIGH);<br\/>delay(time);<br\/>digitalWrite(leds[i], LOW);<br\/>}<br\/>for(int i = totalLeds; i &gt; 0; --i) {<br\/>\/\/ Scan right to left<br\/>time = analogRead(2);<br\/>digitalWrite(leds[i], HIGH);<br\/>delay(time);<br\/>digitalWrite(leds[i - 1], HIGH);<br\/>delay(time);<br\/>digitalWrite(leds[i], LOW);<br\/>}<br\/>}<\/pre>\n<p>L\u00e5t oss bryta ner det.  Varje LED-stift lagras i en array:<\/p>\n<pre>const int leds[] = {1,2,3,4,5,6,7,8};<\/pre>\n<p>En array \u00e4r i huvudsak en samling relaterade objekt.  Dessa element definieras som konstanta (\u201cconst\u201d), vilket inneb\u00e4r att de inte kan \u00e4ndras senare.  Du beh\u00f6ver inte anv\u00e4nda en konstant (koden kommer att fungera perfekt om du tar bort \u201cconst\u201d), \u00e4ven om det rekommenderas.<\/p>\n<p>Element i en array n\u00e5s med hakparenteser (\u201c[ ]\u201d) och ett heltal som kallas ett index. Index b\u00f6rjar p\u00e5 noll, s\u00e5 \u201cleds[2]\u201d skulle returnera det tredje elementet i arrayen \u2014 pin 3. Arrayer g\u00f6r kod snabbare att skriva och l\u00e4ttare att l\u00e4sa, de f\u00e5r datorn att g\u00f6ra det h\u00e5rda arbetet!<\/p>\n<p>En for-loop anv\u00e4nds f\u00f6r att st\u00e4lla in varje stift som en utg\u00e5ng:<\/p>\n<pre>for(int i = 0; i &lt;= totalLeds; ++i) {<br\/>pinMode(leds[i], OUTPUT);<br\/>}<\/pre>\n<p>Den h\u00e4r koden finns i funktionen \u201csetup()\u201d, eftersom den bara beh\u00f6ver k\u00f6ras en g\u00e5ng i b\u00f6rjan av programmet.  F\u00f6r loopar \u00e4r mycket anv\u00e4ndbara.  De l\u00e5ter dig k\u00f6ra samma kod om och om igen, med ett annat v\u00e4rde varje g\u00e5ng.  De \u00e4r perfekta f\u00f6r att arbeta med arrayer.  Ett heltal \u201ci\u201d deklareras, och endast kod inuti slingan kan komma \u00e5t denna variabel (detta kallas \u201cscope\u201d).  V\u00e4rdet p\u00e5 i b\u00f6rjar p\u00e5 noll, och f\u00f6r varje iteration av slingan \u00f6kas i med ett.  N\u00e4r v\u00e4rdet p\u00e5 i \u00e4r mindre \u00e4n eller lika med variabeln \u201ctotalLeds\u201d, \u201cbryts\u201d slingan (stoppar).<\/p>\n<p>V\u00e4rdet p\u00e5 i anv\u00e4nds f\u00f6r att komma \u00e5t \u201cleds\u201d-arrayen.  Denna loop kommer \u00e5t varje element i arrayen och konfigurerar den som en utg\u00e5ng.  Du kan manuellt skriva \u201cpinMode(pin, OUTPUT)\u201d \u00e5tta g\u00e5nger, men varf\u00f6r skriva \u00e5tta rader n\u00e4r du kan skriva tre?<\/p>\n<p>\u00c4ven om vissa programmeringsspr\u00e5k kan ber\u00e4tta hur m\u00e5nga element som finns i en array (vanligtvis med syntax som array.length), g\u00f6r Arduino det inte s\u00e5 enkelt (det involverar lite mer matematik).  Eftersom antalet element i arrayen redan \u00e4r k\u00e4nt \u00e4r det inget problem.<\/p>\n<figure>\n<\/figure>\n<p>Inne i huvudslingan (<em>void loop()<\/em>) \u00e4r tv\u00e5 ytterligare f\u00f6r loopar.  Den f\u00f6rsta s\u00e4tter lysdioderna P\u00c5 och sedan AV fr\u00e5n 1 \u2013 8. Den andra slingan s\u00e4tter lysdioderna P\u00c5 och sedan AV fr\u00e5n 8 \u2013 1. L\u00e4gg m\u00e4rke till hur det aktuella stiftet s\u00e4tts p\u00e5, och det aktuella stiftet plus ett \u00e4r inst\u00e4llt ocks\u00e5.  Detta s\u00e4kerst\u00e4ller att det alltid \u00e4r tv\u00e5 lysdioder p\u00e5 samtidigt, vilket g\u00f6r att skannern ser mer realistisk ut.<\/p>\n<p>I b\u00f6rjan av varje slinga l\u00e4ses pottens v\u00e4rde in i variabeln \u201ctid\u201d:<\/p>\n<pre>time = analogRead(2);<\/pre>\n<p>Detta g\u00f6rs tv\u00e5 g\u00e5nger, en g\u00e5ng inuti varje slinga.  Detta m\u00e5ste st\u00e4ndigt kontrolleras och uppdateras.  Om detta var utanf\u00f6r looparna skulle det fortfarande fungera, men det skulle bli en liten f\u00f6rdr\u00f6jning \u2014 det skulle bara k\u00f6ras n\u00e4r en loop har avslutats.  Krukor \u00e4r analoga, d\u00e4rf\u00f6r anv\u00e4nds \u201canalogRead(pin)\u201d.  Detta returnerar v\u00e4rden mellan noll (minimum) och 1023 (maximum).  Arduino kan konvertera dessa v\u00e4rden till n\u00e5got mer anv\u00e4ndbart, men de \u00e4r perfekta f\u00f6r detta anv\u00e4ndningsfall.<\/p>\n<p>F\u00f6rdr\u00f6jningen mellan byte av lysdioder (eller hastigheten p\u00e5 skannern) \u00e4r inst\u00e4lld i millisekunder (1\/1000 sekund), s\u00e5 den maximala tiden \u00e4r drygt 1 sekund.<\/p>\n<h2 id=\"advanced-scanner\"><span class=\"ez-toc-section\" id=\"Avancerad_skanner\"><\/span>  Avancerad skanner<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<figure>\n<\/figure>\n<p>Nu n\u00e4r du kan grunderna, l\u00e5t oss titta p\u00e5 n\u00e5got mer komplext.  Den h\u00e4r skannern kommer att t\u00e4nda lysdioderna i par fr\u00e5n utsidan och arbeta in. Den kommer sedan att v\u00e4nda p\u00e5 detta och g\u00e5 fr\u00e5n insidan till utsidan par.  H\u00e4r \u00e4r koden:<\/p>\n<pre>const int leds[] = {1,2,3,4,5,6,7,8}; \/\/ Led pins<br\/>const int totalLeds = 8;<br\/>const int halfLeds = 4;<br\/>int time = 50; \/\/ Default speed<br\/>void setup() {<br\/>\/\/ Initialize all outputs<br\/>for(int i = 0; i &lt;= totalLeds; ++i) {<br\/>pinMode(leds[i], OUTPUT);<br\/>}<br\/>}<br\/>void loop() {<br\/>for(int i = 0; i &lt; (halfLeds - 1); ++i) {<br\/>\/\/ Scan outside pairs in<br\/>time = analogRead(2);<br\/>digitalWrite(leds[i], HIGH);<br\/>digitalWrite(leds[(totalLeds - i) - 1], HIGH);<br\/>delay(time);<br\/>digitalWrite(leds[i], LOW);<br\/>digitalWrite(leds[(totalLeds - i) - 1], LOW);<br\/>delay(time);<br\/>}<br\/>for(int i = (halfLeds - 1); i &gt; 0; --i) {<br\/>\/\/ Scan inside pairs out<br\/>time = analogRead(2);<br\/>digitalWrite(leds[i], HIGH);<br\/>digitalWrite(leds[(totalLeds - i) - 1], HIGH);<br\/>delay(time);<br\/>digitalWrite(leds[i], LOW);<br\/>digitalWrite(leds[(totalLeds - i) - 1], LOW);<br\/>delay(time);<br\/>}<br\/>}<\/pre>\n<p>Denna kod \u00e4r n\u00e5got mer komplex.  L\u00e4gg m\u00e4rke till hur b\u00e5da slingorna g\u00e5r fr\u00e5n noll till \u201chalva lysdioder \u2013 1\u201d (3).  Detta g\u00f6r en b\u00e4ttre skanner.  Om b\u00e5da slingorna gick fr\u00e5n 4 \u2013 0 och 0 \u2013 4 skulle samma lysdioder blinka tv\u00e5 g\u00e5nger i samma sekvens \u2014 detta skulle inte se s\u00e4rskilt bra ut.<\/p>\n<p>Du b\u00f6r nu \u00e4ga en fungerande Knight Rider LED-skanner!  Det skulle vara l\u00e4tt att modifiera detta f\u00f6r att anv\u00e4nda fler eller st\u00f6rre lysdioder, eller implementera ditt eget m\u00f6nster.  Denna krets \u00e4r mycket l\u00e4tt att porta till en Raspberry Pi (ny p\u00e5 Pi? B\u00f6rja h\u00e4r) eller ESP8266.<\/p>\n<p><strong>Bygger du en replik KITT?  Jag skulle \u00e4lska att se allt som r\u00f6r Knight Rider i kommentarerna.<\/strong><\/p>\n<p>    <strong class=\"section-sub-title\">Om f\u00f6rfattaren<\/strong><\/p>\n<p>            <strong class=\"bio-title\">Joe Coburn (134 artiklar publicerade)<br \/><\/strong><\/p>\n<p>Joe har en examen i datavetenskap fr\u00e5n University of Lincoln, Storbritannien.  Han \u00e4r en professionell mjukvaruutvecklare, och n\u00e4r han inte flyger dr\u00f6nare eller skriver musik kan han ofta hittas som fotograferar eller producerar videor.<\/p>\n<p>                            Mer fr\u00e5n Joe Coburn<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Prenumerera_pa_vart_nyhetsbrev\"><\/span>Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>G\u00e5 med i v\u00e5rt nyhetsbrev f\u00f6r tekniska tips, recensioner, free e-b\u00f6cker och exklusiva erbjudanden!<\/p>\n<p>Klicka h\u00e4r f\u00f6r att prenumerera<\/p>\n<\/p><\/div>\n  <div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/#Vad_du_behover\" >Vad du beh\u00f6ver<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/#Byggplan\" >Byggplan<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/#Kretsen\" >Kretsen<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/#Koden\" >Koden<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/#Avancerad_skanner\" >Avancerad skanner<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blogging-techies.com\/sw\/gor-en-knight-rider-led-skanner-med-arduino\/#Prenumerera_pa_vart_nyhetsbrev\" >Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n ","protected":false},"excerpt":{"rendered":"<p>Har du n\u00e5gonsin \u00f6nskat att du hade din egen Knight Industries Two Thousand (KITT) bil \u2014 du vet, fr\u00e5n Knight Rider? G\u00f6r din dr\u00f6m ett steg n\u00e4rmare verkligheten genom att bygga en LED-skanner! H\u00e4r \u00e4r slutresultatet: Vad du beh\u00f6ver Det beh\u00f6vs inte m\u00e5nga delar f\u00f6r det h\u00e4r projektet, och du kanske redan har m\u00e5nga av [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":65612,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/ipotek.net\/wp-content\/uploads\/2022\/01\/Gor-en-Knight-Rider-LED-skanner-med-Arduino.jpg","fifu_image_alt":"","footnotes":""},"categories":[5],"tags":[34831,494,4179,35962,102,18302],"class_list":["post-65611","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bloggar","tag-arduino","tag-gor","tag-knight","tag-ledskanner","tag-med","tag-rider"],"_links":{"self":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/65611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/comments?post=65611"}],"version-history":[{"count":0,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/65611\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media\/65612"}],"wp:attachment":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media?parent=65611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/categories?post=65611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/tags?post=65611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}