Lo-Fi teleskop pekaren (5 / 6 steg)
Steg 5: skriva. INO kod
Arduino måste ta emot kommandot hastighet och skicka den aktuella batterinivån.
Ändra R1 och R2 med dina motstånd värden, jag använde en multimeter för att hitta exakta värden till mig. Batterispänning beräknas med 9 V utbudet regleras av en LM7806, så vi har ca 3 V av "marginal" innan spänningen når tröskeln till 6 V och produktionen av LM7806 börjar att minska.
CONST float R1 = 26600.0;
CONST float R2 = 26600.0;
CONST float VBATT = 3;
CONST int refreshRate = 10000;
int söder = 1;
int batteryTimeout = 0;
Kontrollera att batteryPin är en analog typ Arduino pinut konfiguration.
int batteryPin = 0;
int enableCheckPin = 7.
int enableMotorPin = 3;
int in1Pin = 2;
int in2Pin = 4;
På setup väntar Arduino tills DTR är aktiverat.
void setup()
{
pinMode (batteryPin, ingång);
pinMode (tempPin, ingång);
pinMode (enableCheckPin, produktionen);
pinMode (in1Pin, produktionen);
pinMode (in2Pin, produktionen);
pinMode (enableMotorPin, produktionen);
Serial.BEGIN(9600);
tag (!. Seriell);
Delay(1000);
Serial.println("---ARDUINO---");
}
Här finns det en grundläggande voltmeter för batteri nivå åtgärd, om avgiften är högre än 100% betyder det batteriet är frånkopplad (jag lagt till ytterligare 5% för buller fel prevention). I mitt fall åtgärden vidtas varje 10000 ms (10 s), men uppenbarligen du kan ändra den. Annars kan DC hastighet ändras i "realtid" läge.
void loop()
{
om (batteryTimeout == 0) {
batteryTimeout = refreshRate;
digitalWrite (enableCheckPin, hög);
Delay(500);
flyta Vout = (analogRead(batteryPin) * 5.0) / 1024.0;
digitalWrite (enableCheckPin, låg);
flyta Vin = Vout / (R2 / (R1 + R2));
int kostnad = (Vin * 100) / VBATT;
Serial.Print ("aktuell avgift: 0");
om (avgift > 105) {
Serial.println ("-");
} annat {
Serial.Print(Charge);
Serial.println("%");
}
}
digitalWrite (in1Pin,! söder);
digitalWrite (in2Pin, söder);
om (Serial.available()) {
int hastighet = Serial.parseInt();
om (hastighet > = 0 & & hastighet < = 255)
{
analogWrite (enableMotorPin, hastighet);
Serial.Print ("ny hastighet uppsättning: 00");
Serial.println(Speed);
}
}
batteryTimeout--;
Delay(1);
}
Denna kod måste optimeras, det är bara en grundläggande skiss att börja utomhus tester.