Arduino Projekten

Thu 18-Apr-24
17:51:35


Experimenteer Huis

Datum: Sat 01 February 2014
Samenvatting: Een behuizing met potmeters en led's om eens lekker te experimenteren zonder het Bread-board vol te hebben met invoer- en uitlees-electronica.


Op een gegeven moment ontstaat er de behoefte om eens lekker te kunnen experimenteren, met meer onderdelen dan het Arduino Introduktie-pakket bevat. En dat moment kwam bij mij al vrij gauw. Bijvoorbeeld:

  • In het introduktie-pakket zit maar 1 potmeter en nog wel van het type instelbaar. Bij een experiment die meer dan 1 analoge ingang nodig heeft, of meer dan 1 knopje om eens lekker aan te draaien, zijn er al gauw meer van deze instel potmeters nodig ... of er moet iets komen met meer (echte) potmeters. Dit was bij mij bij het experiment met de RGB-Led. Ik wilde spelen met de kleurtjes, zonder dat ik alles in het programma hoefde te proppen. De Arduino kent 6 analoge ingangen, dus moeten er 6 potmeters komen. [CIRC-08] [CIRC-12]
  • Bij het experiment met de 8 Leds en de schuifregister (74HC595) zie ik meer potentie dan alleen maar tijdelijk een byte op Leds zichtbaar te maken. Ik wilde iets definitiever en iets met 16 Led's (= 2 bytes = 4 nibbles). En het Bread-board moet vrij blijven. [CIRC-05]
  • Het aantal drukknoppen en schakelaars wil ik nog uitbreiden ... maar dit is voor in de toekomst. [CIRC-07]
  • Nog niet in de planning, maar wel als idee, om het piezo-element in de uitbreiding mee te nemen. Iets voor in de toekomst ... [CIRC-06]
  • De uitbreiding moet hetzelfde systeem gebruiken als de Arduino. De experimenteer-draadjes moeten gebruikt worden, dus dat wordt een uitbreiding met printpennen en print-connectors.

Een Aluminium bekapping vormt de basis voor mijn uitbreidingen en de gaten voor de potmeters en Led's waren er gauw in geboord. De onderdelen zijn gekocht, het bouwen kan beginnen.

Eerst zijn de 6 potmeters (van elk 10kE) gemonteerd en gesoldeerd aan een lintkabel (van die grijze, die vroeger ook voor MFM en IDE harddisks zijn gebruikt). Alle +5V aan de ene kant, de Gnd aan de andere kant van alle potmeters.

De 16 Led's, de RGB-Led en de 10mm Led zijn in de behuizing gelijmd (op de foto is deze 2-componentenlijm aan het uitharden). De schakeling voor de twee schuifregisters (met weerstanden) zijn op een stuk experimenteer-print gesoldeerd. Alles is eenvoudig aan te sluiten met de print-connectors, gecombineerd met die voor de potmeters. Er is 1 Led voor de potmeters en 1 Led voor de schuifregisters - er moet tenslotte controle wezen of iets wel aangesloten is.

Na het bedraden van de 16 Led's, is de print voorzien van meer connectors, namelijk voor de RGB-Led en de 10mmLed. De weerstanden voor de RGB-Led zijn op een klein stukje Vera-board gesoldeerd. De weerstand voor de 10mm Led zit in de bedrading (boven potmeter 5). Verder zijn alle draden voor de Led's en potmeters op de print gesoldeerd. Ook aansluit-stickers zijn in de behuizing geplakt. Documentatie van de aansluitingen is belangrijk. Tenslotte is de voorzijde van tekst voorzien.

Hoewel de losse aansluitingen al gecontroleerd zijn op hun werking, is het nu tijd geworden om het geheel te testen. Idee-en voor de RGB-Led met de potmeters kunnen nu worden uitgewerkt.

Al vroeg heb ik iets ontwikkeld om met kleuren op de RGB-Led te spelen. Verschillende kleuren worden automatisch afgewisseld, gebruik makend van de PWM-helderheids regeling van de Arduino. De 10mm Led toont de hidige helderheid, die geregeld wordt (RGB-onafhankelijk) en de rechtse 8 Led's ($7 .. $0) tonen de binaire helderheid waarde, gebruik makend van de losse schuifregister van de Arduino. Nu de behuizing twee van deze schuifregisters heeft, toont de linkerhelft ($F .. $8) een spiegelbeeld van deze helderheid. De gebruikte functie heeft immers een optie MSBFIRST en LSBFIRST. De foto's laten deze spiegeling ook zien. De foto's tonen ook hoe (overzichtelijk) leeg het bread-board nu is, klaar om allerlei andere experimenten op op te bouwen.

Enkele opmerkingen over het programma:

  • Het heeft nog sporen van het allereerste Arduino programma [CIRC-01] Er staat nog "Led Blink" in het commentaar.
  • Er wordt nog iets over Pin 13 (en de standaard Led op de Arduino) genoemd in het commentaar.
  • Het heeft ook sporen van uitgebreidere kleuren-spelerij. Constanten, zoals de 3 achter de kleuren (BLUE3 en zo), tonen aan dat er een Kleur1 en een Kleur2 geweest zijn, toen ik het PWM-verloop nog niet volledig heb gehad en meer kleuren in het programma heb staan.

Het programma op zich bevat geen schokkende truken:

  • Standaard Uitgang-pin definities.
  • Wat standaard functies om de uitgangen aan te sturen.
  • Enkele For-loops om de helderheid te verhogen (Bright) en te verlagen (Dim).
  • Het meeste uitzoekwerk is de opbouw van de kleuren-constanten en kleuren-array geweest. Hoe wilt C++ hebben wat ik bouwen wil.

De Potmeter-regeling voor de RGB-kleurvermening zal eenvoudiger wezen. Lees de analoge ingang in en stuur de waarde rechtstreeks naar de PWM-uitgang. Of wellicht iets van kleurenverloop herhaling (van de linker 3 potmeters (RGB1) naar de rechter 3 potmeters (RGB2)).


Broncode: [1: RGB en Schuifregisters]

1: De broncode van RGB en Schuifregisters

(Sat 14 December 2013) De source code van deze RGB en Schuifregister Led's. Er zijn nog sporen zichtbaar van het oorspronkelijke programma van het Arduino Blink Experiment [CIRC-01]

Deze broncode heeft 102 regels met programma-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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* Blink
 Turns on an LED on for one second, then off for one second, repeatedly.

 This example code is in the public domain.
 */

const int BLACK   [] = {  0,  0,  0};
const int BLUE3   [] = {  0,  0,255};
const int CYAN3   [] = {  0,255,255};
const int GREEN3  [] = {  0,255,  0};
const int YELLOW3 [] = {255,255,  0};
const int WHITE3  [] = {255,255,255};
const int MAGENTA3[] = {255,  0,255};
const int RED3    [] = {255,  0,  0};

const int* COLORS[] = {BLACK   ,
                       BLUE3   ,
                       CYAN3   ,
                       GREEN3  ,
                       YELLOW3 ,
                       WHITE3  ,
                       MAGENTA3,
                       RED3    };

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
// Pin Definitions
int Data   =  2;   // ShiftReg
int Clock  =  3;   // ShiftReg
int Latch  =  4;   // ShiftReg
int Outen  =  5;   // ShiftReg
int ledR   =  9;   // Led Red
int ledG   = 10;   // Led Green
int ledB   = 11;   // Led Blue
int ledPin =  6;   // Led BigOne

int delaystap  =  50;
int brightmax  = 255;
int brightstep =   1;

// the setup routine runs once when you press reset:
void setup()
{ // initialize the digital pin as an output.
  pinMode(Data , OUTPUT);
  pinMode(Clock, OUTPUT);
  pinMode(Latch, OUTPUT);
  pinMode(Outen, OUTPUT);

  pinMode(ledPin, OUTPUT);
  analogWrite(ledR,255);
  pinMode(ledR  , OUTPUT);
  analogWrite(ledG,255);
  pinMode(ledG  , OUTPUT);
  analogWrite(ledB,255);
  pinMode(ledB  , OUTPUT);
}

// the loop routine runs over and over again forever:
void loop()
{ analogWrite(Outen,240);
  // 000
  Bright(ledR);    // 001
  Bright(ledG);    // 011
  Dim   (ledR);    // 010
  Bright(ledB);    // 110
  Bright(ledR);    // 111
  Dim   (ledG);    // 101
  Dim   (ledR);    // 100
  Dim   (ledB);    // 000
}

void setColor (const int* color)
{ analogWrite(ledR, 255-color[0]);
  analogWrite(ledG, 255-color[1]);
  analogWrite(ledB, 255-color[2]);
}

void Bright(int ledColor)
{ for (int qq=brightmax; qq>=0; qq=qq-brightstep)
  { UpdateLEDs(qq);
    analogWrite(Outen,qq);
    analogWrite(ledColor,qq);
    analogWrite(ledPin  ,255-qq);
    delay(delaystap);
  }
}

void Dim(int ledColor)
{
  for (int qq=0; qq<=brightmax; qq=qq+brightstep)
  { UpdateLEDs(qq);
    analogWrite(Outen,qq);
    analogWrite(ledColor,qq);
    analogWrite(ledPin  ,255-qq);
    delay(delaystap);
  }
}

void UpdateLEDs(int value)
{ digitalWrite(Latch, LOW);
  shiftOut(Data, Clock, LSBFIRST, value);
  shiftOut(Data, Clock, MSBFIRST, value);
  digitalWrite(Latch, HIGH);


Broncode: [1: RGB en Schuifregisters]

Afbeeldingen

expercase_01.jpg
1/12: expercase_01.jpg.
expercase_02.jpg
2/12: expercase_02.jpg.
expercase_03.jpg
3/12: expercase_03.jpg.
expercase_04.jpg
4/12: expercase_04.jpg.
expercase_05.jpg
5/12: expercase_05.jpg.
expercase_06.jpg
6/12: expercase_06.jpg.
expercase_07.jpg
7/12: expercase_07.jpg.
expercase_08.jpg
8/12: expercase_08.jpg.
expercase_09.jpg
9/12: expercase_09.jpg.
expercase_10.jpg
10/12: expercase_10.jpg.
expercase_11.jpg
11/12: expercase_11.jpg.
expercase_12.jpg
12/12: expercase_12.jpg.