Affiliate Marketing

A year from now you will wish you had started today.
Karen Lamb
English writer

Affiliate marketing is jouw weg naar een passief inkomen! De mogelijkheden van affiliate marketing blijven stijgen terwijl de drempels om te starten dalen. Noch producten noch diploma’s zijn vereist om geld te verdienen op het internet!

Affiliate marketing:

De meesten onder ons hebben noch producten om via het internet te verkopen noch de middelen om deze uit het niets te verwerven. Vaarwel online ondernemen? Allesbehalve! Met affiliate marketing heb je geen fysieke producten nodig om geld te verdienen op het internet. 

Bij afffiliate marketing draait het juist om het promoten van andermans producten en daar dan een graantje van mee te pikken. Wie heeft het nog niet gedaan: je favoriete restaurant, film, liedje, pretpark, reisbestemming … doorgespeeld naar je vrienden? Wel, dan kom je al aardig in de buurt… 

Wat is nu juist die affiliate marketing?

Affiliate marketing is een uitstekende manier om online geld te verdienen. Je krijgt simpelweg betaald wanneer er iemand via jouw unieke affiliate link het product wat jij promoot koopt. Affiliate marketing is dus letterlijk het aanprijzen van producten waarop je bij verkoop een aardige commissie wordt uitbetaald.

Zo hebben we geld verdient zonder zelf maar één euro te investeren in het productieproces van deze producten. Zonder één euro, en de bijbehorende tijd, te spenderen aan het verzenden en afleveren van al je verkopen. Laat staan werken aan je klantenservice en diensten. Dit alles laten we over aan de eigenaars van de producten.

Heel de wereld gebruikt het, dagdagelijks kom je het wel honderden malen tegen zonder er zelf van bewust te zijn.

Win win situatie:

Waarom zou een bedrijf nu eenmaal commissie betalen voor een verkoop van hun eigen producten? Net omdat ze juist met jou toedoen een extra verkoop realiseren die gegarandeerd meer winst oplevert dan jouw commissie. Op deze manier heeft de producent een extra aankoop, extra winst, extra publiciteit en jij jouw makkelijk verdiende bonus!

Net die win win situatie verklapt ons het grote succes van affiliate marketing!

Vaak gestelde vragen:

hoe worden mijn klanten geregistreerd?

Als affiliate krijg je een uniek link. Deze link moet je dan delen met je klanten. Wanneer je klanten deze link gebruiken, worden ze doorverwezen naar de website van de eigenaar. Bij een verkoop wordt via een tijdelijke cookie jouw commissie geregistreerd en later uitbetaald.

hoe kan je beginnen met promoten ?

Er zijn verschillende manieren om je unieke link de delen met je klanten: via sociale media zoals instagram of facebook. Ook via youtube worden vaak affiliate links gedeeld. Wij raden je echter om je unieke link te delen via een website gericht aan het product dat je verkoopt.

krijg ik mijn commissie enkel voor de directe aankopen ?

Allesbehalve! Wanneer de cookie aangebracht wordt blijft deze, voor een periode, bij je klanten hangen. De lengte van deze periode is afhankelijk, maar kan al snel oplopen van één maand tot een volledig jaar. Tijdens deze periode krijg je commissies op alle aankopen die je klant maakt op de website van de eigenaar via jouw unieke link.

Hoeveel bedraagt de commissie ?

Ook dit wordt uiteraard bepaalt door de eigenaar wiens producten we promoten. We merken wel dat fysieke producten met een productie en verzendingskost, logischerwijs, een lagere commissie hebben dan bijvoorbeeld software of e-books. Bij virtuele producten bedraagt de commissie vaak 30-40%, terwijl bij fysieke producten dit lager ligt.

Kan je leven van affiliate marketing ?

Uiteraard! Er zijn genoeg voorbeelden van mensen die op deze inkomsten leven. Rome was helaas niet in één dag gebouwd, net zoals hun succes. In je eerste maanden heb je vaak geen tot weinig inkomsten. Hierdoor gooien velen de handdoek al in de ring. Affiliate marketing word namelijk vaak verkocht als een wondermiddel, terwijl dit zeker niet zo is. Het heeft potentieel om op termijn enorm veel geld te gaan verdienen, maar het is zoals bij ondernemen geen directe snelweg naar rijkdom!

Hoe beginnen met affiliate marketing?

Het leren van de kneepjes van het vak is uiteraard essentieel om succesvol te zijn. Het zelf ontdekken van deze tips & tricks is haast onmogelijk. Daarom willen we jullie laten kennis maken met de videocursus die velen definitief lanceerde in de wereld van affiliate marketing! 

Jacko Meijaard is zo’n voorbeeld van iemand die zijn leven bouwde met de inkomste die hij verwerwerft uit affiliate markteting! Na zijn succes wou hij anderen helpen in hun affiliate revolutie. Daarom heeft hij toen deze gids samengesteld. Vandaag de dag is er naast deze uitstekende gids ook een uitgebreide community die regelmatig berichten post om beginnende affiliates te helpen. En daarenboven is het volledig nederlandstalig!

Werking:

Deze training bestaat uit 79 video’s en beslaat alles, echt alles, wat je nodig hebt om te beginnen met affiliate marketing. Van hoe je je website inricht tot SEO en email-marketing. Er wordt stap voor stap uit hoe jij succesvol kan worden met affilitate marketing.

affiliate marketing

De boards:

De community gecreëerd rondom de videocursus is gewoonweg fantastisch. Zo kan je hier steeds terug met je vragen, tevens vindt je hier tips & tricks van diegene die al verder staan in affiliate marketing! Bovendien worden hier handige tools gedeeld voor bijvoorbeeld rechtenvrije afbeeldingen. Maar ook tips voor SEO en email marketing kan je hier vinden. Kortom: alles wat je nodig hebt om, in combinatie met de cursus, succesvol te zijn. En dit alles in het Nederlands!

affiliate marketing

Onze ervaring

Dit was onze eerste aankoop en tevens onze leerschool in het vak. Na het volgen van de videocursus waren we geïntroduceerd in de affiliate marketing revolutie en konden we direct beginnen!

Deze cursus legt alles uit wat je nodig hebt om te starten als affiliate. Het board gebruikten we om tijdens onze opstart, en nu nog steeds, handige tools te vinden en onze business verder te lanceren. De combinatie van de boards en de videocursus, allebei in het Nederlands, maken internetsuccesgids de beste introductie op de markt!

Get It Started!

Wij raden jullie om jullie zelfgekozen producten te promoten met behulp van een website. Voor het creëren van een website heb je een paar tools nodig! Allereerst heb je een goede hosting service nodig, zij zorgen er voor dat je een “plaats” hebt op het internet. Zonder deze tool kan je simpelweg geen website creëren. Daarna zijn het creëren van social proof en emailmarketing doorslaggevend bij het lanceren van jouw affiliate marketing website! 

Nu je ongeveer de basis begrepen hebt is er nog een laatste stap, get started !!! 

Les 12: Arduino willekeurig laten kiezen

Wat is nu juist een Arduino willekeurig laten kiezen? Vorige lessen kozen we steeds zelf de bewerkingen. We volgende steeds eenzelfde structuur: als deze variabele gelijk is aan dit, doe dat. De uitvoerende actie codeerden we echter steeds handmatig! De poort die moest worden geactiveerd kozen we steeds voordien, als een vast commando in de code. In deze les zullen we Arduino zelf laten kiezen welke poort er wordt geactiveerd! Arduino zal zo willekeurig kiezen en actie ondernemen… De ongewone toepassing komen we dagelijks aantallen keren tegen!

Arduino willekeurig laten kiezen:

Deze les zal zicht toespitsen op het Arduino-commando ‘random’. Zoals het commando zich laat zeggen zal arduino bij het uitvoeren van dit commando het recht in eigen handen nemen. Met andere woorden: de output van dit commando hebben we zelf niet in de hand!

Opbouw:

Nog steeds zullen we eerst onze woorden duiden aan de Arduino. In deze les werken we met 3 ledjes: een groene, rode en een oranje led. We schakelen ze respectievelijk op poorten 12, 11 en 10. We gebruiken in deze les geen PWM-signalen, dus we mogen de ledjes op elke digitale poort schakelen.

We schakelen ook een knop op poort 9 die we zullen gebruiken om het programma te starten. Ook declareren we naast de knop ook een variabele om de status van de knop in op te slaan: ‘knopStatus’.

Tot slot maken we nog een extra variabele: ‘nummer’. Deze zal de output van de Arduino na het commando ‘random’ opslaan.

Het programma:

In de void setup declareren we de poorten van onze ledjes ( 12, 11 en 10) als uitvoerende poorten. Poort 9, waaraan onze knop is geschakeld, is een observerende poort. 

knopStatus = digitalRead ( knop ); 

if ( knopStatus == HIGH ){ 

De knop gebruiken we als starter van ons programma. We zullen dus beginnen met het controleren van de status van de knop. Hierna polsen we of de knop al dan niet ingedrukt werd.

nummer = random ( 10,13);

Dit is de kern van onze code. Hier laten we Arduino willekeurig kiezen tussen de nummers 10 en 13. De Arduino zal dus zijn waarde kiezen in het interval [10,13[. Dit wil zeggen dat 10 wel nog een mogelijkheid is, maar 13 niet. De output van dit commando zijn altijd natuurlijke getallen. 12,1 en 11,3 zijn bijvoorbeeld getallen die nooit gekozen zullen worden! De mogelijke output van dit commando is dus ofwel 10 ofwel 11 ofwel 12. Deze getallen 10, 11 en 12 zijn ook de 3 poorten waarop we eerder onze ledjes schakelden…

digitalWrite ( nummer , HIGH );

Na het kiezen van van het getal, zal de Arduino de overeenkomstige poort activeren. De led die aan die poort geschakeld is zal dan beginnen branden. 

Notie:

We mogen het commando ‘random’ zo gebruiken omdat we ons interval zorgvuldig gekozen hebben! 

random ( 1, 20 );

Wanneer we dit commando gebruiken, dan zouden we dit niet mogen doen! Er is namelijk een kans dat de output groter dan 13 is. Als dit gebeurt, dan krijgen we een conflict in ons ‘digitalWrite();’ commando! Er is namelijk geen poort met, bijvoorbeeld nummer 18.

We declareerden in het begin van onze code onze woorden aan de Arduino. Deze woorden gebruikten we dan om de poorten als OUTPUT te declareren. Normaal gebruiken we dan ook deze woorden om de poort te activeren… Maar dit is hier niet het geval! De Arduino zal steeds een getal als output genereren na random();. Zo zal de Arduino steeds één van deze commando’s verwerken:

digitalWrite ( 10, HIGH);

digitalWrite ( 11, HIGH);

digitalWrite ( 12, HIGH);

De gedeclareerde poorten zijn in deze code dus eigenlijk niet nodig. Toch is het aan te raden om deze toch te declareren. Zo kan je steeds controleren welke led er op welke poort geschakeld, zonder steeds de draadjes in je schakeling te moeten volgen…

delay ( 1500);
digitalWrite ( nummer, LOW );

Nadat de poort geactiveerd werd, wachten we anderhalve seconde. Nadien wordt de led weer gedoofd, het variabele ‘nummer’ is namelijk niet meer verandert in waarde.

Zo zal er telkens wanneer er op de knop geduwd wordt een ledje gaan branden. Deze ledjes zullen zonder vaste volgorde branden aangezien de Arduino willekeurig zal kiezen welke led hij eerst aanstuurd.

Code:

// Eerst zetten we onze woorden om in taal die Arduino begrijpt.

const int ledGroen = 12;
const int ledRood = 11 ;
const int ledOranje = 10;

const int knop =9 ;
int knopStatus ;

int nummer ; 
void setup() {
// Aangezien dat deze “loop” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten.

pinMode ( ledGroen , OUTPUT);
pinMode ( ledRood , OUTPUT);
pinMode ( ledOranje , OUTPUT);

pinMode ( knop , INPUT);

}

void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

knopStatus = digitalRead ( knop ); 

if ( knopStatus == HIGH ){ 

nummer = random ( 10,13); // kies een willekeurig nummer tussen 10 en 12
digitalWrite ( nummer , HIGH ); // activeer de gekozen poort 
delay ( 1500);
digitalWrite ( nummer, LOW );

}

}

Schakeling:

We schakelen 3 ledjes op poorten 12,11 10. In serie schakelen we een weerstand van 200 ohm. We schakelen ook een knop die verbonden is met de 5V, de ground door een weerstand van 100000 ohm en poort 9.

Arduino random

Doe eens gek, ondertussen heb je al voldoende bagage om zelf te experimenteren. Je kan eventueel eens proberen deze code te maken met meerder ledjes of andere componenten.

Basislessen Arduino 100%

Na het succesvol doorlopen van de vorige lessenreeks ben je helemaal klaar en genoeg voorbereid om aan het projectwerk te beginnen. Laat het echte werk beginnen!

Les 11: Werken met een buzzer

We werkten al eens met analogWrite(); om een ledje te laten dimmen. Echter een ledje kan je ook digitaal aansturen met digitalWrite();. Vandaag zien we een speciale, enkel analoge component die zijn eigen commando heeft! Vandaag zullen we werken met een buzzer! Deze buzzer kan gebruikt worden om tonen te genereren, maar het kan zelfs ook gebruik worden om liedjes mee te maken. In deze code zullen we de basis doorlopen en leren hoe je tonen genereert met een buzzer.

Werken met een buzzer:

We kunnen als licht ‘genereren’ met behulp van een ledje. Echter geluid maken kan ook heel handig zijn, daarom zullen we vandaag werken met een buzzer. We zullen gebruik maken van twee componenten: een knop en een buzzer. De buzzer is een unieke component omdat deze speciale commando’s heeft in arduino.

Notities:

Minder gebruikelijke componenten, zoals RFID, hebben ook speciale commando’s. Echter deze zijn niet, zoals bij de buzzer, al gekend door arduino. Daarom werken componenten zoals RFID met libraries. Zo kunnen wij op een ‘eenvoudige’, ‘duidelijke’ manier gebruik maken van deze componenten. Deze libraries zijn te vinden op het internet, maar we zullen dit vandaag niet gebruiken.

We beginnen met Arduino te onderwijzen in onze, menselijk taal. Ook hier maken we een variabele, knopStatus, om de gegevens van de knop in op te slaan. We schakelen onze knop op poort 12. Deze mag op alle digitale poorten geschakeld worden. De buzzer moet echter geschakeld worden op een PWM-poort. Zo kunnen er verschillende toonhoogtes, frequenties gegeneerd worden.

PWM-signalen

PWM-signalen of pulse with modulation is een manier om met digitale middelen een analoog output te verkrijgen. PWM werkt met bloksignalen. Je hebt de maximum spanning enerzijds en de minimum spanning anderzijds. Door zeer snel te wisselen tussen beide krijgen we een resulterende spanning die tussen beide extrema liggen. Theoretisch gezien zouden het licht voortdurend knipperen, maar omdat deze wisseling sneller gaat dan de frequentie van onze ogen, zien we deze niet. De grote van de resulterende spanning hang of van de procentuele verhouding van de extrema per puls. Hoe langer deze dus bij de maximum blijft, hoe hoger dus de resulterende spanning.

PWM-signalen

Opbouw:

We declareren onze buzzer als OUTPUT en onze knop als INPUT. Daarna beginnen we onze code met het lezen van de status van de knop. Deze waarde slaan we dan op in onze variabele. Die variabele gebruiken we om onze controles it te voeren.

We testen onze variabele in onze if-else-functie:

if ( knopStatus == HIGH){

tone(buzzer , 1000);

delay( 1500);
}

Wanneer de knop ingedrukt wordt, en ‘knopStatus’ dus gelijk is aan ‘HIGH’, dan zal de if-functie uitgevoerd worden. Hier komen we voor het eerst tone(); tegen. Dit is één van de de speciale commando’s voor de buzzer.

tone ( pin , frequentie, duur);

Dit is de algemene vorm van dit commando. We zien dat we eerst de waarde van we de pin moeten kiezen is. Bij ons is dit onze constante ‘buzzer’. Daarna geven we onze toonhoogte, onze frequentie. Dit is een ‘integer’ en wij hebben gekozen voor de waarde 1000. De laagst mogelijk genereerbare frequentie is 31 Hz. De derde waarde is optioneel en hebben wij niet gebruikt. Zo konden we ook het commando noTone(); in ons programma gebruiken. De derde waarde geeft de duur weer van de gekozen toon.

Nadat we een van frequentie 1000 naar de buzzer gestuurd hebben, wachten we 1500 milliseconden voor we verdergaan in de code.

else{
noTone(buzzer);
}

Wanneer er niet meer op de knop geduwd wordt, en wanneer ‘knopStatus’ dus niet meer ‘HIGH’ is, wordt de else-functie geactiveerd. Deze bevat maar één commando:

noTone( pin);

Dit commando gebruiken we om het tone(); commando te beëindigen en is tevens het tweede speciale commando voor de buzzer. In dit commando hoeft slechts de pin gegeven worden.

Notities:

Het commando tone(); zal moeilijkheden opleveren bij de PWM output van pin 3 en 11. Dit geldt voor alle borden, behalve de Mega.

Als je wil een toon spelen op een andere poort, terwijl er al een poort het tone(); commando ontvangt, dan moet je eerst notone(); sturen naar deze pin om vervolgens het tone(); commando naar de nieuwe pin te sturen.

Code:

// Eerst zetten we onze woorden om in taal die arduino begrijpt. 

const int buzzer =10;
const int knop =12;

int knopStatus;

void setup() {
// Aangezien dat deze ” loop ” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten. 

pinMode ( buzzer , OUTPUT);
pinMode ( knop , INPUT);
}
void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

knopStatus = digitalRead ( knop );
if ( knopStatus == HIGH){
tone(buzzer , 1000);

delay ( 1500);
}

else{
noTone(buzzer);
}

}

Schakeling:

We schakelen het de buzzer aan poort 10 en de ground. De knop wordt verbonden met de 5V, poort 12 en via een weerstand van 100 000 ohm met de ground.

werken met een buzzer
Basislessen Arduino 91.6%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het snel duidelijke welke invloed een commando heeft op de werking van de schakeling. In deze code zal vooral een verschil in waardes bij het commando tone(); een duidelijk verschil opleveren.

Bij problemen tijdens het werken met een buzzer, aarzel dan zeker niet om contact op te nemen.

Als je deze code onder de knie hebt, ga dan over naar les 12!

Les 10: Werken met een lichtsensor

In vorige lessen leerden we hoe we onze Arduino lieten samenwerken met de computer. Dat was een zeer belangrijk deel van coderen met Arduino en zeker niet te onderschatten. Vandaag zullen we echter weer met een component werken! Want net zoals onze computer zijn er ook componenten die meer kunnen dan slecht een binaire taal verwerken. Dit zijn analoge componenten, zoals lichtsensoren. Vandaag zullen we dan ook werken met een lichtsensor. Deze analoge componenten zijn overal aanwezig in de industrie. Toch is het zeer simpel om er één zelf te coderen… Laten we beginnen!

Werken met een lichtsensor:

In deze les zullen we werken met een lichsensor. Deze lichtsensor is uiteraard analoog. Er zijn namelijk veel meer mogelijkheden dan licht of donker, aan of uit, 1 of 0 … We gaan vandaag ervoor zorgen dat ons ledje automatisch zal beginnen branden wanneer het donker wordt.

Opbouw:

We beginnen nog steeds met onze woorden te declareren. Vandaag werken we met een LED en een lichtsensor. We schakelen onze LED op uitgang 12. Zoals eerder vermeld mag de led geschakeld worden op elke poort, behalve als we deze wouden dimmen. Dan hadden we een poort nodig die met PWM werkte, zodat deze analoge signalen kon verwerken. Voor onze analoge component is dit niet anders. Deze moet ofwel op een analoge poort A0,A1…  ofwel op een PWM-poort geschakeld worden. Deze PWM-poorten kan je herkennen met het golfje naast het nummer. Daarom schakelen we onze lichtsensor op poort 11 en bijvoorbeeld niet op poort 13.

PWM-signalen

PWM-signalen of pulse with modulation is een manier om met digitale middelen een analoog output te verkrijgen. PWM werkt met bloksignalen. Je hebt de maximum spanning enerzijds en de minimum spanning anderzijds. Door zeer snel te wisselen tussen beide krijgen we een resulterende spanning die tussen beide extrema liggen. Theoretisch gezien zouden het licht voortdurend knipperen, maar omdat deze wisseling sneller gaat dan de frequentie van onze ogen, zien we deze niet. De grote van de resulterende spanning hang of van de procentuele verhouding van de extrema per puls. Hoe langer deze dus bij de maximum blijft, hoe hoger dus de resulterende spanning.

PWM-signalen

We maken opnieuw onderscheidt tussen onze uitvoerende en observerende poorten. Onze uitvoerende poorten voeren acties uit, terwijl observerende poorten de Arduino informatie verschaffen. Uiteraard is onze lichtsensor in observerende poort. De LED gebruiken we als OUTPUT. We starten ook de seriële communicatie om een overzicht te hebben over onze sensor-waarden.

Het programma:

Wanneer we werken met een analoge component, zoals een lichtsensor, maken we een variabele om de waarde in op te slaan. In deze les gebruiken we lichtSensorStatus. Deze stellen we dan ook gelijk aan de waarde van de sensor helemaal in het begin van ons programma.

lichtSensorStatus = analogRead ( lichtSensor );

Net zoals we digitalRead(); hebben om digitale observerende poorten te lezen, hebben we analogRead voor de analoge sensoren. Nu zullen we niet slechts een 1 of een 0 als antwoord krijgen. AnalogRead zal waarden gegeven in het interval [0,1023]. Wanneer we de waarde hebben ontvangen sturen we die door daar de seriële monitor op onze computer. Zo kunnen we deze evalueren.

if ( lichtSensorStatus <= 400){
digitalWrite ( ledRood , HIGH);
}

Met deze if-functie stellen we de voorwaarde waaraan voldaan moet worden om de LED te laten branden. In deze code is de voorwaarde dat de waarde van de lichtsensor kleiner of gelijk aan moet zijn aan 400. Als deze voorwaarde voldaan is, zal de LED branden.

else{

digitalWrite ( ledRood, LOW);

}

Wanneer we werken met een lichtsensor, hebben we ook een manier nodig om de led te doven. Dit doen we door gebruik te maken van een else-functie. Telkens als de voorwaarde van van de if-functie niet voldaan is, zal deze else-functie doorlopen worden. Zo zal de led doven wanneer het weer lichter wordt.

Code

// Eerst zetten we onze woorden om in taal die Arduino begrijpt.

int ledRood =12;
int lichtSensor =11;

int lichtSensorStatus;

void setup() {
// Aangezien dat deze “loop” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten.

pinMode ( ledRood , OUTPUT);
pinMode ( lichtSensor , INPUT);
Serial.begin( 9600);
}
void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

lichtSensorStatus = analogRead ( lichtSensor );
Serial.println( lichtSensorStatus);
if ( lichtSensorStatus <= 400){
digitalWrite ( ledRood , HIGH);
}

else{

digitalWrite ( ledRood, LOW);

}

Schakeling:

We schakelen een ledje met in serie een 200 ohm weerstand. Het positieve been is verbonden met poort 12. De lichtsensor daarentegen is verbonden met zijn negatieve been met poort 11. Dit komt omdat de sensor een observerende component is, terwijl de LED een uitvoerende component is.

werken met een lichtsensor
Basislessen Arduino 83.3%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het al snel duidelijke welke invloed een commando heeft op de werking van de schakeling. In deze code kan je eens proberen om te voorwaarde in de if-else-functie te veranderen.

Als je deze code vlotjes beheerst, ga dan over naar les 11!

Les 9: Lezen van de seriële monitor

Als vervolg op les 8: schrijven in de seriële monitor zien we in deze les de tweede functie van deze monitor. Naast het sturen van data naar deze tool, kunnen we ook data ontvangen! De arduino zal dus de data van de seriële monitor lezen. Deze functie is kritiek voor het maken van programma’s! Het heeft ons namelijk de mogelijkheid om de maker een actieve rol in een werkende code te geven. Naast de passieve, als controleur, rol die we verkregen door het schrijven in de seriële monitor.

De seriële monitor:

We zullen bij het lezen van de seriële monitor uiteraard de seriële monitor moeten gebruiken. Nog even een korte herhaling van waar we deze precies terugvinden:

Seriële monitor
We vinden de monitor bij hulpmiddelen of met de sneltoets ctrl+shift+M

Wanneer we een Arduino aansluiten op onze computer kunnen we altijd de seriële monitor openen. Deze bestaat uit drie delen: De taakbalk, de data-invoer en de instellingen van de seriële monitor. De taakbalk gebruikten we in de vorige les. Met deze balk kunnen we onze computer een observerende functie geven. De data-invoer zullen we gebruiken om data naar de Arduino te sturen. In deze les zullen we de data-invoer dus zeker gebruiken. De instellingen stellen ons in staat om de bandlengte te bepalen en aan te passen. De meest gebruikte en voorkomende bandlengte is 9600. Deze veranderen we niet.

Seriële monitor

Het lezen van de seriële monitor:

We ontvangen data van de computer… Dat wil zeggen dat de computer nu, voor de arduino, een observerende functie heeft! Echter in de vorige les had onze computer een uitvoerende functie… Dit verklaart meteen waarom we niet werken met de traditionele commando’s. Ook in deze les zullen we gebruik maken van de Serial.-commando’s. Met deze nieuwe commando’s zullen we proberen om een zelfgekozen geldbedrag naar onze arduino te schrijven. We zullen dus gebruik maken van de actieve functie. Daarna zullen we controleren, de passieve functie, of deze geldwaarde goed ontvangen werd.

Opbouw:

We declareren onze woorden voor de arduino. In deze les is er wel iets speciaals aan deze woorden… 

float bedrag;

We gebruiken voor het eerst het datatype ‘float’. Er is natuurlijk een reden om voor het zwaarste type te kiezen. We kunnen zeggen dat we zo kunnen kiezen voor zeer grote bedragen, maar dan zouden we wel voor het datatype ‘long’ gekozen hebben. We kiezen wel voor dit datatype omdat deze in staat is kommagetallen op te slaan. Zo kunnen we waarden als €5,39, €9,99 … wel verwerken.

String prijsGelezen;

Toch was het hoogstwaarschijnlijk deze declaratie die jullie deed jullie wenkbrauwen fronsen. We werken hier namelijk voor het eerst met een string! Deze lijst declareren we vanzelfsprekend met ‘String’. Een string kan je het best begrijpen als een lijst met tekens.

Notities:

In essentie is er wel een klein verschil tussen deze declaraties:

String prijsGelezen;

char prijsGelezen[];

Beide zijn lijsten gemaakt uit tekens. Het verschil zit in de laatste byte. De laatste byte in een ‘String’ in een binaire nul, terwijl dit bij ‘char’ niet zo is. Veel belangrijker is dat met een ‘String’ veel meer commando’s zijn!

In de void Setup(); beginnen we de seriële communicatie op bandlengte 9600. We coderen dit in de void setup omdat we doorheen het volledige programma eenzelfde bandlengte zullen gebruiken.

We beginnen onze void loop() met een oproep naar de computer. Deze oproep zal verschijnen in de seriële monitor: “Geef het bedrag in euro’s, eindig met #. Als maker achter de computer zal dit de enigste boodschap zijn. De twee volgende commando’s zijn intern. Deze zal je dus niet zien in de monitor, ondanks het wel Serial.-commando’s zijn. Zichtbaar zijn ze niet, maar deze commando’s zijn wel uiterst belangrijk in deze code.

Serial.setTimeout(200000) ;

prijsGelezen = Serial.readStringUntil(‘#’) ;

Beide commando’s horen samen en vullen elkaar aan. Het eerste commando zorgt ervoor dat de arduino pauzeert in het programma. Het getal geeft de duur van die pauze, in milliseconden, weer. Deze periode is zelf te bepalen. In deze code kiezen we voor een lange pauze, zodat we zeker tijd genoeg hebben om onze waarde in te geven. 

Door dit commando weet de arduino dat hij bij het volgende Serial.read-commando zal moeten pauzeren. Serial.read komt echter in vele vormen voor. Telkens begint deze uiteraard met Serial.read, maar er kan gespecificeerd worden. In ons commando zien we dat er twee specificaties zijn, namelijk ‘String’ en ‘Until’. De ‘String’ slaat op het gedeclareerde type waarin de informatie zal worden opgeslagen. Bij ons is dit dus onze ‘String’ prijsGelezen. 

Onze tweede specificatie, ‘Until’, heeft als gevolg dat er een voorwaarde wordt gegeven waardoor hij de eerder bepaalde pauze mag doorbreken. Zo zal Arduino wachten tot ofwel de pauze doorlopen is ofwel hij het bepaalde teken tegenkomt. In ons geval zal de Arduino dus de pauze doorbreken wanneer hij het #-teken tegenkomt in de doorgestuurde data.

Notities:

Waarom gebruiken we niet gewoon het €-teken als voorwaarde? Wel, dat zou het inderdaad eenvoudiger maken. Spijtig genoeg werkt dit niet! 

Serial.readStringUntil();

Dit commando zet de geschreven input van de seriële monitor om naar ASCII-code om deze op te slaan in een lijst. Jammer genoeg kent Arduino slechts de basiscodes. Dit zijn de ASCII-codes van 1 tot en met 127. Het €-teken heeft 128 als ASCII-code en is dus niet gekend door arduino. Het teken kan wel geprint worden, met ‘ Serial.print’, maar kan niet als ASCII-code geschreven worden, met ‘Serial.write’. Een overzicht van de ASCII-codes vindt je in deze ASCII-tabel.

De kommagetallen maken gebruik van een punt als scheidingsteken. De input 5,31 zal dus niet geaccepteerd worden, terwijl 5.31 wel geaccepteerd zal worden.

Serial.println (” geaccepteerd”);

Wanneer de ‘String’ gevormd is stuurt de Arduino ‘geaccepteerd’ terug naar de computer. Echter het bedrag is nog steeds opgeslagen als een een ‘String’! Hier kunnen we niet mee rekenen en is dus, in deze vorm, waardeloos. Uiteraard is er een manier om de ‘String’ om te vormen naar een ‘Float’.

bedrag = prijsGelezen.toFloat();

Hier stellen we onze ‘Float’ bedrag gelijk aan de output van het commando. 

[onze ‘String’].toFloat();

Dit is de algemene vorm van dit commando. Dit commando gebruiken we om een ‘String’ om te vormen naar een ‘Float’. Deze declaratie is wel een getal en hier kan dus mee gerekend worden.

Notities:

Een soortgelijk commando kunnen we ook gebruiken om bijvoorbeeld een ‘String’ om te vormen naar een ‘integer’.

Serial.println ( bedrag,2);

We sturen het kommagetal, afgerond op twee cijfers, naar de seriële monitor.

  // Eerst zetten we onze woorden om in taal die Arduino begrijpt.

  String prijsGelezen;

  float bedrag;

void setup() {

  // Aangezien dat deze “loop” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten.

  Serial.begin ( 9600);

}

void loop() {

  // Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.

  Serial.println ( ” Geef bedrag in euro’s , eindig met #.”);

  Serial.setTimeout(200000) ;

  prijsGelezen = Serial.readStringUntil(‘#’) ;

  Serial.println (” geaccepteerd”);

  bedrag = prijsGelezen.toFloat();

  delay  (2000);

  Serial.println ( bedrag,2);

}

Schakeling:

schakeling bij lezen van seriële monitor
Basislessen Arduino 75%

Voor het lezen van de seriële monitor hoeft er geen schakeling gemaakt worden. Zolang de arduino verbonden is met de pc, kan je deze code maken.

We maakten in deze les gebruik van de algemene commando’s om data binnen te lezen. Toch zijn er ook commando’s om alleen getallen te verwerken, iets wat hier wel van pas kan komen! Probeer dus zeker eens de andere manier te coderen. Tip : het commando is Serial.parseFloat();.

Als je deze code vlotjes beheerst, ga dan over naar les 10!

Les 3: Programmeren verkeerslicht zonder voids

Een code met meerdere hardware componenten maken? Een interessante topic voor les 3. In les 1 hebben we gezien hoe we eenvoudig een ledje laten werken. Deze code werkt echter maar voor één en slechts één ledje. In les 3 tonen we hoe je meerdere ledjes kan combineren in één code. Meerdere ledjes… Een verkeerslicht programmeren is hiervan een geschikt voorbeeld!

Programmeren verkeerslicht:

Nu gaan we aan de slag met het programmeren van ons verkeerslicht of stoplicht. Zoals altijd zetten we onze woorden gelijk aan waardes die de Arduino-verwerker begrijpt. Zoals je ziet zullen we hier werken met drie ledjes: een groen, geel en rood ledje, de kleuren van een verkeerslicht. Elk van deze ledjes zijn geschakeld op een andere poort, respectievelijk 12, 11 en 10. 

const int lichtGroen = 12;
const int lichtGeel = 11;
const int lichtRood = 10;

We veranderden echter de vermelding van onze woorden. “int lichtGroen = 12;” is verandert naar “const int lichtGroen = 12;”. Dit verandert echter niets aan de grote van de overeenkomstige waardes, deze zijn nog steeds integers. “const” is slechts een extra voorwaarde. Het zorgt ervoor dat de waardes doorheen het programma constant blijven. Na het doorlopen van dit stukje code zijn ze dus niet meer “variabelen”, maar “constanten”.

Notities:

Constante variabelen. Is dat nu zo belangrijk? Wel, bij korte codes, die gemaakt worden door éénzelfde persoon en geen periodieke testen ondergaan, zeker niet. Dit laatste lijkt misschien dubieus, maar de kleine fouten, gemaakt door het niet gebruiken van constante variabelen, worden vaak opgemerkt bij de evaluatie van de volledige code. Bij periodieke testen is hier vaak geen tijd voor en wordt ook vaak niet de totale code getest.

Bovendien vergemakkelijkt deze extra voorwaarde ook het werken met meerdere personen aan eenzelfde code. Als je partner bijvoorbeeld een variabele, in zijn deel van de code, anders declareert dan bij jou, dan zou jouw programma nadat het eenmaal doorlopen werd niet meer werken, de void Setup, met jouw declaratie, word namelijk slecht eenmaal doorlopen. Dit zorgt voor problemen, codes die perfect zijn, kunnen hierdoor al vlug de mist in gaan. De fout wordt dan vaak gezocht op de verkeerde plaats en dit vergt tijd, werkt frustrerend en moet natuurlijk vermeden worden. Meer uitleg over ‘integers’ en ‘constanten’ vindt je in onze sectie programmeeromgeving.

Opbouw:

We gaan nu verder met het programmeren van het verkeerslicht, namelijk de code. We declareren onze drie ledjes als OUTPUT in onze void setup. Zo weet de arduino-verwerker dat hij op deze poorten geen data moet lezen, maar data moet sturen.

digitalWrite ( lichtGroen , HIGH);

We gebruiken steeds digitalWrite(); om data te sturen naar onze ledjes. De ledjes die we gebruiken, hebben namelijk maar twee standen, uit en aan. Daardoor kunnen we ons commando omzetten naar een binaire taal, respectievelijk 0 en 1.

digitalWrite ( lichtGroen , HIGH);
delay ( 2000);
digitalWrite ( lichtGroen , LOW);
digitalWrite ( lichtGeel , HIGH);
delay (500);
digitalWrite ( lichtGeel , LOW);

Eerst sturen we het commando om het ledje te laten werken. Daarna zorgen we voor een pauze van 2000 ms of 2 seconden om vervolgens het ledje weer te doven. Tussen deze commando’s is er bij het gele ledje een kortere pauze, net zoals de duur van het gele verkeerslicht korter is dan deze van het rode en groene licht.

Notities:

Zoals je kunt zien gebruiken we steeds dezelfde drie regels:

digitalWrite ( ledje , HIGH);
delay ( pauze);
digitalWrite ( ledje , LOW);

Meer uitleg over deze herhaling en hoe we deze vereenvoudigen vind je in les 4..

Code:

// Eerst zetten we onze woorden om in taal die arduino begrijpt.
const int lichtGroen = 12;
const int lichtGeel = 11;
const int lichtRood = 10;

void setup() {
// Aangezien dat deze ” loop ” slechts eenmaal doorlopen wordt, declareer je hier jouw poorten.
pinMode ( lichtGroen, OUTPUT);
pinMode ( lichtGeel , OUTPUT);
pinMode ( lichtRood , OUTPUT);
}

void loop() {
// Vervolgens zetten we hier de opdrachten die uitgevoerd moeten worden. Deze “loop” wordt dus steeds herhaald.
digitalWrite ( lichtGroen , HIGH);
delay ( 2000);
digitalWrite ( lichtGroen , LOW);
digitalWrite ( lichtGeel , HIGH);
delay (500);
digitalWrite ( lichtGeel , LOW);
digitalWrite ( lichtRood , HIGH);
delay ( 2000);
digitalWrite ( lichtRood , LOW); 
}

Schakeling:

De schakeling die bij deze code hoort bestaat uiteraard uit 3 ledjes, elk van deze ledjes schakelen we in serie met een weerstand van 220 ohm. Het groene, gele en rode ledjes zijn respectievelijk op poorten 12,11 en 10 geschakeld en met de ground verbonden.

programmeren verkeerslicht
Basislessen Arduino 25%

Ook raden we jou aan om bepaalde waardes of commando’s te vervangen of te veranderen. Zo wordt het snel duidelijke welke invloed een commando heeft op de werking van de schakeling.

Bij problemen met het programmeren van het verkeerslicht, zeker niet aarzelen om contact op te nemen.

Als je het werken met het ledjes voldoende beheerst, ga dan over naar les 4!