Switch to full style
Post a reply

Παρουσίαση αρχής λειτουργίας του project

Fri May 11, 2012 11:21 am

Tο project αυτο περιλαμβανει ενα ψηφιακο ρολοι φτιαγμενο εξ ολοκληρου απο κωδικα,χωρις επιπροσθετα chip,το οποιο θα περιλαμβανει ενα αναλογικο αισθητηρα θερμοκρασιας (http://www.citistore.gr/lm335z.html) και ενα ψηφιακο αισθητηρα υπερηχων (http://www.citistore.gr/hc-sr04-ranging-detector.html) και θα λειτουργει παραλληλα και ως ξυπνητηρι.Με την βοηθεια του αισθητηρα θερμοκρασιας θα τυπωνεται στην lcd οθονη (http://www.citistore.gr/lcd-16x2-hd44780-5v.html) η θερμοκρασια περιβαλλοντος σε βαθμους Κελσιου η τιμη της οποιας θα ανανεωνεται μια φορα ανα λεπτο.Ο αισθητηρας υπερηχων καλειται να ενεργοποιει το backlight της lcd οποτε καποιος πλησιαζει το ρολοι σε αποσταση μικροτερη των 50cm,η χρηση του αισθητηρα αυτου ειναι καθαρα για οπτικους λογους αλλα και για να απενεργοποιει το ξυπνητηρι στην ιδια αποσταση οταν αυτο χτυπαει.Η ρυθμιση της ωρας και του ξυπνητηριου επιτυγχανεται με την βοηθεια 2 hardware interrupts τα οποια θα γινονται απο 2 διακοπτες (http://www.citistore.gr/tact-switch-6x6 ... -2pin.html).Το ξυπνητηρι θα ακουγεται απο ενα buzzer ηχειο.O κωδικας μου ειναι ο παρακατω και αυριο περιμενω και τα υλικα μηπως και προλαβω μεχρι πεμπτη να το χω ετοιμο.
Spoiler :
Code:
    #include <LiquidCrystal.h>
    volatile int m=0,h=0;
    LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
    int pingtrig=8,pingecho=9,i=0,j=0,k=0,ia=0,ja=0;
    long duration,cm;

    void setup() {
      lcd.begin(16, 2);
      pinMode(2,INPUT);
      pinMode(pingtrig,OUTPUT);
      pinMode(pingecho,INPUT);
      pinMode(3,INPUT);
      attachInterrupt(0,hours,RISING);
      attachInterrupt(1,minutes,RISING);
      pinMode(10,OUTPUT);
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
      digitalWrite(10,LOW);}

    void loop(){
      while(i<24){
        while(j<60){
          while(k<60){
           while((h==0 || h==2) && (m==0 || m==2) && k<60){
            lcd.setCursor(0,0);
            lcd.print(i);
            lcd.print(":");
            lcd.print(j);
            lcd.print(":");
            lcd.print(k);
            k=k+1;       
            digitalWrite(pingtrig,HIGH);
            delay(768);
            digitalWrite(pingtrig,LOW);
            duration = pulseIn(pingecho,HIGH);
            cm=(duration/2) / 29.1;
            if(cm<21){
              digitalWrite(13,HIGH);
              digitalWrite(10,LOW);}
            else if(cm>20)digitalWrite(13,LOW);}
          while(h==1 && (m==0 || m==2)){
           delay(800);
           lcd.clear();
           lcd.setCursor(0,1);
           lcd.print("1) ");
           lcd.print("Dialekse Wra ");
           if(i<24){
             lcd.setCursor(0,0);
             lcd.print(i);}
           else{
             i=0;
             lcd.setCursor(0,0);
             lcd.print(i);}
           i=i+1;}
          while(h==3 && (m==0 || m==2)){
           delay(800);
           lcd.clear();
           lcd.setCursor(0,1);
           lcd.print("2) ");
           lcd.print("Dialekse Alarm ");
           if(ia<24){             
             lcd.setCursor(0,0);
             lcd.print(ia);}
           else{
             ia=0;
             lcd.setCursor(0,0);
             lcd.print(ia);}
           ia=ia+1;}
          while(m==1 && (h==0 || h==2)){
           delay(800);
           lcd.clear();
           lcd.setCursor(0,1);
           lcd.print("1) ");
           lcd.print("Dialekse lepta ");           
           if(j<60){             
             lcd.setCursor(0,0);
             lcd.print(j);}
           else{
             j=0;
             lcd.setCursor(0,0);
             lcd.print(j);}
           j=j+1;}
         while(m==3 && (h==0 || h==2)){
           delay(800);
           lcd.clear();
           lcd.setCursor(0,1);
           lcd.print("2) ");
           lcd.print("Dialekse alarm ");
           if(ja<60){
             lcd.setCursor(0,0);
             lcd.print(ja);}
           else{
             ja=0;
             lcd.setCursor(0,0);
             lcd.print(ja);}
           ja=ja+1;}}
        lcd.clear();
        k=0;   
        int degC=analogRead(0)*0.004882812*100;
        float tmpVal=degC-273.15-8.35;   
        lcd.setCursor(0,1);
        lcd.print(tmpVal);
        lcd.print("C  Al ");
        lcd.print(ia);
        lcd.print(":");
        lcd.print(ja);                       
        if((ia==i && ja==j) || (ia==i && j==ja+5))digitalWrite(10,HIGH);
        else digitalWrite(10,LOW);
        j=j+1;}
      lcd.clear();
      j=0;
      i=i+1;}
     i=0;}
     
     void hours(){
        int i=0;
        h=h+1;
        if(h==4)h=0;
        while(digitalRead(2)==HIGH)
         i=i+1;}
       
     void minutes(){
        int i=0;
        m=m+1;
        if(m==4)m=0;
        while(digitalRead(3)==HIGH)
         i=i+1;}
Last edited by aris on Thu May 17, 2012 11:18 am, edited 5 times in total.

Re: Παρουσίαση αρχής λειτουργίας του project

Sat May 19, 2012 9:33 pm

Eβγαλα και ενα βιντεο με το ρολοι στο youtube καναλι μου.. :bigbeer:
Spoiler :
[youtube]-_TlWdrHvmo[/youtube]
Παραθετω και τον κωδικα απο κατω.Αν δειτε στο βιντεο καποια λειτουργια που να μην σας αρεσει ή αν λειπει κατι, πειτε μου για να το αλλαξω..
Spoiler :
Code:
    #include <LiquidCrystal.h>
    volatile int q=1,a=0,s=0,w=0,t=0,z=0,e=1,u=0,r=0,i=0,j=0,k=0,ia=0,ja=0,o=0;
    LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
    int pingtrig=8,pingecho=9;
    long duration,cm;
   
    void setup() {
      Serial.begin(9600);
      lcd.begin(16, 2);
      pinMode(2,INPUT);
      pinMode(pingtrig,OUTPUT);
      pinMode(pingecho,INPUT);
      pinMode(3,INPUT);
      attachInterrupt(0,choices,RISING);
      attachInterrupt(1,change,RISING);
      pinMode(10,OUTPUT);
      pinMode(13,OUTPUT);
      digitalWrite(13,LOW);
      digitalWrite(10,LOW);}

    void loop(){
      while(i<24){
        while(j<60){
          while(k<60 && q==1){           
            Serial.println(millis());
            lcd.setCursor(0,0);
            lcd.print(i);
            lcd.print(":");
            lcd.print(j);
            lcd.print(":");
            lcd.print(k);
            if(s!=0 || t!=0 || a!=0 || w!=0 || z!=0 || e!=1 || u!=0 || r!=0){
                   r=0;
                   u=0;
                   s=0;
                   t=0;
                   a=0;
                   w=0;
                   z=0;
                   e=1;}
            digitalWrite(pingtrig,LOW);
            delayMicroseconds(2);
            digitalWrite(pingtrig,HIGH);
            delayMicroseconds(10);
            digitalWrite(pingtrig,LOW);
            duration = pulseIn(pingecho,HIGH);
            cm=duration/29/2;
            if(cm<26 && cm!=0){
              digitalWrite(13,HIGH);
              digitalWrite(10,LOW);}
            else if(cm>25 || cm==0)digitalWrite(13,LOW);
            k=k+1;
            if(duration!=0)
            delay(1000-duration/100-o+0.012);
            if(duration==0)
            delay(740-o+0.02); 
            o=0;}
          if(k==60)k=0;   
          while(q==0 && e<=270){     
           Serial.println(millis());
           Serial.println(e);
           while(e==1){                 
            digitalWrite(13,HIGH);                                                   
            if(a%2==1){
              if(a==1 && s==0){
                lcd.clear();
                lcd.setCursor(0,0);
                lcd.print("1)Roloi");
                lcd.setCursor(0,1);
                lcd.print("2)Alarm");
                delay(800);}         
              if(s==0){           
                 lcd.clear();
                 lcd.setCursor(0,0);
                 lcd.print("1)Roloi");
                 t=1;}       
              if(s==1 && t==1){                                                         
                if(z%2==0){       
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print("1)Wra Roloi");
                  u=1;}}
              if(s==1 && t==1){
                if(z%2==1){
                  lcd.clear();
                  lcd.setCursor(0,1);
                  lcd.print("2)Lepta Roloi");
                  u=2;}}     
             if(s>=2 && z%2==0 && u==1){
                  lcd.clear();
                  lcd.setCursor(0,0);
                  if(i<24) i=i+1;
                  if(i==24) i=0;
                  lcd.print(i);
                  lcd.print(":");
                  lcd.print(j);
                  lcd.print(":");
                  lcd.print(k);}   
             if(s>=2 && z%2==1 && u==2){
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print(i);
                  lcd.print(":");
                  if(j<60)j=j+1;
                  if(j==60) j=0;
                  lcd.print(j);
                  lcd.print(":");
                  lcd.print(k);}}
            if(a%2==0){
              if(s==0){
                lcd.clear();
                lcd.setCursor(0,1);
                lcd.print("2)Alarm");
                t=2;}
              if(s==1 && t==2){
                if(w%2==0){
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print("1)Wra Alarm");
                  r=1;}}
              if(s==1 && t==2){
                if(w%2==1){
                  lcd.clear();
                  lcd.setCursor(0,1);
                  lcd.print("2)Lepta Alarm");
                  r=2;}}   
              if(s>=2 && w%2==0 && r==1){
                  lcd.clear();
                  lcd.setCursor(0,0);
                  if(ia<24)ia=ia+1;
                  if(ia==24)ia=0;
                  lcd.print(ia);
                  lcd.print(":");
                  lcd.print(ja);}   
              if(s>=2 && w%2==1 && r==2){
                  lcd.clear();
                  lcd.setCursor(0,0);
                  lcd.print(ia);
                  lcd.print(":");
                  if(ja<60)ja=ja+1;
                  if(ja==60)ja=0;
                  lcd.print(ja);}}
                e=e+1;}
              e=e+1;}
        if(e==271 && s==0)j=j-1;         
        if(e==271 && s==1 && t==1)j=j-1;
        if(e==271 && s==1 && t==2)j=j-1;
        if(a%2==1 && s>=2 && z%2==1 && e==271 && u==2)j=j-1;
        if(a%2==1 && s>=2 && z%2==0 && e==271 && u==1)j=j-1;
        if(a%2==0 && s>=2 && w%2==1 && e==271 && r==2)j=j-1;
        if(a%2==0 && s>=2 && w%2==0 && e==271 && r==1)j=j-1;
        o=19;
        q=1;   
        lcd.clear(); 
        int degC=analogRead(0)*0.004882812*100;
        float tmpVal=degC-273.15-8.35;   
        lcd.setCursor(0,1);
        lcd.print(tmpVal);
        lcd.print("C  Al ");
        lcd.print(ia);
        lcd.print(":");
        lcd.print(ja);                       
        if((ia==i && ja-1==j) || (ia==i && j==ja+4))digitalWrite(10,HIGH);
        else digitalWrite(10,LOW);
        j=j+1;}
      lcd.clear();
      j=0;
      i=i+1;}
     i=0;}     
             
     void choices(){
        e=1;
        if(q==1)q=0;
        if(s==0)a=a+1;   
        if(s==1){
          if(a%2==1 && t==1)z=z+1;   
          if(a%2==0 && t==2)w=w+1;}
        if(s>=2){
         e=2; 
         lcd.clear();
         lcd.setCursor(0,0); 
         if(a%2==1 && z%2==0 && u==1){
           if(i>0)i=i-1;
           if(i==0)i=23;
           lcd.print(i);
           lcd.print(":");
           lcd.print(j);
           lcd.print(":");
           lcd.print(k);} 
         if(a%2==1 && z%2==1 && u==2){ 
           if(j>0)j=j-1;
           if(j==0)j=59;
           lcd.print(i);
           lcd.print(":");
           lcd.print(j);
           lcd.print(":");
           lcd.print(k);}
         if(a%2==0 && w%2==0 && r==1){ 
           if(ia>0)ia=ia-1;
           if(ia==0)ia=23;
           lcd.print(ia);
           lcd.print(":");
           lcd.print(ja);}
         if(a%2==0  && w%2==1 && r==2){ 
           if(ja>0)ja=ja-1;
           if(ja==0)ja=59;
           lcd.print(ia);
           lcd.print(":");
           lcd.print(ja);}}}

     void change(){
        e=1;
        s=s+1;}         

Re: Παρουσίαση αρχής λειτουργίας του project

Sat May 19, 2012 10:07 pm

Χώρισα τα ποστ ώστε ο τίτλος να έχει νόημα. Καλό θα ήταν να βάλεις και σχόλια στον κώδικα: στον κόσμο των προγραμματιστών ο ασχολίαστος κώδικας θεωρείται έγκλημα.

Κατά τ' άλλα, αξιόλογο project για εισαγωγή στον arduino και τους αισθητήρες. Ελπίζω να συνεχίσεις ανοδικά.

Re: Παρουσίαση αρχής λειτουργίας του project

Thu Jul 19, 2012 7:43 pm

Ειπα να δοκιμασω το fritzing και εφτιαξα το σχηματικο του ρολογιου.Το HC-SR04 δεν υπηρχε στα components του προγραμματος, οποτε εβαλα τις συνδεσεις σαν να υπηρχε κανονικα εκει που εχω βαλει το label του.Και η LCD επισης δεν ειναι αυτη που εχω, αλλα τα pins που καταληγουν σε αυτη απο το arduino ειναι αυτα που χρησιμοποιησα στο πραγματικο σχεδιο. Ολα τα υπολοιπα pins ειναι οκ.
Attachments
Ψηφιακό ξυπνητήρι.pdf
(1.96 MiB) Downloaded 226 times

Re: Παρουσίαση αρχής λειτουργίας του project

Fri Jul 20, 2012 2:17 am

Καλύτερα να το ανεβάσεις σαν εικόνα, αφού είναι μόνο μία σελίδα.

Re: Παρουσίαση αρχής λειτουργίας του project

Fri Jul 20, 2012 9:20 am

Αυτο θα εκανα απλα ειδα οτι το pdf σου δινει την δυνατοτητα να κανεις μεγαλυτερο zoom απο το jpeg ή το png χωρις να χαλασει η αναλυση της φωτογραφιας σου..

Re: Παρουσίαση αρχής λειτουργίας του project

Fri Jul 20, 2012 12:47 pm

Αυτό συμβαίνει γιατί το Fritzing δεν τυπώνει την φωτογραφία στο .pdf, αλλά σχεδιάζει κομμάτι κομμάτι το κύκλωμα σε αυτό, όπως ένα στοιχείο flash, οπότε η ανάλυση είναι ουσιαστικά άπειρη.
Το πληρώνεις όμως αυτό σε δυσχρηστία και μεγάλο μέγεθος αρχείου.

Εντέλει, δεν έχει και τόσο μεγάλη σημασία, αναφορικά γράφω τα παραπάνω.

Re: Παρουσίαση αρχής λειτουργίας του project

Sat Jul 21, 2012 1:47 pm

George ZP wrote:Αυτό συμβαίνει γιατί το Fritzing δεν τυπώνει την φωτογραφία στο .pdf, αλλά σχεδιάζει κομμάτι κομμάτι το κύκλωμα σε αυτό, όπως ένα στοιχείο flash, οπότε η ανάλυση είναι ουσιαστικά άπειρη.

[offtopic]
Indeed! Impressive :rolleyes:
Post a reply