Show Posts
Pages: 1 ... 30 31 [32] 33 34 ... 77
466  International / Deutsch / Re: Relais brummt/summt on: November 24, 2012, 03:50:44 am
Wenn du JD-VCC und VCC Jumperst hast du keine Galvanische Trennung zwischen den beiden Optokopllerseiten. Willst du den µC galvanisch von allen Verbraucherseiten trennen musst du JDVCC eine eigene Versorgungsspannung geben.
Gruß
Der Dani
467  International / Deutsch / Re: Serieller Monitor?! Serial monitor!? on: November 21, 2012, 06:06:40 am
Du kannst auf deinem Arduino über dies Serial Klasse ausgaben auf seine Serielle Schnitstelle machen
http://arduino.cc/en/Reference/Serial
Die kannst hervorragend zum debuggen nutzten und diverse Ausgaben schreiben lassen und eben halt mit diesem Serriellen Monitor anschauen.
z.B. willst du einen Sensor auslesen dann kannst du die Serialle Ausgabe mit in deinen Sketch nehmen und ausgeben lassen auf dem Seriellen Monitor kannst du dann sehen ob es dein Sketch richtig mach. Auch gerne mal in die Beispiele reinschauen.
Gruß
Der Dani
468  International / Deutsch / Re: Grundsatzfrage LED - Vorwiderstände on: November 21, 2012, 02:08:38 am
Zu Variante B gibt es auch noch die möglichkeit einer Konstanstromquelle für die Reihenschaltung die begrenzt den Strom aktiv unabhänig der Eingangsspannung und des Voltage drops auf der Lastseit siehe hier (zweite Schaltung).
http://www.elexs.de/kap5_9.htm
Man kann dann hier auch eine PWM Reglung vom PWM Ausgang des Arduinos vornehmen. Mit deinem Ausgang des Ardus gehst du über einen Widerstand (100Ohm) an den linken Transistor Kollektor und Basis des rechten Transitors. Damit kannst du dann das ganze Dingen ein und aus schalten. Man kann dies Dingen als dynamischen Widerstand betrachten. Man muss hier auf größe des rechten Transitor achten wg. der Verlustleistung ähnlich deines Vorwiderstandes. Dies schaltung so wie sie da ausgeführt ist auch "nur" Masseschaltend also sie muss auf der Masseseite der LEDs genutzt werden. Sie kann auch auf der Plusseite mit PNP Transen gemacht werden gibt aber Probleme mit dem ansetuern über einen Digital OUt
Gruß
Der Dani
469  International / Deutsch / Re: Aufbau Stromversorgung für einen Raum on: November 20, 2012, 08:50:55 am
Das mit den Massen ist richtig. Es kann unter Umständen ein Problem werden mit der verbundenen Masse wenn ausgleichströme fließen d.h. wenn z.B. auf einer Seite die Masse auch mit Erde verbunden ist und auf der anderen Seite nicht. Es kann genauso Probleme geben wenn du auf beiden Seite die Masse Erdest und das Erdpotential nicht 100,0% gleich ist dann fließen auch Ausgleichströme. Du musst beide Seiten Erdfrei haben!. Der Rest ist try Error. (bei difffrential Schnittstellen reichen 2 Leitungen).
Gruß
Der DANI
470  International / Deutsch / Re: Aquariumcontroller: hängt sich auf / stürzt ab / friert ein - Hilfe! on: November 20, 2012, 02:27:36 am
So einen fehler hatte ich beim meniem QlockTwo Coline Project. Nach 1 Woche suche habe ich mich entschieden mit eriner Wtachdog zu arbeiten (2s). Aber dafür den Bootloader rausgeworfen damit es keine Anlaufverzögerung gibt.
Ich weiß kein sinnvoller Tip zu Ursachen Lösung aber damit kann man die Auswirkungen "beheben".

Gruß
Der Dani
471  International / Deutsch / Re: Vertrauenswürdiger Shop? on: November 20, 2012, 02:18:36 am
Zu deinem Display schau mal hier und das in Deutschland :-)
http://www.komputer.de/zen/index.php?main_page=product_info&cPath=30&products_id=74
Gruß
Der Dani
472  International / Deutsch / Re: DC -> DC 5V zu 170V on: November 17, 2012, 01:36:07 pm
Also für dein Nixieprojekt kann ich dir dieses Netzteil empfehlen
http://www.ebay.de/itm/Nixie-power-supply-1363-/320831452311?pt=LH_DefaultDomain_0&hash=item4ab30b7497
Oder ein ganzes Shiel leider mit Multiplexing http://www.arduinix.com/Main/Store.htm
für die Treiber kannst du auch K155ID nehemen. Hoffe es richtig interpretiert zu haben.
Gruß
Der Dani

Edit: Ich habe noch was vergessen. Es gibt bei Tube-Tow ein spezial Trafo der neben den "normalen" Spannung noch ein HV-Ausgang gibt. HIer
http://www.tube-town.net/ttstore/product_info.php/info/p2358_TT-Powertrafo-EI-230---200---6-3-7-VA.html
473  International / Deutsch / Re: Türschaltung mit Arduino und RFID on: November 16, 2012, 09:01:23 am
Der watchdog ist ein hund den du regelmässig aus deinem Programmheraus beissen musst, machst du das nicht dann beißt er zurück, aber so das dir "schwarz" vor augen wird. Nutzt man eine Wtchdog sollte man sowieso wenn es geht auf den Bootloader verzichten und über ISP Programmieren.

Gruß#
Der Dani
474  International / Deutsch / Re: Kameraschlitten für Zeitrafferaufnahmen, LCD Keypad als User Interface on: November 14, 2012, 07:44:19 am
Wieseo baust du dir nicht ein Byte PositionCursor den erhöhst um 1 du bei Taste Links und verringerst bei Taste Rechts. Dann kannst du ja die abfarge der anderen Psitionen machen als bei
 PositionCursor1 = Einer Schritte veränden 
 PositionCursor2 = Zehner Schritte veränden 
 PositionCursor3 = Hunderter Schritte veränden 
 PositionCursor4 = Tausender Schritte veränden 

Code:
if (lcd_key == btnUP)          //if UP is pressed, increase a by 1
 {
switch (PositionCursor)
case 1:   
    a = a+1;
    a = a%3;                     //modulo 3 because a can't be bigger than 2
    delay(500);
    break;
case 2:   
    b = b+1;
    delay(500);
    break;
case 3;
    c = c+1;
    delay(500);
    break;
case 4;
    d = d+1;
    delay(500);
    break;
// und so weiter das gleich auch bei Down
}
 if (lcd_key == btnDOWN)        //if DOWN is pressed, decrease a by 1
 {                              //if a < 0, make a 2
   a = a-1;
   if ( a < 0)
   {
     a = 2;
   }
Steps=a*1000+b*100+c*10+d*1;
So etwas in dieser Richtung Display ausgabe bekommst du ja dann auch hin du muss nur den Cursor richtig Positioniern beim Print.

Gruß
Der Dani
475  International / Deutsch / Re: Projektvorstellung: Brutmaschine mit Ardunio on: November 13, 2012, 06:20:18 am
Sehr schönes Projekt. Ein kleine Frage noch am Rand. Warum nutzt du nicht einen PID Regler für die Temperatur und Luftfeuchtesteuerung. Da du bei der Heizung sowieso PWM nutzt kannst du auch einen PID Regler nehmen, wenn du diesen dann gut austrimmst dürfe es (bei keiner extrem großen beieinflussung von aussen) eigenltich immer möglich sein Soll=Ist Temperatur zu erreichen und dann keine Schwankungen haben.

Warum musst du echtes Multithreading haben? Der Controller ist doch schnell genug (ausser du verwendest Delays) um die in der normalen Loop zu handeln. Dann kannst du alles in eigene Funktionen auslagern oder? Kann man deinen Sketch auch irgednwo einsehen?
Gruß
Der Dani
476  International / Deutsch / Re: Gastank mit Schwimmer on: November 13, 2012, 02:49:23 am
Der Code ist ein bisschen Unglücklich. Ich habe mal die delays raus geschmissen und Routinen rein gebracht die einmal alle 10ms durchlaufen werden, für den Integrator. Und eine Routine mit 300ms für das Display. Dadurch verbringt die CPU keine Zeit in nichts tun.
Diese Art von "warten" bzw..  Durchlaufen in einem bestimmten Zeitpunkt findest du auch in dem Beispiel "Blink without delay".
Dadurch hast du eine Durchlaufzeit in dem ganzen Programm von weniger als 1ms und kannst viel einfacher nachher deinen Code erweitern ohne nochmal alles umbauen zu müssen

Code:
#include <LiquidCrystal.h>
#include <LcdBarGraph.h>

byte lcdNumCols = 16; // -- Anzahl der vollen Balken im LCD
byte sensorPin = 1; // -- Analogeingang

long data = 0;
unsigned long actmillis,lmillis1,lmillis2=0;
int time1=300;
int time2=10;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // -- Aufbau der LCD Verbindung
LcdBarGraph lbg(&lcd, lcdNumCols);  // -- Aufbau der Balken

/////////////////////////////////////////////////////////////////////////////////////////////////    

void setup(){

  analogReference (INTERNAL);   //  Interne Spannung 1,1 V DC am AREF Ausgang
  lcd.begin(2, lcdNumCols);   // -- Initialisierung des LCD
  lcd.clear();
  delay(1000);

  //einmal initialen Wert setzen, damit nicht bei "0" angefangen wird
  data = analogRead(sensorPin);
}



//////////////////////////////////////////////////////////////////////////////////////////////////    
void loop()
{
  actmillis=millis();
  if (actmillis-lmillis2>time2){                                      // alle 10ms durchlaufen um den Integrator ein bisschen besser zu machen
    data = ((data * 90 ) + ( analogRead(sensorPin) * 10)) / 100;
    int potiVal = ((data/4) * 100)/251;                                        // Potiwert in Prozent umrechnen
    lmillis2=millis();  
  }

  if (actmillis-lmillis1>time1){                           // alle 300ms durchlauf da 3mal in der Sekunde das Display auffrischen reicht
    lbg.drawValue( data, 1024);   // -- Setzt den Wert vom Analogen Eingang
    lcd.setCursor(0,1);                                // 0 = Zeile  ;  1 = Spalte
    lcd.print("Tankinhalt");
    lcd.setCursor(14,1);
    lcd.print("%");
    lcd.setCursor(11,1);
    lcd.print(potiVal);
    if( potiVal < 100 )                               // Ist potiVal kleiner als 100 setze ein leerzeichen
      lcd.print( " " );
    if( potiVal < 10 )                                // Ist potiVal kleiner als 10 setze ein leerzeichen
      lcd.print( " " );
    lmillis1=millis()
    }
  }

Gruß
Der Dani
477  International / Deutsch / Re: Mit welchem Arduino soll ich anfangen? on: November 12, 2012, 01:44:35 pm
Ich habe mit dem Duemilanove(Vorgänger des UNO) angefangen einer Handvoll LEDs.
In meinen Augen am Sinnvollsten weil es auf dieser Bauform die meisten Shields gibt das Preis Leistungsverhältniss ist auch okay, danach kann man sich weiterentwickel in alle Richtungen.
Gruß
Der Dani
478  International / Deutsch / Re: Gastank mit Schwimmer on: November 12, 2012, 12:52:52 pm
Wie wäre es mit einem Integrator?
hier wäre einer
So ungefähr und das nur nach prüfung ob der neue Wert < Altwert ist,
Die Wert Variabelen müssen datatype long sein

Code:
Wertaktuell=analogRead(A0);       // Aktuellwert Einlesen
X=Wertneu*10;                         // Neuerwert nur 10% Einfluss auf den alten Diesen Einfluss dann
Y=Wertalt*90;                         // Wert aus dem Vorherigien Zyklus auf 90% diesen auch zusammen müssen 100% ereben
Wertneu=X+Y/100;                 // Beide Werte addieren und Neuen Wert Bilden
Wertalt=Wertneu;                 // Für den nächsten Zyklus ist der neue (aktueller gesmoother Wert)

Somit hat pro Lesezyklus der neue Wert nur 10% Einfluss dass heisst würde der neue Gelesene Wert 0 haben so hat der nur 10% Einfluss und würde den Wert in einem Zyklus um 10% nach unten korrigieren.
Damit kannst du eine schöne Smoothesfekt machen das heisst aussreise des Schwanken beeinflussen den Wert nur gering. Und du hängst auch nicht in einer for-Schleife im einem Programm fest. Wenn dein neu eingelesener Wert noch weniger einfluss haben soll dann die Multipiktoren auf 5/95 setzten soll der neue Wert mehr einfluss haben dann z.B. auf 20/80 setzten.

Gruß
Der Dani
479  International / Deutsch / Re: Aufbau Stromversorgung für einen Raum on: November 12, 2012, 03:51:10 am
Ês gibt diverse Videos mit Tests im Netzt die es auf solche längen geschafft haben. Es liegt aber an der Kapazität des Kabels mit der du hier wahrscheinlich Glück hast. Und mit deinenn Längen betreibst du den I2C ausserhalb der Spezifiktionen d.h. er kann unter Umständen gut laufen aber halt auch nicht :-) Schöner Satz. Es gibt halt keine Funktionsgarantie das der Bus auch unter schwierigeren Bedingung noch läuft. Ausserdem musst du den Bus überall kommen und gehend führen also Stichleitungen sind schwierig.

Bin immer noch der Meinung das du mit der RS485 besser aufgehoben bist da du hier auf jeden Fall längen bis 1000m schaffst aufgrund der Übertragungsart und der halt Funktionsbedingt recht immun ist gegenüber Störsignalen. Und es ist halt auch recht einfach Tinys mit dem Bus auszustatten und dann per Schiebregister oder PCF8574(I2C Portexpander) Viele ausgangsports zu schaffen. Und kurze Stichleitungen vom (Hauptbus in richtung Node) kann man in gewissen Rahmen auch machen.


Gruß
Der Dani
480  International / Deutsch / Re: 7 Segement Uhr 100mm Bauhöhe mit Attiny84 on: November 12, 2012, 02:57:06 am
Code:
/*
Attiny84 Big 7 Segment Uhr mit 74HC595
 
 */


#include <TinyWireM.h>
#include <USI_TWI_Master.h>


#define Shiftdata  8          // Pin 8 Datenleiung Schieberegister connected to Data in (DS) of 74HC595
#define Shiftclock 10           // Pin 9 Clockleitung connected to clock pin (SH_CP) of 74HC595
#define Shiftlatch 9         // Pin 10 Latchleitung connected to latch pin (ST_CP) of 74HC595
#define PWMOUT 7
#define BUTTON 1
#define RTCPuls 2
#define LDR 3
#define RTC_ADDRESS 0x68
#define TIME 750

byte ie,iz,hz,he,mz,me=0;  // Modulespeicher der stunden Minuten
boolean ldruck,druck=false;   // Stellknopf für Zeit
boolean longpress,shortpress=false;  // Unterscheidung langer kurzer druck
boolean blinktakt=false;             // Blinktakt 500ms
boolean lpuls,puls=false;            // Sekundenpuls
boolean hell=false;
unsigned long lmillis,start,ptime=0;
byte ss=0;
byte mm=0;
byte hh=0;
byte mEiner,mZehner,hEiner,hZehner=0;
byte setmode=0;
byte PWMArray[7]={
  10,20,40,80,160,255};
byte Pointer=4;


void setup(){
  pinMode(Shiftdata,OUTPUT);
  pinMode(Shiftclock,OUTPUT);
  pinMode(Shiftlatch,OUTPUT);
  pinMode(BUTTON,INPUT_PULLUP);
  pinMode(RTCPuls,INPUT);
  pinMode(PWMOUT,OUTPUT);
  TinyWireM.begin();                                  // Start I2C Kommunikation
  TinyWireM.beginTransmission(0x68);                  // Beginn Kommunikation auf  Adresse 0x68
  TinyWireM.send(0x07);                               // Pointer auf Control Register 0x07  
  TinyWireM.send(0x10);                               // Steuerwort Ex "0x30" Bin110000 Ausgang RTC Ausgang auf 1Hz Logic normal Levels setzn
  TinyWireM.endTransmission();                        // Beenden der I2C Kommunitkation
  HourRead();                                         // RTC Funktion lesen der aktuellen zeit Stunden
  MinuteRead();                                       // RTC Funktion lesen der aktuellen zeit Minuten
  RTC_Start();                                        // Start der Uhr
}


void loop(){
  /*=>Routine OneButton Control<=*/
  druck=digitalRead(BUTTON);            // Einlesen des Button (Achtung invertierte Logik da intrener Pull Up Widerstand aktiviert)
  if (druck==false&&ldruck==true){      // Steigende Flanke des Button
    start=millis();                     // Startzeit des Bettätigen
    ldruck=false;                       // Hilfsflag zur Flanken erkennung
  }
  if (druck==true&&ldruck==false){      // Falende Flanke des Buttons
    ptime=millis()-start;               // Die Länge in ms des Gedückten Zustandes
    ldruck=true;
  }
  if (ptime>=TIME){                    // Wenn der Druck länger (Hier750ms)
    longpress=true;                    // War ein Langer druck
    ptime=0;                           // Zeit wieder Zurücksetzten
  }
  if (ptime<TIME&&ptime>=50) {         // Wenn der Druck kürzer 750ms und länger 50ms (gegen prellen)
    shortpress=true;                   // War ein kurzer Durck
    ptime=0;                           // Zeit wieder zurücksetzuten
  }
  /*One Button End*/

  puls=digitalRead(RTCPuls);                 // Einlessen des RTC Sekunden Puls
  if (puls==true&&lpuls==false){             // wenn Sekundenpuls da und vorher nicht da war (steigende Flanke)
    lpuls=true;
    ss++;                                    // intern Sekunden zählen
  }
  if (ss>=60&&setmode==0){                   // Nach 60 Sekunden
    HourRead();                              // RTC Funktion lesen der aktuellen zeit Stunden
    MinuteRead();                            // RTC Funktion lesen der aktuellen zeit Minuten
    ss=0;                                    // Rücksetzzeten internen Sekunden Zähler auf 0
  }
  if (puls==false){                          // RTC Sekunden Hilfspuls
    lpuls=false;
  }
  if (shortpress==true){                    // Routine Kurzes drücken
    if (setmode==0){                        // In Normalmodus
      Pointer++;                            // ändern des Pointer der Helligkeit
      if (Pointer>=6){                      // Bei Pointer 6 und größer auf Pointer Null
        Pointer=0;
      }
    }
    if (setmode==1){                        // Minuten stellen
      mm++;
      if (mm>=60){
        mm=0;
      }
    }
    if (setmode==2){                        // Stunden stellen
      hh++;
      if(hh>=24){
        hh=0;
      }
    }
    shortpress=false;
  }
  if (longpress==true){                      // Routine Langes drücken
    setmode++;                               // Stellmodus erhöhen
    if (setmode==3){                         // Bei erreichen des Modus 3
      RTC_Set();                             // Neue Uhrzeit übernehmen in die RTC
      RTC_Start();                           // RTC Starten
      setmode=0;                             // Rücksetzten des Setmodes auf 0 (Normale Anzeige)
    }
    longpress=false;                         // Rücksetzten des Flags Langes Drücken
  }
  if (millis()-lmillis>=500){                // Aktalisiernung alle halbe Sekunden
    blinktakt= !blinktakt;                   // Blinktakt der Stellen anzeige
    mEiner=mm%10;                            // Einer Minuten
    mZehner=(mm-mEiner)/10;                  // Zehner Minuten
    hEiner=hh%10;                            // Einer Stunden
    hZehner=(hh-hEiner)/10;                  // Zehner Stunden
    hz=Dec2Shift(hZehner);                   // Wandeln der Zahlen in 7 Segment Ansteuerbytes
    he=Dec2Shift(hEiner);                    // dto.
    mz=Dec2Shift(mZehner);                   // dto.
    me=Dec2Shift(mEiner);                    // dto
    if (blinktakt==false){                  // Blinkroutine des Stellmodus
      if(setmode==1){                       // Minuten stellen
        me=0;
        mz=0;
      }
      if (setmode==2){                      // Stunden Stellen
        he=0;
        hz=0;
      }
    }
    digitalWrite(Shiftlatch, LOW);     // Latch aussetzten um in den Storage speicher zu schreiben
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  me);                    // Shift out der einzelenen Puffer wobei im letzten
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  mz);                    // Shift out der einzelenen Puffer wobei im letzten
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  he);                    // Shift out der einzelenen Puffer wobei im letzten
    shiftOut(Shiftdata, Shiftclock, MSBFIRST,  hz);                    // Shift out der einzelenen Puffer wobei im letzten
    digitalWrite(Shiftlatch, HIGH);                                        // Aktiverien des Latches (Schieben des Shift ind Storageregister) zum Anzeigen
    lmillis=millis();  
  }
  if (hh>=22&&hh<=8&&hell==true){                         // wenn Später 22Uhr und Früher als 8Uhr und es vorher Hell war dann dunkelschlaten
    Pointer=1;
    hell=false;
  }
  if (hh<22&&hh>8&&hell==false){                       // Wenn vor 22Uhr und nach 8 Uhr und vorher dunkel war dann Hell Schalten
    Pointer=5;
    hell=true;
  }
  analogWrite(PWMOUT,PWMArray[Pointer]);
}

byte Dec2Shift(byte x){
  byte shiftdata[11]={
    63,6,91,79,102,109,125,7,127,111};               // Daten für die 7 Segement anzeigen entspircht 0,1,2,3,4,5,6,7,8,9
  return shiftdata[x];
}

void HourRead(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x02);               // Pointer auf Sekunden
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(RTC_ADDRESS, 1);
  hh= bcdToDec(TinyWireM.receive());
}

void MinuteRead(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x01);               // Pointer auf Sekunden
  TinyWireM.endTransmission();
  TinyWireM.requestFrom(RTC_ADDRESS, 1);
  mm= bcdToDec(TinyWireM.receive());
}

void RTC_Start(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x00);
  TinyWireM.send(decToBcd(ss));    // 0 to bit 7 starts the clock
  TinyWireM.endTransmission();
}


void RTC_Set(){
  TinyWireM.beginTransmission(RTC_ADDRESS);
  TinyWireM.send(0x01);
  TinyWireM.send(decToBcd(mm));
  TinyWireM.send(decToBcd(hh));      // If you want 12 hour am/pm you need to set
  TinyWireM.endTransmission();
}

byte decToBcd(byte val)
{
  return ((val/10)<<4)+(val%10);
}

// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return ((val>>4)*10)+val%16;
}

Kompiliert sind das 2980 bytes also passt auch auf einen Attiny44
Gruß
Der Dani
Pages: 1 ... 30 31 [32] 33 34 ... 77