Stap 5: schrijven. INO code
Arduino moet de snelheid opdracht ontvangen en verzenden van het huidige batterijniveau.
Verandering R1 en R2 met uw weerstanden waarden, ik gebruikte een multimeter om de exacte waarden van mij te vinden. Accuspanning wordt berekend met 9 V levering gereguleerd door een LM7806, dus we ongeveer 3 V van "marge" hebben voordat spanning de drempel van 6 V bereikt en de uitvoer van LM7806 begint te dalen.
const float R1 = 26600.0; const float R2 = 26600.0; const float VBATT = 3; const int refreshRate = 10000; int south = 1; int batteryTimeout = 0;
In de configuratie van de pinout van de Arduino door ervoor te zorgen dat de batteryPin een analoge type is.
int batteryPin = 0; int enableCheckPin = 7; int enableMotorPin = 3; int in1Pin = 2; int in2Pin = 4;
Op setup, zal Arduino wachten voor DTR is ingeschakeld.
void setup() { pinMode(batteryPin, INPUT); pinMode(tempPin, INPUT); pinMode(enableCheckPin, OUTPUT); pinMode(in1Pin, OUTPUT); pinMode(in2Pin, OUTPUT); pinMode(enableMotorPin, OUTPUT); Serial.begin(9600); while (!Serial); delay(1000); Serial.println("-------ARDUINO-------"); }
Hier is er een eenvoudige voltmeter voor de batterij niveau meting als kosten hoger dan 100 is % betekent de batterij wordt verbroken (ik toegevoegd een extra 5% voor de preventie van de fout van de ruis). In mijn geval de maatregel wordt genomen iedere 10000 ms (10 s), maar uiteraard kunt u deze wijzigen. De DC-snelheid kan worden gewijzigd in "real-time"-modus.
void loop() { if (batteryTimeout == 0) { batteryTimeout = refreshRate; digitalWrite(enableCheckPin, HIGH); delay(500); float Vout = (analogRead(batteryPin) * 5.0) / 1024.0; digitalWrite(enableCheckPin, LOW); float Vin = Vout / (R2 / (R1 + R2)); int charge = (Vin * 100) / VBATT; Serial.print("Current charge: 0"); if (charge > 105) { Serial.println(" - "); } else { Serial.print(charge); Serial.println("%"); } } digitalWrite(in1Pin, !south); digitalWrite(in2Pin, south); if (Serial.available()) { int speed = Serial.parseInt(); if (speed >= 0 && speed <= 255) { analogWrite(enableMotorPin, speed); Serial.print("New speed set: 00"); Serial.println(speed); } } batteryTimeout--; delay(1); }
Deze code moet worden geoptimaliseerd, het is gewoon een elementaire schets te beginnen buiten proeven.