MosFet bzw. Relais schalten.

Hallo Arduino-Profis,
habe gerade angefangen mein erstes Projet zu starten und bin schon am Ende mit meinem Latein. :frowning:
Versuche diesen MOSFET IRF510 bzw. ein Relais anzusteuern, leider beides ohne Erfolg.
Mein Code sieht wie folgt aus

//leds
const int REDLED = 11;
const int GREENLED = 10;
//const int BLUELED = 12;
//mosfet
boolean mosfetEnable = false;
const int mosfet = 9;
//IS VERY IMPORTANT THAT YOU TEST THIS TIME. BY DEFAULT IS IN 1 SEC. THAT IS NOT TOO MUCH. SO TEST IT!
const int MOSFET_TIME = 5000;

Habt ihr eine Lösung, wie schon oben erwähnt bin absoluter ein NOOB.

Vielen Dank und Gruß
Dirk

Was ist das für ein merkwürdiger Code, wie soll das funktionieren.

Sieh dir mal die Beispiele in der IDE an.
Da steht genau drin wie eine Led angesteuert werden kann.

Dann zeig uns den kompletten Sketch und ein Schaltbild, wie du es machen möchtest.

Soweit ich das erkennen kann, ist der IRF510 kein Logiklevel FET.
Und, zu dem Modul finde ich auf die Schnelle keinen Schaltplan.

Mein Tipp:
Beschaffe dir einen LL-FET, einen 10K und einen 220R Widerstand.

Sorry, hier mal der kpl. Code und .

#include <Wire.h> 
#include <Keypad.h>
//#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
/*
Arduino Bomb Pro

The circuit:
* More info at : http://yin.mainstreamds.com/
If you need some help mail me to yinbot@gmail.com

created 4,Sep, 2010
Modified 24 May 2014
by Ignacio Lillo

*/

//LiquidCrystal_I2C lcd(0x38,16,2);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
 {
   '*','#','0','d'                          }
 ,
 {
   'c','9','8','7'                          }
 ,
 {
   'b','6','5','4'                          }
 ,
 {
   'a','3','2','1'                          }
};

byte rowPins[ROWS] = {
 A4, A5, 13, 12}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
 A0, A1, A2, A3
}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


char enteredText[8];
byte time[4];
byte refresh=0;//1 if is refreshed once time...
char password[8];
int key=-1;
char lastKey;
char var;
boolean passwordEnable=false;

//Buttons for lcd shield
char BT_RIGHT = '4';
char BT_UP = 'a';
char BT_DOWN = 'b';
char BT_LEFT = '6';
char BT_SEL = 'd';   // Ok key  
char BT_CANCEL = 'c';
char BT_DEFUSER = 'x';   // not implemented

//leds
const int REDLED = 11;
const int GREENLED = 10;
//const int BLUELED = 12;
//mosfet
boolean mosfetEnable = false;
const int mosfet = 9;
//IS VERY IMPORTANT THAT YOU TEST THIS TIME. BY DEFAULT IS IN 1 SEC. THAT IS NOT TOO MUCH. SO TEST IT!
const int MOSFET_TIME = 5000;

//TIME INTS
int GAMEHOURS = 0;
int GAMEMINUTES = 45;
int BOMBMINUTES = 4;
int ACTIVATESECONDS = 5;

boolean endGame = false;

boolean sdStatus = false; //search and destroy game enable used in config
boolean saStatus = false; //same but SAbotaghe
boolean doStatus = false; //for DEmolition
boolean start = true;
boolean defuseando;
boolean cancelando;
// SOUND TONES
boolean soundEnable = true;
int tonepin = 8; // Pin 13 for the sound
int tonoPitido = 3000;
int tonoAlarma1 = 700;
int tonoAlarma2 = 2600;
int tonoActivada = 1330;
int errorTone = 100;

unsigned long iTime;
unsigned long timeCalcVar;
unsigned long redTime;
unsigned long greenTime;
unsigned long iZoneTime;//initial time for zone
byte team=0; // 0 = neutral, 1 = green team, 2 = red team

void setup(){
 lcd.begin(16, 2);
 Serial.begin(9600);
 //  lcd.init();                      // initialize the lcd 
 //  lcd.backlight();
 lcd.setCursor(3,0);
 tone(tonepin,2400,30);
 lcd.print("SCORPION");// you can add your team name or someting cool
 lcd.setCursor(0,1);
 lcd.print("WOODSMAN");// you can add your team name or someting cool
 keypad.setHoldTime(80);
 keypad.setDebounceTime(80);
 keypad.addEventListener(keypadEvent);
 delay(2000);
 pinMode(GREENLED, OUTPUT);     
//  pinMode(8, OUTPUT);  
//  digitalWrite(8,HIGH);
 pinMode(REDLED, OUTPUT); 
 pinMode(mosfet, OUTPUT);  
 // CONFIGURE THE BARS OF PROGRESS BAR
 byte bar1[8] = {
   B10000,
   B10000,
   B10000,
   B10000,
   B10000,
   B10000,
   B10000,
   B10000,
 };
 byte bar2[8] = {
   B11000,
   B11000,
   B11000,
   B11000,
   B11000,
   B11000,
   B11000,
   B11000,
 };
 byte bar3[8] = {
   B11100,
   B11100,
   B11100,
   B11100,
   B11100,
   B11100,
   B11100,
   B11100,
 };
 byte bar4[8] = {
   B11110,
   B11110,
   B11110,
   B11110,
   B11110,
   B11110,
   B11110,
   B11110,
 };
 byte bar5[8] = {
   B11111,
   B11111,
   B11111,
   B11111,
   B11111,
   B11111,
   B11111,
   B11111,
 };
 byte up[8] = {
   B00000,
   B00100,
   B01110,
   B11111,
   B11111,
   B00000,
   B00000,
 };

 byte down[8] = {
   B00000,
   B00000,
   B11111,
   B11111,
   B01110,
   B00100,
   B00000,
 };
 lcd.createChar(0,bar1);
 lcd.createChar(1,bar2);
 lcd.createChar(2,bar3);
 lcd.createChar(3,bar4);
 lcd.createChar(4,bar5);
 lcd.createChar(5,up);
 lcd.createChar(6,down);
}

void loop(){
 menuPrincipal();
}
void keypadEvent(KeypadEvent key){
 switch (keypad.getState()){
   case PRESSED:
     switch (key){

     }
   break;
   case RELEASED:
     switch (key){
        case 'd': defuseando= false;
        //Serial.println("d Releases");
        break;
        case 'c': cancelando=false;
        //Serial.println("c Releases");
        break;
     }
   break;
   case HOLD:
     switch (key){
       case 'd': defuseando= true;
       //Serial.println("d hold");
       break;
       case 'c': cancelando=true;
       //Serial.println("c hold");
       break;
     }
   break;
 }
}

void disarmedSplash(){
 endGame = false;
 digitalWrite(REDLED, LOW); 
 digitalWrite(GREENLED, LOW);
 if(sdStatus || saStatus){
   lcd.clear();
   lcd.setCursor(2,0);
   lcd.print("BOMB DISARMED");
   lcd.setCursor(3,1);
   lcd.print("GOODS WIN");
   digitalWrite(GREENLED, HIGH);  
   delay(5000);
   digitalWrite(GREENLED, LOW); 
 }
 //end code
 lcd.clear();
 lcd.print("Play Again?");
 lcd.setCursor(0,1);
 lcd.print("A : Yes B : No");
 digitalWrite(REDLED, LOW);  
 digitalWrite(GREENLED, LOW); 
 while(1)
 {
   var = keypad.waitForKey();
   if(var == 'a' ){
     tone(tonepin,2400,30);
     //We have two options, search & destroy and sabotaje play again options so!
     if(sdStatus){
       startGameCount();
       search();
     }
     if(saStatus){
       saStatus=true;
       startGameCount();
       start=true; //to set iTime to actual millis() :D
       sabotage();
     }
   }  
   if(var == 'b' ){
     tone(tonepin,2400,30);
     menuPrincipal();
     break;
   }  
 } 
}

void explodeSplash(){
 digitalWrite(REDLED, LOW);  
 digitalWrite(GREENLED, LOW); 
 cls();
 delay(100);
 endGame = false;
 lcd.setCursor(1,0);
 lcd.print("TERRORISTS WIN");
 lcd.setCursor(4,1);
 lcd.print("GAME OVER");
 for(int i = 200; i>0; i--)// this is the ultra hi definition explosion sound xD
 {
   tone(tonepin,i);
   delay(20);
 }
 noTone(tonepin);
 if(mosfetEnable){
   activateMosfet(); 
 }
 delay(5000);
 cls();

 //end code
 lcd.print("Play Again?");
 lcd.setCursor(0,1);
 lcd.print("A : Yes B : No");
 while(1)
 {
   var = keypad.waitForKey();
   if(var == 'a' ){
     tone(tonepin,2400,30);
     //We have two options, search & destroy and sabotaje play again options so!
     if(sdStatus){
       startGameCount();
       search();
     }
     if(saStatus){
       saStatus=true;
       startGameCount();
       start=true; //to set iTime to actual millis() :D
       sabotage();
     }
   }  
   if(var == 'b' ){
     tone(tonepin,2400,30);
     menuPrincipal();

     break;
   }  
 } 
}

Hallo,

a) mit Fritzing Steckbrett Bilder machste dir in keinem Forum der Welt Freunde
b) setze den Code in Code Tags. Linker Button </>, geht auch nachträglich

die Taster, irgendwie falsch ...

Damit wir erkennen können, wo evtl. im Sketch die Fehler liegen, solltest du beschreiben, was dieser machen soll.
Wann soll was und wie geschaltet werden?
Wo soll der Transistor oder das Relais ran?

Wie wird die Schaltfunktion ausgeführt?
Aber wie schon geschrieben, setze den geposteten Sketch in Code-Tags.

Erstmal vielen Dank, aber sorry das bringt nichts. Verstehe nur Bahnhof.
Danke und Gruß

Wie, das soll es gewesen sein?
Aufgeben gilt nicht.
Wir wollen doch helfen, du must uns nur ein paar Informationen liefern.

Und was verstehst du nicht?

Ja aber wie, bin die absolute Käsekrokette. Habe 0,0 Ahnung was ihr von mir möchtet.

#include <Wire.h> 
#include <Keypad.h>
//#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
/*
 Arduino Bomb Pro
 
 The circuit:
 * More info at : http://yin.mainstreamds.com/
 If you need some help mail me to yinbot@gmail.com
 
 created 4,Sep, 2010
 Modified 24 May 2014
 by Ignacio Lillo
 
 */

//LiquidCrystal_I2C lcd(0x38,16,2);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {
    '*','#','0','d'                          }
  ,
  {
    'c','9','8','7'                          }
  ,
  {
    'b','6','5','4'                          }
  ,
  {
    'a','3','2','1'                          }
};

byte rowPins[ROWS] = {
  A4, A5, 13, 12}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
  A0, A1, A2, A3
}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


char enteredText[8];
byte time[4];
byte refresh=0;//1 if is refreshed once time...
char password[8];
int key=-1;
char lastKey;
char var;
boolean passwordEnable=false;

//Buttons for lcd shield
char BT_RIGHT = '4';
char BT_UP = 'a';
char BT_DOWN = 'b';
char BT_LEFT = '6';
char BT_SEL = 'd';   // Ok key  
char BT_CANCEL = 'c';
char BT_DEFUSER = 'x';   // not implemented

//leds
const int REDLED = 11;
const int GREENLED = 10;
//const int BLUELED = 12;
//mosfet
boolean mosfetEnable = false;
const int mosfet = 9;
//IS VERY IMPORTANT THAT YOU TEST THIS TIME. BY DEFAULT IS IN 1 SEC. THAT IS NOT TOO MUCH. SO TEST IT!
const int MOSFET_TIME = 5000;

//TIME INTS
int GAMEHOURS = 0;
int GAMEMINUTES = 45;
int BOMBMINUTES = 4;
int ACTIVATESECONDS = 5;

boolean endGame = false;

boolean sdStatus = false; //search and destroy game enable used in config
boolean saStatus = false; //same but SAbotaghe
boolean doStatus = false; //for DEmolition
boolean start = true;
boolean defuseando;
boolean cancelando;
// SOUND TONES
boolean soundEnable = true;
int tonepin = 8; // Pin 13 for the sound
int tonoPitido = 3000;
int tonoAlarma1 = 700;
int tonoAlarma2 = 2600;
int tonoActivada = 1330;
int errorTone = 100;

unsigned long iTime;
unsigned long timeCalcVar;
unsigned long redTime;
unsigned long greenTime;
unsigned long iZoneTime;//initial time for zone
byte team=0; // 0 = neutral, 1 = green team, 2 = red team

void setup(){
  lcd.begin(16, 2);
  Serial.begin(9600);
  //  lcd.init();                      // initialize the lcd 
  //  lcd.backlight();
  lcd.setCursor(3,0);
  tone(tonepin,2400,30);
  lcd.print("SCORPION");// you can add your team name or someting cool
  lcd.setCursor(0,1);
  lcd.print("WOODSMAN");// you can add your team name or someting cool
  keypad.setHoldTime(80);
  keypad.setDebounceTime(80);
  keypad.addEventListener(keypadEvent);
  delay(2000);
  pinMode(GREENLED, OUTPUT);     
//  pinMode(8, OUTPUT);  
//  digitalWrite(8,HIGH);
  pinMode(REDLED, OUTPUT); 
  pinMode(mosfet, OUTPUT);  
  // CONFIGURE THE BARS OF PROGRESS BAR
  byte bar1[8] = {
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
  };
  byte bar2[8] = {
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
  };
  byte bar3[8] = {
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
  };
  byte bar4[8] = {
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
  };
  byte bar5[8] = {
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
  };
  byte up[8] = {
    B00000,
    B00100,
    B01110,
    B11111,
    B11111,
    B00000,
    B00000,
  };

  byte down[8] = {
    B00000,
    B00000,
    B11111,
    B11111,
    B01110,
    B00100,
    B00000,
  };
  lcd.createChar(0,bar1);
  lcd.createChar(1,bar2);
  lcd.createChar(2,bar3);
  lcd.createChar(3,bar4);
  lcd.createChar(4,bar5);
  lcd.createChar(5,up);
  lcd.createChar(6,down);
}

void loop(){
  menuPrincipal();
}
void keypadEvent(KeypadEvent key){
  switch (keypad.getState()){
    case PRESSED:
      switch (key){

      }
    break;
    case RELEASED:
      switch (key){
         case 'd': defuseando= false;
         //Serial.println("d Releases");
         break;
         case 'c': cancelando=false;
         //Serial.println("c Releases");
         break;
      }
    break;
    case HOLD:
      switch (key){
        case 'd': defuseando= true;
        //Serial.println("d hold");
        break;
        case 'c': cancelando=true;
        //Serial.println("c hold");
        break;
      }
    break;
  }
}

void disarmedSplash(){
  endGame = false;
  digitalWrite(REDLED, LOW); 
  digitalWrite(GREENLED, LOW);
  if(sdStatus || saStatus){
    lcd.clear();
    lcd.setCursor(2,0);
    lcd.print("BOMB DISARMED");
    lcd.setCursor(3,1);
    lcd.print("GOODS WIN");
    digitalWrite(GREENLED, HIGH);  
    delay(5000);
    digitalWrite(GREENLED, LOW); 
  }
  //end code
  lcd.clear();
  lcd.print("Play Again?");
  lcd.setCursor(0,1);
  lcd.print("A : Yes B : No");
  digitalWrite(REDLED, LOW);  
  digitalWrite(GREENLED, LOW); 
  while(1)
  {
    var = keypad.waitForKey();
    if(var == 'a' ){
      tone(tonepin,2400,30);
      //We have two options, search & destroy and sabotaje play again options so!
      if(sdStatus){
        startGameCount();
        search();
      }
      if(saStatus){
        saStatus=true;
        startGameCount();
        start=true; //to set iTime to actual millis() :D
        sabotage();
      }
    }  
    if(var == 'b' ){
      tone(tonepin,2400,30);
      menuPrincipal();
      break;
    }  
  } 
}

void explodeSplash(){
  digitalWrite(REDLED, LOW);  
  digitalWrite(GREENLED, LOW); 
  cls();
  delay(100);
  endGame = false;
  lcd.setCursor(1,0);
  lcd.print("TERRORISTS WIN");
  lcd.setCursor(4,1);
  lcd.print("GAME OVER");
  for(int i = 200; i>0; i--)// this is the ultra hi definition explosion sound xD
  {
    tone(tonepin,i);
    delay(20);
  }
  noTone(tonepin);
  if(mosfetEnable){
    activateMosfet(); 
  }
  delay(5000);
  cls();

  //end code
  lcd.print("Play Again?");
  lcd.setCursor(0,1);
  lcd.print("A : Yes B : No");
  while(1)
  {
    var = keypad.waitForKey();
    if(var == 'a' ){
      tone(tonepin,2400,30);
      //We have two options, search & destroy and sabotaje play again options so!
      if(sdStatus){
        startGameCount();
        search();
      }
      if(saStatus){
        saStatus=true;
        startGameCount();
        start=true; //to set iTime to actual millis() :D
        sabotage();
      }
    }  
    if(var == 'b' ){
      tone(tonepin,2400,30);
      menuPrincipal();

      break;
    }  
  } 
}

was möchtest du mit dem MOSFet bzw. Relais schalten?
Wie hoch ist die Spannung die du schalten möchtest?

Der Code ist ja nicht von Dir - also nimm die Beispiele aus der IDE, lass eine LED blinken und dann verstehst Du auch wie man irgendwas ein- und ausschaltet.

Ansonsten bitte die Fragen beantworten.

Den Code welchen ich gepostet habe, soll eigentlich den MosFet schalten. Da möchte ich eine 12v Sirene dranhängen. Aber der D9 liefert anscheinend kein Signal zu dem Teil von Ebay. Und wenn ich ein Relais dranhänge geht das auch nicht. Wenn ich beide sogenannten Schalter an die LED hänge funktionieren sie. Aber wie bekomme ich das richtige Signal auf D9?

Na bitte, das mit dem Sketch hat doch schon funktioniert.

Jetzt noch kurz die Beschreibung der Funktion, damit wir wissen was der Sketch machen soll.

Und warum willst du den von dir geposteten Sketch verwenden?

Weil der bis auf das angesprochene Problem einwandfrei funktioniert.

Speedo2016:
Weil der bis auf das angesprochene Problem einwandfrei funktioniert.

Dann beschreibe doch mal, was der macht. Hatte ich mehrfach drum gebeten.
Anders können wir nur schwer helfen.

Der Sketch ist für eine Scenario Paintball Bombe, es gibt drei Spielarten. Gem. den Spielen muß entweder ein Code eingegeben werden oder ein Schalter gedrückt werden. Irgendwann möchte ich auch wie in den schlechten amerikanischen Filmen Drähte durchschneiden um sie zu entschärfen. Wie schon gesagt der Code läuft soweit super, nur der MosFet bzw. das Relais laufen nicht. Sie sollen eine Sirene einschalten die die Detonation simuliert.

Was ist das für ein Relais, das du anschließen möchtest.
Poste einen Link.

Das hier.

Wenn ich das Relais bei den LED's anschließe, funktioniert es. Denke da muß nur der mosfet Befehl geändert werden, nur wie?