////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä. #include <EEPROM.h> #include <SoftwareSerial.h>



Samankaltaiset tiedostot
////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ #include <EEPROM.h> #include <SoftwareSerial.h> SoftwareSerial gps(10, 0); // RX, TX -pinnit

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Peter Kronström

Arduino. Kimmo Silvonen (X)

Arduinon ohjelmointi. Sami-Petteri Pukkila. 6. helmikuuta 2017

Arduino. Kimmo Silvonen (X)

Arduinon ohjelmointi. Sami-Petteri Pukkila. 1. helmikuuta 2016

1 Tarkistetaan että kaikki toimii

Ohjelmointiharjoituksia Arduino-ympäristössä

Arduino. Kimmo Silvonen (X)

Tällä ohjelmoitavalla laitteella saat hälytyksen, mikäli lämpötila nousee liian korkeaksi.

#include <SoftwareSerial.h>

Arduinon ohjelmointi. Sami-Petteri Pukkila. 26. syyskuuta 2016

LUMA SUOMI -kehittämisohjelma LUMA FINLAND -utvecklingsprogram LUMA FINLAND development programme Ohjelmointia Arduinolla

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

Tarkempaa tietoa saat myös kurssin GitHub-alustalta. Sen wiki-osio on kattava ja yksityiskohtainen, kun tämä vihkonen taas on vain ensihätään.

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

Tietotyypit ja operaattorit

MITTAUSTEKNIIKAN LABORATORIOTYÖOHJE TYÖ 9 MITTAUSTIEDON KERUU JA KÄSITTELY

Arduino ja perusteita

Ohjelmoi Arduino Grovella

Arduino tutuksi. Kyösti Blinnikka

Anturit ja Arduino. ELEC-A4010 Sähköpaja Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka

1 Muutokset piirilevylle

PR SARJA ASENNUS JA KYTKENTÄ

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Liikennevalot. Arduino toimii laitteen aivoina. Arduinokortti on kuin pieni tietokone, johon voit ohjelmoida toimintoja.

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

U-REMIX USB RF 2 RF 1 POWER

PR SARJA ASENNUS JA KYTKENTÄ

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Itse virittävän kitaravirittimen prototyyppi

Arduinon Alkeet. Johdatus Arduinoon ja elektroniikkaan

Arduinon Alkeet. Johdatus Arduinoon ja elektroniikkaan

Metodien tekeminen Javalla

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

WT11i-A -breakoutin Arduino-pikaopas

Java-kielen perusteet

XCRANE OMINAISUUDET KUUSI KULJETTAJA-PROFIILIA VENTTIILIEN SÄÄDÖT

MB 20 MODBUS RTU LIITYNTÄYKSIKKÖ SAR 410:LLE TEKNISET TIEDOT. MB 20 on liityntäkortti painesäädin SAR 410:n liittämiseksi Modbus RTU väylään.

MB 20 MODBUS RTU LIITYNTÄYKSIKKÖ SAR 410:LLE TEKNISET TIEDOT. MB 20 on liityntäkortti painesäädin SAR 410:n liittämiseksi Modbus RTU väylään.

6.3. AVR_rauta. EEPROM-muisti pva

PAIKKATIEDON SIIRTO RADIOLINKIN AVULLA

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

VIM RM1 VAL / SKC VIBRATION MONITOR RMS-MITTAUSJÄRJESTELMÄLLE KÄSIKIRJA. VIM-RM1 FI.docx / BL 1(5)

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

KÄYTTÖOHJE TAKOMETRI TRIFITEK TR-550

KÄYTTÖOHJE PEL 1000 / PEL 1000-M

Yrityslähtöisten ideoiden käyttö fysiikan opetuksessa

KÄYTTÖOHJE LÄMPÖTILA-ANEMOMETRI DT-619

Java-kielen perusteet

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

s /BA 1(8) taajuusmuuttajalla

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

S85 laseretäisyysanturi

13 Operaattoreiden ylimäärittelyjä

P I C A X E O H J E L M O I N T I

Tietorakenteet ja algoritmit

KESKIJÄNNITEVERKON SUOJAUS JA OHJAUS. Ville Tiesmäki

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

21. oppitunti. Esikäsittelijä. Osa. Esikäsittelijä ja kääntäjä

Käyttöohje BTGP-38KM Bluetooth GPS Data Logger V1.0

Plagioinnin tunnistaminen lähdekielisistä ohjelmista

UVS Kanavainen tärinämittari

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Jos sinulla on kysyttävää 10. Vastaanotin toimi.

XW60K JA T620 V620 CX620

12. Näppäimistöltä lukeminen 12.1

Sarjaliikenne protokollan suunnittelu Geronteknologia

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Puhallinmoottorinohjaimen käsipäätteen käyttöohje, TBLZ- 1-75, SILVER C

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

S14 09 Sisäpeltorobotti AS Automaatio ja systeemitekniikan projektityöt. Antti Kulpakko, Mikko Ikonen

PIKAOHJE. -Hz valo palaa näytöllä näkyy taajuus. -A valo palaa näytöllä näkyy moottorivirta-arvo. RUN valo palaa pumppu pyörii

PIKAOHJE UUDIS- TAI PERUSPARANNUSKOHDE, JOHON SISÄLTYY TASAPAINOTUS

PIKAOHJE SCG-PUMPUN VAK-OHJAUKSEN MUUTTAMINEN KÄSISÄÄDÖLLE SCA-PUMPUKSI JA TAKAISIN

1 db Compression point

smartallinone Sarjaliikenteellä toimiva releohjain

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

OPTYMA Control Kylmäjärjestelmän ohjauskeskus

Ville Pentikäinen AUTOPILOTTI VENEESEEN

PIKAOHJE SCC VAK-PUMPUN OHJAUS KÄSISÄÄDÖLLE SCA-PUMPUKSI JA TAKAISIN PUTKISTOSSA VAKIOPAINE-ERO VAK:N SÄÄTÄJÄLLÄ

Java-kielen perusteet

Osa. Toimintojen toteuttaminen ohjelmissa vaatii usein haarautumisia ja silmukoita. Tässä luvussa tutustummekin seuraaviin asioihin:

DATA-vaiheen ohjelmoijan yleissivistys helposti unohtuvia asioita

Anturit ja Arduino. ELEC-A4010 Sähköpaja Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

turvavalopuomi SG-BIG Base

Taajuusmuuttaja FC101 (pikaopas)

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Listarakenne (ArrayList-luokka)

Transkriptio:

////// VENETIETO.FI \\\\\\ //// Autopilotti 2014 \\\\ //-PID säätimellä #include <EEPROM.h> #include <SoftwareSerial.h> SoftwareSerial gps(0, 1); // RX, TX -pinnit const int buttonpinset = 2; // painonäppäimen pinni const int buttonpinclear = 4; // painonäppäimen pinni const int buttonpinoikea = 12; // painonäppäimen pinni const int buttonpinvasen = 11; // painonäppäimen pinni const int pot = analogread(a1); const int ledpin = 13; // LED pinni const int Dir2a = 7; //PWM suunta 2a const int Dir2b = 8; //PWM suunta 2b const int Enable2 = 5; //PWM E2 const int numreadings = 5; int buttonstateset = 0; // muutuja pianonäppäimen tilan lukemiseksi int buttonstateclear = 0; // muutuja pianonäppäimen tilan lukemiseksi int buttonstateoikea = 0; int buttonstatevasen = 0; int ero = 0; // muutuja arvolle int address = 0; // muutuja arvolle int readings[numreadings]; // lukemat GPS:ltä int index = 0; int total = 0; // lukeman numero // kokonaismäärä

int average = 0; // keskiarvo int pidnykyarvo = 0; int ulostulo; int erosumma; unsigned int lastgpsread; const unsigned int gpscycle=1000; //1Hz GPS taajuus float gpslat0; float gpslong0; float gpslat; float gpslong; float gpsspeed; //solmua float gpsbearing; //suunta byte tallennus; void setup() Serial.begin(38400); gps.begin(38400); pinmode(ledpin, OUTPUT); //asettaa pinnin ulostuloksi pinmode(dir2a, OUTPUT); pinmode(dir2b, OUTPUT); pinmode(enable2, OUTPUT); pinmode(buttonpinset, INPUT); //asettaa pinnin sisääntuloksi pinmode(buttonpinclear, INPUT); pinmode(buttonpinoikea, INPUT); pinmode(buttonpinvasen, INPUT); for (int thisreading = 0; thisreading < numreadings; thisreading++) readings[thisreading] = 0;

lastgpsread=millis()-gpscycle; //Aloitetaan lukemalla GPS-data void loop() unsigned long now=millis(); if(now-lastgpsread >= (gpscycle-150)) //Jos on mennyt koko syklin aika, niin ollaan luultavasti jo myöhässä, aletaan odottamaan jo 150 ms ennen. if (gps.available() > 1) //lue arvo kun GPS antaa dataa else gpsohjaus(); delay(10); if (char(gps.read()) == 'R' && char(gps.read()) == 'M' && char(gps.read()) == 'C') //lue arvo jossa R,M ja C gps.parsefloat(); //poista turhat gpslatlong(gps.parseint(), gps.parseint(), gps.parseint(), gps.parseint()); //sijainti gpsohjaus(); //toista lauseke "gpsohjaus"gpsspeed = gps.parsefloat(); //solmua gpsbearing = gps.parsefloat(); //suunta lastgpsread=now; delay(10); // void gpslatlong(int lat1, int lat2, int long1, int long2) //paikan, nopeuden ja suunnan printti, jos vaikka haluaa tulevaisuudessa näytölle gpslat = int(lat1/100) + (lat1%100)/60.0 + float(lat2)/10000.0/60.0;

gpslong = int(long1/100) + (long1%100)/60.0 + float(long2)/10000.0/60.0; Serial.print(gpsLat,5); Serial.print("/"); Serial.println(gpsLong,5); Serial.print("Nopeus:"); Serial.println(gpsSpeed,3); Serial.print("Suunta:"); Serial.println(gpsBearing,2); void gpsohjaus() //ohjaustoiminto buttonstateset = digitalread(buttonpinset); buttonstateclear = digitalread(buttonpinclear); tallennus = EEPROM.read(0); //EEPROM muistin luku osoitteesta (0) //Keskiarvo GPS suunnasta total= total - readings[index]; readings[index] = gpsbearing; total= total + readings[index]; index = index + 1; average = total / 5; int suunta = average/1.42; //suuntima on 0-360, mutta EEPROM tallentaa arvot vain välillä 0-255 //PID parametrit char erotus = suunta-tallennus; //hetkellisen suunnan ja tallennuksen ero int ero = erotus;

int ulostulo; int pidedellinenarvo = pidnykyarvo; pidnykyarvo = suunta; //PID-säädin if (abs(ero) >= 2) ulostulo = 5*ero+1*erosumma+5*(pidNykyArvo-pidEdellinenArvo); // Kerroin on arvon vahvistus erosumma += ero; else ulostulo = 0; if (index >= 5) index = 0; int ohjaus = 120 + ulostulo; //120 potentiometrin keskikohta if (buttonstateset == HIGH) //toimi jos Set nappia painettu EEPROM.write(0, suunta); //kirjoita EEPROMn osoitteeseen (0) suuntiman arvo digitalwrite(13, HIGH); //sytytä LED if (buttonstateclear == HIGH) //toimi jos Reset nappia painettu EEPROM.write(0, 0); //kirjoita EEPROMn osoitteeseen (0) arvo 0 digitalwrite(13, LOW); //sammuta LED if (tallennus!= 0) //toimi jos tallennuksen:n arvo ei ole 0 if (pot > ohjaus && ohjaus > -100) digitalwrite(7, LOW);

digitalwrite(8, HIGH); analogwrite(5,255); else if (pot < ohjaus && ohjaus < 100) digitalwrite(7, HIGH); digitalwrite(8, LOW); analogwrite(5,255); else digitalwrite(7, LOW); digitalwrite(8, LOW); analogwrite(5,0); Serial.print("ero:"); //tulosta ero sarjaporttiin Serial.println(ero); Serial.print("average:"); //tulosta keskiarvo sarjaporttiin Serial.println(average); if (tallennus == 0) //toimi jos tallennuksen:n arvo on 0 if (buttonstateoikea == HIGH && 20 < pot < 200) digitalwrite(7, HIGH); digitalwrite(8, LOW); analogwrite(5,180); else if (buttonstatevasen == HIGH && 20 < pot < 200) digitalwrite(7, LOW);

digitalwrite(8, HIGH); analogwrite(5,180); else analogwrite(5,0); Serial.print("tallennus:"); //tulosta tallennus sarjaporttiin Serial.println(tallennus);