<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.spad-it.nl/index.php?action=history&amp;feed=atom&amp;title=Arduino_-_Analog_Value_Reading</id>
		<title>Arduino - Analog Value Reading - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.spad-it.nl/index.php?action=history&amp;feed=atom&amp;title=Arduino_-_Analog_Value_Reading"/>
		<link rel="alternate" type="text/html" href="http://wiki.spad-it.nl/index.php?title=Arduino_-_Analog_Value_Reading&amp;action=history"/>
		<updated>2026-07-03T18:28:20Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.27.3</generator>

	<entry>
		<id>http://wiki.spad-it.nl/index.php?title=Arduino_-_Analog_Value_Reading&amp;diff=37&amp;oldid=prev</id>
		<title>WikiAdmin: Created page with &quot;Dit project draait helemaal om de analogRead() functie die we al vaker hebben gezien en vormt de opmaat naar het volgende project waar we diverse sensoren zullen behandelen....&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.spad-it.nl/index.php?title=Arduino_-_Analog_Value_Reading&amp;diff=37&amp;oldid=prev"/>
				<updated>2017-09-12T06:35:04Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Dit project draait helemaal om de analogRead() functie die we al vaker hebben gezien en vormt de opmaat naar het volgende project waar we diverse sensoren zullen behandelen....&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Dit project draait helemaal om de analogRead() functie die we al vaker hebben gezien en vormt de opmaat naar het volgende project waar we diverse sensoren zullen behandelen.&lt;br /&gt;
&lt;br /&gt;
===De schakeling===&lt;br /&gt;
Extra benodigdheden:&lt;br /&gt;
*1 potmeter&lt;br /&gt;
&lt;br /&gt;
Onderstaande schakeling is hetzelfde als de vorige waarbij ook de buzzer nog weggelaten mag worden, maar die zit niet in de weg en mag ook best blijven zitten. Als de vorige schakeling dus nog op je breadboard zit kun je meteen aan de slag, anders moet je even onderstaande schakeling opzetten.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|[[File:Analog_value_reading.png]]&lt;br /&gt;
|-&lt;br /&gt;
|Verbindingen in het breadboard met een bijbehorende schema tekening&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Het programma===&lt;br /&gt;
Bij dit project draait het om het uitlezen van de analoge waarde van pin A0, meer precies willen we de spanning weten die op die pin staat en via de serial monitor in Volt rapporteren. De spanning kan worden gevarieerd via de stand van de potmeter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int pot_pin = 0;      // A0 is the analog input pin for the potmeter&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(9600); // start de seriele communicatie met een baud rate van 9600&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  int val = digitalRead(pot_pin);       // waarde tussen 0 (=0 Volt) en 1023 (=5 Volt)&lt;br /&gt;
  //float volt = val * 5/1023;            // dit werkt NIET!!&lt;br /&gt;
  //float volt = 5.0/1023 * val;          // dit werkt WEL!!&lt;br /&gt;
  //float volt = (float)val * 5/1023;     // dit werkt OOK!!&lt;br /&gt;
  float volt = 0.0488758 * val;         // dit werkt ook en is een ietsie pietsie sneller&lt;br /&gt;
  Serial.print(volt,2);                 // 2 cijfers achter de komma is genoeg hier&lt;br /&gt;
  Serial.println(&amp;quot; volt uitgelezen&amp;quot;);&lt;br /&gt;
  delay(500);                           // beperk response tot 2x per seconde&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Uitleg van het programma===&lt;br /&gt;
In de setup() hoeft alleen de seriele communicatie te worden gestart. De loop() functie is ook erg eenvoudig. De spanning op pin A0, die door de potmeter kan worden gevarieerd, wordt uitgelezen en als integer tussen 0 (=0 Volt) en 1023 (=5 Volt) opgeslagen in de variabele '''val'''. Vervolgens wordt de spanning uitgerekend met: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float volt = 0.0488758 * val;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Het getal 0.0488758 is gelijk aan 5/1023. Als ''val''=0 wordt ''volt'' natuurlijk 0 en als ''val''=1023 komt er 5 Volt uit.&lt;br /&gt;
Dit wordt vervolgens via de seriele lijn doorgestuurd naar de computer.&lt;br /&gt;
&lt;br /&gt;
Nu bevat het programma drie mogelijkheden om uit ''val'' de spanning uit te rekenen. De eerste is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float volt = val * 5/1023;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zoals het commentaar al zegt werkt dit niet. Om dat te kunnen begrijpen moet je iets meer weten over hoe het programma precies werkt. Zoals je kunt zien is ''val'' een int. Dat zijn gehele getallen waarvan de grootte beperkt is tot iets tussen -32768 en 32767. Het type int beschikt over 16 bits (2 bytes) en grotere getallen hebben meer ruimte nodig. Het type float is een getal met een punt. Een variabele van dit type heeft 6 of 7 significante cijfers en een variabele plek voor de punt (een ''drijvende'' punt). Door die variabele punt kunnen er hele grote getallen in worden opgeslagen, positief of negatief. Het zal duidelijk zijn dat dit type meer opslagruimte nodig heeft. Het type float gebruikt 32 bits (4 bytes) en werkt van binnen heel anders. &lt;br /&gt;
&lt;br /&gt;
Van de constanten ''5'' en ''1023'' denkt de software dat het om ints gaat. Terwijl ''5'' dus als een ''int'' wordt opgevat, is ''5.0'' vanzelf een ''float''. daar komt bij dat we de variabele ''val'' nodig hebben en die is ook van het type ''int''. De software voert daarom de hele berekening uit met ''int's''. In principe wordt dat resultaat-type bepaald door de grootste operand (het getal dat de meeste ruimte vraagt in het geheugen). Een berekening op basis van ''int's'' geeft dus ook een int terug. De breuk 5/1023 wordt dan 0, omdat 0 de dichtsbijzijnde int is die lager is 5/1023 kleiner is dan 1 wordt die breuk automatisch 0. Daardoor wordt het resultaat van de berekening altijd 0, wat de waarde van ''val'' ook is. Op deze manier krijg je het gekke resultaat dat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;1023*4/10 = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Het bovenstaande verklaart waarom de volgende code ook werkt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float volt = 5.0/1023 * val;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Het getal ''5.0'' wordt door de software herkent als een ''float''. Daarom zal de hele berekening als ''float'' worden uitgevoerd terwijl ook het resultaat een ''float'' is. Onderstaande code werkt ook:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float volt = (float)val * 5/1023;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De term ''(float)val'' zegt expliciet tegen de software dat van ''val'' een float gemaakt moet worden. In feite wordt het type ''int'' dus ter plaatse omgezet in het type ''float''. Dit heet een '''typecast'''. De code zoals die daadwerkelijk is het programma zit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;float volt = 0.0488758 * val;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Komt op hetzelfde neer, maar is iets sneller omdat de breuk 5.0/1023 niet hoeft te worden uitgevoerd. Wel is dit iets minder begrijpelijk zodat het een goed idee is om in het commentaar uit te leggen waar het getal 0.0488758 vandaan komt.&lt;br /&gt;
&lt;br /&gt;
===Beetje spelen===&lt;br /&gt;
*Vaak is het zo de spanning niet helemaal 5 Volt wordt. Als je de potmeter naar max draait kun je met een spanningsmeter de echte spanning meten. Stel nu dat die spanning inderdaad geen 5 Volt blijkt te zijn, maar slechts 4.83 Volt, kun je dan het programma aanpassen opdat het toch de juiste spanning weergeeft?&lt;br /&gt;
*Het is natuurlijk leuk om de spanning weer te geven op een LCD scherm. Kun jij dit project met het vorige combineren zodat je de spanning kunt aflezen op het LCD scherm? Je hebt dan een eenvoudige spanningsmeter gemaakt!&lt;br /&gt;
&lt;br /&gt;
===Navigatie===&lt;br /&gt;
*[[Arduino - Het 1602 LCD Display|Vorige project]]&lt;br /&gt;
*[[Arduino cursus|Cursus overzicht]]&lt;br /&gt;
*[[Arduino - Allerlei sensoren|Volgende project]]&lt;/div&gt;</summary>
		<author><name>WikiAdmin</name></author>	</entry>

	</feed>