Σελίδα 3 από 21 ΠρώτηΠρώτη 1 2 3 4 5 13 ... ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 21 έως 30 από 201

Θέμα: Soldering Station με Arduino Nano και 4x20 LCD οθόνη

  1. #21
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από vasilisd Εμφάνιση μηνυμάτων
    Μάνο συγχαρητήρια και για την κατασκευή αλλά και την ολοκληρωμένη παρουσίαση, ακόμη και λίστα υλικών έδωσες, πόσο ποιο εύκολο να το κάνει κανείς.
    Μια απορία μόνο, για ποιο λόγο στήριξες την κατασκευή σε πλατφόρμα arduino ενώ θα μπορούσες να χρησιμοποιήσεις κατευθείαν ενα πχ Atmega328;
    Καλημέρα Βασίλη,

    Ένας λόγος ήταν πως ήθελα να μπορεί ο οποιοσδήποτε να φτιάξει αυτή τη μονάδα χωρίς να μπλέξει με δύσκολες κολλήσεις σε κέλυφος TQFP (για μικρότερο τελικό εμβαδό και μέγεθος
    πλακέτας), αλλά απλά καρφώνοντας ένα τέτοιο module να ξεμπερδεύει με μΕ, κρύσταλλους, διασυνδέσεις USB, μετατροπείς USB σε σειριακό για τον προγραμματισμό και άλλα τέτοια.
    Η μόνη ενασχόληση είναι για αντιστάσεις και πυκνωτές στην ουσία πάνω στην κύρια πλακέτα.

    2 Not allowed! Not allowed!

  2. #22
    Μέλος
    Όνομα
    Μάρκος
    Εγγραφή
    Mar 2012
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.945

    Προεπιλογή

    Συγχαρητήρια και από μένα για την κατασκευή που είναι πολύ καλή και όμορφη όπως όλες σου οι κατασκευές.

    Μόλις μου ήρθε μια ιδέα για επέκταση της κατασκευής.
    Στο φόρουμ έχουμε συζητήσει σε αρκετά θέματα ότι η χρήση ταυτόχρονα 2 ή 3 στελεχών (κολλητηριών) είναι χρήσιμη αντί να αλλάζουμε μύτες ή για κολλητήρια με διαφορετικά watt. (Π.χ. ο λέπουρας χρησιμοποιεί 3 με επιλογή από διακόπτη). Θα μπορούσε η κατασκευή για να ξεφύγει και από τα συνηθισμένα να μπορεί να χειριστεί 2 ή και 3 στελέχη ταυτόχρονα και να κάνει και κάποια κόλπα σχετικά με τον χειρισμό τους. Αν φανεί ενδιαφέρουσα η ιδέα μπορώ να πω περισσότερες λεπτομέρειες για το πως το φαντάζομαι.

    Υποθέτω ότι η ιδέα είναι πρωτότυπη αν γνωρίζει κάποιος ότι υπάρχει κάτι τέτοιο έτοιμο ας ενημερώσει.

    1 Not allowed! Not allowed!
    Όταν όλα τα άλλα έχουν αποτύχει..... RTFM.
    Short instructions: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>> Good Luck!
    https://diyelectronics-gr.blogspot.gr https://www.facebook.com/groups/872041030200567

  3. Ένα μέλος ευχαρίστησε τον elektronio για αυτό το χρήσιμο μήνυμα:

    manolena (31-05-16)

  4. #23
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Σε ό,τι αφορά τον κώδικα, έχει χωριστεί σε δύο αρχεία .ino που ακολουθούν με τα ονόματα IRON_NANO_6.ino και UTILITY_LCD.ino. Θα επισυναφθούν σαν δύο ξεχωριστά
    αρχεία, αλλά θα πρέπει να τα αποσυμπιέσετε στον ίδιο φάκελο με το όνομα IRON_NANO_6. Αν θέλετε να αλλάξετε το όνομα, πρέπει να αλλαχθεί και στο φάκελο και στο αρχείο
    .ino

    IRON_NANO_6.ino

    Κώδικας:
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <SD.h>
    #include <EEPROMEx.h>
    #include <Encoder1.h>
    #include <PinChangeInt.h>
    #include <TimerOne.h>
    #include <PID_v1.h>
    #include <StopWatch.h>
    //=======================================================
    #define VERSION "v1.6"        
    #define INTRO
    
    
    #define LCD_I2C_ADDRESS      0x27
    #define ROWS 4
    #define COLUMNS 20
    
    
    #define ADC_TO_TEMP_GAIN     1.8//0.99//2.50//0.53 //0.415
    #define ADC_TO_TEMP_OFFSET      25.0
    #define STANDBY_TEMP        175
    #define MAX_TEMP        400
    #define MIN_TEMP            25 // Minimum setpoint temperature
    #define MAX_PWM_LOW        50//180
    #define MAX_PWM_HI        255//210//240
    #define PWM_DIV                 1024    
    
    
    #define Encoder1ChnA          2
    #define Encoder1ChnB          3
    #define EncoderDetent         4
    
    
    #define BUZZER_PIN            5
    #define HEAT_LED              6
    #define STANDBYin             7
    #define TEMPin                   A0
    #define PWMpin                   8
    
    
    #define WILL_TEMP_EEPROM_ADDRESS 0x10
    #define ENCODER_EEPROM_ADDRESS   0x20
    
    
    #define DELAY_MAIN_LOOP     1//150
    #define DELAY_MEASURE         2
    
    
    #define SIZE_BAR (9 * 5)
    #define TIMER_10MIN            10//0
    #define TIMER_20MIN            20//0
    //=======================================================
    int pwm = 0; //pwm Out Val 0.. 255
    unsigned int actual_temperature, will_temp = STANDBY_TEMP;
    int MAX_PWM;
    boolean standby_act = false;
    int tempDIV;
    int will_temp_tmp;
    float encoderValue = 0;
    volatile float encoderPos = 0;
    volatile float encoderPosTemp = 0;
    boolean memWrite = false;
    boolean memNoWrite = true;
    boolean state = false;
    boolean heater = false;
    boolean unplug = 0;
    int t1,t2;
    int p1;
    static boolean rotating = false;
    const int numReadings = 30;
    int readings[numReadings];      // the readings from the analog input
    int readIndex = 0;              // the index of the current reading
    int total = 0;                  // the running total
    float adcValue;
    
    
    //PID parameters
    double Setpoint, Input, Output;
    double aggKp=8.00, aggKi=0.10, aggKd=4.00;
    double consKp=4.00, consKi=0.05, consKd=2.00;
    
    
    int seconds, minutes, hours = 0;
    int secs, mins = 0;
    //=======================================================
    Encoder1 myEncoder = Encoder1(Encoder1ChnA,Encoder1ChnB,EncoderDetent);
    PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
    LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address
    StopWatch sw_millis;    
    StopWatch sw_countdownmillis;  
    StopWatch sw_secs(StopWatch::SECONDS);
    StopWatch sw_countdownsecs(StopWatch::SECONDS);
    //LiquidCrystal_I2C lcd(LCD_I2C_ADDRESS, 5, 6, 7, 2, 3, 4, 1, 0, NEGATIVE);  // Set the LCD I2C address
    //=======================================================================
    void setup() 
    {
      Wire.begin();
      lcd.begin(COLUMNS, ROWS); 
      lcd.setBacklight(HIGH);
      Serial.begin(9600);
      Serial.println("Sketch'es location:");
      Serial.println("C:\\Users\\Administrator\\Documents\\DXP\\AVR SOLDERING IRON\\FIRMWARE\\NANO\\IRON_NANO_1");
    
    
      byte newChar[8];
      int i; 
    
    
      for (i = 0; i < 8; i++)
        lcd.createChar(i, getChar(i, newChar));
      customChars();
      pinMode(Encoder1ChnA, INPUT); 
      digitalWrite(Encoder1ChnA, HIGH); //turn pullup resistor on
      pinMode(Encoder1ChnB, INPUT); 
      digitalWrite(Encoder1ChnB, HIGH); //turn pullup resistor on
      pinMode(EncoderDetent, INPUT); 
      digitalWrite(EncoderDetent, HIGH); //turn pullup resistor on 
    
    
      PCintPort::attachInterrupt(Encoder1ChnA, &updateEncoder_ISR, CHANGE); 
      PCintPort::attachInterrupt(Encoder1ChnB, &updateEncoder_ISR, CHANGE);
      PCintPort::attachInterrupt(EncoderDetent, &EncoderClick_ISR, FALLING);
    
    
      Timer1.initialize(150000); // set a timer of length 150000 microseconds (or 0.15 sec)
      Timer1.attachInterrupt(timer1_ISR); // attach the service routine here  
    
    
      pinMode(9, OUTPUT);
      digitalWrite(9,HIGH);  
      pinMode(10, OUTPUT);
      digitalWrite(10,LOW);  
    
    
      pinMode(13, OUTPUT);
      digitalWrite(13,HIGH);  
    
    
      pinMode(BUZZER_PIN, OUTPUT);
      digitalWrite(BUZZER_PIN,HIGH);
    
    
      pinMode(STANDBYin, INPUT_PULLUP);
    
    
      pinMode(TEMPin, INPUT);
      digitalWrite(TEMPin, LOW);
    
    
      pinMode(HEAT_LED, OUTPUT);
      digitalWrite(HEAT_LED, LOW);     
    
    
      myEncoder.setRate(1.0f);
      myEncoder.setMinMax(MIN_TEMP,MAX_TEMP);
    
    
      beepBuzzer(6250,80);
      splashScreen();
      sw_secs.start();
      sw_millis.start(); 
      sw_countdownmillis.start(); 
    
    
      will_temp = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);
      myEncoder.setPosition(will_temp); 
      if (will_temp == 4294967295) 
      {
        will_temp = STANDBY_TEMP;
      }
      encoderPos = EEPROM.readInt(ENCODER_EEPROM_ADDRESS);
      if (encoderPos == 4294967295) 
      {    
        myEncoder.setPosition(will_temp);
      }
    
    
      Input = getTemperature();
      Setpoint = will_temp;
      myPID.SetMode(AUTOMATIC);
      pwm = 0; 
      lcd.setCursor(10,3); 
      lcd.print("MEM=");   
      lcd.print(will_temp);
      lcd.write(223); 
      lcd.print("C ");  
    }
    //=======================================================================
    void loop()
    {  
      unsigned long now = millis();
      static boolean oneTime = false; 
    
    
      Input = getTemperature();
    
    
      if(standby_act == false)
      {    
        Setpoint = encoderPos;
      }
      else
      {
        Setpoint = STANDBY_TEMP;
      }    
      double gap = abs(Setpoint-Input); 
      if(gap < 10)
      {  
        myPID.SetTunings(consKp, consKi, consKd);
      }
      else
      {
        myPID.SetTunings(aggKp, aggKi, aggKd);
      }
      myPID.Compute();   
    
    
      will_temp = map(encoderPos, MIN_TEMP, MAX_TEMP, MIN_TEMP, MAX_TEMP);
      int tempWill = EEPROM.readInt(WILL_TEMP_EEPROM_ADDRESS);  
    
    
      if (digitalRead(STANDBYin) == HIGH)
      {
        standby_act = false;
        lcd.setCursor(19,0);
        if(oneTime)
        { 
          showCountdownTime(13,1); 
          will_temp = STANDBY_TEMP;
          lcd.print(" ");
          lcd.setCursor(19,1);
          lcd.print(" ");
          oneTime = false;
          lcd.setCursor(6,1);
          lcd.print("      ");
          lcd.setCursor(19,0);
          lcd.print(" ");
          seconds = 0;
          minutes = 0;
          sw_millis.reset();
          sw_millis.start();
        }     
        sw_countdownmillis.reset();
        sw_countdownmillis.start();
        secs = 0;
        mins = 0; 
        lcd.setCursor(13,1);
        lcd.print("     ");    
        lcd.setCursor(19,0);    
        showIron(19,0);         
      }  
      else
      {
        standby_act = true;
        sw_millis.stop();
        sw_millis.reset();
        seconds = 0;
        minutes = 0;
        lcd.setCursor(19,0);
        if(!oneTime)
        {
          sw_countdownmillis.reset();
          sw_countdownmillis.start();
          secs = 0;
          mins = 0;
          lcd.setCursor(13,1);
          lcd.print("     ");   
          showIron(19,0);
          oneTime = true;      
        }
        showCountdownTime(13,1); 
        will_temp = STANDBY_TEMP;
        lcd.print(" ");
        lcd.setCursor(19,1);
        lcd.print(" ");
        lcd.setCursor(6,1);
        lcd.print("      ");
        lcd.setCursor(19,0);
        lcd.print(" ");    
      }
    
    
      if((memNoWrite == true) && (memWrite = false))
      {       
        memNoWrite = true; 
        memWrite = false; 
      }  
      else if((memNoWrite == false) && (memWrite = true))
      {
        lcd.setCursor(14,3);
        lcd.print(tempWill);
      } 
      memNoWrite = true; 
      memWrite = false; 
    
    
      will_temp_tmp = will_temp;
    
    
      if ((standby_act && (will_temp >= STANDBY_TEMP))) 
      {
        will_temp = STANDBY_TEMP;    
      }  
    
    
      actual_temperature = getTemperature();
      
      checkUnplugged();
      checkTimer(); 
      sw_millis.start(); 
    
    
      pwm = Output;
      MAX_PWM = actual_temperature <= STANDBY_TEMP ? MAX_PWM_LOW : MAX_PWM_HI;
      pwm = pwm > MAX_PWM ? pwm = MAX_PWM : pwm < 0 ? pwm = 0 : pwm;
      analogWrite(PWMpin, pwm);
    
    
      if(pwm != 0)
      {
        heater = HIGH;
      }
      else 
      {    
        heater = LOW;
      } 
      writeHEATING(will_temp, Input, pwm);
      showTemps();  
    }
    //=======================================================================
    void checkTimer()
    {
      if(mins >= TIMER_10MIN)
      {
        lcd.setBacklight(state);
      }  
      if(mins >= TIMER_20MIN)
      {
        lcd.setBacklight(HIGH);
        pwm = 0;
        digitalWrite(HEAT_LED, LOW);
        heater = LOW;   
          
        sw_millis.reset();  
        sw_millis.stop();    
        seconds = 0;
        minutes = 0;
        sw_countdownmillis.reset();
        sw_countdownmillis.stop();
        secs = 0;
        mins = 0;
      }  
    }  
    //=======================================================================
    void checkUnplugged()
    {
      if((actual_temperature >= MAX_TEMP) && (actual_temperature < MAX_TEMP+100))
      {    
        pwm = 0;
        digitalWrite(HEAT_LED, LOW);
        actual_temperature = 0; 
        lcd.clear();
        do
        {      
          lcd.setCursor(5,0);
          lcd.print(F("UNPLUGGED!"));
          lcd.setCursor(0,1);
          lcd.print(F("   PLEASE CONNECT   "));
          lcd.setCursor(0,2);
          lcd.print(F("        PLUG!       "));
          lcd.setBacklight(state);
          actual_temperature = getTemperature();
        }
        while(actual_temperature >= MAX_TEMP);
        lcd.setBacklight(HIGH);
        lcd.clear();
    
    
        lcd.setCursor(14,3); 
        lcd.print(will_temp);
    
    
        lcd.setCursor(4,2);
        if (t1 < 100)
          lcd.print(" ");
        if (t1 <10)
          lcd.print(" ");
        lcd.print(t1); 
    
    
        lcd.setCursor(4,3);
        if (t2 < 100)
          lcd.print(" ");
        if (t2 <10)
          lcd.print(" ");
        lcd.print(t2); 
    
    
        lcd.setCursor(14,2);
        if (p1 < 100)
          lcd.print(" ");
        if (p1 <10)
          lcd.print(" ");
        lcd.print(p1); 
      }
    } 
    //=======================================================================
    void showTemps()
    {
      lcd.setCursor(0,0);
      lcd.print(F("A>"));
      lcd.setCursor(0,1);
      lcd.print(F("S>"));
    
    
      lcd.setCursor(0,2);
      lcd.print(F("ACT="));
      lcd.setCursor(0,3);
      lcd.print(F("SET="));
      lcd.setCursor(10,2);
      lcd.print(F("PWM="));
      lcd.setCursor(10,3); 
      lcd.print("MEM=");   
    
    
      lcd.setCursor(7,2);
      lcd.write(223); 
      lcd.print("C ");
      lcd.setCursor(7,3);
      lcd.write(223); 
      lcd.print("C ");
      lcd.setCursor(17,3);
      lcd.write(223); 
      lcd.print("C ");
      lcd.setCursor(17,2);
      lcd.print("% ");
    
    
      lcd.setCursor(2,0);
      print_histogram(t1,MAX_TEMP); 
      lcd.setCursor(2,1);
      print_histogram(t2,MAX_TEMP); 
      showTime(13,0);
    }   
    //=======================================================================
    void writeHEATING(int tempWILL, int tempVAL, int pwmVAL)
    {
      static int d_tempWILL = 1;//2        
      static int tempWILL_OLD = 1;//10
      static int tempVAL_OLD = 1;//10
      static int pwmVAL_OLD    = 1;//10
    
    
      pwmVAL = map(pwmVAL, 0, 255, 0, 99);
    
    
      if (tempVAL_OLD != tempVAL)
      {
        lcd.setCursor(4,2);
        if ((tempVAL_OLD/100) != (tempVAL/100))
        {
          lcd.print(tempVAL_OLD/100);
        }
        else
          lcd.print(" ");
    
    
        if (((tempVAL_OLD/10)%10) != ((tempVAL/10)%10))
          lcd.print((tempVAL_OLD/10)%10);
        else
          lcd.print(" ");
    
    
        if ((tempVAL_OLD%10) != (tempVAL%10))
          lcd.print(tempVAL_OLD%10 );
    
    
        lcd.setCursor(4,2);
        if (tempVAL < 100)
          lcd.print(" ");
        if (tempVAL <10)
          lcd.print(" ");
    
    
        lcd.print(tempVAL); 
        t1 = tempVAL;
        tempVAL_OLD = tempVAL; 
      }
      if ((tempWILL_OLD+d_tempWILL < tempWILL) || (tempWILL_OLD-d_tempWILL > tempWILL))
      {
        lcd.setCursor(4,3);
    
    
        if ((tempWILL_OLD/100) != (tempWILL/100))
        {
          lcd.print(tempWILL_OLD/100);
        }
        else
          lcd.print(" ");
    
    
        if (((tempWILL_OLD/10)%10) != ((tempWILL/10)%10))
          lcd.print((tempWILL_OLD/10)%10 );
        else
          lcd.print(" ");
    
    
        if ((tempWILL_OLD%10) != (tempWILL%10))
          lcd.print(tempWILL_OLD%10 );
    
    
        lcd.setCursor(4,3);
        if (tempWILL < 100)
          lcd.print(" ");
        if (tempWILL <10)
          lcd.print(" ");
    
    
        lcd.print(tempWILL); 
        t2 = tempWILL;
        tempWILL_OLD = tempWILL;
      }
    
    
      if (pwmVAL_OLD != pwmVAL)
      {
        lcd.setCursor(14,2);
        if ((pwmVAL_OLD/100) != (pwmVAL/100))
        {
          lcd.print(pwmVAL_OLD/100);
        }
        else
          lcd.print(" ");
    
    
        if (((pwmVAL_OLD/10)%10) != ((pwmVAL/10)%10))
          lcd.print((pwmVAL_OLD/10)%10 );
        else
          lcd.print(" ");
    
    
        if ((pwmVAL_OLD%10) != (pwmVAL%10))
          lcd.print(pwmVAL_OLD%10 );
    
    
        lcd.setCursor(14,2);
        if (pwmVAL < 100)
          lcd.print(" ");
        if (pwmVAL <10)
          lcd.print(" ");
    
    
        lcd.print(pwmVAL);
        p1 = pwmVAL; 
        pwmVAL_OLD = pwmVAL;
      }    
    }
    //=======================================================================
    void showCountdownTime(int row, int line)
    {
      lcd.setCursor(row, line);
      if(sw_countdownmillis.elapsed() > 999)
      {
        secs++;
        sw_countdownmillis.reset();
        sw_countdownmillis.start();
      }  
      if(secs > 59)
      {
        secs = 0;
        mins++;
      }
     
      if(mins < 10)
      {
        lcd.print("0");
      } 
      lcd.print(mins,DEC);
      lcd.print(":");
      if(secs < 10)
      {
        lcd.print("0");
      } 
      lcd.print(secs,DEC); 
     
    }  
    //=======================================================================
    void showTime(int line, int row)
    {
      lcd.setCursor(line, row);
      if(sw_millis.elapsed() > 999)
      {
        seconds++;
        sw_millis.reset();
        sw_millis.start();
      }
      if(seconds > 59)
      {
        seconds = 0;
        minutes++;
      }
      
      if(minutes < 10)
      {
        lcd.print("0");
      } 
      lcd.print(minutes,DEC);
      lcd.print(":");
      if(seconds < 10)
      {
        lcd.print("0");
      } 
      lcd.print(seconds,DEC);  
    }  
    //=======================================================================
    //    ENCODER ISR
    //=======================================================================
    void updateEncoder_ISR() 
    {
      myEncoder.lowLevelTick();
      encoderPos = myEncoder.getPosition();
      if(encoderPos <= MIN_TEMP)
      {
        myEncoder.setPosition(MIN_TEMP);
        encoderPos = MIN_TEMP;
      }  
      if(encoderPos >= MAX_TEMP) 
      {
        myEncoder.setPosition(MAX_TEMP);//1150
        encoderPos = MAX_TEMP;
      }
      beepBuzzer(6250,1);
    }
    //=======================================================================
    //    ENCODER'S DETENT ISR
    //=======================================================================
    void EncoderClick_ISR() 
    {  
      myEncoder.lowLevelClick();
      {
        EEPROM.writeInt(WILL_TEMP_EEPROM_ADDRESS, will_temp);
        EEPROM.writeInt(ENCODER_EEPROM_ADDRESS, encoderPos);
        myEncoder.setPosition(encoderPos);
        memWrite = true;
        memNoWrite = false;  
        beepBuzzer(6250,80);
      }  
    }
    //====================================
    //    TIMER 1 ISR
    //====================================
    void timer1_ISR()
    {
      Timer1.detachInterrupt();
      state =!state;
      
      switch(heater)
      {
      case HIGH:
        digitalWrite(HEAT_LED, state);
        break;
      case LOW:
        digitalWrite(HEAT_LED, LOW);
        break;  
      }
      if (digitalRead(STANDBYin) == LOW) 
      {
        standby_act = true;
        sw_countdownsecs.start(); 
      }  
      else 
      {
        standby_act = false;
        sw_countdownsecs.stop();
        sw_countdownsecs.reset();  
      }  
      Timer1.attachInterrupt( timer1_ISR );
    }

    2 Not allowed! Not allowed!

  5. #24
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Ενδιαφέρουσα είναι η ιδέα (κόλπα=?) απλώς επειδή είπαμε να κρατήσουμε 'καθαρό' το εδώ θέμα για να βρίσκουμε εύκολα μερικά πράγματα την συζήτηση - αναβάθμιση - χαβαλέ κάνουμε σε αυτό το θέμα που έχει ήδη ξεφύγει

    Edit: Αχ γμτ έσπασα τον κώδικα στην μέση, μπορεί κάποιος πράσινος-κόκκινος να το μετακινήσει προς τα κάτω ή να το διαγράψει?
    Ευχαριστώ

    0 Not allowed! Not allowed!

  6. #25
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    UTILITY_LCD.ino

    Κώδικας:
    //=======================================================
    void customChars()
    {
      uint8_t iron1[8] = {     // Custom Character 2
        B00001,
        B00010,
        B00100,
        B01110,
        B01110,
        B01110,
        B01110,
        B01110
      };
    
    
      uint8_t iron2[8] = {     // Custom Character 3
        B01110,
        B11111,
        B11111,
        B00100,
        B00100,
        B00100,
        B00100,
        B00100
      };
    
    
      lcd.createChar(6,iron1);
      lcd.createChar(7,iron2);
    }
    //=======================================================================
    byte *getChar(int n, byte newChar[]) 
    {
      int i;
      byte code[5] = 
      {
        B10000,
        B11000,
        B11100,
        B11110,
        B11111
      }; 
      for (i = 0; i < 8; i++)
        newChar[i] = code[n - 1];
      return newChar;
    }
    //=======================================================================
    void splashScreen()
    {
      lcd.setCursor(0,0);
      lcd.print(F("    ARDUINO NANO    "));
      lcd.setCursor(0,1);
      lcd.print(F(" SOLDERING STATION  "));
      lcd.setCursor(0,2);
      lcd.print(F("   MANOS MAR v1.6   "));
      lcd.setCursor(0,3);
      lcd.print(F("    96W/25-400"));
      lcd.write(223);
      lcd.print(F("C    "));
      delay(5000);
      lcd.clear();
      //  showIron(0,0);
      //  delay(5000);
    }  
    //=======================================================================
    //    UTILITIES
    //=======================================================================
    void beepBuzzer(unsigned long hz, unsigned long ms) 
    { 
      unsigned long us = (750000 / hz);  
      unsigned long rep = (ms * 500L) / us; 
    
    
      for (int i = 0; i < rep; i++) 
      {  
        digitalWrite(BUZZER_PIN, HIGH);  
        delayMicroseconds(us);  
        digitalWrite(BUZZER_PIN, LOW);  
        delayMicroseconds(us);  
      }
    }
    
    
    //=======================================================================
    void showIron(int row, int line)
    {
      lcd.setCursor(row,line);
      lcd.write(byte(6));
      lcd.setCursor(row,line+1);
      lcd.write(byte(7));
    }  
    //=======================================================================
    void setPwmFrequency(int pin, int divisor) 
    {
      byte mode;
      if(pin == 5 || pin == 6 || pin == 9 || pin == 10) 
      {
        switch(divisor) {
        case 1: 
          mode = 0x01; 
          break;
        case 8: 
          mode = 0x02; 
          break;
        case 64: 
          mode = 0x03; 
          break;
        case 256: 
          mode = 0x04; 
          break;
        case 1024: 
          mode = 0x05; 
          break;
        default: 
          return;
        }
        if(pin == 5 || pin == 6) {
          TCCR0B = TCCR0B & 0b11111000 | mode;
        } 
        else {
          TCCR1B = TCCR1B & 0b11111000 | mode;
        }
      } 
      else if(pin == 3 || pin == 11) 
      {
        switch(divisor) 
        {
        case 1: 
          mode = 0x01; 
          break;
        case 8: 
          mode = 0x02; 
          break;
        case 32: 
          mode = 0x03; 
          break;
        case 64: 
          mode = 0x04; 
          break;
        case 128: 
          mode = 0x05; 
          break;
        case 256: 
          mode = 0x06; 
          break;
        case 1024: 
          mode = 0x7; 
          break;
        default: 
          return;
        }
        TCCR2B = TCCR2B & 0b11111000 | mode;
      }
    }
    //=======================================================================
    int getTemperature()
    {  
      analogWrite(PWMpin, 0);        //switch off heater
      delay(DELAY_MEASURE);            //wait for some time (to get low pass filter in steady state)
    
    
      total = total - readings[readIndex];
      readings[readIndex] = analogRead(TEMPin);
      total = total + readings[readIndex];
      readIndex = readIndex + 1;
    
    
      if (readIndex >= numReadings) 
      {
        readIndex = 0;
      }
      adcValue = total / numReadings;
      analogWrite(PWMpin, pwm);    //switch heater back to last value
      return round(((float) adcValue)*ADC_TO_TEMP_GAIN+ADC_TO_TEMP_OFFSET); //apply linear conversion to actual temperature
    }
    //=======================================================================
    void print_histogram(float val, float maxVal) 
    {
      int i;
      int bloks;
      float histogram;
    
    
      lcd.noBlink(); 
      histogram = (SIZE_BAR * val) / maxVal;
      histogram = histogram + 0.5; 
      bloks = (int)histogram / 5;
    
    
      for (i = 0; i < bloks; i++)
      {
        lcd.write(5); 
      }  
      if ((int)(histogram) % 5 > 0)
      {
        lcd.write((int)(histogram) % 5);    
      }
      lcd.print(" ");  
    }
    //=======================================================================
    Ο παραπάνω κώδικας έχει λάβει updated version λόγω της προσθήκης ενός χρονομετρητή που μετρά ώρα λειτουργίας του σταθμού συνολικά
    και ενός δεύτερου που βγάζει σε λειτουργία STBY το στέλεχος μετά απο 20 λεπτά λειτουργίας. Αν δεν τα χρειάζεστε, ανατρέξτε στο προηγούμενο
    version, εδώ:

    https://github.com/manolena/DIY-Sold..._1/IRON_NANO_5

    Για τις βιβλιοθήκες που χρησιμοποιήθηκαν, μπορείτε να ανατρέξετε στο:

    https://github.com/manolena/DIY-Sold...ster/Libraries

    2 Not allowed! Not allowed!

  7. #26
    Μέλος
    Εγγραφή
    Apr 2006
    Περιοχή
    Κέρκυρα
    Μηνύματα
    5.959

    Προεπιλογή

    To Lm336 υποθέτω είναι το -2,5 (όχι το -5), σωστά?

    και από μένα συγχαρητήρια! εξαιρετικά προσεγμένο!

    0 Not allowed! Not allowed!

  8. Ένα μέλος ευχαρίστησε τον chip για αυτό το χρήσιμο μήνυμα:

    manolena (30-05-16)

  9. #27
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Ναι, ευχαριστώ για τη διευκρίνηση είναι το LM336Z-2.5
    Εκ παραδρομής δεν φαίνεται στον κατάλογο υλικών ούτε στο συνημμένο BOM

    1 Not allowed! Not allowed!

  10. #28
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Για την οθόνη:

    Στον κατάλογο υλικών είναι το εξάρτημα LCD1. Είναι μια κλασσική οθόνη 4 γραμμών, 20 χαρακτήρων με οπίσθιο φωτισμό LED αλλά με προσαρμοσμένη πάνω της μια
    μικρή πλακετίτσα σαν αυτή εδώ:

    http://www.ebay.com/itm/IIC-I2C-TWI-...EAAOSwBahU1CiK

    Άλλως, το σχέδιο για να τη φτιάξει κάποιος μόνος του είναι αυτό:

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  I2C LCD.png Εμφανίσεις:  235 Μέγεθος:  62,1 KB

    Μη δίνετε και πολλή σημασία στα όποια λαθάκια στις ονομασίες, η οθόνη είναι πάντα 4x20. Οι γραμμές είναι 4, SDA, SCL, VCC και GND

    EDIT: Για το configuration των pins του PCF8574 στον κώδικα της οθόνης, θα τα εξηγήσουμε αν υπάρχει ερώτηση.

    1 Not allowed! Not allowed!

  11. #29
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από manolena Εμφάνιση μηνυμάτων
    Για την οθόνη:

    Στον κατάλογο υλικών είναι το εξάρτημα LCD1. Είναι μια κλασσική οθόνη 4 γραμμών, 20 χαρακτήρων με οπίσθιο φωτισμό LED αλλά με προσαρμοσμένη πάνω της μια
    μικρή πλακετίτσα σαν αυτή εδώ:

    http://www.ebay.com/itm/IIC-I2C-TWI-...EAAOSwBahU1CiK

    Άλλως, το σχέδιο για να τη φτιάξει κάποιος μόνος του είναι αυτό:

    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  I2C LCD.png Εμφανίσεις:  235 Μέγεθος:  62,1 KB

    Μη δίνετε και πολλή σημασία στα όποια λαθάκια στις ονομασίες, η οθόνη είναι πάντα 4x20. Οι γραμμές είναι 4, SDA, SCL, VCC και GND

    EDIT: Για το configuration των pins του PCF8574 στον κώδικα της οθόνης, θα τα εξηγήσουμε αν υπάρχει ερώτηση.
    Τελικά είχα IIC/I2C/TWI/SPI στο κουτί με τα modules arduino,δε το κόλλησα ακόμη απλά ανεβάζω μερικές φώτο πως θα κολληθεί σωστά,για αποφυγή προβλημάτων:
    Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  P5290313.jpg Εμφανίσεις:  162 Μέγεθος:  138,8 KB Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  P5290314.jpg Εμφανίσεις:  178 Μέγεθος:  134,3 KB Πατήστε στην εικόνα για να τη δείτε σε μεγένθυνση Όνομα:  P5290315.jpg Εμφανίσεις:  198 Μέγεθος:  122,8 KB ......
    Φίλε liat δεν είχα δεύτερο ..... ..... τεσπά...
    Φθηνά έχει εδώ:
    IIC-I2C-TWI-SPI

    3 Not allowed! Not allowed!

  12. #30
    Μέλος Το avatar του χρήστη SeAfasia
    Όνομα
    SV3IRG Dinos
    Εγγραφή
    Sep 2012
    Περιοχή
    Άργος.
    Μηνύματα
    3.363

    Προεπιλογή

    μέσω πμ ο liat(Γιάννης) με ενημέρωσε για τα εξής τροφοδοτικά:
    6A 24V
    και
    AC 100V-240V DC 24V 4A 96W
    Eπίσης ένας πωλητής που περνάει τα C.C για το 3A DC-DC Converter

    0 Not allowed! Not allowed!

  13. 2 μέλη ευχαρίστησαν τον SeAfasia για αυτό το χρήσιμο μήνυμα:

    finos (01-06-16), manolena (01-06-16)

Σελίδα 3 από 21 ΠρώτηΠρώτη 1 2 3 4 5 13 ... ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Arduino LCD 4x20 και Ελληνικά
    By NIKPAPAZOGLOU in forum Μικροελεγκτές
    Απαντήσεις: 9
    Τελευταίο Μήνυμα: 26-07-19, 11:15
  2. Θερμόμετρα και άλλα, με Arduino nano
    By CLOCKMAN in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 11
    Τελευταίο Μήνυμα: 18-02-16, 21:20
  3. Soldering Iron ή φθηνό Soldering Station?
    By Panius in forum Ερωτήσεις Αρχάριων
    Απαντήσεις: 20
    Τελευταίο Μήνυμα: 20-09-13, 17:30
  4. JBC NT105-A Nano Soldering Iron *
    By bchris in forum Όργανα & Εξοπλισμός
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 15-07-13, 11:03
  5. Soldering & Disoldering Station
    By 8Nightwish2 in forum Όργανα & Εξοπλισμός
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 29-08-11, 17:48

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας