Arduino discussietopic
Dit is het 1e discussietopic over Arduino. Je kan hier je eigen codes plaatsen, en de codes van anderen overnemen. Je kan ook een foute code neerzetten, en aan de anderen vragen wat er fout aan is als je er zelf niet uitkomt. Deze topicstart is nog in bewerking, er komt af en toe wat bij. Hiervoor heb ik toestemming van Oscar the GrouchIndex
De Startpost bestaat uit een aantal onderdelen. (klikbaar)- Wat is Arduino? Tijdelijk weggehaald
De verschillende typen Arduino controllers
Er zijn een aantal verschillende soorten Arduino controllers. Een opsomming van de verschillende soorten vind je hieronder:![]() | Arduino Duemilanove De standaard Arduino controller, opvolger van de Arduino Diecimila. Dit is de controller bij uitstek om mee te beginnen. Sluit het met een USB kabel aan op je PC en je kan aan de slag. |
![]() | Arduino Mega Heb je niet voldoende aan de Arduino Duemilanove, dan kan overstappen naar de Arduino Mega. De Arduino Mega bevat een Atmega 1280 chip en heeft veel meer I/O beschikbaar. |
![]() | Arduino Mini De Arduino Mini is een mini versie van de Arduino Duemilanove. De processor is hetzelfde, alleen zijn er een aantal onderdelen niet aanwezig, zoals het USB aansluit gedeelte, de stroomregelaar en de expansie headers. Om de Arduino Mini te programmeren heb je een USB <--> Serial Convertor nodig |
![]() | Arduino Nano Dit is een ook mini versie van de Arduino Duemilanove, maar bevat wel het USB stuk, en is dus direct klaar voor gebruik. Deze is met name geschikt voor het gebruik op breadbords. Prik het in het breadbord en je kan aan de slag. |
Klonen
Omdat het Arduino platform open source is zijn er veel klonen van te verkrijgen. Een aantal bekende klonen zijn:
![]() | Freeduino Freeduino is de verzamelnaam voor (alle) verschillende klonen die te vinden zijn. Op de website vind je schema's PCB ontwerpen om je eigen freeduino te (laten) maken. |
![]() | Roboduino DFRobot richt zich op robotics, en biedt dezelfde producten aan als de officiele Arduino producten, maar dan met de naam Roboduino. De producten zijn qua hardware identiek, alleen is de prijs over het algemeen lager. Ook heeft DfRobot een eigen Arduino variant, de Roboduino Romeo. Deze is identiek aan de Arduino Duemilanove, maar bevat op het bord ook een motorshield, extra knopen en aansluitingen voor servos. Verder biedt DfRobot een heel aantal shields aan. |
![]() | Seeduino Seeedstudio.com biedt een Arduino klonen aan met de naam Seeeduino. Er is een Diecimila kloon beschikbaar en een Mega kloon. Ook produceert seeedstudio een aantal shields voor Arduino. |
Software Windows
Dit is voor Windows. Mac:link Linux: linkDe software moet je downloaden van de arduino-site, of via deze directe link.
Je moet wel een Arduino-board, en een USB-kabel hebben om het te kunnen gebruiken.
Als je eenmaal de software hebt gedownload, moet je de drivers downloaden. Dat kan via deze link.
Daarna moet je het board aansluiten via de USB-kabel. Hij kan de driver niet vinden. Klik op 'nee, niet door Windows Update zoeken', en ga naar Apparaatbeheer. Je ziet hier een onbekend apparaat, klik erop, en zorg dat hij drivers gaat installeren. Klik op: 'Ik heb een installatiebron' en selcteer de map van de drivers. Dan gaat hij de map doorzoeken, en hij gaat de drivers als het goed is installeren. NB: Houd apparaatbeheer open!
Open Arduino. Daarvoor moet je eerst het gedownloade zip-bestand uitpakken, en in die map arduino aanklikken. Je kan dan van alles openen in: 'File>Examples>...>...
De volgende stap is natuurlijk een simpele code uploaden naar het board. We starten daarvoor de code: 'File>Examples>Digital>Blink' Je moet weten via welke COM-poort dat gaat. Om te weten welke poort: Kijk in apparaatbeheer onder Ports, en zoek naar USB Serial Port. Daarachter staat welke COM-poort het is.

Dit moet je daarna instellen in Arduino. Ga naar 'Tools>Serial Port' En selecteer de com-poort die in apparaatbeheer stond. Je moet ALTIJD compileren, als dat een positief resultaat geeft klik je op 'Upload to board'
Je wacht even, en als het goed is gaat een lichtje knipperen; 1 sec. aan, 1 sec. uit.
Daarna kan je op deze site extra commando's bekijken, maar die bespreek ik ook in Standaard Codes, en Geavanceerde codes.
Software MAC OS X
Deze guide is voor MAC OS X 10.3.9 of later.De software moet je downloaden van de arduino-site, of via deze directe link.
Je moet wel een Arduino-board, en een USB-kabel hebben om het te kunnen gebruiken.
Als je eenmaal de software hebt gedownload, moet je de drivers downloaden. Drivers: link
Arduino uitbreiden
Wil eens kijken welke mogelijkheden er allemaal zijn om je arduino van meer poorten te voorzien zonder gelijk een Arduino Mega te kopen voor de hoofdprijs. Gelukkig zijn er een aantal mogelijkheden, kant en klaar of gewoon componenten. Nu is dat laatste natuurlijk leuker om zelf iets in elkaar te zetten en is vaak ook nog goedkoper dan een kant en klaar product te kopen.Multiplexer en Demultiplexer CMOS
Dit kan bijvoorbeeld met een CMOS 4051, deze chip heeft 8 kanalen. Om zo een chip aan te sturen heb je 1 analoog nodig en 3 digitale pinnen om de juiste kanaal te selecteren. Als je er dus 1 aansluit offer je dus 4 pinnen op maar je krijgt er 8 voor terug. Maar je kan er meerder aan elkaar hangen. In de bron word een voorbeeld gegeven van negen 4051 chips, ze zijn daarmee instaat om met 1 analoog en 3 digitale pinnen 64 nieuw digitale/analoog I/O creëren. Dat geeft ze dus meer pinnen dan de arduino mega standaard heeft en kosten fractie van de extra kosten wat een Mega met zich meebrengt. En je hebt meer I/O dan een mega.

Bron: http://www.arduino.cc/playground/Learning/4051
Kosten per chip: +- 0.25 - 0.50 euro
I2C poort expanders
De arduino heeft een I2C bus, er kunnen maximaal 8 I2C chip met zelfde adres range worden aangesloten.
De PCF8574 bijvoorbeeld, dit is een 8bit poort expander en heeft 8 poorten. Je zou dus 8 van deze chips aan de analoog pin 4 en 5 kunnen hangen, dan offer je twee 10bit analoog pin op maar krijgt daar 64 nieuwe 8bit poorten voor terug. Kosten is vrij hoog vergeleken met de 4051, maar nog steeds goedkoper dan een arduino mega en in totaal heb je meer I/O dan de Mega.
Als je de PCF8574 en de PCF8574A combineert kan je als het goed is 8 PCF8574 en 8 PCF8574A tegelijk aansluit wat je 128 nieuwe poorten geeft.

Bron: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1233786313/2
Kosten per chip: +- 2.25 euro
EZ-Expander Shield
Deze kan je kopen als kit of kant en klaar product. Voegt 16 nieuwe digitale pins toe, je moet daarvoor 3 digitale pins opofferen, je wint dus 13 digitale pinnen. Het werkt via twee shift registers.

Bron: http://nootropicdesign.com/ez-expander/
kosten kit: $12.95
Kant en klaar: $17.95
Externe Hardware
Je moet om echte dingen te kunnen doen met het Arduino-board, ook extra 'hardware' hebben. Bijv. Lampjes, andere 'boards'. Die ga ik hier in dit gedeelte bespreken.Lampjes zijn het belangrijkst, om meerdere lampjes te kunnen laten branden. Je hebt ook aan-/uit-knopjes, en van alles. Je kan ze na een beetje goed zoeken wel ergens kopen.
Standaard codes
Je hebt van alles om uit te breiden, maar standaard dingen zijn knipperende lampjes, enz.De code voor knipperen lampjes is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
} |
Waarin ledPin een lampje is op aansluiting 13,
pinMode is de status van een [bijv. ledPin] Bijv. OUTPUT.
digitalWrite is een commando, voor (tussen haakjes welk ding [bijv. ledPin], en de status [bijv. bij een lamp HIGH (aan)])
delay is een wachttijd voordat het volgende commando ingaat, die je bepaald in 1000ste van een seconde. tussen haakjes. Je moet de lampjes zo neerzetten:

Je kan met meerdere lampjes het volgende doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| int ledPin = 13;
int ledPin2 = 12;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin2, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin2, LOW);
delay(1000);
} |
Hierin geldt hetzelfde als voor 1 lamp, maar je moet ALTIJD bij het int ... stuk een andere naam geven. Bij elk onderdeel wat je hebt geregistreerd in het eerste gedeelte, moet je ook zeggen wat het is m.b.v 'pinMode([naam],INPUT/OUTPUT)' Je kan zien dat in het loop-stuk ook ledPin2 wordt gebruikt.
Als je deze code upload naar het board, zou het zo moeten gaan: lamp 1 gaat aan. 1sec. wachten, lamp 2 gaat aan, na 1sec. lamp 1 gaat uit, na 1sec. lamp 2 gaat uit, na 1 sec. herhaalt dit zich.
Je moet hiervoor een aantal extra onderdelen hebben! foto met veel lampjes: ( je kan zien hoe het moet worden aangesloten, kleur draad maakt niet uit. DE KLEUR VAN DE WEERSTANDEN MOETEN WEL ZO ZIJN)

Geavanceerde codes
Je kan ook nog knopjes doen. Dat kan met deze code:code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| const int buttonPin = 2;
const int ledPin = 13;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
} |
Hierin is buttonPin de knop. Het lampje hoef je niet te doen.
buttonState de status van de knop. die is standaard 0, wat je bovenaan ziet, in het midden zie je dat je het commando geeft dat hij digitalRead moet doen (hij moet op de ButtonPin (knop) lezen of hij aan of uit is.
als de buttonstate == HIGH is, (dus aan)doe ie wat eronder staat. als de buttonstate LOW is, dan moet ie het andere doen. Hoe moet je dat neerzetten? zo:

Veel meer dingen kan je gewoon vinden op de speciale arduino-site.
Codes Combineren
Je kan de codes uit Standaard Codes en Geavanceerde codes Ook combineren. Hiervoor geen plaatje, (de manier moet je dit keer zelf uitzoekencode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| const int ledPin = 12;
const int ledPin2 = 11;
const int buttonPin = 10;
int buttonState = 0;
void setup() {
pinMode (ledPin, OUTPUT);
pinMode (ledPin2, OUTPUT);
pinMode (buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin2, HIGH);
delay(1000);
digitalWrite(ledPin2, LOW);
}
else (buttonState == LOW); {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
digitalWrite(ledPin2, HIGH);
delay(500);
digitalWrite(ledPin2, LOW);
}
} |
Als het goed is, gebeurt hier: als je de knop indrukt (en dan ook blijft doen) gaat ie: lamp 1 aan, 1sec, lamp 1 uit, 1sec, lamp 2 aan, 1sec, lamp 2 uit. Als je de knop loslaat gaat ie dit doen hetzelfde doen, maar dan ipv 1sec; 0.5sec.
Links
Een paar links naar handige sites. Via DM kan je er meer sturen.Versie 2; door F.West98F.West98 wijzigde dit bericht 11-05-2010 16:12 (138%)
Intel Core i7 2600K | 8GB RAM | Samsung Spinpoint 2TB | EVGA P67 FTW | Club3D HD6790 | Crucial m4 128GB - Alles



















