les 14(sequencer)

Alleen lezen

Moderator: pe1br

Post Reply
pe1br
Posts: 66
Joined: Thu Apr 14, 2016 3:37 am

les 14(sequencer)

Post by pe1br »

Een Sequencer wordt in amateur kringen vaak gebruikt om zender, eindtrap, coax relais en voorversterker op een veilige manier te schakelen.
Hierbij moet natuurlijk voorkomen worden dat de zender en de eindtrap ingeschakeld is voor dat het coax relais omgeschakeld is en de voorversterker is afgeschakeld.

De volgorde die we hier aanhouden is:
Naar TX:
* Voorversterker uit.
* Coax relais naar TX.
* Eindtrap aan.
* Zender aan.

Naar RX:
Zender uit.
Eindtrap uit.
coax relay naar RX.
Voorversterker aan.

De leds in deze schakeling kun je eenvoudig vervangen voor relais zodat je alles kunt schakelen.
LED 1 = voorversterker.
LED 2 = coax relais. (uit bij RX).
LED 3 = Eindtrap.
LED 4 = zender.

Les14-1:

Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:


Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:

Code: Select all

int led1 = 4;    //pin voor led1
int led2 = 5;    //pin voor led2
int led3 = 6;    //pin voor led3
int led4 = 7;    //pin voor led4

int switch1 = 11; //pin voor switch1
int switch2 = 12;  //pin voor switch2

int sequencertime = 1000; //De tijd tussen het schakelen van de uitgangen
int sequencerstate = 0;   //de status van de sequencer
long previousMillis = 0;  //container om de waarde van de timer op te slaan

void readswitches() {                 //functie om de schakelaars te lezen
  if (digitalRead(switch1) == LOW) {  //als schakelaar 1 ingedrukt wordt voer onderstaande uit
    sequencerstate = 1;               //set de status van de sequencer op 1
    previousMillis = millis();        //vul de container met de huidige tijd zodat we hier later mee kunnen vergelijken
  }
  if (digitalRead(switch2) == LOW) {  //als schakelaar 2 ingedrukt wordt voer onderstaande uit
    sequencerstate = 0;               //set de status van de sequencer op 0
    previousMillis = millis();        //vul de container met de huidige tijd zodat we hier later mee kunnen vergelijken
  }
}

void sequencer() {                                                                  //functie voor de sequencer
  if (sequencerstate == 0){                                                         //als de status van de sequencer 0 is voer onderstaande uit
    digitalWrite(led4, LOW);                                                        //zet led 4 uit
    if (previousMillis + (sequencertime *1) < millis()) digitalWrite(led3, LOW);    //als de tijd in de eerder opgeslagen container + de sequencertijd x1 kleiner is dan de huidige tijd zet led 3 uit
    if (previousMillis + (sequencertime *2) < millis()) digitalWrite(led2, LOW);    //als de tijd in de eerder opgeslagen container + de sequencertijd x2 kleiner is dan de huidige tijd zet led 2 uit
    if (previousMillis + (sequencertime *3) < millis()) digitalWrite(led1, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x3 kleiner is dan de huidige tijd zet led 1 uit
  }
  if (sequencerstate == 1){                                                         //als de status van de sequencer 1 is voer onderstaande uit
    digitalWrite(led1, LOW);                                                        //zet led 1 uit
    if (previousMillis + (sequencertime *1) < millis()) digitalWrite(led2, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x1 kleiner is dan de huidige tijd zet led 2 aan
    if (previousMillis + (sequencertime *2) < millis()) digitalWrite(led3, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x2 kleiner is dan de huidige tijd zet led 3 aan
    if (previousMillis + (sequencertime *3) < millis()) digitalWrite(led4, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x3 kleiner is dan de huidige tijd zet led 4 aan
  }
}

void setup() {
  pinMode (led1, OUTPUT);          //set led1 (pin 4) als uitgang
  pinMode (led2, OUTPUT);          //set led2 (pin 5) als uitgang
  pinMode (led3, OUTPUT);          //set led3 (pin 6) als uitgang
  pinMode (led4, OUTPUT);          //set led4 (pin 7) als uitgang
  pinMode (switch1, INPUT_PULLUP); //set switch1 (pin 11) als ingang
  pinMode (switch2, INPUT_PULLUP); //set switch1 (pin 11) als ingang
}

void loop() {
  readswitches(); //voer de functie readswitches uit
  sequencer();    //voer de functie sequencer uit
}
We kunnen hetzelfde natuurlijk ook maken met 1 button:
Les14-2:

Zorg er voor dat je alle voedingsspanningen los koppelt (usb niet aangesloten op de pc en geen power adapter aangesloten op de voedingsplug).
sluit de Arduino aan volgens onderstaand schema:


Start het Arduino programma en sluit de USB kabel aan.
Typ de volgende code over of kopieer deze naar de arduino ide:

Code: Select all

int led1 = 4;    //pin voor led1
int led2 = 5;    //pin voor led2
int led3 = 6;    //pin voor led3
int led4 = 7;    //pin voor led4

int switch1 = 12; //pin voor switch1

int sequencertime = 1000; //De tijd tussen het schakelen van de uitgangen
int sequencerstate = 0;   //de status van de sequencer
long previousMillis = 0;  //container om de waarde van de timer op te slaan
int switchstate = 0;      //container voor de status van de switch
int switchcounter = 0;

void readswitches() {                                 //functie om de schakelaars te lezen
  if (digitalRead(switch1) == LOW) switchcounter ++;  //als de button ingedrukt is start een teller
  if (switchcounter == 2) {                           //als de button teller 2 is voer onderstaande uit
    if (switchstate == 0) {                           //als de status van de schakelaar 0 is voer onderstaande uit
      sequencerstate = 1;                             //set de status van de sequencer op 0
      previousMillis = millis();                      //vul de container met de huidige tijd zodat we hier later mee kunnen vergelijken
      switchstate = 1;                                //zet de status van de schakelaar op 1
      delay(200);                                       //wacht 200 ms
    }
    else if (switchstate == 1) {                      //als bovenstaande if statement niet waar is en de status van de schakelaar is 1
      sequencerstate = 0;                             //set de status van de sequencer op 1
      previousMillis = millis();                      //vul de container met de huidige tijd zodat we hier later mee kunnen vergelijken
      switchstate = 0;                                //zet de status van de schakelaar op 0
      delay(200);                                       //wacht 200 ms
    }
  }
  if (digitalRead(switch1) == HIGH) switchcounter = 0; //Als de schakelaar losgelaten is zet de teller weer naar 0 
}

void sequencer() {                                                                  //functie voor de sequencer
  if (sequencerstate == 0){                                                         //als de status van de sequencer 0 is voer onderstaande uit
    digitalWrite(led4, LOW);                                                        //zet led 4 uit
    if (previousMillis + (sequencertime *1) < millis()) digitalWrite(led3, LOW);    //als de tijd in de eerder opgeslagen container + de sequencertijd x1 kleiner is dan de huidige tijd zet led 3 uit
    if (previousMillis + (sequencertime *2) < millis()) digitalWrite(led2, LOW);    //als de tijd in de eerder opgeslagen container + de sequencertijd x2 kleiner is dan de huidige tijd zet led 2 uit
    if (previousMillis + (sequencertime *3) < millis()) digitalWrite(led1, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x3 kleiner is dan de huidige tijd zet led 1 uit
  }
  if (sequencerstate == 1){                                                         //als de status van de sequencer 1 is voer onderstaande uit
    digitalWrite(led1, LOW);                                                        //zet led 1 uit
    if (previousMillis + (sequencertime *1) < millis()) digitalWrite(led2, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x1 kleiner is dan de huidige tijd zet led 2 aan
    if (previousMillis + (sequencertime *2) < millis()) digitalWrite(led3, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x2 kleiner is dan de huidige tijd zet led 3 aan
    if (previousMillis + (sequencertime *3) < millis()) digitalWrite(led4, HIGH);   //als de tijd in de eerder opgeslagen container + de sequencertijd x3 kleiner is dan de huidige tijd zet led 4 aan
  }
}

void setup() {
  pinMode (led1, OUTPUT);          //set led1 (pin 4) als uitgang
  pinMode (led2, OUTPUT);          //set led2 (pin 5) als uitgang
  pinMode (led3, OUTPUT);          //set led3 (pin 6) als uitgang
  pinMode (led4, OUTPUT);          //set led4 (pin 7) als uitgang
  pinMode (switch1, INPUT_PULLUP); //set switch1 (pin 12) als ingang
}

void loop() {
  readswitches(); //voer de functie readswitches uit
  sequencer();    //voer de functie sequencer uit
}
Attachments
les14-2_bb.jpg
(748.75 KiB) Not downloaded yet
les14-1_bb.jpg
(761.56 KiB) Not downloaded yet
Post Reply