Teil 1 - Grundgedanken zur Steuerung

12.10.2013 00:25 (zuletzt bearbeitet: 12.10.2013 00:27)
#1
avatar

Modder

Es geht los

Ich gehe mal davon aus, dass Jeder weiss, wie eine E-Zigarette funzt. Strom wird durch einen Widerstandsdraht geleitet, worauf dieser heiss wird und aufgebrachtes Liquid verdampft. Das war's eigentlich.

Ich werde auch nicht auf die Erklaerung einzelnder Begriffe aus der Elektronik oder Programierung eingehen, da das den Rahmen sprengen wuerde und ausserdem sollte Niemand, der sich damit nicht auskennt direkt mit so einer Steuerung anfangen.

Ich habe einen Arduino als Steuerung ausgewahlt, da diese einfach zu beschaffen sind, nicht viel kosten und einfach zu programieren sind. Der Arduino hat mehrere Ports, die eine PWM ausgeben koennen. Leider darf ein Port nur mit maximal 40mA belastet werden, was den Verdampfer nicht mal zum lachen bringen wuerde. Eine einfache Moeglichkeit ist es die PWM zu nutzen um einen Mosfet damit anzusteuern, der dann die entprechende Leistung von der Stromquelle zum Verdampfer bringt. Desweitern brauchen wir noch einen Taster, der ueber einen Port ein digitales Signal an den Arduino gibt, damit wir "feuern" koennen. Im Prinzip wuerde das schon reichen, aber ich habe der Vollstaendigkeit halber 2 weite Taster eingefuegt in dem ersten Schaltplan, damit man die PWM auch regeln kann.
Hier also der einfache, erste Schaltplan.
V+ sind mindestens 7 Volt, sonst tut der Arduino nix.



Die erste Software kommt dann Morgen dran, weil ich Heute keinen Bock mehr hab.


 Antworten

 Beitrag melden
12.10.2013 00:50
#2
avatar

Um die Uhrzeit hätte ich auch keinen Bock mehr...
Dranbleiben an der Geschichte )
Ich will das Teil nachbauen...
Da ich eh fast alles notwendige Arduino-, Atmel- und sonstiges Elektronikmaterial zu beruflichen und privaten Bastelzwecken zuhause hab, bietet sich das an.
LG aus der Schweiz

Itaste SVD und Vamo V2 mit Protank (Menthol) sowie Iclear 30 für anderes, Lavatube 4 mit Irony ESS SW. Protank Mini und Smok Dualcoil XXXl Carto mit EGO Twist und L-Rider Robust als unauffällige Bürodampfe :-D


 Antworten

 Beitrag melden
12.10.2013 01:21
#3
avatar

Hmm, ist der Schaltplan schon fertig, bzw. was soll die Steuerung denn mal tun ?
Weil .. bis jetzt könnt man das auch mit nem 1€-ATiny13 (o.ä.) in einem 8poligem DIL-Gehäuse
erledigen. OK, nur um´s PWM müsste man sich dann selber kümmern/programmieren.


 Antworten

 Beitrag melden
12.10.2013 02:11
#4
avatar

Modder

Das ist erst der erste Teil. Ich wollte als naechstes drauf eingehen, wie man das schon mal nutzen kann um die PWM zu regeln und so den Verdampfer zum verdampfen zu bringen. Danach kommt der naechste Teil, der zum messen der Batteriespannung ist und somit eine gezielte Regelung moeglich macht. Dann kommt die Ohmmessung dran, danach das Display, und so weiter. Was bringt es, wenn ich den kompletten Schaltplan auf einmal einstell und keiner mehr durchblickt, welcher Teil der Schaltung was macht? Also lieber Schritt fuer Schritt.


 Antworten

 Beitrag melden
14.10.2013 03:57 (zuletzt bearbeitet: 14.10.2013 03:59)
#5
avatar

Modder

Auf geht's. Wir machen das erste Mal Dampf.
Ist gar nicht so schwer. Ich werde jetzt aber nicht erklaeren, wie man die Arduino-Software installiert, oder wie man in C/C++ programiert. Tante Google hilft da weiter.

Hier ist also der erste kleine Code, der uns erlaubt den Wert der Ausgabe zu regulieren und den Verdampfer per PWM anzusteuern mit diesem Wert. Das kleine Program hat keine Sicherheitseinstellungen und ist extra primitiv gehalten, damit Jeder mitkommen kann. Mit der Zeit wird dann komplizierter und weiter ausgebaut. Aber im Moment wollen wir ja nur ein Ergebniss sehen.

OK, hier is er:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 

// Festgelegte Werte fuer die Ports
const int fireButtonPin = 4;
const int plusButtonPin = 5;
const int minusButtonPin = 6;
const int atomizerOutputPin = 3;
 
// Variable Werte
int outputMin = 0;
int outputMax = 255;
int outputCurrent = 0;
 
// Alles Vorbereiten
void setup() {
// Modes fuer alle Ports festlegen
pinMode(fireButtonPin, INPUT);
pinMode(plusButtonPin, INPUT);
pinMode(minusButtonPin, INPUT);
pinMode(atomizerOutputPin, OUTPUT);

// Interne Pullups der Taster-Ports einschalten
// Taster sind LOW wenn gedrueckt
digitalWrite(fireButtonPin, HIGH);
digitalWrite(plusButtonPin, HIGH);
digitalWrite(minusButtonPin, HIGH);
 
}
 
// Die Hauptschleife
void loop() {
// Status des Feuerknopf lesen
if (digitalRead(fireButtonPin) == LOW)
{
// Ausgabewert an Aomizerpin ausgeben
analogWrite(atomizerOutputPin, outputCurrent);
}
else
{
// Atomizerpin auf 0 setzen
analogWrite(atomizerOutputPin, 0);
}

// Status des Plusknopf lesen
if (digitalRead(plusButtonPin) == LOW)
{
// Wenn Ausgabewert unterhalb des maximalen Wertes liegt
if(outputCurrent < outputMax)
{
// Ausgabewert erhoehen
outputCurrent++;
}
}

// Status des Minusknopf lesen
if (digitalRead(minusButtonPin) == LOW)
{
// Wenn Ausgabewert ueber minimalem Wert liegt
if(outputCurrent > outputMin)
{
// Ausgabewert verringern
outputCurrent--;
}
}
}
 

 



Nu gehen wir mal kurz durch.

Zuerst legen wir fest, an welchem Ausgang was angeschlossen ist, damit wir mit realen Namen arbeiten koennen, anstatt mit unuebersichtlichen Zahlen. Die Nummern sind also die Ports an denen unsere Taster und der Mosfet angeschlossen sind.

1
2
3
4
5
6
7
 

// Festgelegte Werte fuer die Ports
const int fireButtonPin = 4;
const int plusButtonPin = 5;
const int minusButtonPin = 6;
const int atomizerOutputPin = 3;
 
 



Jetzt brauchen wir noch ein paar Variablen, die wir waehrend der Laufzeit unseres Programs veraendern. Auch hier gibt's wieder Namen, die selbsterklaerend sind, weil's spaeter, wenn der Code laenger wird, einfacher ist den Ueberblick zu behalten.

Der minimale Ausgabewert fuer die PWM liegt erstmal bei 0.

1
2
3
 

int outputMin = 0;
 
 



Der Maximale Wert liegt bei Allem, was der Akku hergibt. Achtung, da wir mindestens 7 Volt brauchen, also 2 Akkus verwenden, sollte man nicht bis zum Anschlag hoch gehen, sonst glueht der Verdampfer mal kurz auf und das war's dann.

1
2
3
 

int outputMax = 255;
 
 



Den aktuellen Ausgabewert veraendern wir im laufenden Program, setzen ihn aber erstmal aufs Minimum.

1
2
3
 

int outputCurrent = 0;
 
 



In der Setup-Funktion muessen wir jetzt alle Tasterports auf Eingang und den Verdampferport auf Ausgang setzten. Da die Taster auf Ground schalten muessen wir die internen Pullup-Widerstaende der Eingaenge auf HIGH schalten.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 

// Alles Vorbereiten
void setup() {
// Modes fuer alle Ports festlegen
pinMode(fireButtonPin, INPUT);
pinMode(plusButtonPin, INPUT);
pinMode(minusButtonPin, INPUT);
pinMode(atomizerOutputPin, OUTPUT);

// Interne Pullups der Taster-Ports einschalten
// Taster sind LOW wenn gedrueckt
digitalWrite(fireButtonPin, HIGH);
digitalWrite(plusButtonPin, HIGH);
digitalWrite(minusButtonPin, HIGH);
 
}
 
 



Jetzt geht's endlich los, wir tun was mehr oder weniger Sinnvolles. Die loop-Funktion wird ab jetzt immer und immer wieder durchlaufen. Sie sollte sich mit den Bemerkungen im Code selbst erklaeren. Es lohnt auch nicht auf jeden Punkt einzugehen, da dieser Teil sich massiv aendern wird im laufe der Zeit.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 

// Die Hauptschleife
void loop() {
// Status des Feuerknopf lesen
if (digitalRead(fireButtonPin) == LOW)
{
// Ausgabewert an Aomizerpin ausgeben
analogWrite(atomizerOutputPin, outputCurrent);
}
else
{
// Atomizerpin auf 0 setzen
analogWrite(atomizerOutputPin, 0);
}

// Status des Plusknopf lesen
if (digitalRead(plusButtonPin) == LOW)
{
// Wenn Ausgabewert unterhalb des maximalen Wertes liegt
if(outputCurrent < outputMax)
{
// Ausgabewert erhoehen
outputCurrent++;
}
}

// Status des Minusknopf lesen
if (digitalRead(minusButtonPin) == LOW)
{
// Wenn Ausgabewert ueber minimalem Wert liegt
if(outputCurrent > outputMin)
{
// Ausgabewert verringern
outputCurrent--;
}
}
}
 
 



Kleine Anmerkung nochmal. Der Arduino braucht mindestens 7 Volt, damit der interne Spannungswandler auf dem Board das Baby ueberhaupt ans laufen bringt. Das heisst, es sind 2 Akkus Grundveraussetzung. Wenn man also den Ausgabewert der PWM bis zum Anschlag hoch regelt, dann kommen am Verdampfer mehr als 8 Volt bei 2 vollgeladenen Akkus an. Wer sich seinen Verdampfer damit grillt, ist selber schuld.
Es waere also sinnvoll den Wert "outputMax" auf 127, also die Haelfte zu setzen. Dadurch kommen maximal 4 Volt an.

Beim naechsten Mal kommt dann der Schaltplan mit dem Teil, der die Batteriespannung misst und die Programierung wird etwas komplexer, indem die Ausgangsspannung berechnet wird und wir schon ein ganzes Stueck weiter kommen.

Spielt damit erstmal rum, oder wartet ab


 Antworten

 Beitrag melden
14.10.2013 09:07
#6
avatar

Super erklärt. Der kleine Programmierkurs für Dampfer
Ich bin schon gespannt wie es weiter geht.

Stellt euch vor, ihr wärt eine Frau... oder vier Männer, is ja egal.


 Antworten

 Beitrag melden
14.10.2013 09:24 (zuletzt bearbeitet: 14.10.2013 09:24)
#7
avatar

Beeindruckend aber ich versteh nur bin ja auch in solchen Dingen eher unbegabt aber für Leute die das verstehen sicher super

Fanclubresistent
Dampfen ist geil.....

Mein Avatar ist von dem Member Prof. Pinocchio & wurde von ihm für meinen privaten Gebrauch genehmigt!


 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!
Auswahl Marktübersicht