Home » februarie 2012
8 LEDURI COMANDATE DIGITAL DE UN POTENTIOMETRU ANALOGIC

Acest proiect necesita urmatoarele componente electronice:
-placa arduino
-un potentiometru de 10 Kohmi;
-8 rezistente de 200-300 ohmi;
-8 leduri;
Cei doi pini marginali ai potentiometrului se conecteaza unul 5V respectiv la GND.Cel de-al treilea pin (cel din mijloc) se conecteaza la intrarea analogica A0;

Cele 8 leduri se conecteaza pe rand astfel: terminalul negativ(catodul) se leaga printr-o rezistenta  la GND iar celalalt terminal(anodul +) se leaga la unul din urmatorii pini digitali:3,4,5,6,7,8,9,10.
Masa(GND) corespunde  pinului GND al placutei arduino.
Functia folosita pentru a citi valoarea rezistentei potentiometrui este: analogRead. Sintaxa acestei functii este urmatoarea: analogRead(pin).
Citirea valorii de tensiune furnizata de potentiometru se face serial si prin functiaurmatoare:
Serial.begin(9600),aceasta realizand o conexiune seriala 
intre PC si ARDUINO,conexiune care transmite  9600 biti/sec intre cele 2 termnale.






CODUL SURSA:


//POTENTIOMETRU-8LEDURI
int led3Pin=3;
int led4Pin=4;
int led5Pin=5;
int led6Pin=6;
int led7Pin=7;
int led8Pin=8;
int led9Pin=9;
int led10Pin=10;
void setup(){
  pinMode(led3Pin,OUTPUT);
  pinMode(led4Pin,OUTPUT);
  pinMode(led5Pin,OUTPUT);
  pinMode(led6Pin,OUTPUT);
  pinMode(led7Pin,OUTPUT);
  pinMode(led8Pin,OUTPUT);
  pinMode(led9Pin,OUTPUT);
  pinMode(led10Pin,OUTPUT);
  Serial.begin(9600);

}
void loop(){
int sensorValue=analogRead(A0);
Serial.println(sensorValue);
if(analogRead(A0)>100){
                    digitalWrite(led3Pin,HIGH);
                  }
                  else if(analogRead(A0)<100){digitalWrite(led3Pin,LOW);}
if(analogRead(A0)>200){
                    digitalWrite(led4Pin,HIGH);
                  }
                  else if(analogRead(A0)<200){digitalWrite(led4Pin,LOW);}
 if(analogRead(A0)>300){
                    digitalWrite(led5Pin,HIGH);
                  }
                  else if(analogRead(A0)<3100){digitalWrite(led5Pin,LOW);}   
if(analogRead(A0)>500){
                    digitalWrite(led6Pin,HIGH);
                  }
                  else if(analogRead(A0)<500){digitalWrite(led6Pin,LOW);}  
if(analogRead(A0)>700){
                    digitalWrite(led7Pin,HIGH);
                  }
                  else if(analogRead(A0)<700){digitalWrite(led7Pin,LOW);} 
if(analogRead(A0)>800){
                    digitalWrite(led8Pin,HIGH);
                  }
                  else if(analogRead(A0)<800){digitalWrite(led8Pin,LOW);}  
if(analogRead(A0)>900){
                    digitalWrite(led9Pin,HIGH);
                  }
                  else if(analogRead(A0)<900){digitalWrite(led9Pin,LOW);} 
if(analogRead(A0)>1000){
                    digitalWrite(led10Pin,HIGH);
                  }
                  else if(analogRead(A0)<1000){digitalWrite(led10Pin,LOW);}        

}



                                                 















 

NUMARATOR BINAR PE 4 BITI

            
        Din aplicatia precedenta,cea cu semaforl rutier, mi-a venit ideea sa fac un numarator binar pe 4 biti, conceptul fiind acelasi.
        In primul rand,fiind un numarator binar pe 4 biti,sunt necesare 4 leduri pentru a indica toate numerele binare pe 4 biti adica numerele de la 0 la 15(2^4 numere).
Printr-o rezistenta de 270 ohmi mai conectam un led de la pinul digital 6 la masa,schema electronica ramanand aceeasi cu cea a semaforului.


CODUL SURSA:

    //program NUMARATOR BINAR
int redPin=2;
int yellowPin=3;
int greenPin=4;
int bluePin=6;
int buttonPin=5;
int state=0;
void setup(){
pinMode(redPin,OUTPUT);
pinMode(yellowPin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(buttonPin,INPUT);
pinMode(bluePin,OUTPUT);
              }
void loop(){ if(digitalRead(buttonPin)){
  


                           if(state==0){
                             oscilare(LOW,LOW,LOW,HIGH);
                                     state=1;  
                                     }   
                            else if(state==1){
                                              oscilare(LOW,LOW,HIGH,LOW);
                                              state=2;
                                              }
                          else if(state==2){
                                            oscilare(LOW,LOW,HIGH,HIGH);
                                            state=3;
                                            }
                         else if(state==3){
                                           oscilare(LOW,HIGH,LOW,LOW);
                                           state=4;
                                            }
                         else if(state==4){
                                          oscilare(LOW,HIGH,LOW,HIGH);
                                          state=5;
                                          }
                         else if(state==5){
                                           oscilare(LOW,HIGH,HIGH,LOW);
                                           state=6;
                                           } 
                         else if(state==6){
                                            oscilare(LOW,HIGH,HIGH,HIGH);
                                            state=7;
                                           } 
                          else if(state==7){
                                            oscilare(HIGH,LOW,LOW,LOW);
                                            state=8;
                                            } 
                             else if(state==8){
                                               oscilare(HIGH,LOW,LOW,HIGH);
                                               state=9;
                                               }                                       
                               else if(state==9){
                                                 oscilare(HIGH,LOW,HIGH,LOW);
                                                 state=10;
                                                  }
                               else if(state==10){
                                                  oscilare(HIGH,LOW,HIGH,HIGH);
                                                    state=11;
                                                   }
                               else if(state==11){
                                                   oscilare(HIGH,HIGH,LOW,LOW);
                                                   state=12;
                                                    }
                                else if(state==12){
                                                   oscilare(HIGH,HIGH,LOW,HIGH);
                                                   state=13;
                                                   }
                               else if(state==13){
                                                  oscilare(HIGH,HIGH,HIGH,HIGH);
                                                   state=14;
                                                  }
                                else if(state==14){
                                                 oscilare(LOW,LOW,LOW,LOW);
                                                  state=0;                   
                                                  }
delay(500);}
}


void oscilare(int blue,int red,int yellow,int green){
digitalWrite(bluePin,blue);
digitalWrite(redPin,red);
digitalWrite(yellowPin,yellow);
digitalWrite(greenPin,green);
}  






SEMNALIZARE SEMAFOR

Descrierea schemei electronice:


-terminalele pozitive ale celor 3 leduri(anodul) se conecteaza pe rand la pinii digitali 2 ,3 ,4 iar terminalele negative(catodul) se leaga printr-o rezistenta de 270 de ohmi la GND.
-un terminal al intrerupatorului se conecteaza la pinul analogic ''5v'' iar celalalt terminal se conecteaza printr-o rezistenta de 100kohmi la GND.


Vom seta pinii placutei arduino astfel:


-pinii 2,3,4 digitali-ca iesiri;
-pinul 5 digital(care defineste starea intrerupatorului) ca pin de intrare.





CODUL SURSA(sketch-ul):


//program SEMAFOR
int redPin=2;
int yellowPin=3;
int greenPin=4;
int buttonPin=5;
int state=0;
void setup(){
pinMode(redPin,OUTPUT);
pinMode(yellowPin,OUTPUT);
pinMode(greenPin,OUTPUT);
pinMode(buttonPin,INPUT);
              }
void loop(){
if(digitalRead(buttonPin)){
                           if(state==0){oscilare(HIGH,LOW,LOW);
                                     state=1;  
                                     }   
                            else if(state==1){
                                              oscilare(HIGH,HIGH,LOW);
                                              state=2;
                                              }
                          else if(state==2){
                                            oscilare(LOW,LOW,HIGH);
                                            state=3;
                                            }
                         else if(state==3){
                                           oscilare(LOW,HIGH,HIGH);
                                           state=0;
                                           }                               
                       
                         
delay(1000);}
}


void oscilare(int red,int yellow,int green){
digitalWrite(redPin,red);
digitalWrite(yellowPin,yellow);
digitalWrite(greenPin,green);
}

REALIZEAZA O MELODIE CU ARDUINO UNO

Configuratia hardware:

-printr-o rezistenta de de 100 ohmi se conecteaza firul rosu(+) al difuzorului  la pinul 8 (digital) al placutei arduino;
-firul negru se leaga la masa. 





Pentru a genera note muzicale, kitul Arduino necesita utlizarea functiei " tone() " .
Sintaxa functiei tone() este urmatoarea:

tone(pin, frecveta)
tone(pin, frecventa, durata)
Semnificatia parametrilor functiei:
-pin: pinul de iesire care va genera notele muzicale;
-frequency: frecventa notelor in hertzi-este o variabila de tip unsigned int
-duration: durata notei in milisecunde-este o variabila de tip unsigned long

COUDUL SURSA:

#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
int melody[] = {
  NOTE_F3, NOTE_G3,NOTE_A3, NOTE_A3, NOTE_G3, NOTE_F3, NOTE_G3,NOTE_A3,NOTE_F3,NOTE_C3,
NOTE_F3,NOTE_G3,NOTE_A3,NOTE_A3,NOTE_G3,NOTE_F3,NOTE_G3,NOTE_A3,NOTE_F3};

int noteDurations[] = {
  3,8,4,4,8,8,8,8,4,4,3,8,4,4,8,8,8,8,2 };

void setup() {
  
}

void loop() {
   for (int thisNote = 0; thisNote < 19; thisNote++) {
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    noTone(8);  
  }
  delay(2000);

}