18. Analoge I/O

18. Analoge I/O

Doel van deze Experience

In deze experience gaan we digitale en analoge in- en uitgangen gebruiken. Na een stukje theorie en een aantal voorbeelden gaan we een VU meter bouwen. We gaan de volgende instructie gebruiken;

analogRead (Pin);
analogWrite (Pin);

Wat heb je nodig;

  • Arduino bord
  • Potentiometer
  • 9 weerstanden van 220Ω
  • 6 stuks rode LED
  • 2 stuks gele LED
  • 2 stuks groene LED
  • Oortelefoon kabel en connector
  • Aansluitdraden

De theorie;

Arduino bouwstenen

Analoge uitgangen

In de vorige Experiences hebben we gezien hoe we met PWM de digitale uitgangen 3, 5, 6, 9, 10 en 11 als een soort analoge uitgangen kunnen gebruiken. In de Arduino zorgt de PWM voor een simulatie van een analoog signaal. We gaan dit nu niet verder behandelen.

Analoge ingangen

De analoge ingangen ziiten in blok 5 op bovenstaande plaatje en zijn A0 t/m A5 genoemd. De analoge ingangen vertalen een analoog signaal van 0 – 5 Volt naar een digitaal signaal. Dit gebeurt met een zogenaamde A/D converter, in dit geval 10 bits. Hoe meer bits, hoe nauwkeuriger de conversie. Met 10 bits hebben we 1024 posities (2 tot de macht 10 is 1024). We verdelen de 5 V in 1024 stappen, dus kan je berekenen dat we op ongeveer 5 mV (dit is 5 volt / 1024) nauwkeurig kunnen meten.  Dit is voor de meeste doeleinden voldoende.

We moeten er wel voor zorgen dat er geen spanning op de ingang komt die boven de 5 V is. Als we dit wel verwachten moeten we een schakeling bouwen aan de ingang om dit te voorkomen.

spanningsdeler

Spanningsdeler

Deze sensor heeft bijvoorbeeld een uitgangsspanning van 0 tot 24 V. Met deze spanningsdeler voorkomen we dat er 24 V op de ingang komt. De maximale spanning is namelijk 1/5 van 24 V = 4,8 V (je kunt dit narekenen met de wet van Ohm). Voordat je dus een analoog signaal op de Arduino aansluit kun je het beste met de multimeter meten hoe hoog de maximale waarde van het signaal is en indien het te hoog is met een spanningsdeler verlagen. Deze spanningsdeler kun je natuurlijk ook weer ijken, dit is beter voor de nauwkeurigheid. Je meet de hoge spanning en de verlaagde spanning en je weet dan precies wat de verhouding is. Deze verhouding kun je dan later in de sketch gebruiken.

Controle van een LED

We gaan een circuit bouwen waarbij we de loper van een potentiometer op de A0 ingang aansluiten en een LED aansturen via de digitale poort 10. Zie onderstaand schema.

potmetercontroleLED

Maak een sketch met de volgende code;

const int potentioMeterPin = 0;
const int redLedPin = 10;

int brightness = 0;

void setup() {
pinMode(redLedPin,OUTPUT); //define the redLedPin as an output
}

void loop() {
int value = analogRead(potentioMeterPin); // read the analogue value from the sensor
//since value can be between 0 and 1023 we need to divide the value by 4 before we can write it to PWM
//because the max PWM is 255
brightness = value / 4;
analogWrite(redLedPin, value); // turn the ledPin on
}

Als je alles goed hebt aangesloten en de Sketch goed werkt, kun je nu dus de helderheid van de LED aanpassen door aan de potentiometer te draaien.

 

Opdracht 1

We gaan in deze opdracht zelf een voltmeter maken. Tot nu toe heb je spanning gemeten met de multimeter. Je kunt dit echter ook met de Arduino doen. Je hebt geleerd dat een analoge ingang de gemeten waarden tussen de 0 en 5 V omzet in een getal tussen de 0 en 1023. Maak nu zelf een Sketch die de waarde op A0 uitleest, omrekent naar een spanning en deze spanning op de seriële monitor weergeeft. Je kunt de sketch ook weer eenvoudig testen door de potentiometer te gebruiken. De beide uiteinden sluit je aan tussen de 0 en 5 V en de loper, het middelste contact sluit je aan op A0.

Probeer het eerst zelf. Kom je er niet uit vraag dan hulp op het forum.

Opdracht 2

We hebben nu heel veel geleerd dus we gaan weer een leuk project bouwen. Hiervoor zullen we de analoge ingang gebruiken en hier een geluidssignaal op zetten (audio). Dit signaal converteren we naar een aantal LED’s die weergeven hoe groot het signaal is. We noemen dit een VU meter. VU is de Engelse afkorting voor Volume Units. We laten in blokjes zien hoe groot het signaal is. We gebruiken hier meestal drie kleuren voor: groen is « OK », oranje is « let op » en rood is « te hoog ». Als het signaal te hoog is kunnen we een versterker of luidsprekers opblazen. Ook zul je horen dat het geluid van een versterker vervormt wanneer het signaal in het rode komt.
vumeter
Dit plaatje toont een VU meter met twee rijen LED’s. Deze is voor stereo geluid waarbij de ene rij het linkse en de andere rij het rechtse audiosignaal weergeeft.

We gaan deze bouwen met 10 LED’s en de volgende code (Dropbox).

VUmeter_fritz

int led[10] = {2,3,4,5,6,7,8,9,10,11,};
// Assign the pins for the leds
int leftChannel = 0;
int left, i;
void setup()
{
for (i = 0; i < 10; i++)
pinMode(led[i], OUTPUT);
Serial.begin(9600);
}
void loop()
{
left = analogRead(leftChannel);
Serial.println(left);
left = left / 5;
if (left == 0)
{
for(i = 0; i < 10; i++)
{
digitalWrite(led[i], LOW); }
} else
{
for (i = 0; i < left; i++)
{
digitalWrite(led[i], HIGH);
}
for(i = i; i < 10; i++)
{ digitalWrite(led[i], LOW);
}
}
}

De sketch zet het analoge ingangssignaal om in een code, en stuurt via de digitale poorten de LEDjes aan. Je kunt deze met de kabel aansluiten op de computer, laptop, audio installatie of je smartphone. Zet een liedje op en kijk wat er gebeurt. Als er niets gebeurt, dus wanneer alle LEDjes blijven branden of juist uit blijven, kun je dit aanpassen met de volgende regel:

left = left / 5 ; // hiermee kunnen we variëren voor de gevoeligheid. Met een Android smartphone en de waarde 6 krijgen we een volledige uitslag. Zet het volume van je telefoon op maximaal.

Wat hebben we deze Experience geleerd ?

De mogelijkheden om analoge signalen te meten met de Arduino en enkele toepassingen.

TestenStatus

Een reactie plaatsen