Loading...
  Show Posts
Pages: [1] 2
1  International / Deutsch / Re: Spannungsmessung bis 15V on: May 06, 2013, 04:35:15 pm
und was machst du, wenn du Spannungen < 10V messen willst?
2  International / Deutsch / Re: Spannungsmessung bis 15V on: May 05, 2013, 03:41:12 pm
Hallo,
dreh mal die Eingangsspannung solange hoch, bis sensorValue 1023 wird. Der Spannungswert, den du jetzt an deinem Multimeter abliest, ist der Multiplikator für dein Voltwert.

gruß
ardubu
3  International / Deutsch / Re: Verständnisproblem beim CODE on: April 23, 2013, 05:00:21 pm
Du hast in der IF Anweisung eine Runde Klammer geöffnet und eine Geschwungene geschlossen.
4  International / Deutsch / Re: Lipo überwachung on: April 01, 2013, 04:43:05 pm
Teil2
Code:


void loop()
{
      DateTime now = RTC.now();
      int (zeit10) = ((now.second())%10);
      int (zeit5) = ((now.second())%5);
      a=a++;
      b=b++;
  float korrFakt[8]= {(1.002725956),(0.998),(1.000068),(0.998),(1.00214),(0.99751),(0.998851),(0.996)}; //Korrekturfaktoren für die 8 Eingänge
  float zw;
  int mwdu1;
  int mwdu2;
 
   
     if (zeit10==0 && a==1)
    {
     datei = SD.open(dateiname, FILE_WRITE);
     datei.print(now.hour()); datei.print(":");
           if (now.minute()<10) {datei.print("0");}
     datei.print(now.minute()); datei.print(":");
           if (now.second()<10) {datei.print("0");}
     datei.print(now.second());
     datei.print(",");
                                                                     
     Serial.print(now.hour()); Serial.print(":");
            if (now.minute()<10) {Serial.print("0");}
     Serial.print(now.minute()); Serial.print(":");
            if (now.second()<10) {Serial.print("0");}
     Serial.print(now.second());
     Serial.print(",");
    }
   
    for (int analogPin = 8; analogPin < 15; analogPin+=2) {
     mwdu1 = analogRead(analogPin); // liest die Eingänge 1, 3, 5, 7
     mwdu2 = analogRead(analogPin+1);// liest die Eingänge 2, 4, 6, 8
     mwdu1=map(mwdu1,10,1023,12,1023);
     mwdu2=map(mwdu2,10,1023,12,1023);
     if(mwdu1<=5) {mwdu1=0;}
     if(mwdu2<=5) {mwdu2=0;}
     float(U1) = (((mwdu1 *mb) / tm ) * korrFakt[analogPin-8]);//wandelt den digitalen Messwert in einen analogen, rechnet den Spannungsteiler und den Korrekturfaktor ein
     float(U2) = (((mwdu2 *mb) / tm ) * korrFakt[analogPin-7]);                                                     
     float u1 = U1;
   //  float u2 = U2;
     
    if (analogPin == 10 || analogPin == 14) {
        U1 = U1 - zw;}// zieht 3. und 7. Messwert den vorherigen ab, wenn eine Spannung anliegt
    zw = U2; //Zwischenwert für das Abziehen
        U2 = U2 - u1; //zieht vom Messwert den vorherigen ab
                   
    //Strommessung
    int(mwIu1) = analogRead(2); //liest den 1. Stromeingang
    int(mwIu2) = analogRead(3); //liest den 2. Stromeingang
    float(Iu1) = (((mwIu1-101.0)*30.4)/750);
    float(Iu2) = (((mwIu2-101.0)*30.4)/750);
   
    //Ausgabe
    if (zeit10==0 && a<=1) {
      Serial.print (U1,5 ); //schreibt den Messwert 6 stellig auf den seriellen monitor
      Serial.print (" ");
      Serial.print (U2,5 ); //schreibt den Messwert 6 stellig auf den seriellen monitor
      Serial.print (" ");
      Serial.print (mwdu1 ) ;//schreibt den Messwert 6 stellig auf den seriellen monitor
      Serial.print (" ");
      Serial.print (mwdu2 ) ;//schreibt den Messwert 6 stellig auf den seriellen monitor
      Serial.print (" ");
      //Serial.print (zw); //schreibt den Messwert 6 stellig auf den seriellen monitor
      //Serial.print (" ");

      datei.print(U1);// schreibt den Messwert auf die SD Karte
      datei.print (",");// schreibt hinter den Messwert ein Komma
      datei.print(U2);
      datei.print (",");
     
      if (analogPin==14) {
      Serial.print (Iu1,6);
      Serial.print (",");
      Serial.print (Iu2,6);
      Serial.print (",");
      Serial.print (mwIu1);
      Serial.print (",");
      Serial.print (mwIu2);
      Serial.print (",");
      Serial.print (C1);
      Serial.print (",");
      Serial.print (C2);
      Serial.println();
     
      datei.print(Iu1,1);
      datei.print(",");
      datei.print(Iu2,1);
      datei.print(",");
      datei.print(C1,1);
      datei.print(",");
      datei.print(C2,1);
      datei.println();
                          }
    }
       
        // Ausgabe auf LCD
        if (zeit10 == 0 && a<=1){
         
        int(zeile);
        if (analogPin==8){zeile=0;lcd.clear();}
        if (analogPin==10){zeile=1;}
        if (analogPin==12){zeile=2;}
        if (analogPin==14){zeile=3;}
        lcd.setCursor(0,zeile);
        lcd.print("U") ;
        lcd.print(analogPin-7);// zeigt welche Spannung angezeigt wird;
        lcd.print("=");
        lcd.print(U1); // zeigt den Messwert;
        lcd.print("V ");// zeigt hinter dem Messwert V;
        lcd.setCursor(10, zeile);
        lcd.print("U") ;
        lcd.print(analogPin-6); // zeigt welche Spannung angezeigt wird;
        lcd.print("=");
        lcd.print(U2); // zeigt den Messwert;
        lcd.print("V ");// zeigt hinter dem Messwert V;
       
        }
        if (zeit10!=0){a=0;}

        if ((zeit5==0) && (zeit10!=0) && (b<=1))
        {
          if (analogPin==14) {
   
             //-------------------------------------------------------------------------------------           
      //Kapazitätsberechnung
     
      strom1=strom1+Iu1;
      strom2=strom2+Iu2;
      C1=(strom1/360); // Berechnung der ge- oder entladenen Amperstunden.
      C2=(strom2/360); // Berechnung der ge- oder entladenen Amperstunden.
   //--------------------------------------------------------------------------------------     
     
            //LCD Ausgabe 2.Seite
           lcd.clear(); // löscht das LCD
           lcd.print("I1=");
           lcd.print(Iu1,1);
           lcd.print("A");
           lcd.setCursor(10, 0);                 
           lcd.print("I2=");
           lcd.print(Iu2,1);
           lcd.print("A");
           lcd.setCursor(0,1);
           lcd.print("C1=");
           lcd.print(C1,1);
           lcd.print("Ah");
           lcd.setCursor(10,1);
           lcd.print("C2=");
           lcd.print(C2,1);
           lcd.print("Ah");
           lcd.setCursor(0,3);
           lcd.print(now.day());lcd.print(".");lcd.print(now.month());lcd.print(".");lcd.print(now.year());
           lcd.setCursor(13,3);
           lcd.print(now.hour());lcd.print(":");
           if (now.minute() < 10){lcd.print("0");}
           lcd.print(now.minute());
                          }
        }
          if (zeit5 !=0){b=0;}
   
}
datei.close();
}//ende loop
5  International / Deutsch / Re: Lipo überwachung on: April 01, 2013, 04:41:43 pm
hallo Alex,
ich habe dir mal einen sketch für einen lifepo4 4s2p drangehängt, müsstest deinen Bedürfnissen entsprechend abändern
der sketch ist aufgeteilt in 2 Teile
gruß ardubu
Teil1
Code:

/*
  8+2 Kanal Spannungesmesser und Strommesser mit SD card Datenlogger
 inkl. Kapazitätsberechnung mit Ausgabe auf LCD + SD
 Alle Belegungen sind für den Mega 2560, sowie LCD 2004 mit I2C und SD Plus Shield
 Dieser Sketch speichert die Daten von 10 analogen Eingängen auf der SD Karte und zeigt sie auf dem LCD an
 
 Die Schaltung:
  8 Spannungsteiler an den analogen Pins 8 bis 15
  2 ACS 715 an den analogen Pins 2 + 3
 
 Pinbelegung der RTC über I2C
 
  Pinbelgung für die SD Karte:
   MOSI - pin 50
   MISO - pin 51
   CLK - pin 52
   CS - pin 53
 
 Die Schaltung für das LCD:
  Adresse 27 hex
  LCD GND an GND
  LCD VCC an 5V
  LCD SCL an Pin 21
  LCD SDA an Pin 22
 
 
 Created  6. Juni 2012
 geändert 9.März 2013
 by B. K.
 
 */

#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal_I2C.h> // benutzt den library code:
LiquidCrystal_I2C lcd(0x27,20,4); // initialisiert die library mit der I2C Adresse 0x27

File datei;  // test datei
//const uint8_t SD_CS = 53; // SD chip select
RTC_DS1307 RTC;  // define the Real Time Clock object
//------------------------------------------------------------------------------
// call back for datei timestamps
void dateTime(uint16_t* date, uint16_t* time) {
  DateTime now = RTC.now();

  // return date using FAT_DATE macro to format fields
  *date = FAT_DATE(now.year(), now.month(), now.day());

  // return time using FAT_TIME macro to format fields
  *time = FAT_TIME(now.hour(), now.minute(), now.second());
}
//------------------------------------------------------------------------------
const int chipSelect = 53;
const float mb =16.0; //Messbereich
const int tm = 1023.0; // Teiler Messbereich (10 Bit)
float (strom1)=0;
float (strom2)=0;
float C1=0;
float C2=0;
byte a=0;
byte b=0;
int c=0;
char d;// 8. Buchstabe des Dateinamens
char(dateiname)[13]="datalog0.csv";

//========================================================================================================================================================
void setup() {
  Serial.begin(9600);
  Wire.begin();
  if (!RTC.begin()) {
    Serial.println("RTC fehlt");
    while(1);       }
  DateTime now = RTC.now();
  lcd.init();
  lcd.begin(20,4); // gibt die Zeichenanzahl und Zeilenzahl des LCD's vor:
  lcd.backlight();
  pinMode(chipSelect, OUTPUT); //CS

  // setzt die date time callback function
  SdFile::dateTimeCallback(dateTime);
  
if (!SD.begin(chipSelect)) {  // prüft ob die SD Karte eingeschoben ist und initialisiert werden kann
    Serial.println();
    Serial.print("Karte Fehlt");
    Serial.println();  
    lcd.print("Karte fehlt");
    delay(2000);
    lcd.clear();
    return;}
  
    while (SD.exists(dateiname)) {//püft ob der Datiename schon vergeben ist
    c=c++;
    if (c >9){Serial.println("Bereits 10 Dateien auf SD Karte");return;}
    d= c+'0'; //Umwandlung von int in char
    dateiname[7]=d;              }

    lcd.home();
    lcd.print("Hallo ");
    lcd.setCursor(0,1);
    lcd.print("Messen und loggen");
    lcd.setCursor(0,2);
    lcd.print("Timestamp + RTC ");
    lcd.setCursor(0,3);
    lcd.print("U_8 I_2 C_2");
    delay(3000);
    
    File datei = SD.open(dateiname, FILE_WRITE);
     datei.println();
     datei.print(now.day()); datei.print("."); datei.print(now.month()); datei.print("."); datei.print(now.year()); Serial.print("  ");
     datei.println();
     datei.println("Zeit,U1,U2,U3,U4,U5,U6,U7,U8,I1,I2,C1,C2"); // schreibt eine Kopfzeile auf den seriellen Monitor
     datei.close();
  
       Serial.println();
       Serial.print(now.day()); Serial.print("."); Serial.print(now.month()); Serial.print("."); Serial.print(now.year()); Serial.print("  ");
       Serial.println();
       Serial.println("Zeit,U1,U2,U3,U4,U5,U6,U7,U8,I1,I2,C1,C2"); // schreibt eine Kopfzeile auf den seriellen Monitor
    
}//setup ende
//===============================================================================================================================================================
6  International / Deutsch / Re: PWM via Taster on: April 01, 2013, 05:35:00 am
Hallo Scorch,
das erste was mir auffällt, du hast blnLuefterTaster als boolean deklariert und auf 15 gesetzt. boolean kann aber nur true oder false sein. Dann hast du blnLuefterTaste als Input deklariert und und auf high gesetzt. Ich vermute mal du möchtest den Pin 15 als Eingang für den Taster verwenden, dann solltest du int oder Byte verwenden.
Weiterhin liest du den Analogen Eingang 0 und prüfst ihn auf werte zwischen 0 und 3, ich glaube das wird bei 1024 Werten recht ungenau.
Gruß Ardubu
7  International / Deutsch / Re: Spannungsmessung bis 15V on: March 28, 2013, 06:01:43 pm
der ADC hat 10 Bit (2^10=1024) wenn man bei 0 anfängt zu zählen, ist 1023 der 1024ste Wert.
8  International / Deutsch / Re: Spannungsmessung bis 15V on: March 28, 2013, 05:15:37 pm
Hallo,
bei mir kommen rechnerisch ca. 15,64 V raus, und wenn du die mit deinem Analogwert /1023 multiplizierst, müsste das Ergebnis etwa passen.
9  International / Deutsch / suche rat für herstellung einer (rest)reichweitenanzeige on: February 03, 2013, 07:30:55 am
hallo

hast du die möglichkeit über das bms den momentanen Strom und die einzelnen zellenspannungen auszulesen?

wenn deine Tankuhr nur die Spannung erfasst ist der Effekt normal, da die zellenspannung unter last einbricht, insofern ist der Ansatz den wh Durchschnittsverbrauch zu erfassen und mit den eingespeisten wh zu vergleichen pfiffiger.

wenn du keine einzelnen zellenspannungen über das bms angezeigt bekommst, solltest du das evtl. in deinem projekt mit berücksichtigen
10  International / Deutsch / Re: MPX5010DP on: January 18, 2013, 04:51:09 pm
Hallo,
versuch es mal mit folgenden zeilen in der loop:

int mpx = analogRead(mpxPin);
float mbar = mpx/10.23 //ersetzt mpx*100/1023 für hPa


11  International / Deutsch / Re: Sharp Sensor Probleme mit Transistor an Platine on: January 10, 2013, 06:19:02 am
sorry, ich habe anscheinend einen knick in der Optik, du hast recht
12  International / Deutsch / Re: Sharp Sensor Probleme mit Transistor an Platine on: January 09, 2013, 06:22:56 pm
auf dem bild von der bestückungsseite sieht es aus als wäre die rundung des transistiors zum poti. das bild auf der cu seite ist genau andersherum, du hast also die basis schon nach hinten gebogen, somit liegt der Kollektor an der ir Diode, vorausgesetzt es ist der 2n3906
gruß ardubu
13  International / Deutsch / Re: Sharp Sensor Probleme mit Transistor an Platine on: January 09, 2013, 05:55:57 am
hallo gibsonuser

wenn ich das richtig sehe, hast du auf der platine emitter und kollektor vertauscht. löte den Transistor von der cu seite auf, dann müsste es gehen.
gruß ardubu
14  International / Deutsch / Re: Universelles Netzgerät mit Arduino & Co on: January 09, 2013, 04:35:33 am
hallo autoino

ich habe dir mal die anzeige für ma und Leistung geändert und ein delay eingefügt, damit die letzte stelle nicht so rum zappelt.
die Probleme mit den klebenden zeichen bekommst du aber auch bei Spannung und Strom wenn du die 10 über und unterschreitest.

gruß ardubu

Code:
[#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,20,4);  // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
 
  lcd.init();                      // initialize the lcd
  lcd.backlight();
  Wire.begin();
 
 
  lcd.begin(20, 4);
  lcd.print("UNG");
  lcd.setCursor(0, 1);
  lcd.print("Universelles");
  lcd.setCursor(0, 2);
  lcd.print("Netz-");
  lcd.setCursor(0, 3);
  lcd.print("Geraet");

// Löschen der Werbung nach der vorgegebenen Zeit
  lcd.cursor();
  delay(2500);
  lcd.clear();
}

void loop() {

// Einlesen der Spannung
  int voltage = analogRead(A0);
// Skalierung des Eingangssignals auf die maximal möglichen 5V bei einer Auflösung von 10 bit
  float u = voltage * (5.0 / 1023.0);
 
// Einlesen des Stromes
  int current = analogRead(A1);
// Skalierung des Eingangssignals auf die maximal möglichen 5A bei einer Auflösung von 10 bit
  float i = current * (5.0 / 1023.0);
  int i_mil = i * 1000;

// Berechnen der Leistung nud Multiplikation mit 1,0 für die Darstellung auf 2 Kommastellen
  float p = u * i; 
 
// Ausgane an das LCD --> 1.: Stelle; 2.: Reihe
  //lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Spannung:");
  lcd.setCursor(10, 0);
  lcd.print("[V]  ");
  lcd.setCursor(14, 0);
  lcd.print(u);
  lcd.setCursor(0, 1);
  lcd.print("Strom:");
  lcd.setCursor(10, 1);
  lcd.print("[A]  ");
  lcd.setCursor(14, 1);
  lcd.print(i);
  lcd.setCursor(0, 2);
  lcd.print("");
  lcd.setCursor(9, 2);
  lcd.print("[mA] ");
  lcd.setCursor(14, 2);
  lcd.print("      ");
  lcd.setCursor(14, 2);
  lcd.print(i_mil);
  lcd.setCursor(0, 3);
  lcd.print("Leistung:");
  lcd.setCursor(10, 3);
  lcd.print("[W]  ");
  lcd.setCursor(14, 3);
  lcd.print("      ");
  lcd.setCursor(14, 3);
  lcd.print(p);
  delay(200);
}
/code]
15  International / Deutsch / Windows 8 und Arduino Mega on: December 23, 2012, 12:37:03 pm

nachdem sich bei meinem alten lappi die grafikkarte verabschiedet hat, habe ich mir gestern einen neuen zugelegt.
der neue hat leider windoof 8. beim versuch die treibersoftware für den arduino zu installieren, meckerte win 8 über die fehlende digitale treibersignatur.
im erweiterten bootmenue habe ich die zwangsweise Überprüfung auf digitale treibersignatur abgeschaltet und konnte den treiber installieren.
der mega ist jetzt unter com4 zu erreichen.
da ich noch einen sketch auf dem mega hatte, habe ich den seriellen Monitor gestartet und der hat mir alle Daten gesendet, die er sollte.

Pages: [1] 2