Lekcia 14/31-4: Príklad map() v Arduino kódovaní 1
Tento návod je súčasťou série o programovaní Arduina a zameriava sa na praktické použitie funkcie map(). V tejto lekcii sa naučíte, ako previesť hodnotu percenta (0–100) na hodnotu PWM (Pulse Width Modulation) (0–255) na ovládanie jasu LED diódy. Namiesto manuálneho výpočtu, že 60 % sa rovná 153, funkcia map() vykoná lineárny prevod za vás, vďaka čomu bude váš kód čistejší a intuitívnejší.
Táto technika je nevyhnutná pre mnohé reálne aplikácie, kde potrebujete previesť hodnoty zo senzorov alebo vstupy od používateľa do rôznych rozsahov. Môžete ju napríklad použiť na:
- Ovládanie rýchlosti jednosmerného motora na základe hodnoty potenciometra.
- Zobrazenie surovej hodnoty teplotného senzora na stupnici 0–100 %.
- Mapovanie súradníc joysticku na uhly servomotora.
- Nastavenie jasu LED diódy na základe senzora okolitého svetla.
- Prevod analógovej hodnoty 0–5 V na digitálnu hodnotu 0–1023 alebo naopak.
Hardvér/Komponenty
Na realizáciu tohto projektu budete potrebovať nasledujúce komponenty:
- Dosku Arduino (Uno, Nano atď.)
- LED diódu
- Rezistor 220 ohmov
- Prepojovacie vodiče
- Nepájivé pole (voliteľné, ale odporúčané)
Zapojenie
Vo videu inštruktor predvádza projekt pomocou zapojenia z predchádzajúcej lekcie o stmievania LED diódy. Obvod je jednoduchý: pripojte anódu (dlhšiu nožičku) LED diódy k rezistoru 220 ohmov a druhý koniec rezistora pripojte na digitálny pin 3 na Arduine. Katódu (kratšiu nožičku) LED diódy pripojte priamo na pin GND (uzemnenie) na Arduine.
Vysvetlenie kódu
Kód pre tento príklad je veľmi stručný, pričom hlavná logika sa nachádza vo funkcii setup(). Poďme si rozobrať časti, ktoré môžete upravovať.
int LEDpin = 3; //definovaný pin pre LED
Tento riadok definuje pin Arduina, na ktorý je pripojená vaša LED dióda. V tomto príklade je nastavený na pin 3, ktorý podporuje PWM, čo je nevyhnutné pre analógový výstup. Toto číslo môžete zmeniť, ak pripojíte LED diódu na iný PWM pin.
int b=8;//60% jas
Toto je kľúčová premenná, ktorú budete meniť na testovanie rôznych úrovní jasu. Predstavuje požadovaný jas v percentách. Komentár v kóde hovorí „60 %“, ale hodnota je nastavená na 8 na demonštračné účely vo videu. Môžete ju zmeniť na akékoľvek celé číslo medzi 0 a 100. Napríklad nastavenie b = 60 by predstavovalo 60 % jas.
int brightness = map(b, 0, 100, 0,255);
Toto je jadro lekcie. Funkcia map() vezme vašu percentuálnu hodnotu (b) a prevedie ju z pôvodného rozsahu (0 až 100) na nový cieľový rozsah (0 až 255). Výsledok sa uloží do premennej brightness, ktorá sa potom použije na zápis analógovej hodnoty na pin LED diódy.
analogWrite(LEDpin, brightness);// zapne LED s 60% jasom
Nakoniec tento riadok odošle mapovanú hodnotu na pin LED diódy pomocou analogWrite(). Tým sa nastaví pracovný cyklus LED diódy, čím sa efektívne ovláda jej jas. Krása tohto prístupu spočíva v tom, že na ovládanie LED diódy stačí zmeniť iba premennú b a funkcia map() vykoná všetky potrebné výpočty.
Živý projekt/Demonštrácia
Vo videu inštruktor nahraje kód a predvedie efekt zmeny premennej b. Keď je b nastavené na 8, sériový monitor zobrazí mapovanú hodnotu 20 a LED dióda je viditeľne tlmená. Zmena b na 90 vedie k mapovanej hodnote 229, vďaka čomu je LED dióda oveľa jasnejšia. Nastavenie b na 100 sa mapuje na 255, čo je plný jas. Táto praktická ukážka jasne ukazuje, ako funkcia map() zjednodušuje proces ovládania analógových výstupov pomocou používateľsky prívetivých percentuálnych hodnôt.
Súvisiace projekty z tohto videa
- Lekcia 14/31-1: Arduino Millis (bez delay) a funkcie map | SunFounder Robojax
- Lekcia 14/31-2: Arduino kódovanie millis() príklad 2 s udalosťou
- Lekcia 14/31-3: Arduino kódovanie millis() príklad 3 s tlačidlom
- Lekcia 14/31-5: Arduino kódovanie map() príklad 2
Kapitoly
- [00:00] Úvod do kurzu Arduino od Robojax
- [01:19] Čo je millis() a prečo ho používať
- [05:46] Príklad 1: Použitie millis() na časovanú udalosť
- [08:29] Príklad 2: Použitie millis() s tlačidlom
- [12:14] Príklad 3: Detekcia druhého stlačenia tlačidla po oneskorení
- [17:20] Úvod do funkcie map()
- [19:47] Prechod kódom pre príklad s map()
- [20:41] Živá demonštrácia funkcie map()
/*
Lesson 14/31: Arduino coding map( ) example-1
Get this code and watch video Download and resource page https://robojax.com/RJT597
YouTube video https://www.youtube.com/watch?v=lqgzQohNiIM
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
int LEDpin = 3; //defind pin for LED
void setup() {
Serial.begin(9600);//initialize serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=8;//60% brightness
int brightness = map(b, 0, 100, 0,255);
Serial.println(brightness);//print it on serial monitor
analogWrite(LEDpin, brightness);// turn the LED on with 60% brightness
}
void loop() {
}
Veci, ktoré by ste mohli potrebovať
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
Zdroje a referencie
-
DokumentáciaDocumentation for SunFounder 3 in 1 IoT/Smart Car/Learning Kitdocs.sunfounder.com
-
ExternéPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Súbory📁
Používateľská príručka
-
SunFounder 3-in-1 Arduino Smart Car assembly manualThis document shows step by step assembly of SunFounder 3-in-1 Arduino Smart Car
SunFounder_car_assembly_manual.pdf1.20 MB