Mijn code voor een LED RGB Voltmeter

Arduino specifieke Software
Berichten: 5
Geregistreerd: 14 Aug 2016, 20:10

Mijn code voor een LED RGB Voltmeter

Berichtdoor pvcaesbroeck » 01 Sep 2016, 19:04

Hallo, ik ben een beginner in Arduino en heb een eerste programmaatje geschreven. Ik wil namelijk een RGB LED verschillende kleuren laten weergeven of knipperen, naargelang de Voltage van twee in serie gekoppelde Lipo batterijen. Ik denk dat ik de code juist heb, maar waarschijnlijk zijn er gevorderden onder jullie die dit anders zouden aanpakken? Mocht iemand mijn code eens willen nakijken en eventueel wat raad geven, dan is dat heel welkom.
Alvast dank.

______

int potPin = A0;

int LEDGroenPin = 7;
int LEDBlauwPin = 5;
int LEDRoodPin = 3;

int LEDOnTime = 500;
int LEDOffTime = 500;

int LEDRedOnTime = 200;
int LEDRedOffTime = 200;

float readValue;
float writeValue;

int LEDGroenMin1 = 800; //995.37;
int LEDGroenMin2 = 600; //954.75;
int LEDBlauwMin1 = 400; //914.12;
int LEDBlauwMin2 = 200; //873.49;
int LEDRoodMin1 = 50 ; //832.86;

void setup() {
pinMode(potPin, INPUT);
pinMode(LEDGroenPin, OUTPUT);
pinMode(LEDBlauwPin, OUTPUT);
pinMode(LEDRoodPin, OUTPUT);

}

void loop() {
readValue = analogRead (potPin);

if (readValue >= LEDGroenMin1) {
digitalWrite(LEDGroenPin, HIGH);
}
if (readValue >= LEDGroenMin2 && readValue < LEDGroenMin1) {
digitalWrite(LEDGroenPin, HIGH);
digitalWrite(LEDBlauwPin, 5);
delay (LEDOnTime);
digitalWrite(LEDBlauwPin, LOW);
delay (LEDOffTime);
}
if (readValue >= LEDBlauwMin1 && readValue < LEDGroenMin2) {
digitalWrite(LEDBlauwPin, HIGH );
digitalWrite(LEDGroenPin, LOW);
}
if (readValue >= LEDBlauwMin2 && readValue < LEDBlauwMin1) {
digitalWrite(LEDBlauwPin, HIGH);
digitalWrite(LEDRoodPin, 10);
delay(LEDOnTime);
digitalWrite(LEDRoodPin, LOW);
delay(LEDOffTime);
}
if (readValue >= LEDRoodMin1 && readValue < LEDBlauwMin2) {
digitalWrite(LEDRoodPin, HIGH);
digitalWrite(LEDBlauwPin, LOW);
}
if (readValue < LEDRoodMin1) {
digitalWrite(LEDRoodPin, HIGH);
delay(LEDRedOnTime);
digitalWrite(LEDRoodPin, LOW);
delay(LEDRedOffTime);
}

}

Advertisement

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

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor Koepel » 01 Sep 2016, 20:41

Code : 7 punten (twee bugs).
Aanpak : redelijk.
Informatie : iets te weinig.
Dus voor een beginner is het een goede start :)

Welk Arduino board gebruik je ? Wil de leds dimmen met PWM ? De potPin, is dat nu nog een potentiometer ? Wordt dat later een spanningsdeler met twee weerstanden ? Wat is je analoge referentie ?

Als je voor de analoge referentie de normale default (5V) gebruikt, en de Arduino zijn 5V van de USB stekker krijgt, dan zijn er nog wat wijzigingen nodig.

Om een indeling te maken van verschillende voltages, is er een standaard manier. Ik denk dat het een zeef-principe heet. De grove zeef boven, wat er doorheen valt door een fijnere zeef, enzovoorts.

Hieronder is x een batterijspanning.
Code: Alles selecteren
  if( x > 4.2)
  {
  }
  else if( x > 3.8)
  {
  }
  else if( x > 3.2)
  {
  }
  else if( x > 3.0)
  {
  }
  else
  {
  }


Je maakt een indeling naar de waarde van analogRead() functie. Dat doet iedere beginner ;) maar ik zou het eerst omzetten naar een voltage, en met dat voltage de code maken. Dan krijg je zoiets als in het voorbeeld hierboven, en kun je meteen zien bij welk voltage er wat gebeurt.

Twee bugs: je gebruikt twee keer de digitalWrite() functie met een getal. Met '5' en met '10'. Daar kan toch echt alleen maar 'HIGH' of 'LOW' staan.

Als je indruk wilt maken, dan kun je waarden die constant zijn als 'const' benoemen.
Code: Alles selecteren
const int potPin = A0;

const int LEDGroenPin = 7;
...

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

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor shooter » 02 Sep 2016, 11:07

hoe meet je de spanning?
en voor de leds nu is het knipperen, maar je kunt met PWM mooie kleuren maken.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 14 Aug 2016, 20:10

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor pvcaesbroeck » 02 Sep 2016, 15:00

Hallo Koepel en shooter,
dank voor jullie welgekomen hulp. Het is voor mij nogal een steile leercurve, maar wel boeiend :-)

Voor deze opstelling gebruik ik de Arduino Nano. Er staat nu effectief een potentiometer tussen om de input te simuleren; dat later vervangen wordt door spanningsdeler met 2 weerstanden. (ik dacht één van 10kOhm en één van iets meer dan 40kOhm). De max capaciteit van de batterijen (samen in serie) is 25,18V.
Bedoeling is dat de batterijspanning gemeten wordt en dat de Arduino voeding krijgt van diezelfde batterijen. (als dit kan?)
Het zeefprincipe moet ik nog uitzoeken. Lijkt me wel een handige oplossing.
Omzetten naar Voltage; kijk ik nog na.
digitalWrite: ik vond al dat die 5 of 10 niet veel invloed hadden. oops.
Hoe meet ik de spanning?: wel ik zou de batterij aansluiten aan de Arduino Nano, met de nodige weerstanden tussen (zie hoger)
Mooie kleuren is een goed idee ipv te knipperen.

Het project: ik heb zelf een longboard gemaakt, die ik nadien voorzien heb van motor, VESC, batterijen, zender en ontvanger. Nu kan ik lekker cruisen door de straten op m'n eBoard. Enkel mis ik een visueel hulpmiddel om te zien hoeveel energie de batterijen nog hebben (zodat ik niet te voet terug huiswaarts moet ;-) En daarvoor wil ik dus vooraan op het board een LED lampje installeren die me daarmee kan helpen.

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

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor Koepel » 02 Sep 2016, 15:19

Teveel naar de dagelijkse vlogs van Casey Neistat gekeken ? :lol:

Je kunt de Arduino voeden met 25V als je een DC-DC converter gebruikt. Kies dan niet de allergoedkoopste van Ebay of AliExpress, maar een wat betere.

Je hoeft niet te moeilijk te doen hoor. Als je het niet begrijpt, dan komt dat omdat mijn uitleg niet goed was :mrgreen:

Met de zeef bedoelde ik dat het niet nodig is om voor ieder deel de boven- en onder-grens aan te geven.
Het is normaal onder programmeurs om het op die manier te doen, maar je kunt het laten zoals het was 8-)
Met wat uitleg:
Code: Alles selecteren
  if( x > 4.2)
  {
    // Als het voltage hoger is dan 4.2V, dan komt het hier. De rest wordt overgeslagen.
  }
  else if( x > 3.8)
  {
    // Als het voltage hoger is dan 3.8V, dan wordt dit uitgevoerd.
    // Maar alles boven de 4.2V was er al afgehaald.
    // Dus hier is het voltage tussen de 3.8V en de 4.2V.
  }
  else if( x > 3.2)
  {
    // Hier is het voltage tussen de 3.2V en de 3.8V.
  }
  else if( x > 3.0)
  {
  }
  else
  {
    // Hier is het voltage onder de 3.0V
  }


De spanning meting met een spanningsdeler. R1 en R2.
R1 gaat naar de batterij en R2 naar de GND.
Hoe hoger de waarden, hoe veiliger en ook onnauwkeuriger.
Ik denk dat bijvoorbeeld dat R1 = 220k en R2 = 47k nog makkelijk zou kunnen.
Maar R1 = 47k en R2 = 10k is ook goed.

Berichten: 5
Geregistreerd: 14 Aug 2016, 20:10

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor pvcaesbroeck » 02 Sep 2016, 18:02

Ja Casey heeft er iets mee te maken :-) maar de Boosted Board was me wat te duur. Ik heb nu een board gemaakt met dezelfde specificaties (dankzij enertionboards) voor de helft van de prijs.
De zeef werkt schitterend. DANKJE! het is overzichtelijker dan mijn eerste code.
Jouw tip voor R1 220k en r2 47k volg ik zeker op.
Dat van die DC-Dc converter wist ik niet. Ik dacht er gewoon een Voltage regulator 7805 tussen te plaatsen. (Max in: 35V, out 5V)

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

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor Koepel » 02 Sep 2016, 18:52

Een 7805 :?
Werken de leds op 5V ? Sommige led strips zijn voor 12V. Andere 5050 leds hebben niet eens een ingebouwde weerstand, daarvoor moet je zelf drie weerstanden aanbrengen voor de R, G, en B led, en vaak ook nog drie verschillende weerstanden.

Zodra je "7805" zegt, dan komt er al snel iemand met een berekening :geek:

Stel: Arduino Nano tussen de 50mA en 100mA. De R, G en B elk 20mA. Dat is samen al gauw meer dan 100mA.
De 7805 regelt van 25V naar 5V, dat is 20V overbruggen. 20V * 100mA = 2 Watt.
Die 7805 staat dus minstens 2W voor niets te verstoken. Dan heb je dus een koelvlak nodig.

Een DC-DC converter kan meer dan 90% effectief zijn. Die verstookt misschien 100mW.
Een DC-DC converter module is waarschijnlijk nog kleiner ook dan 7805+condensators+koelvlak.

Voeg wel een zekering toe :!: Om de accu te beschermen als de DC-DC converter kortsluiting zou maken.

Berichten: 5
Geregistreerd: 14 Aug 2016, 20:10

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor pvcaesbroeck » 03 Sep 2016, 09:53

OK, dan ga ik op zoek naar een DC-DC converter.
Ik dacht dat de Arduino 5V kreeg via de mini USB. En voor iedere kleur van de LED heb ik een 220ohm weerstand gebruikt.

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

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor shooter » 03 Sep 2016, 13:10

pak ipv een 7805 een 7810 de nano heeft een 5 voltregelaar aan boord. en de max van een nano is 15 Volt
weerstanden prima. sluit de RGB aan via een ULN2003 ipv direct want je zit snel aan het maximum stroom per Pin.
Op een longboard zou ik trouwens niet dimmen, maar een knipperledje gebruiken, en die zit al op een Nano, dus eigenlijk weining extra nodig.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 14 Aug 2016, 20:10

Re: Mijn code voor een LED RGB Voltmeter

Berichtdoor pvcaesbroeck » 04 Sep 2016, 10:01

shooter: het dimmen doe ik nu enkel als test; om te zien of programma netjes werkt. Dat wordt nadien weggelaten en dan zal enkel input van de batterij en output LED overblijven.
Ik ga nu nog na of ik een DC-DC converter (Koepel) of een 7810 ga gebruiken.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 92 gasten