PWM + 2 LED's

Arduino specifieke Software
Berichten: 4
Geregistreerd: 08 Okt 2020, 11:06
Woonplaats: Roermond

PWM + 2 LED's

Berichtdoor Pascal100 » 09 Okt 2020, 10:24

Hallo, momenteel ben ik bezig met het volgende. Ik heb een opstelling gemaakt waarbij ik een potmeter en twee LED-lampjes in gebruik heb. De potmeter kan ik gebruiken als dimmer. De bedoeling is nu dat als ik één lampje op bijvoorbeeld 10% sterkte wil laten branden, de andere LED op 90% sterkte brand (percentages zijn voorbeelden). De sketch welke ik heb gaat uit van één LED, en moet nu worden uitgebreid naar twee LED's. Ik gebruik een pc waarop Windows 10 draait, en een ARDUINO UNO, beide zijn softwarematig up-to-date. De sketch welke ik nu heb is:

// Definieer A0 als analoge ingang voor de potmeter:
const int analogInPin = A0;
// Definieer D9 als output voor het PWM-signaal:
const int analogOutPin = 9;
// Stel variabele van potmeter in op 0:
int sensorValue = 0;
// Stel variabele voor PWM-signaal in op 0:
int outputValue = 0;

void setup() {
}

void loop() {
// Lees de analoge sensorwaarde:
sensorValue = analogRead(analogInPin);
// Map inputwaarde 0..1023 naar PWM-waarde 0..255:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// Zet het resultaat outputValue op pin 9:
analogWrite(analogOutPin, outputValue);
delay(2);
}

De tweede LED wordt op D11 aangesloten.
Ik hoop dat bovenstaande duidelijk is. Reacties zie ik graag tegemoet.

Met vriendelijke groet,
Pascal.

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: PWM + 2 LED's

Berichtdoor shooter » 09 Okt 2020, 10:56

prima bezig en 11 is inderdaad een PWM uitgang dus zal prima werken.
beste is dan de map omdraaien zodat je twee signalen krijgt
outputValue1 = map(sensorValue, 0, 1023, 0, 255);
outputValue2 = map(sensorValue, 0, 1023, 255, 0);
en zet iets in de monitor dan kun je het volgen wat er gebeurt.
paul deelen
shooter@home.nl

Berichten: 4
Geregistreerd: 08 Okt 2020, 11:06
Woonplaats: Roermond

Re: PWM + 2 LED's

Berichtdoor Pascal100 » 10 Okt 2020, 12:51

Ik heb inmiddels de sketch aangepast naar het onderstaande:

// Definieer A0 als analoge ingang voor de potmeter:
const int analogInPin = A0;
// Definieer D9 en D11 als output voor het PWM-signaal:
const int analogOutPin1 = 9;
const int analogOutPin2 = 11;
// Stel variabele van potmeter in op 0:
int sensorValue1 = 0;
int sensorValue2 = 0;
// Stel variabele voor PWM-signaal in op 0:
int outputValue1 = 0;
int outputValue2 = 0;

void setup() {
Serial.begin(9600);
}
void loop () {
sensorValue1 = analogRead(analogOutPin1);
outputValue1 = map(sensorValue1, 0, 1023, 0, 255);
analogWrite(analogOutPin1, outputValue1);
Serial.print ("LED1= ");
Serial.print(" %LED1 = ");
Serial.println(outputValue1);
sensorValue2 = analogRead(analogOutPin2);
outputValue2 = map(sensorValue2, 0, 1023, 255, 0);
analogWrite(analogOutPin2, outputValue2);
Serial.print("LED2= ");
Serial.print(" %LED2 = ");
Serial.println(outputValue2);
delay (200);
}

De sketch werkt, ik heb alleen niet het idee dat wanneer de ene LED op een bepaalt percentage oplicht, de andere LED op het resterende percentage oplicht. Maar dat kan aan mij liggen. Tot zover werkt het in ieder geval alvast.

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: PWM + 2 LED's

Berichtdoor Koepel » 10 Okt 2020, 18:47

Kun je mij een plezier doen en de namen van de variabelen wijzigen ?
Bijvoorbeeld iets met "potmeter" en iets met "pwm".
Code: Alles selecteren
// Definieer A0 als analoge ingang voor de potmeter:
const int potmeterPin = A0;
// Definieer D9 en D11 als output voor het PWM-signaal:
const int pwmPin1 = 9;
const int pwmPin2 = 11;


Als je wilt, kun je nog "In" en "Out" aan die namen toevoegen.

Kun je die andere variabelen wijzigen naar "potmeterValue" en "pwmValue1" en "pwmValue2" ?

Als je dan de opbouw van je sketch anders doet, dan wordt het duidelijker:

Code: Alles selecteren
void setup()
{
  ...
}

void loop()
{
  // Verzamel alle gegevens
  ...

  // Verwerk de gegevens
  ...

  // Uitvoer
  ...
}


Bij "Verzamel alle gegevens" kun je de waarde van de potmeter lezen met analogRead(). Je roept de analogRead() vanzelfsprekend maar één keer aan, want er is maar één potmeter.
Bij "Verwerk de gegevens" kun je de twee map() functies zetten om beide PWM-waarden te berekenen.
Bij "Uitvoer" stuur je de PWM-waarden naar de digitale uitgang en naar de seriële monitor. Je mag natuurlijk altijd iets naar de seriële monitor sturen, zo strak hoeft het ook weer niet.

Hou ook de referentie bij de hand, zoals:
analogRead(): https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
analogWrite(): https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/

De naam "analogWrite()" is eigenlijk verkeerd gekozen. Het had beter "setPWMvalue()" kunnen heten.

Dit forum heeft code-tags: [ code ] en [ / code ] maar dan zonder de spaties. De knop "Code" geeft die code-tags. Als je jouw sketch daarbinnen zet, dan ziet het er beter uit.

Als dit allemaal gelukt is, dan kun je een logaritmische curve toevoegen. Het menselijk ook ziet de helderheid zo ongeveer met ¹⁰log(). Dat is dus een hele steile curve. Een led op 10% lijkt maar half zo fel als een led op 100% (denk ik, mijn wiskundeknobbel is aan het krimpen).

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: PWM + 2 LED's

Berichtdoor shooter » 11 Okt 2020, 12:24

dat je geen verschil ziet komt bijvoorbeeld door de keuze van de weerstanden, en helderheid is niet gelijk aan het vermogen van een led.
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 25 gasten