Styra High Power kretsar med Arduino och Darlington ULN2803 (1 / 1 steg)
Steg 1: Exempel: kör en stor 7 segment display
Normal storlek 7-segment visar består av 7 rektangulära lysdioder placerade så att de kan visa siffrorna 0-9. Ett segment av en normal 7-segment display-belysning är likvärdig med en LED-belysning, kräver det om 3V och 20mA; Detta sker enkelt genom Arduino ensam. Detta jätte sju segment är lite annorlunda eftersom varje segment består av 4 parallella uppsättningar av 15 röda lysdioder trådarna i serien (fig 2). Du aktiverar lysdioderna genom spänningen över segmentet bör vara 15 * (framåt spänning på varje LED) och strömmen genom varje segment är 4 * (typiskt driftström av varje LED). Detta kommer ut om 31.5V(15*2.1V) och 80mA(4*20mA) per segment, tydligt Arduino kommer inte att kunna hantera detta på egen hand.
För att styra denna display jag ihop gemensamma anoden till 36V och sedan jordad selektivt segment av skärmen som jag ville lysa upp.
Koden nedan räknar igenom siffrorna 0-9 på 7-segment display, tickar från ett nummer till nästa en gång per sekund. Den använder en for-loop att öka variabeln "i" från 0-9, och sedan använder switch/fall uttalanden aktivera lämpliga segment (genom att ange motsvarande Arduino pin hög.
/ * 7 seg skärm med ULN2803
av RU4Realz
Juli 2012
Arduino pin-anslutningar (via ULN2803):
Arduino (digital) stift 0 7 seg stift f
1 g
2 en
3 b
4 c
5 d
6 e
*/
void setup() {
för (byte en = 0; en < 8; a ++) {
pinMode (a, utgång); //set digital stift 0 - 6 som resultat
}
}
void loop() {
för (byte jag = 0; jag < 10; i ++) {//for 0 -9
Switch(i) {
fall 0: / / om jag == 0, slå på lämpliga lysdioder
PORTD & = 128; //turn digital 0-6 off
digitalWrite(0,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
bryta;
fall 1: / / om jag == 1
PORTD & = 128; //turn digital 0-6 off
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
bryta;
fall 2: / / om jag == 2
PORTD & = 128; //turn digital 0-6 off
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
bryta;
fall 3:
PORTD & = 128;
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
bryta;
fall 4:
PORTD & = 128; //turn digital 0-7 off
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
bryta;
fall 5:
PORTD & = 128; //turn digital 0-7 off
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
bryta;
fall 6:
PORTD & = 128; //turn digital 0-7 off
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
bryta;
fall 7:
PORTD & = 128; //turn digital 0-7 off
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
bryta;
mål 8:
PORTD & = 128; //turn digital 0-7 off
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
bryta;
mål 9:
PORTD & = 128; //turn digital 0-7 off
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
bryta;
}
fördröjning (1000); //wait 1 SEK
}
}