INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Transistor
30.01.2015, 22:47 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2015 22:57 von Thorsten Pferdekämper.)
Beitrag #25
RE: Transistor
Hi,
also wenn Du das so schaltest, dann müsste die LED erstmal an sein. Wenn Du dann schaltest, dann geht die LED aus. Nach einer Weile müsste dann der Fototransistor im Optokoppler durchbrennen.
(Das war jetzt zum Schaltplan.)
Gruß,
Thorsten

...also mir würde da vielleicht noch ein Reed-Relais einfallen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 10:36
Beitrag #26
RE: Transistor
Jetzt sollte der Schaltplan aber stimmen
[Bild: optokoppler_schaltplan.png]
Bild

Den Widerstand zum Opto habe ich schon seit Post 27 dazwischen geschaltet, hatte nur vergessen ihn einzuzeichnen und dachte gestern ihr meint den Widerstand zur parallel geschalteten LED.
Ich kann auch gerne die Batterie und LED durch ein anderes Zeichen ersetzen, habe die beiden nur gewählt um zu symbolisieren dass es sich um einen 2. Stromkreis handelt und die LED sollte nur einen Verbraucher darstellen.

Zu Beginn ist die LED an. Dann schaltet der Opto, die LED geht aus und das Funkgerät sendet. Dann trennt der Opto wieder, die LED bleibt aus und das Funkgerät sendet weiter. Von da an ändert sich nichts, egal wie der Opto schaltet. Erst wenn ich den Strom vom Arduino nehme und ihn so resette, geht es wieder von vorne los.

Habe mir gerade mal bisschen was zum Reed-Relais durchgelesen, frisst das denn weniger Strom als ein normales Relais? Denn der Stromverbrauch war ja der Grund warum ich bisher versucht habe ein Relais zu vermeiden.

Gruß
MeRo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 12:05
Beitrag #27
RE: Transistor
Wenn ich den Pin 9 abklemme und den Opto direkt an 5V anschließe funktioniert es wie gewünscht. Habe keinen Taster dazwischen geklemmt sondern das Kabel ein paar mal an- und abgeschlossen, aber das sollte doch keinen Unterschied machen.
Heißt das jetzt dass ich doch im Code was falsch gemacht habe?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 12:11
Beitrag #28
RE: Transistor
(31.01.2015 12:05)MeRo113 schrieb:  Heißt das jetzt dass ich doch im Code was falsch gemacht habe?
Das ist relativ wahrscheinlich. Zeig mal den Code.
Es kann natürlich auch sein, dass D9 durch das Fehlen des Vorwiderstands irgend einen Schaden hat.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 12:39
Beitrag #29
RE: Transistor
Ich poste euch jetzt mal den eigentlichen Code und nicht den, den ich zum testen verwendet habe. Das Verhalten ist bei beiden Codes das gleiche.
Code:
#include <VirtualWire.h>
#include <EEPROM.h>

/**
* CONSTANTS
*/
const int SYNC_STATE_NO_SYNC = 0;
const int SYNC_STATE_INIT    = 1;
const int SYNC_STATE_RUNNING = 2;
const int SYNC_STATE_DONE    = 3;

const char* CMD_SEPARATOR = "_";
const String CMD_SYNC = "SYNC";
const String CMD_ON   = "ON";
const String CMD_OFF  = "OFF";

/**
* CONFIG
*/
const int rxPin           = 7;
const int pttPin          = 9;
const int statusPin       = 13;
const int syncPin         = 8;
const int syncTriggerTime = 3; // Seconds
const int syncSuccessTime = 2; // Seconds
const int syncTime        = 10; // Seconds

/**
* VARIABLES
*/
String currentMessage = "";
String uid;
int syncState = 0;
unsigned long syncStart = 0;

/**
* SETUP
*/
void setup() {
  Serial.begin(9600);    // Debugging only
  Serial.println("setup");
  
  pinMode(pttPin, OUTPUT);
  pinMode(statusPin, OUTPUT);
  pinMode(syncPin, INPUT_PULLUP);
  
  //Copied from tut, dont know what it is good for
  //vw_set_ptt_inverted(true);

  vw_setup(2000);
  vw_set_rx_pin(rxPin);
  vw_rx_start();
  
  restoreUid();
  echo(uid);
}

/**
* DEBUG
*/
void echo(String msg) { Serial.println(msg); }

/**
* MAIN LOOP
*/
void loop() {
  sync();
  
  if (syncState == SYNC_STATE_NO_SYNC && strlen(uid.c_str()) > 0) {
    receiveMessage();
    handleMessage();
  }
}

void sync() {
  boolean syncPinState = !digitalRead(syncPin);
  
  switch (syncState) {
    case SYNC_STATE_NO_SYNC:
      if (syncPinState) {
        echo("init");
        syncState = SYNC_STATE_INIT;
        syncStart = millis();
      }
      break;
    case SYNC_STATE_INIT:
      if (syncPinState) {
        if (millis() >= (syncStart + (syncTriggerTime * 1000))) {
          echo("init done, wait");
          syncState = SYNC_STATE_RUNNING;
          syncStart = millis();
        }
      } else {
        echo("init reset");
        syncState = SYNC_STATE_NO_SYNC;
      }
      break;
    case SYNC_STATE_RUNNING:
      if (millis() >= (syncStart + (syncTime * 1000))) {
        digitalWrite(statusPin, LOW);
        syncState = SYNC_STATE_DONE;
        break;
      }
      
      digitalWrite(statusPin, (millis() / 100 % 10) < 5);
      
      receiveMessage();
      if (strlen(currentMessage.c_str()) > 0 && currentMessage.indexOf(CMD_SEPARATOR) != -1) {
        int delimiterPos = currentMessage.indexOf(CMD_SEPARATOR);
        String cmd = currentMessage.substring(0, delimiterPos);
        String id = currentMessage.substring(delimiterPos + 1);
        
        if (cmd == CMD_SYNC) {
          digitalWrite(statusPin, HIGH);
          delay(syncSuccessTime * 1000);
          digitalWrite(statusPin, LOW);
          uid = id;
          backupUid();
          syncState = SYNC_STATE_DONE;
        }
      }
      break;
    case SYNC_STATE_DONE:
      if (syncPinState == false) {
        echo("reset");
        syncState = SYNC_STATE_NO_SYNC;
      }
      break;
  }
}

/**
* MESSAGE HANDLER
*/
void handleMessage() {
  if (strlen(currentMessage.c_str()) > 0) {
    int delimiterPos = currentMessage.indexOf("_");
    String cmd = currentMessage.substring(0, delimiterPos);
    String id = currentMessage.substring(delimiterPos + 1);
    
    if (id == uid) {
      if (cmd == CMD_ON) {
        Serial.println("ON");
        digitalWrite(pttPin, HIGH);
      } else if (cmd == CMD_OFF) {
        digitalWrite(pttPin, LOW);
        Serial.println("OFF");
      }
    } else { //TODO: remove else
      Serial.println("MSG NOT FOR ME :D");
    }
    
    currentMessage = "";
  }
}

/**
* MESSAGE RECEIVER
*/
void receiveMessage() {
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  if (vw_get_message(buf, &buflen)) {
    String result = "";
    
    for (int i = 0; i < buflen; i++) {
      result += (char)buf[i];
    }
    
    currentMessage = result;
    if (strlen(currentMessage.c_str()) > 0) {
      echo("\"" + currentMessage + "\"");
    }
  }
}

/**
* BACKUPS THE UID TO THE EEPROM
*/
void backupUid() {
  long value = uid.toInt();
  
  byte four  = (value & 0xFF);
  byte three = ((value >> 8) & 0xFF);
  byte two   = ((value >> 16) & 0xFF);
  byte one   = ((value >> 24) & 0xFF);

  EEPROM.write(0, four);
  EEPROM.write(1, three);
  EEPROM.write(2, two);
  EEPROM.write(3, one);
}


/**
* RESTORES THE UID FROM THE EEPROM
*/
void restoreUid() {
  long four  = EEPROM.read(0);
  long three = EEPROM.read(1);
  long two   = EEPROM.read(2);
  long one   = EEPROM.read(3);

  uid =  String(((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF), DEC);
}

Kurz zum Code, ich habe 2 Arduinos, das eine ist ein Sender und das andere der Empfänger (hier ist die Funke angeschlossen). Der Sender hat einen Taster angeschlossen und sendet ein Signal sobald der Taster gedrückt wird. Da die Kombination der beiden Arduinos später mehrmals unmittelbar nebeneinander funktionieren soll haben Sender und Empfänger immer eine ID im EEPROM gespeichert damit sie wissen wer zueinander gehört. Sobald der Empfänger dann das Signal erhält steuert er den Opto an und lässt so die Funke funken.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 12:54
Beitrag #30
RE: Transistor
Hi,
ich nehme an, dass Du schon geprüft hast, ob auch tatsächlich ein "OFF" in der Debug-Ausgabe steht.
Falls ja, dann versuch mal einen anderen Pin, z.B. Pin13. Vielleicht hast Du ja wirklich was gegrillt.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 13:19
Beitrag #31
RE: Transistor
Die Übermittlung funktioniert einwandfrei. Wenn ich direkt an Pin 9 und Masse eine LED anschließe leuchtet die auch genau so lange wie ich den Taster gedrückt halte. Habe den Pin 9 jetzt mal auf Pin 13 gelegt (und natürlich auch den Status Pin der vorher die 13 war solange auf 9 gelegt) aber es hat sich nichts geändert. Zusätzlich habe ich auch mal von Pin 9 bzw. Pin 13 zur Masse die Spannung gemessen. Die liegt bei 5V bzw. 0V, also da scheint auch alles richtig zu funktionieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 13:39
Beitrag #32
RE: Transistor
Tja, also ich bin jetzt auch einigermaßen ratlos. Du sagst, wenn Du manuell auf 5V schaltest, dann geht's aber über den Arduino nicht. Beim ersten Mal geht es auch über den Arduino. Mit nur einer LED statt der Funke geht's auch.
Lass vielleicht zuerst mal die parallele LED wieder weg.
Wenn es dann nicht funktioniert, dann versuch's mal Low-Aktiv. D.h. das, was vorher an D9 war an Vcc und das, was vorher an GND war an D9. Dann noch im Programm das ganze umdrehen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Basisvorwiderstand vom Transistor am Ardu Wampo 7 1.360 24.03.2015 19:42
Letzter Beitrag: Bitklopfer
  Wieviel Leistung verträgt der Transistor Tip 120 Das Auge 3 988 16.03.2015 23:40
Letzter Beitrag: Foto-Ralf
  Transistor als Schalter (TIP 120) mcandy007 4 2.113 27.11.2014 10:12
Letzter Beitrag: Bitklopfer
  Transistor 5 Volt Saku 8 3.259 06.03.2014 22:08
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste