Les 14/31-5: Arduino-codering map() voorbeeld 2
Deze tutorial laat zien hoe je de Arduino map()-functie gebruikt om de helderheid van een LED te regelen met een percentagewaarde (0–100%) in plaats van het ruwe 0–255-bereik dat vereist is voor analogWrite(). Dit is een fundamentele techniek die je code vereenvoudigt en veel intuïtiever maakt, omdat je in termen van percentages kunt denken in plaats van willekeurige bytewaarden.
Deze vaardigheid is essentieel voor elk project waarbij je sensorwaarden of stuursignalen moet schalen. Je kunt het bijvoorbeeld gebruiken om:
- De helderheid van een LED of de snelheid van een motor te regelen op basis van de uitlezing van een potentiometer.
- De uitvoer van een temperatuursensor (bijv. 0–1023) om te zetten naar een Celsius- of Fahrenheit-bereik.
- De analoge invoer van een joystick te koppelen aan de positie van een servomotor.
- Een eenvoudige gebruikersinterface te maken waarbij een percentagewaarde wordt gebruikt om het vermogensniveau van een apparaat in te stellen.
Aan het einde van deze les kun je schonere, beter onderhoudbare code schrijven die gemakkelijker te lezen en aan te passen is.
Hardware/componenten
Dit project gebruikt een minimale set componenten, waardoor het perfect is voor beginners. Je hebt nodig:
- Een Arduino-bord (bijv. Uno).
- Een LED.
- Een 220-ohm-weerstand.
- Jumperdraden.
- Een breadboard (optioneel maar aanbevolen).
Bedradingsgids
De bedrading voor dit project is heel eenvoudig, zoals gedemonstreerd in de video (in video op 20:47). De LED is verbonden met pin 3 van de Arduino via een 220-ohm-stroombegrenzingsweerstand.
Verbind de anode (langere poot) van de LED met pin 3 via de weerstand. Verbind de kathode (kortere poot) van de LED met de ground (GND)-pin op de Arduino.
Code-uitleg
Dit voorbeeld richt zich op een door de gebruiker gedefinieerde functie die het regelen van de LED-helderheid vereenvoudigt. De code is opgebouwd rond een aangepaste functie genaamd pwmValue(), die de sleutel is om de code intuïtief te maken.
Laten we de configureerbare delen van de code opsplitsen:
int LEDpin = 3; //definieer pin voor LED
Deze regel definieert de Arduino-pin waarmee de LED is verbonden. Je kunt het nummer 3 wijzigen naar elke andere PWM-capabele pin op je Arduino-bord.
De kern van het project is de aangepaste functie pwmValue(). Deze functie neemt een percentagewaarde als invoer en zet deze om naar het 0–255-bereik dat wordt gebruikt door analogWrite(). Dit is waar de map()-functie zijn magie doet.
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
}
Om deze functie te gebruiken, roep je deze eenvoudig aan met het gewenste helderheidspercentage. De functie retourneert de juiste waarde voor analogWrite(). Bijvoorbeeld, pwmValue(60) retourneert 153, wat overeenkomt met 60% van 255. De functie bevat ook een veiligheidscontrole om ervoor te zorgen dat het invoerpercentage tussen 0 en 100 ligt, en retourneert 0 als dit buiten dit bereik valt.
In de setup()-functie kun je zien hoe dit wordt gebruikt:
int b=5;//60% helderheid
Serial.println( pwmValue(b) );//print het op seriële monitor
analogWrite(LEDpin, pwmValue(b));// zet de LED aan met 60% helderheid
Hier wordt de variabele b ingesteld op het gewenste helderheidspercentage. De functie pwmValue(b) wordt vervolgens gebruikt om zowel de gekoppelde waarde naar de seriële monitor te printen als de LED-helderheid in te stellen. Om de LED-helderheid te wijzigen, hoef je alleen de waarde van b aan te passen. De map()-functie zorgt voor alle benodigde berekeningen.
Live project/demonstratie
In de video demonstreert de presentator het project door de waarde van de variabele b te wijzigen en de code naar de Arduino te uploaden. Wanneer b is ingesteld op 60, koppelt de code dit naar 153 en licht de LED op met 60% helderheid. Het wijzigen van b naar 90 koppelt naar 229, waardoor de LED merkbaar helderder wordt. Het instellen op 100 koppelt naar 255, wat de maximale helderheid is. De demonstratie laat duidelijk zien hoe de map()-functie je in staat stelt de LED te regelen met een intuïtieve percentagewaarde, terwijl de seriële monitor de exacte 0–255-waarde bevestigt die naar de pin wordt gestuurd (in video op 21:29).
Gerelateerde projecten uit deze video
- Les 14/31-1: Arduino Millis (zonder delay) en map-functies | SunFounder Robojax
- Les 14/31-2: Arduino-codering millis() voorbeeld 2 met event
- Les 14/31-3: Arduino-codering millis() voorbeeld 3 met drukknop
- Les 14/31-4: Arduino-codering map() voorbeeld 1
Hoofdstukken
- [00:00] Inleiding tot Millis- en map-functies
- [01:19] Wat is Millis en waarom het gebruiken
- [05:46] Millis gebruiken met een event om actie te ondernemen
- [08:35] Millis voorbeeld 2 met een drukknop
- [12:14] Millis voorbeeld 3 controleren op twee knopdrukken
- [17:20] Inleiding tot de map()-functie
- [19:47] Codevoorbeeld voor het koppelen van een percentage aan LED-helderheid
- [20:47] Live demonstratie van de map()-functie
- [22:41] Een aangepaste functie maken om het koppelen te verwerken
/*
Lesson 14/31-5: Arduino coding map( ) example-2
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);//initialzie serial monitor with 9600 baud
pinMode(LEDpin, OUTPUT);//set pin as output
int b=5;//60% brightness
Serial.println( pwmValue(b) );//print it on serial monitor
analogWrite(LEDpin, pwmValue(b));// turn the LED on with 60% brightness
}
void loop() {
}
/*
* pwmValue(int percent)
* @param precent is value between 0 to 100
* @return it returns the mapped value from 0 to 255
* written by Ahmad Shamshiri on Dec 9, 2022
*
*/
int pwmValue(int percent)
{
if(percent >=0 && percent <=100)
{
return map(percent, 0,100, 0,255);
}else
{
return 0;
}
} //pwmValue end
Dingen die je misschien nodig hebt
-
AmazonSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazon
-
Amazon
-
Amazon
-
Amazon
-
Overig
Hulpmiddelen en referenties
-
ExternPurchase SunFounder's 3-in-1 Smart car learning kitsunfounder.com
Bestanden📁
Gebruikershandleiding
-
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