kleines Arduino Problemchen

amarok2

Erfahrener Benutzer
#1
Hi,

Ich bastel mir grad ne Steuerung für mein Eigenbau E-Bike.
die Steuerung besteht aus 2 Arduinos:

1: Steuert das gesammte Bike, überwacht den Akku, die Temperaturen usw.
2: Zeigt mir am Lenker die Aktuellen werte an

beide sind über eine Serielle Verbindung miteinander verbunden.

der "Display" arduino soll 2 Modis haben:
einmal ein Dashboard mit Graphen und einer übersichtlichen anzeige der werte und einmal einen Seriellen Monitor, wo er einfach das empfangene auf dem Display ausgibt.

jetzt habe ich aber ein Problem mit meinem Programm:

die Funkion getSerialData wird im Loop aufgerufen und wenn er ein zeichen empfängt soll er verschiedene variablen aktualisieren oder den Seriellen Monitor starten.
Sobald die Funktion gestartet wird, startet er sofort den Seriellen Monitor, wovon aus ich dann z.b. EU12 (SerMon beenden, und "Volt" aktualisieren) eingebe und er die variable aktualisiert, dann aber sofort wieder in den Seriellen Monitor zurückspringt.

Wo liegt der Fehler?
Er soll den Seriellen Monitor eigentlich nur starten, wenn ich ein "S" sende.


Code:
void loop(){
  getSerialData();
  if(i!=0){
    RefreshScreen();
    i=0;
  }
}

void dashboard(){
    DrawLayout();
    loop();
}

void getSerialData(){
  if (Serial.available()){
      c = Serial.read();
      switch(c){
        case 'S':
          SerMon();
          break;
        case 'U':
          volt = "";
          if (Serial.available()){
            c = Serial.read();
            volt += (String)c;
          }
          break;
        case 'I':
          cur = "";
          if (Serial.available()){
            c = Serial.read();
            cur += (String)c;
          }
          break;
        break;
      }
      
  }
}

void SerMon(){
  GLCD.ClearScreen();
  while(1){
    if (Serial.available()){
      c = Serial.read();
      if(c == 'C'){
          GLCD.ClearScreen();
      }
      else if(c == 'E'){
          i = 1;
          dashboard();
      }
      else{
        GLCD.print(c);
      }
    }
  }
}
 
Zuletzt bearbeitet:

amarok2

Erfahrener Benutzer
#3
wow, nach dem Aufruf Dashboard() ein break; setzen und schon funktionierts.

hätte mir auch schon früher auffallen können^^
 

amarok2

Erfahrener Benutzer
#4
Soo... nächstes Problem:

diesmal eins mit der Hardware:

ich schalte den ESC über ein Relais.
nur das Relais schaltet nicht durch, es zuckt nur.

die Schaltung:
Transistor: BC547C

+5V: C
D12: B
Relais Spuleneingang: E
Relais Spulenausgang: GND

wenn ich B mit C über ein Kabel verbinde schaltet das Relais, über den Arduino klickt es nur leise.
 

amarok2

Erfahrener Benutzer
#8
Hab's mal versucht aufzuzeichnen... ging leider am tablet nicht besser :/
Hoffe man erkennt es.

Wenn ich den arduino ausbauen und den pin von D12 direkt mit 5v verbinde zieht das relais richtig an.
 

Anhänge

donvido

Erfahrener Benutzer
#9
Hast du mal gemessen, was an D12 anliegt?
Bei V_CE=5V sollten V_BE=0.8V eigentlich schon völlig reichen.

Oder hast du womöglich B und C vertauscht? Das sollte dann allerdings der Nano nicht so gut verkraften.

edit: Der Nano hat aber das gleiche GND wie das Relais?
 
Zuletzt bearbeitet:

taler

Erfahrener Benutzer
#10
Probier mal einen FET.
Die schalten normalerweise sehr schön und vollständig.

Sollte zwar auch mit deinem BC547 gehen, tut es aber offensichtlich nicht so richtig.
Hast du schon mal einen Serien Widerstand zwischen D12 und Basis-Anschuß gelegt (zw. 150 und 1k)?
Möglicherwiese ist der Direktanschluß für den Aurduino zuviel.
Auch eine definierte Basisspannung bei offeneme Eingang tut einer Schaltung oft gut.
z.b. mit 100k auf GND legen.

Gruß taler

Edit:
Probier mal des Relias in die Collektorleitung zu legen und den Emitter fix auf GND.
Ich tu mich damit leichter, wie mit der Last am Emitter, obwohl es nicht viel Unterschied ausmachen sollte.
Evt. auch eine Schutzdiode prarallel zur Spule.
 
Zuletzt bearbeitet:

amarok2

Erfahrener Benutzer
#11
Es kommen bei D12 nur 3,9v raus.

Ich hab den Fehler gefunden...
Ich habe den arduino mit 5v über denn VIN pin mit Strom versorgt. Wenn ich ihn über den 5v Pin versorge funktionierts.

Ich hab nachgemessen, was der Transistor vom arduino zieht: 15mA, Sollte er eigentlich aushalten.
 

donvido

Erfahrener Benutzer
#12
Wenn du den Nano über den 5V-Pin mit Spannung versorgst, solltest du aber aufpassen, dass du ihn nicht mit Spannungsspitzen grillst, da das nicht mehr durch den Spannungsregler gefiltert wird.
Mit 3,9V an D12 sollte es aber immernoch funktionieren.
 
#13
Ich würde das Relais in die Kollektorleitung legen, Emitter auf Masse, in die Basisleitung einen Widerstand von 5-10 K und parallel zum Relais eine Diode (1N4148) in Sperrrichtung, um Spannungsspitzen zu killen.
Viele Grüße,
Wilhelm
 

Anhänge

amarok2

Erfahrener Benutzer
#14
Hmmm... anscheinend funktionierts mit 3,9v nicht.
Es ist auch ein 470uf Kondensator parallel zur spannungsversorgung geschaltet. Der sollte die spitzen ausgleichen.

@der_rentner:
Es ist schon eine diode parallel zur spule geschaltet ;)
Wenn ich die spule in die kollektorleitung lege, funktionierts irgendwie nicht.
 
#15
Ist vielleicht die Diode falsch rum? Kathode/Strich muss an Plus.
Wünsche noch einen schönen Abend,
Wilhelm


Nachtrag: 10 K in der Basisleitung ist zuviel, vermutlich ist <1 K ok, siehe Beitrag von taler.
 
Zuletzt bearbeitet:

amarok2

Erfahrener Benutzer
#16
Soo,
nächstes problemchen:

Ich möchte einen tacho programmieren, der mir die geschwindigkeit in KM/h anzeigt.

aber irgentwie bekomme ich nur mist raus...

kann mir jemand schnell mal einen einfachen code geben, der mir die geschwindigkeit ausgibt?

aktuell hab ich diesen code:
Code:
#define WHEELSIZE 2210 //Umfang in mm
int rpm;

int calcspd(){
  rpm=(60000/(millis()-timeold))*rev;
  tmp=(float(rpm / 60) * float(WHEELSIZE / 1000)) * 3.6;
  timeold = millis();
  rev = 0;
  return(tmp);

void isr0(){
  rev++;
}
}
wenn ich da sin den taschenrechner eingebe, kommt ein plausibler wert raus, wenn ich am rad drehe, kommen sehr komische werte raus (z.b. 72769km/h) obwohl ich mit schrittgeschwindigkeit fahre.

ich habe schon sehr viel rumprobiert und bin grad echt am verzweifeln :/
 
FPV1

Banggood

Oben Unten