Εμφάνιση αποτελεσμάτων : 1 έως 6 από 6

Θέμα: βολτομετρο αμπερομετρο με arduino

  1. #1
    Μέλος Το avatar του χρήστη Bobiras
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    αθήνα
    Μηνύματα
    349

    Προεπιλογή βολτομετρο αμπερομετρο με arduino

    καλησπερα σας και παλι, θελω να φτιαξω ενα αμπερομετρο και ενα βολτομετρο με την χρηση του arduino και με αυτα τα ελαχιστα που ξερω απο arduino και μερικα βιντεακια βρηκα λιγο ακρη αλλα οχι 100%.
    το προβλημα μου ειναι οτι το βολτομετρο δουλευει μια χαρα αλλα καποιες φορες τα νουμερα πεφτουν το ενα πανω στο αλλο και το δευτερο ειναι οτι ενω το αμπερομετρο και αυτο μετραει σωστα αλλα καποιες φορες "τσουλαει" πανω κατω περιπου 30-50mA αυτο διορθωνετε με την εντολη delay(); ? και το αμπερομετρο γραφει 3 ψηφια μετα το κομμα ενω θελω 2 να γραφει.
    ο κωδικας ειναι αυτος

    Κώδικας:
    #include "Adafruit_LiquidCrystal.h"
    
    Adafruit_LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    
    
     float vmax = 5.1;
     float r1 = 100000;
     float r2 = 10000;
     
    void setup() {
    
    
      Serial.begin(9600);
      // set up the LCD's number of rows and columns: 
      lcd.begin(16, 2);
      // Print a message to the LCD.
      lcd.setCursor(0, 0);
      lcd.print("Power Supply");
      lcd.setCursor(0, 1);
      lcd.print("0-24v / 10A");
    
    
      delay(2000);
      
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("V>");
      lcd.setCursor(0, 1);
      lcd.print("A>");
    }
    
    
    void loop() {
    
    
      float v = (analogRead(5) * vmax) / 1024.0;
      float v2 = v / (r2 / (r1+r2));
      float amper = ((analogRead(4) - 523) * 27.03 / 1023);
    
    
      Serial.println(v2);
      lcd.setCursor(2, 0);
      lcd.print(v2);
      lcd.setCursor(2, 1);
      lcd.print(amper);
      delay(200);
    }

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Bobiras Εμφάνιση μηνυμάτων
    καλησπερα σας και παλι, θελω να φτιαξω ενα αμπερομετρο και ενα βολτομετρο με την χρηση του arduino και με αυτα τα ελαχιστα που ξερω απο arduino και μερικα βιντεακια βρηκα λιγο ακρη αλλα οχι 100%.
    το προβλημα μου ειναι οτι το βολτομετρο δουλευει μια χαρα αλλα καποιες φορες τα νουμερα πεφτουν το ενα πανω στο αλλο και το δευτερο ειναι οτι ενω το αμπερομετρο και αυτο μετραει σωστα αλλα καποιες φορες "τσουλαει" πανω κατω περιπου 30-50mA αυτο διορθωνετε με την εντολη delay(); ? και το αμπερομετρο γραφει 3 ψηφια μετα το κομμα ενω θελω 2 να γραφει.
    ο κωδικας ειναι αυτος

    Κώδικας:
    #include "Adafruit_LiquidCrystal.h"
    
    Adafruit_LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    
     float vmax = 5.1;
     float r1 = 100000;
     float r2 = 10000;
     float amper;
     
    void setup() {
    
    
    
    
      Serial.begin(9600);
      // set up the LCD's number of rows and columns: 
      lcd.begin(16, 2);
      // Print a message to the LCD.
      lcd.setCursor(0, 0);
      lcd.print("Power Supply");
      lcd.setCursor(0, 1);
      lcd.print("0-24v / 10A");
    
    
    
    
      delay(2000);
      
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("V>");
      lcd.setCursor(0, 1);
      lcd.print("A>");
    }
    
    
    
    
    void loop() {
    
    
    
    
      float v = (analogRead(5) * vmax) / 1024.0;
      float v2 = v / (r2 / (r1+r2));
      
      for(int i = 10; i>0; i--)
      {
         amper += ((analogRead(4) - 523) * 27.03 / 1023);
         delay(2);
      }
      amper /= 10;//μετράς 10 φορές, παίρνεις μέσο όρο
    
    
      Serial.println(v2);
      lcd.setCursor(2, 0);
      lcd.print(v2,2);//=======> (v2,2) σημαίνει 2 δεκαδικά
     lcd.print(" ");//=======> καθαρίζεις το τελείωμα αν η v2<10
      lcd.setCursor(2, 1);
      lcd.print(amper,2);//=======> (amper,2) σημαίνει 2 δεκαδικά
     lcd.print(" ");//=======> καθαρίζεις το τελείωμα αν η amper<10
      delay(200);
    }
    Δοκίμασε το παραπάνω.

    2 Not allowed! Not allowed!

  3. #3
    Μέλος Το avatar του χρήστη Bobiras
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    αθήνα
    Μηνύματα
    349

    Προεπιλογή

    πρωτον τα νουμερα το ενα πανω στο αλλο ειναι κακη συνδεση απο το breadboard, ο κωδικας δουλευει μια χαρα και ευχαριστω πολυ μανο το μονο που αλλαξα τις φορες που μετρα για το μεσο ορο σε 20 και ειδα περιπου που και που 10mA MAX διαφορα, το ιδιο μπωρο να κανω και για την ταση αν θελω?
    με την μετρηση τασης εχω ακομα ενα θεμα οτι οταν εχω ταση πανω απο 10 βολτ εχει 2 δεκαδικα οταν ειναι κατω απο 10 εχει 3 δεκαδικα

    0 Not allowed! Not allowed!

  4. #4
    Μέλος Το avatar του χρήστη Bobiras
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    αθήνα
    Μηνύματα
    349

    Προεπιλογή

    επανερχομαι για ενα ακομα προβλημα, ευχαριστω το φιλο manolena για την επεξηγηση καποιον εντολων.
    εχω βαλει ενα ανεμιστηρα και ελεγχο του pwm αλλα οταν ειναι στο μηδεν η εξοδος pwm ο ανεμιστηρας γυρναει ισα ισα αυτο διορθονετε?
    και οταν κανω reset το arduino η οταν το ανοιγω ο ανεμιστηρας δουλευει στο μεγιστο και επανερχετε στο θεωριτικο μηδεν μωλις φορτοσει το sketch.
    τη πρεπει να κανω οταν ξεκηναει το arduino ο ανεμιστηρας να μην δουλευει παρα μονο οταν παρει εντολη?

    1 Not allowed! Not allowed!

  5. #5
    Μέλος Το avatar του χρήστη Bobiras
    Όνομα
    Νίκος
    Εγγραφή
    Jul 2009
    Περιοχή
    αθήνα
    Μηνύματα
    349

    Προεπιλογή

    οριστε και ο κωδικας.
    Κώδικας:
    #include "Adafruit_LiquidCrystal.h"
    
    Adafruit_LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    
    
     float vmax = 5.1;
     float r1 = 100000;
     float r2 = 10000;
     float amper;
     float lm35;
    
    
     int fanOutputPin = 9;
     int outputValue = 0;
     int outputPerc = 0;
     int shutdownTemp = 40;
     int startTemp = 35;
     int maxTemp = 50; 
     
     
    void setup() {
      pinMode(9, OUTPUT);
      Serial.begin(9600);
      // set up the LCD's number of rows and columns: 
      lcd.begin(16, 2);
      // Print a message to the LCD.
      lcd.setCursor(0, 0);
      lcd.print("Power Supply");
      lcd.setCursor(0, 1);
      lcd.print("0-30v / 0-10A");
      delay(3000);
      
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("V>");
      lcd.setCursor(0, 1);
      lcd.print("A>");
      lcd.setCursor(10, 0);
      lcd.print("T.");
      lcd.setCursor(15, 0);
      lcd.print((char)223);
      lcd.setCursor(10, 1);
      lcd.print("F.");
      lcd.setCursor(15, 1);
      lcd.print(outputPerc);  // printing PWM output percentage
      lcd.print("%   ");
      
    }
    
    
    
    
    
    
    void loop() {    
      
      float v = (analogRead(4) * vmax) / 1024.0;
      float v2 = v / (r2 / (r1+r2));
      
      for(int i = 10; i>0; i--)
      {
         amper += ((analogRead(5) - 523) * 27.03 / 1023);
         delay(2);
      }
      amper /= 10;//μετράς 20 φορές, παίρνεις μέσο όρο
      
      for(int i = 20; i>0; i--)
      {
         lm35 += ((analogRead(3) * 5.0 * 100.0) / 1024.0);
         delay(2);
      }
      lm35 /= 20;//μετράς 20 φορές, παίρνεις μέσο όρο
    
    
      if (lm35 < shutdownTemp)   // if temp is below shutoff point
        outputValue = 0;  // output will be 0
      else if (lm35 > shutdownTemp && lm35 < startTemp && outputValue == 0) // temp between shutdown and startup
        outputValue = 0;                                                      // and fan is off, leave it off
      else if (lm35 > startTemp && lm35 < maxTemp) //temp is between startup and maximum
        outputValue = map(lm35, shutdownTemp, maxTemp, 50, 255);  // start fan and adjust accordingly
      else if (lm35 > maxTemp)    // temp is above maximum
        outputValue = 255;  // fan speed is maximum
      else  // if no other condition is acceptable, must be in transition and fan is still running
        outputValue = map(lm35, shutdownTemp, maxTemp, 20, 255); //let it run until shutoff temp is reached
    
    
      analogWrite(fanOutputPin, outputValue);  // writes to PWM output  
      outputPerc = map(outputValue, 0, 255, 0, 100);
    
    
    if (outputValue < 1)
      {
        Serial.println("   FAN OFF");
      }
      else
      {
        Serial.print("   Output Percentage = ");
        Serial.println(outputPerc);
      }
      
      Serial.println(v2);  
      lcd.setCursor(2, 0);
      lcd.print(v2, 1);//=======> (v2,1) σημαίνει 1 δεκαδικo
      lcd.print(" ");//=======> καθαρίζεις το τελείωμα αν η v2<10
      lcd.setCursor(2, 1);
      lcd.print(amper , 1);//=======> (amper,1) σημαίνει 1 δεκαδικo
      lcd.print(" ");//=======> καθαρίζεις το τελείωμα αν η amper<10   
      lcd.setCursor(12, 0);
      lcd.print(lm35, 0);     
      lcd.setCursor(12, 1);
      lcd.print(outputPerc);  // printing PWM output percentage
      lcd.print("%   ");
       delay(200);
    }

    1 Not allowed! Not allowed!

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

    Προεπιλογή

    1η ερώτηση. Βάλε
    If(outputValue == 0)
    digitalwrite(fanOutputPin, low);
    else
    analogWrite(fanOutputPin, outputValue);
    και δεν γυρίζει τίποτα. Βέβαια δεν είναι τρόπος αυτός σε κανονική C γιατί το pwm συνεχίζει και ας γράφεις εσύ high-low, αλλά στο arduino αν θυμάμαι καλά μέσα στους ~50 κύκλους που θέλει η digitalWrite ελέγχει και αν έχει pwm και το κλίνει.

    2η ερώτηση. Κατά την εκκίνηση ο μΕ κάνει όλα τα pin του εισόδους χωρίς εσωτερικές pull αντιστάσεις. Λογικά θα θέλεις και μια εξωτερική pull αντίσταση, up ή down ανάλογα με τι οδηγείς τον κινητήρα. Το λογικό επίπεδο σε pin σε κατάσταση υψηλής αντίστασης χωρίς pull αντίσταση δεν ορίζεται άρα πρέπει να το δέσεις στο λογικό επίπεδο που δεν γυρίζει ο ανεμιστήρας. Μετά που το πιν γίνεται έξοδος υπερτερεί σε σχέση με την pull αντίσταση αρκεί να είναι σχετικά μεγάλη η τιμή της πχ 1KΩ, 10KΩ.

    1 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Fire Doger : 30-04-17 στις 02:45

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

  1. βολτομετρο-αμπερομετρο σε τροφοδοτικο.
    By vaggeros in forum Κυκλώματα Τροφοδοτικών
    Απαντήσεις: 2
    Τελευταίο Μήνυμα: 13-02-16, 15:48
  2. βολτομετρο Arduino
    By Ιων in forum Μικροελεγκτές
    Απαντήσεις: 16
    Τελευταίο Μήνυμα: 06-12-15, 20:01
  3. Αμπερομετρο dc
    By ΗΝ1984 in forum Ηλεκτρολογικά
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 10-08-15, 13:10
  4. ερωτηση για αμπερομετρο και βολτομετρο
    By asteris_veria in forum Ερωτήσεις Θεωρίας
    Απαντήσεις: 11
    Τελευταίο Μήνυμα: 25-04-15, 14:23
  5. Βολτομετρο Αμπερομετρο με το ICL7107CPL
    By ΘΥΜΙΟΣ in forum Παρουσίαση Ολοκληρωμένων Κατασκευών
    Απαντήσεις: 18
    Τελευταίο Μήνυμα: 23-02-12, 23:07

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

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