Stap 5: Arduino Code
U zult opmerken in het eerste deel van de code dat twee verschillende signalen kunnen worden gebruikt om de opdracht van de start van de auto worden geactiveerd:
1) een "s" te sturen naar de Arduino via de bluetooth-module (die fungeert als een seriële poort) kan worden gebruikt voor het initiëren van de eerste reeks. Dit wordt gebruikt bij het starten van het voertuig vanaf een terminal die op een computer.
2) het instellen van een pin op de Arduino hoge zal ook starten voor de eerste reeks. Deze invoer pin op de Arduino is aangesloten op de Bluetooth-bestuur. Bij het gebruik van app Daisy on/off van een Android telefoon, de app zorgt ervoor dat de pin op de Bluetooth-bestuur te hoog, die op zijn beurt zal worden gezien door de Arduino en veroorzaken de startende volgorde om te beginnen.
Hier is mijn code:
/ * Programma: externe Auto Start
* Auteur: Chris Johnson
* Herzien: 5 December 2011
*
* Ingangen: BT Module "ON" signaal
* BT Module "OFF" signaal
* Voertuig RPM Sensor
* Voertuig neutrale positie Sensor
* Voertuig snelheidssensor
* Seriële poort
* Uitgangen: Ontsteking Control Relay
* Accessoire controle Relay
* Starter controle Relay
* Koppeling schakelaar veiligheidsrelais
* Seriële poort
*/
KOMT OVEREEN
Ingangen
int BT_on = 2; Bluetooth "ON" signaal inputed naar pin 2
int RPM_sens = 3; Voertuig RPM sensor ingevoerd op pin 3
int neutral_sens = 4; Voertuig neutrale positie Sensor ingevoerd op pin 4 (12 volt +/-0,5 volt)
int speed_sens = 5; Voertuig snelheid Sesor ingevoerd naar pin 5
int BT_off = 7; Bluetooth "OFF" signaal inputed op pin 7
Uitgangen
int ign_ctrl = 8; Ontsteking Control relais gecontroleerd door pin 8
int start_ctrl = 9; Start controle relais gecontroleerd door pin 9
int clutch_sfty = 10; Koppeling veiligheidsrelais Swithc gecontroleerd door pin 10
int acc_ctrl = 11; Accessoire controle relais gecontroleerd door pin 11
unsigned long start_time; Variabele gebruikt voor het opslaan van het tijdstip waartegen de starter is verloofd
gegevens char = 0; Variabele gebruikt voor het opslaan van gegevens die worden ontvangen via de seriële poort
DEFINITIES
VOID Setup
{
pinMode (BT_on, INPUT); Define pins inputs en outputs
pinMode (RPM_sens, INPUT);
pinMode (neutral_sens, INPUT);
pinMode (speed_sens, INPUT);
pinMode (BT_off, INPUT);
pinMode (ign_ctrl, OUTPUT);
pinMode (start_ctrl, OUTPUT);
pinMode (clutch_sfty, OUTPUT);
pinMode (acc_ctrl, OUTPUT);
Serial.begin(9600); Initialiseren van de seriële poort met een baud-rate van 9600
}
PROGRAMMA
Lus functie: wachten op een opdracht START te ontvangen (command via seriële poort of
spanning toegepast op BT_on pin)
void loop
{
Als (Serial.available() > 0) //Check als een seriële gegevens beschikbaar
{
gegevens = Serial.read(); Momenteel beschikbare seriële gegevens gegevensvariabele instellen "
check(); Ga naar "controleren" functie neer als seriële gegevens beschikbaar
}
else if (digitalRead(BT_on) == HIGH) //Check als BT Module heeft ingesteld pin hoge
{
begin(); Begin beginnen volgorde als pin is hoog
}
anders
{
loop; Herhaal deze functie totdat er een START-opdracht is ontvangen
}
}
Controleer functie: Test voor de juiste tekenset van BT
VOID check()
{
Als (gegevens == de ') //Check als een "s" is verstuurd
{
begin(); Begin beginnen volgorde als "s" is verstuurd
}
anders
{
Serial.println ('Invalid Command'); Als iets anders dan een "s" is verzonden, het foutbericht 'Invalid Command stuurt'
loop; Terug naar begin van programma
}
}
Functie beginnen: zet accessoire en ontsteking
VOID begin()
{
delay(500); 0,5 vertraging van seconden
digitalWrite (acc_ctrl, hoge); Draai accessoire op
digitalWrite (ign_ctrl, hoge); Schakel ontstekingsbronnen ON
delay(500); 0,5 vertraging van seconden
Neutral(); Ga naar "neutrale" funciton
}
Neutrale functie: controleren of de overdracht van het voertuig in de neutrale stand is.
Blijven als het voertuig in neutraal is. Afrit start volgorde als voertuig is in de versnelling.
VOID neutral()
{
Als (digitalRead(neutral_sens) == HIGH) //Continue alleen als voertuig in neutraal
{
Start(); Voertuig start als in neutraal
}
anders
{
Serial.println ("voertuig niet in neutraal"); Als in de versnelling, "Voertuig niet in neutraal" foutbericht verzenden
vehicle_off(); Afrit start volgorde als in de versnelling
}
}
Startfunctie: Engage starter alleen als de motor nog niet actief is.
VOID start()
{
int RPM = pulseIn (RPM_sens, hoog, 1000000); RPM-waarde krijgen
if(rpm == 0) //Continue reeks alleen starten als voertuig wordt niet uitgevoerd.
{
digitalWrite (clutch_sfty, hoge); "Druk" koppeling
digitalWrite (acc_ctrl, laag); Accessoire uit te schakelen
delay(500); 0,5 vertraging van seconden
digitalWrite (start_ctrl, hoge); Engage starter
start_time = millis(); / / Capture de tijd waartegen de starter was verloofd
starter_engaged(); Ga naar Starter_engaged functie
}
anders
{
Serial.println ('Vehicle al actief"); "Voertuig al Running" bericht sturen als de motor was eerder gestart
vehicle_off(); Afrit start volgorde als gebeurd
}
}
Starter_engaged functie: losraken van starter, nadat het voertuig is voorgerecht of als starter uitschakelen
voertuig heeft niet binnen 4 seconden gestart.
VOID starter_engaged()
{
int RPM = pulseIn (RPM_sens, hoge); RPM-waarde krijgen
Als (RPM > 1000) //Continue als motor heeft gestart (bereikte laag stationair)
{
Serial.println ("Engine uitgevoerd"); Signaal "Motor Running" nadat de motor is gestart
disengage_starter(); Ga naar disengage_starter, nadat de motor loopt
}
anders als ((start_time+4000) < millis()) //Test als 4 seconden verstreken is sinds de starter was verloofd
{
disengage_starter_timeout(); Ga naar disengage_starter als motor niet binnen 4 seconden van starter betrokkenheid heeft gestart
}
anders
{
starter_engaged(); Herhaal deze functie als motor niet gestart is of 4 seconden niet is verstreken
}
}
Disengage_starter functie: losraken van de starter.
VOID disengage_starter()
{
digitalWrite (start_ctrl, laag); Losraken van de starter
digitalWrite (clutch_sfty, laag); "Release" de koppeling
digitalWrite (acc_ctrl, hoge); Draai accessoire op
vehicle_off_sense(); Ga naar vehicle_off_sense functie
}
Disengage_starter_timeout functie: losraken van de starter (gebruikt na 4 seconden is verstreken zonder dat een motor start)
VOID disengage_starter_timeout()
{
digitalWrite (start_ctrl, laag); Losraken van de starter
digitalWrite (clutch_sfty, laag); "Release" de koppeling
Serial.println ("voertuig Start mislukt"); Verzenden "Voertuig Start mislukt"
vehicle_off(); Afrit start volgorde
}
Vehicle_off_sense functie: wacht op een "off" signaal worden verzonden terwijl de motor draait.
Als geen "off"-signaal ontvangen, schakelt het voertuig na 30 minuten is verstreken sinds het begin van de motor.
VOID vehicle_off_sense()
{
int bewegen = pulseIn (speed_sens, hoge); Krijgen van de snelheid van het voertuig
Als (bewegende > 1000) //Check als het voertuig in beweging is
{
Serial.println ("voertuig uit--verkeer"); Stuur "Voertuig uit--beweging" bericht ifvehcile bewegende
vehicle_off(); Voertuig uitschakelen als er bewegende
}
anders als (start_time + 1800000 < millis()) //Check als 30 minuten is verstreken sinds de start van de motor
{
Serial.println ("voertuig uit--automatische time-out"); "Voertuig uit--automatische time-out" bericht sturen als de motor is geweest
draaien voor 30 minuten
vehicle_off(); Voertuig uitschakelen als de motor draait gedurende 30 minuten
}
anders als (Serial.available() > 0) //Check als een signaal is verzonden via seriële data
{
gegevens = Serial.read(); Seriële gegevens op te slaan seriële verzonden
Als (gegevens == ' o ') //Check als signaal is een OFF-opdracht ("o")
{
Serial.println ('Vehicle--gebruiker geboden af"); "Voertuig uit--gebruiker geboden" bericht sturen als seriële data de OFF is
opdracht ("o")
vehicle_off(); Voertuig uitschakelen als u opdracht uit wordt verzonden via seriële data
}
}
else if (digitalRead(BT_off) == HIGH) //Check als OFF opdracht is verstuurd via BT module
{
Serial.println ('Vehicle--gebruiker geboden af"); "Voertuig uit--gebruiker geboden" boodschap als OFF
opdracht is verzonden
vehicle_off(); Voertuig uitschakelen als u opdracht uit werd gestuurd via BT module
}
anders
{
vehicle_off_sense(); Herhaal deze functie als geen van de bovenstaande voorwaarden voldaan hebben geweest
}
}
Vehicle_off functie: de vechile uitgeschakeld en begint het hele programma opnieuw
VOID vehicle_off()
{
digitalWrite (ign_ctrl, laag); Ontsteking uitschakelen
digitalWrite (acc_ctrl, laag); Accessoire uit te schakelen
loop; Programma (zoek opdracht start) herhalen
}