Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:hardware_tricks:batterie_messungen:rc_glied_messung

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
projekte:hardware_tricks:batterie_messungen:rc_glied_messung [2018-07-23 20:46] – angelegt gamecompilerprojekte:hardware_tricks:batterie_messungen:rc_glied_messung [2022-11-17 22:34] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-====== TODO !!! RC-Glied Batterie Spannungs Messung ====== +====== RC-Glied Batterie Spannungs Messung ====== 
-Noch nicht fertig. +Wichtig zu wissen, das ganze geht nur wegen der Vernachlässigung von Vc1! 
 +Diese Methode ist relativ ungenau, bietet aber einen groben Überblick ob eine Batterie fast leer ist.
 ===== Formeln ===== ===== Formeln =====
  
-{{:projekte:hardware_tricks:batterie_messungen:codecogseqn.png?direct&200|}} +{{:projekte:hardware_tricks:batterie_messungen:codecogseqn.png?200|}}
 ===== Schaltplan ===== ===== Schaltplan =====
 +
 +Die 3.3V Spannungsquelle soll die "Referenzspannung" der I/Os angeben. Im Falle des RaspberryPis ist das 3.3V.
 +Im Falle eines 5V Arduinos 5V. Diese Spannungsquelle ist die Betriebsspannung des CPUs.
  
 {{:projekte:hardware_tricks:batterie_messungen:schaltplan.png?direct&400|}} {{:projekte:hardware_tricks:batterie_messungen:schaltplan.png?direct&400|}}
  
-===== Links =====+===== Code - Arduino===== 
 + 
 +<file c sketch.ino> 
 +#include <Arduino.h> 
 + 
 +void setup() { 
 +    // put your setup code here, to run once: 
 +    Serial.begin(115200); 
 +
 +const int rcpin = 2; 
 +const float vih_voltage = 2.85; 
 +const float capacity = 100 * pow(10, -9); 
 +const float resistor = 100000; 
 +const int dischargeDelay = 200;
  
-Externe Links werden automatisch erkannt: http://www.hackerspace-bremen.de oder einfach www.hackerspace-bremen.de. +float meassureVoltage(){ 
-Verweise können auch hinter eigenen Begriffen versteckt werden: [[http://www.hackerspace-bremen.de|hier ist dein Hackerspace]]. +  //Pin auf Low setzen zum entladen des Kondensators 
-E-Mail Adressen werden in spitze Klammern gesetzt: <info@hackerspace-bremen.de>.+  pinMode(2, OUTPUT); 
 +  digitalWrite(rcpin, LOW); 
 +  delay(dischargeDelay); //Warten bis Kondensator leer 
 +  long startMicros = micros(); //Startzeit festlegen 
 +  pinMode(2, INPUT); //Pin auf Input legen um zu detektieren wann Pin High 
 +  while(!digitalRead(rcpin)){ //Warte solange Pin nicht High
  
-Interne Links werden in doppelten eckigen Klammern gesetzt: +  } 
-[[pagename]] +  long endMicros = micros(); //Neue Zeit speichern 
 +  long finalMicros = endMicros - startMicros; //Dauer des Vorgangs berechnen 
 +  //Serial.println(finalMicros);
  
-Ein Link kann auch hinter einem Begriff oder einer Beschreibung versteckt werden: +  //Berechnen der Spannung 
-[[pagename|Beschreibung für einen Link]].+  float vbat = (vih_voltage * capacity * resistor) /((float)(finalMicros * pow(10, -6))); 
 +  return vbat; 
 +}
  
-===== Listen ===== 
  
-* Dies ist ein Eintrag einer unsortierten Liste +void loop() { 
-  * Ein zweiter Eintrag +    Serial.println(meassureVoltage()); 
-    * Unterschiedliche Ebenen einer Liste durch Hinzufügen von weiteren zwei Leerzeichen +} 
-  * Noch ein Eintrag+</file>
  
-  Dies ist ein Eintrag einer nummerierte Liste +===== Code Java RaspberryPi ===== 
-  - Ein zweiter Eintrag +<file java RC_meassure.java> 
-    - Unterschiedliche Ebenen einer Liste durch Hinzufügen von weiteren zwei Leerzeichen +package rc_meassure;
-  - Noch ein Eintrag+
  
-===== Tabellen =====+import com.pi4j.io.gpio.GpioController; 
 +import com.pi4j.io.gpio.GpioFactory; 
 +import com.pi4j.io.gpio.GpioPinDigitalInput; 
 +import com.pi4j.io.gpio.GpioPinDigitalOutput; 
 +import com.pi4j.io.gpio.Pin; 
 +import com.pi4j.io.gpio.PinState; 
 +import com.pi4j.io.gpio.RaspiPin; 
 +import static java.lang.Math.pow; 
 +import java.util.concurrent.TimeUnit;
  
-^ hervorgehoben       ^ zum Beispiel für                                                  ^ eine Titelzeile         ^ +/** 
-| Zeile 1 Spalte 1    | Zeile 1 Spalte 2| Zeile 1 Spalte 3        | + * 
-| Zeile 2 Spalte 1    | doppelte Spaltenbreite (beachte den doppelten senkrechten Strich) || + * In einer echten Java Anwendung würde man das nicht so machen, das dient wirklich nur als Beispiel. 
-| Zeile 3 Spalte 1    | Zeile 2 Spalte 2                                                   | Zeile 2 Spalte 3        | + */ 
-| Zeile 4 Spalte 1    | Zeile 3 Spalte 2           | Zeile 4 Spalte 3        |+public class RC_meassure {
  
-^          Tabelle mit Ausrichtung         ^^^ +    /** 
-|        Rechts|    Mitte     |Links         | +     * @param args the command line arguments 
-|Links                Rechts|    Mitte     | +     */ 
-| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |+    static Pin rcPin = RaspiPin.GPIO_00; 
 +    static final int r = 100000; 
 +    static final float c = (float) (100 * pow(10, -9)); 
 +    /** 
 +     * Vih = 0.625*Vdd 
 +     * http://www.farnell.com/datasheets/1835725.pdf 
 +     */ 
 +    static final float vih = (float) 2.976473; 
 +    public static void main(String[] args) throws InterruptedException { 
 +        GpioController gpio = GpioFactory.getInstance(); 
 +        gpio.unexportAll(); 
 +        final GpioPinDigitalOutput outPin = gpio.provisionDigitalOutputPin(rcPin); 
 +        outPin.setShutdownOptions(true, PinState.LOW); 
 +        outPin.low(); //Entlade Kondensator; 
 +         
 +        TimeUnit.SECONDS.sleep(1);        
 +        //gpio.shutdown();  
 +        gpio.unprovisionPin(outPin); 
 +         
 +        long startTime = System.nanoTime(); 
 +        final GpioPinDigitalInput inPin = gpio.provisionDigitalInputPin(rcPin); 
 +         
 +        while(inPin.isLow()){ //warte 
 +             
 +        } 
 +        long estimatedTime = System.nanoTime() - startTime; 
 +        gpio.unprovisionPin(inPin); 
 +        System.out.println(estimatedTime);  
 +        System.out.println("Voltage: " + meassureRCVoltage(estimatedTime, r, c, vih)); 
 +    
 +    static float meassureRCVoltage(long t, float r, float c, float vih_voltage){ 
 +        float vbat = (vih_voltage * c * r) /((float)(t * pow(10, -9))); 
 +        return vbat; 
 +    } 
 +}
  
 +</file>
projekte/hardware_tricks/batterie_messungen/rc_glied_messung.1532371597.txt.gz · Zuletzt geändert: 2022-11-17 22:34 (Externe Bearbeitung)