Erinevused

Siin näed erinevusi valitud versiooni ja hetkel kehtiva lehekülje vahel.

Lõlita võrdlemise vaatele

et:arduino [2015/12/10 16:03]
raivo.sell
et:arduino [2018/12/27 12:53]
Rida 1: Rida 1:
-====== Arduino näited ====== 
  
-/* 
-Palun täida koolituse lõpus ka 
-[[https://​docs.google.com/​spreadsheet/​viewform?​usp=drive_web&​formkey=dDZ3QVNmU0E2WkhRNWdzekhCRTl5dEE6MQ#​gid=0|tagasiside]]. 
- 
-{{:​koolitused:​i_p_arduino_koolirobootikas_2015.pdf|Koolitusmaterjal - Loeng}} 
- 
- 
-English: 
-{{:​koolitused:​c_robotics.pdf|Robotics and Didactics}} ​   {{:​koolitused:​c2_arduino.pdf|Arduino programming}} 
-*/ 
- 
-====== Näide 1 Digitaalsed I/O ====== 
- 
-===== Näide 1.1 Nupule vajutades süttib LED ===== 
- 
-<code c> 
-/* 
-Nimetus: Näide #1.1 Digitaalsed sisend-väljundid 
-Kirjeldus: Programm demonstreerib nupu ja LED-i kasutamist 
-Autor: Raivo Sell 
-Kuupäev: 15.01.2013 
-*/ 
-// Konstandid 
-const int nupp = A0; // Viik kuhu on ühendatud nupp 
-const int LED = 13; // Viik kuhu on ühendatud nupp roheline LED  
-// Globaalsed muutujad 
-int NupuOlek = 0; // Nupu oleku muutuja 
- 
-void setup() {  
-  pinMode(LED,​ OUTPUT); // algväärtustame LED viigu väljundiks ​ 
-  pinMode(nupp,​ INPUT); // algväärtustame nupu viigu sisendiks ​ 
-  digitalWrite(nupp,​ HIGH); // lülitame sisemised pullup takistid sisse 
-} 
- 
-void loop(){ 
-  NupuOlek = digitalRead(nupp);​ // salvestame muutujasse nupu hetke väärtuse 
-  if (NupuOlek == HIGH) { // Kui nupu olek on kõrge (+5 V)  
-    digitalWrite(LED,​ LOW); // kustutame LED-i  
-  }  
-  else { // vastasel juhul (Maa)  
-    digitalWrite(LED,​ HIGH); // süütame LED-i  
-  } 
-} 
-</​code>​ 
- 
-===== Näide 1.2 Nupule vajutades süttib LED 1 sekundiks ===== 
-<code c> 
-// Algus identne näitega #1.1 
-void loop(){ 
-  if (digitalRead(nupp) == LOW) { // Kui nupu olek on madal  
-    digitalWrite(LED,​ HIGH); // süütame LED-i  
-    delay(1000);​ // ootame 1 sekundi (1000 millisekundit) 
-  }  
-  digitalWrite(LED,​ LOW); // kustutame LED-i  
-} 
-</​code>​ 
- 
-===== Näide 1.3 LED süttib nupu vabastamisel ===== 
-<code c> 
-// Algus identne näitega #1.1 
-void loop(){ 
-  if (digitalRead(nupp) == LOW) { // Nupule vajutus ​ 
-    while (digitalRead(nupp) == LOW){} // Ootame nupu lahtilaskmist 
-    digitalWrite(LED,​ HIGH); // süütame LED-i  
-  }  
-} 
-</​code>​ 
- 
-===== Harjutus #1.1 ===== 
- 
-Modifitseerida näiteprogrammi nii, et nupule vajutades vilgub LED (LCD laiendusplaadi korral võib kasutada taustavalguse LED-e) kolm korda. 
-===== Harjutus #1.2 ===== 
- 
-Modifitseerida näiteprogrammi nii, et nupule vajutades hakkab LED konstantselt vilkuma 1 sekundilise intervalliga ja teine nupule vajutus katkestab vilkumise. 
-0 %). 
- 
-====== Näide #2 Analoog sisendid ====== 
- 
-===== Näide #2.1 Potentsiomeetri ​ max nivoo ületamisel süttib LED ===== 
- 
- 
-<code c> 
-/* 
-Nimetus: Näide #2.1 Analoog sisend ​ 
-Kirjeldus: Programm demonstreerib analoogsisendi kasutamist 
-Autor: Raivo Sell 
-*/ 
- 
-// määrame nivoo, millest kõrgemal väärtusel //​süüdatakse LED 
-const int nivoo = 512;  
- 
-int pote_sisend = A1; // määrame potentsiomeetri sisendviigu 
-int led = A5; // määrame LED ühendusviigu 
-int pote = 0; // muutuja potentsiomeetri väärtuse salvestamiseks 
- 
-void setup() { 
-  pinMode(led,​ OUTPUT); // algväärtustame LED viigu väljundiks ​ 
-} 
- 
-void loop() { 
-  pote = analogRead(pote_sisend);​ // loeme analoogsisendi väärtuse 
-  // kui väärtus on suurem nivoost, süütame LED-i  
-  if (pote>​nivoo) digitalWrite(led,​ HIGH); 
-  else digitalWrite(led,​ LOW); // vastasel korral kustutame LED-i 
-} 
-</​code>​ 
- 
-===== Näide #2.2 LED-i vilkumise sagedus sõltub potentsiomeetri sisendist ===== 
- 
- 
-<code c> 
-/* 
-Nimetus: Näide #2.2 Analoog sisendi teisendamine ajaks 
-Kirjeldus: Programm demonstreerib analoogsisendi kasutamist 
-Autor: David Cuartielles 
-Täiendused:​ Tom Igoe 
-Kohandused: Raivo Sell 
-OriginaalURL:​ http://​arduino.cc/​en/​Tutorial/​AnalogInput 
-*/ 
- 
-int pote_sisend = A1; // määrame potentsiomeetri sisendviigu 
-int led = A5; // määrame LED ühendusviigu ​ 
-int pote = 0; // muutuja potentsiomeetri väärtuse salvestamiseks 
- 
-void setup() { 
-  pinMode(led,​ OUTPUT); // algväärtustame LED viigu väljundiks 
-} 
-void loop() { 
-  pote = analogRead(pote_sisend);​ // loeme anduri väärtuse ​ 
-  digitalWrite(led,​ HIGH); // kustutame LED-i  
-  delay(pote);​ // tekitame viite <​sensorValue>​ millisekundit ​ 
-  digitalWrite(led,​ LOW); // süütame LED-i  
-  delay(pote);​ // tekitame viite <​sensorValue>​ millisekundit 
-} 
-</​code>​ 
- 
-===== Harjutus #2 ===== 
- 
-Modifitseerida näiteprogrammi nii, et potentsiomeetriga määratakse LED-i heledus, kasutades selleks delay funktsioone. 
- 
-====== Näide #3 LCD ====== 
- 
-===== Näide #3.1 LCD kasutamine ===== 
- 
- 
-<code c> 
-/* 
-Nimetus: Näide #3.1 LCD kasutamine 
-Kirjeldus:​Kasutab LiquidCrystal.h teeki ja ITEAD Studio 2x16 teksti laiendusplaati 
-Autor: Tom Igoe  
-Modifikatsioon:​ Raivo Sell 
-Kuupäev: 4.06.2014 
-Versioon: 1.0 
-*/ 
- 
-#include <​LiquidCrystal.h>​ // Kaasame vajaliku teegi 
- 
-// Initsialiseerime LCD koos vastavate viikude ühendamisega 
-LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
- 
-void setup() { 
-  lcd.begin(16,​ 2); //Määrame LCD read ja veerud 
-  lcd.print("​Tere Tallinn!"​);​ // Trükime tervitusteksti 
-} 
- 
-void loop() { 
-  ​ 
-  lcd.setCursor(0,​ 1); //Viime kursori esimesele reale esimesse positsiooni (1. rida on indeksiga 0) 
-  ​ 
-  lcd.print(millis()/​1000);​ //Trükime loenduri väärtuse 
-  ​ 
-} 
-</​code>​ 
- 
-===== Näide #3.2 LCD kasutamine analoogsisendiga ===== 
- 
-<code c> 
-/* 
-Nimetus: Näide #3.2 LCD kasutamine analoogsisendiga 
-Kirjeldus: ​ 
-          Kasutab LiquidCrystal.h teeki ja ITEAD Studio 2x16 teksti laiendusplaati 
-Autor: Tom Igoe  
-Modifikatsioon:​ Raivo Sell 
-Kuupäev: 4.06.2014 
-Versioon: 1.0 
-*/ 
- 
-#include <​LiquidCrystal.h>​ // Kaasame vajaliku teegi 
- 
-// Initsialiseerime LCD koos vastavate viikude ühendamisega 
-LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
-int pote_sisend = A1; // määrame potentsiomeetri sisendviigu 
- 
-void setup() { 
-  lcd.begin(16,​ 2); //Määrame LCD read ja veerud 
-  lcd.print("​Potentsiomeeter"​);​ // Trükime tervitusteksti 
-} 
- 
-void loop() { 
-  ​ 
-  lcd.setCursor(0,​ 1); //Viime kursori esimesele reale esimesse positsiooni (1. rida on indeksiga 0) 
-  lcd.print(analogRead(pote_sisend));​ //Trükime analoogsisendi väärtuse 
-  lcd.print(" ​   "); //Trükime tühikud, et vana väärtus ei jääks segama 
-  delay (100);  ​ 
-} 
- 
- 
-</​code>​ 
- 
- 
-===== Harjutus #3.1 ===== 
-Koostada programm, mis trükib potentsiomeetri väärtuse rea algusesse. Vajutades nupule vahetatakse rida ja jooksev väärtus kirjutatakse uuele reale. Vajutades uuesti nuppu vahetatakse aktiivse kirjutamise rida tagasi. 
- 
-====== Näide 4 Andurid ja LCD ====== 
- 
-===== Näide #4.1 Temperatuuri andur koos matemaatika teegiga ===== 
- 
- 
-<code c> 
- 
-/* 
-Nimetus: Näide #4.1 Temperatuuri andur koos matemaatika teegiga 
- 
- 
-Kirjeldus: ​ 
-          Kasutab Steinhart-Hart termistori valemit: 
-          temperatuur kelvinites = 1 / {A + B[ln(R)] + C[ln(R)]^3} 
-          kus A = 0.001129148,​ B = 0.000234125 ja C = 8.76741E-08 
-Autor: Milan Malesevic and Zoran Stupic ​ 
-Modifikatsioon:​ Raivo Sell 
-Kuupäev: 15.01.2013/​4.06.2014 
-Versioon: 1.1 
-*/ 
- 
-// Kaasame vajalikud teegid 
-#include <​math.h>​ 
-#include <​LiquidCrystal.h>​ 
- 
-// Initsialiseerime LCD koos vastavate viikude ühendamisega 
-LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
-int andur = A4; // määrame potentsiomeetri sisendviigu 
- 
-void setup() { 
-  lcd.begin(16,​ 2); //Määrame LCD read ja veerud 
-  lcd.print("​Temperatuur"​);​ // Trükime tervitusteksti 
-  delay (1000); 
-} 
- 
-void loop() { 
- ​Termistor(analogRead(andur));​ // Käivitame funktsooni 
- ​delay(1000);​ // Ootame 1 sek. 
- ​lcd.clear();​ // Puhastame ekraani vanadest andmetest 
-} 
-  
-void Termistor(int RawADC) { 
-   ​double Temp; 
-   long Takistus; 
-  // Valem: Takistus = (1024 * JaguriTakisti/​ADC) - JaguriTakisti ​ 
-  Takistus=((10240000/​RawADC) - 10000); ​   ​ 
- 
-  //Esimene rida 
-  lcd.setCursor(0,​ 0); 
-  lcd.print("​AD="​);​ 
-  lcd.print(RawADC);​ //Trükime analoogsisendi väärtuse 
- 
-  lcd.setCursor(8,​ 0); 
-  lcd.print("​U="​);​ 
-  lcd.print(((RawADC*5.0)/​1024.0),​3); ​ //Trükime pinge väärtuse 
- 
- 
-  //Teine rida 
-  lcd.setCursor(0,​ 1); 
-  lcd.print("​R="​);​ 
-  lcd.print(Takistus);​ //Trükime takistuse väärtuse 
- 
-  Temp = log(((10240000/​RawADC) - 10000)); 
-  Temp = 1/​(0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp))* Temp); 
-  Temp = Temp - 273.15; // Konverteeri Kelvinid Celciustesse 
-  ​ 
-  lcd.setCursor(8,​ 8); 
-  lcd.print("​T="​);​ 
-  lcd.print(Temp);​ //Trükime temperatuuri väärtuse 
-  ​ 
-} 
-</​code>​ 
- 
- 
-===== Näide #4.2 Kaugusandurid ===== 
- 
-<code c> 
-// Reading analog and digital sensors 
-void setup() ​ 
- 
-  // For visualization we can use serial monitor 
-  Serial.begin(9600);​ 
- 
-  
-void loop() ​ 
- 
-  // Read the input on analog pin 0 and digital pin 10: 
-  int AnalogSensorValue = analogRead(A0);​ 
-  int DigitalSensorValue = digitalRead(10);​ 
-  ​ 
-  Serial.println(AnalogSensorValue);​ // Print out the analog value 
-  Serial.println(DigitalSensorValue);​ // Print out the digital value 
-  ​ 
-  delay(500); // Delay in between readings for readability 
- 
- 
-</​code>​ 
- 
-===== Harjutus #4.1 ===== 
-Modifitseerida programmi nii, et potentsiomeetriga määratakse temperatuuri nivoo, mis salvestatakse nupuga programmi mällu ja selle nivoo hilisemal ületamisel käivitatakse täiturmehhanism (milleks on LED). 
- 
-===== Harjutus #4.2 ===== 
-Kombineerida LED-i heleduse programm ja eelnev temperatuuri juhtimise programm, kus LED-i heledus sõltub sellest, kui palju nivootemperatuuri ületati (1 kraad: heledus 25 %, 2 kraadi: heledus 50 %, 3 kraadi: heledus 75 % ja 5 kraadi: heledus 10 
- 
-====== Näide #5 Mootor ====== 
- 
-===== Näide #5.1 Servomootor ===== 
- 
-<code c> 
-#include <​Servo.h> ​ 
-  
-Servo right_motor,​left_motor; ​ // create servo object to control a servo  
-  
-void setup() ​ 
- 
-  right_motor.attach(11); ​ // attaches the servo on pin 11 
-  left_motor.attach(12); ​ // attaches the servo on pin 12 
- 
-  
-void loop() ​ 
- 
-    // Control servo with value 0-180. 90 means that servo stands still 
-    right_motor.write(0); ​ // 0 - Servo with maximum speed backward 
-    left_motor.write(180);​ // 180 - Servo with maximum speed forward 
- 
- 
-</​code>​ 
- 
-===== Näide #5.2 Potentsiomeetriga juhitav servomootor ===== 
- 
-<code c> 
-#include <​Servo.h> ​ 
-Servo right_motor,​left_motor; ​ // create servo object to control a servo  
-  
-void setup() ​ 
- 
-  while (digitalRead(10)==1){};​ // Question - What this row does? 
-  right_motor.attach(11); ​ // Attaches the servo on pin 11  
-  left_motor.attach(12); ​ // Attaches the servo on pin 12 
- 
-  
-void loop() ​ 
- 
-  int AnalogSensorValue = analogRead(A0);​ // Read front sensor value 
-  // Compare it with reference 
-  if (AnalogSensorValue>​500) { // If TRUE 
-     ​left_motor.write(0); ​ // Reverse one motor 
-     ​delay(750);​ // Wait until turn is enough 
-   } 
-    right_motor.write(0); ​   // Drive forward 
-    left_motor.write(180); ​  // Drive forward 
- 
- 
- 
-</​code>​ 
- 
-===== Harjutus #5.1 ===== 
-Luua programm, mis võimaldab servomootori positsiooni muuta vastavalt nuppudega seadistatud suurusele. 
- 
-===== Harjutus #5.2 ===== 
-Luua programm, mis servomootori baasil ehitatud radariga ja fotoanduriga leiaks ruumist kõige eredama punkti. 
- 
- 
-====== Näide 6 Kommunikatsioon ====== 
- 
-===== Näide #6.1 Jadaliides ===== 
- 
- 
-<code c> 
-/* 
-Nimetus: Näide #6.1 Jadaliides 
-*/ 
-#include <​math.h>​ 
-int NTC_sisend = A2; // määrame temperatuurianduri sisendviigu 
-void setup() { 
- ​Serial.begin(9600);​ 
-} 
- 
-void loop() { 
- ​Termistor(analogRead(NTC_sisend));​ // Käivita funktsoon 
- ​Serial.println(""​);​ // Tekita reavahetus 
- ​delay(1000);​ // Oota 1 sek. 
-} 
-  
-double Termistor(int RawADC) { 
-   ​double Temp; 
-   long Takistus; 
-  // Valem: Takistus = (1024 * JaguriTakisti/​ADC) - JaguriTakisti ​ 
-  Takistus=((10240000/​RawADC) - 10000); ​   ​ 
- 
-  Serial.print("​ADC:​ "​); ​ 
-  Serial.print(RawADC); ​ 
-  Serial.print("/​1024"​);​ // Prindi ADC tulemus 
-  Serial.print(",​ Pinge: "​); ​ 
-  Serial.print(((RawADC*5.0)/​1024.0),​3); ​ 
-  Serial.print("​ volti"​);​ // Prindi pinge 
-  Serial.print(",​ Takistus: "​); ​ 
-  Serial.print(Takistus); ​ 
-  Serial.print("​ oomi"​);​ 
-  
-  Temp = log(((10240000/​RawADC) - 10000)); 
-  Temp = 1/​(0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp))* Temp); 
-  Temp = Temp - 273.15; // Konverteeri Kelvinid Celciustesse 
-  Serial.print(",​ Temperatuur:​ "​); ​ 
-  Serial.print(Temp); ​ 
-  Serial.print("​ kraadi C"); 
-  return Temp; 
-} 
- 
-</​code>​ 
- 
-===== Harjutus #6 ===== 
- 
-Luua programm, mis jadaliidesest saadetud teksti kirjutaks LCD ekraanile. Märk „+“ vahetab rida ning märk „-“ kustutab kogu ekraani. 
- 
- 
-====== Praktiline projekt #1 ====== 
- 
-Luua programm, mis temperatuurinivoo ületamisel muudab õhuklapi asendit (servo mootor). Temperatuurinivoo määratakse potentsiomeetriga. Õhuklapi asend sõltub temperatuuri erinevusest. Iga temperatuuri kraad, mis ületab nivood lisab klapi nurga 25%. Lüliti katkestab igal ajahetkel süsteemi töö (hädastop) ja viib klapi algasendisse tagasi, jättes punase LED-i vilkuma. Edasijõudnud võivad kasutada katkestust. 
-====== Praktiline projekt #2 ====== 
- 
-Ventilaatori juhtimine XRF kaudu. 
-Luua programm, mis suudab XRF raadiomooduliga lugeda kaugmoodulilt temperatuuri ning kui temperatur ületab kohalikul kontrolleril seatud nivoo käivitatakse kaugmoodulil asetsev ventilaator. Suhtkuseks kaugmooduliga tuleb kasutada allolevat protokolli: \\  
-  * xTEMP – tagastab kümnekordse temperatuuri Celsiuse kraadides (24,5C puhul saadetakse 245)  
-   * vastus: xNNN  
-  * xFANn – FAN1 käivitab ventilaatori,​ FAN0 peatab ventilaatori ​ 
-   * vastus xFANn  
- 
-Protokollis tähistab „x“ kohaliku seadme numbrit, mille annab juhendaja igale tiimile erineva. 
et/arduino.txt · Viimati muutnud: 2018/12/27 12:53 (väline muutmine)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0