Auton hakkerointi

Johdanto

Tässä projektissa tutustutaan siihen, miten voit käynnistää auton valoja Arduinon välityksellä. Projekti on hyvää jatkoa kolmannen luvun harjoitukselle Haaste: Leluhakkerointi. Ulkoisia laitteita, joissa on suurempi jännite, kytketään päälle ja pois päältä yleensä transistorin sijaan releen (relay) kautta.

Rele on periaatteessa aivan kuin Leluhakkerointi-harjoituksessa käytetty transistori, mutta soveltuu suuremmille jännitteille.

HUOM!
Älä tee kytkentöjä suurempijännitteisiin ulkoisiin laitteisiin omin päin vaan aina sähköluvallisen henkilön seurassa ja valvonnassa!

Alla olevassa videossa esitellään projektia, joka toteutettiin Stadin ammattiopiston autoalan opettajien ja opiskelijoiden kanssa keväällä 2017.

Mehackit: Car Hacking with Stadin Ammattiopisto vocational school

Tarvikkeet

OsaKuvaKuvaus
LEDPidempi jalka (kuvassa mutkallinen) eli anodi + -napaan eli Arduinon porttiin. Lyhyempi jalka eli katodi miinus-napaan eli maahan.
Vastus 330 ΩVastus vastustaa sähkövirran kulkua. Vastuksen arvo mitataan ohmeissa (Ω) ja ilmoitetaan komponentissa erivärisinä raitoina.
Vastus 10kΩ10 kilo-ohmin vastuksessa on ruskea, musta, oranssi ja kullanvärinen raita.
NPN-transistoriTransistoria käytetään tässä harjoituksessa virtapiirin jakamiseen. Mustapäisiä transistoreja on Maker-kitissäsi kolme kappaletta. Varmista, että valitsemasi komponentin pintaan on kirjoitettu MP5 eikä TMP (kuten lämpötilasensorissa) tai FT66T (kuten melodiapiirissä).
DiodiDiodi päästää sähkövirtaa läpi vain yhteen suuntaan. Sitä käytetään virtapiirissä varmistamaan, ettei virtapiikkejä vahingossakaan pääse väärään suuntaan. Harmaa viiva osoittaa pään, jonka suunnasta virta ei pääse läpi (kuvan diodissa virta siis pääsee oikealta vasemmalle, muttei päinvastoin).
Anturi Valitse haluamiasi antureita. Esim. äänianturi, etäisyysanturi ja valovastus käyvät tarkoitukseen hyvin.
Sähkölaite, johon on kiinniettty rele (releen ohjausjännite esim. 12V)Lisätietoa releistä: https://fi.wikipedia.org/wiki/Rele
12V DC-virtalähde (polariteetti positiivinen)Tasavirtalähteessä on oltava pyöreä barrell jack -liitin, jotta sen voi kytkeä suoraan Arduinoon. Virtalähteestä saatavaa jännitettä käytetään Arduinon Vin-portin kautta releiden laittamiseen päälle ja pois päältä.

Virtapiiri

Lopulta tulemme käynnistämään Arduinon avulla releeseen kiinnitetyn sähkölaitteen, esim. auton valot. Sitä ennen harjoitellaan kytkentää siten, että releen tilalle on kytketty led.

Alla on virtapiirikaaviot etäisyysanturille ja valovastukselle. Erilaisilla antureilla voi olla projektin kannalta erilaisia merkityksiä.

  • Etäisyysanturi: valot menevät päälle kun auton edestä juoksee kissa / juomatelineeseen asetetaan muki / ovi tai takaluukku laitetaan kiinni…
  • Valovastus eli LDR: valot menevät päälle kun tulee pimeää / valoisaa. Valoanturia voi käyttää myös etäisyysanturin tapaan: valon määrä vähenee kun anturin eteen laitetaan jotain.
  • Lämpötila-anturi: valot menevät päälle helteellä / pakkasella
  • Äänianturi: valot menevät päälle musiikista / kovista äänistä

Etäisyysanturi:

  • Jos kaipaat vinkkejä anturin ohuiden piuhojen kytkentään tai jos käytössäsi on ultraäänellä toimiva etäisyysanturi, katso lisäohjeita neljännen luvun harjoituksesta Etäisyyteen reagoiva soitin.

Valovastus:

Yhden ledin käyttö

Tehtävä

Syötä seuraava ohjelma Arduinollesi. Avaa Arduino IDE:n oikean yläkulman suurennuslasikuvakkeesta Serial monitor, ja tarkkaile sinne tulevia arvoja. Ledin pitäisi nyt olla päällä aina silloin, kun anturista tuleva arvo on yli 300.

Jos Serial monitoriin tulevat arvot eivät tunnu noudattavan mitään logiikkaa, tarkista tekemäsi kytkennät ja kysy apua ohjaajiltasi!

void setup() {
  pinMode(8, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int anturi = analogRead(A0);
  Serial.println(anturi);

  if (anturi > 300) {
     digitalWrite(8, HIGH);
     delay(300);
  } else {
     digitalWrite(8, LOW);
  }
}

Edellinen ohjelma piti ledin päällä aina silloin, kun anturin arvo on yli 300. Kokeile myös seuraavaa ohjelmaa. Se vaihtaa ledin tilan päinvastaiseksi aina, kun arvo on yli 300. Jos led on päällä, se menee pois päältä, ja jos se on pois päältä, se menee takaisin päälle.

int tila = LOW;

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int anturi = analogRead(A0);
  Serial.println(anturi);

  if (anturi > 300) {
     if (tila == LOW) {
      tila = HIGH;
     } else {
      tila = LOW;
     }
   digitalWrite(13, tila);
     
  }
}

Useampien ledien käyttö

Kokeile vielä seuraavaa virtapiiriä, jossa on useampi ledi.

Tehtävä

Syötä sitten alla oleva ohjelma Arduinolle.

Sinun täytyy itse miettiä, miten haluat laittaa portteihin 9, 10, ja 11 kytketyt ledit päälle - voit vilkuttaa niitä, kytkeä niitä pidemmäksi aikaa päälle tai pois… katso esimerkkiä ledien ajastamisesta kurssin toisen luvun harjoituksesta Liikennevalot tai neljännen luvun harjoitukesta Haaste: Discovalot.

.

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int anturi = analogRead(A0);
  Serial.println(anturi);

  if (anturi > 300) {
     digitalWrite(8, HIGH);
     digitalWrite(9, LOW);
     delay(300);
  } else {
     digitalWrite(8, LOW);
     digitalWrite(9, HIGH);
  }
}

Lisäanturi tai -kytkin

Jos haluat, voit lisätä mukaan vielä kytkimen. Katso lisätietoja erilaisista kytkimistä kolmannen luvun harjoituksesta Monenlaiset kytkimet.

Auton valot voisivat mennä päälle kytkimen avulla, kun esimerkiksi:

  • Auto kallistuu / kuljettaja kallistaa kahvimukia (tilt-kytkin)
  • Ovi tai takaluukku suljetaan / avataan (magneetti ja reed-kytkin)
  • Nappia painetaan

Alla olevassa kaaviossa on käytetty magneettiin reagoivaa reed-kytkintä, joka on kytketty porttiin 2 ja maahan.

Alla on koodiesimerkki, jossa myös porttiin 2 kiinnitetty kytkin kääntää valot päälle ja pois riippuen siitä, onko kytkin pohjassa vai ei.

Tehtävä
Syötä alla oleva ohjelma Arduinollesi. Vie magneetti lähelle reed-kytkintä. Ledien tulisi tällöin mennä päälle.
.

void setup() {
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(2, INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
  int anturi = analogRead(A0);
  Serial.println(anturi);

  if (anturi > 300) {
     digitalWrite(8, HIGH);
     delay(300);
  } else {
     digitalWrite(8, LOW);
  }
  
  if (digitalRead(2) == LOW) {
    digitalWrite(9, HIGH);
    delay(300);
  } else {
    digitalWrite(9, LOW);
     
  }
}

Auton releet

Olet ohjelmoinut tähän mennessä ledejä päälle ja pois päältä. Seuraavaksi ledien tilalle kytketään releet, jolloin voit ohjelmoida päälle ja pois päältä käytännössä mitä tahansa sähkölaitetta!

Ainoa haaste liittyy jännitteeseen. Ledejä on helppo laittaa päälle ja pois päältä Arduinon digitaalisista porteista saatavalla 5V-jännitteellä, mutta monet releet vaativat 12V ohjausjännitteen, jotta ne saa päälle ja pois.

Arduinoon voi kuitenkin kiinnittää ulkoisen 12V jännitelähteen, ja Vin-portin kautta tämän 12V jännitteen voi syöttää suoraan koekytkentälevylle ja releille.

Vin-portista tuleva jännite on koko ajan päällä, eikä siihen voi vaikuttaa ohjelmoimalla. Releen ohjaamiseksi 12V jännite täytyy voida laittaa päälle ja pois. Apuna käytetään transistoria: transistoriin ohjataan pieni virta Arduinosta (portti 8), mikä johtaa releelle Vin-portista tulevan jännitteen.

Lisätietoa releiden toiminnasta löydät täältä: https://www.explainthatstuff.com/howrelayswork.html

HUOM!
Älä tee kytkentöjä suurempijännitteisiin ulkoisiin laitteisiin omin päin vaan aina sähköluvallisen henkilön seurassa ja valvonnassa!
  • Tutustu seuraavaan virtapiirikaavioon ja omiin käytössäsi oleviin releisiin.
  • Kysy kytkennän valmisteluun. apua sähköluvalliselta ohjaajaltasi.
  • Lisätkää ensin virtapiiriinne transistori, diodi ja 10 kilo-ohmin vastus eli kaikki muut osat, paitsi rele.
  • Kytkekää rele. Jos ette ole varmoja oman releenne kytkennästä, googlatkaa lisätietoja releen mallilla ja merkillä.
  • Kytkekää Arduino ulkoiseen 12V-jännitelähteeseen.

Jatkokehittelyä

Kytkinten ja antureiden sijoittelu:

Mihin kytkimet ja anturit tulisi sijoittaa, jotta niiden toiminnassa olisi järkeä? Esim. etäisyysanturin voisi sijoittaa auton eteen, jolloin autoa lähestyvät ihminen käynnistäisi auton valot. Mikrofonin taas voisi laittaa auton katolle, jolloin se rekisteröisi ääniä kaikkialta ympäriltä.