Differences

This shows you the differences between two versions of the page.

Link to this comparison view

en:arduino [2015/12/11 08:21]
raivo.sell
en:arduino [2018/12/27 12:53]
Line 1: Line 1:
-====== Arduino Examples ====== 
  
-/* 
-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}} 
-*/ 
- 
- 
-====== References ====== 
- 
-[[http://​itead-europe.com/​pm/​platform/​shield/​1602%20lcd%20shield/​SCH_IM120417018_Arduino1602LCDShield.pdf|LCD Shield datasheet]] 
- 
-====== Example 1 Digital I/O ====== 
- 
-===== Example 1.1 Push down button to light up LED ===== 
- 
-<code c> 
- 
-// Constants 
-const int nupp = A0; // Viik kuhu on ühendatud nupp 
-const int LED = 13; // Viik kuhu on ühendatud nupp roheline LED  
-// Global variables 
-int NupuOlek = 0; // Button state  
- 
-void setup() {  
-  pinMode(LED,​ OUTPUT); // define LED pin as output 
-  pinMode(nupp,​ INPUT); // define button pin as input 
-  digitalWrite(nupp,​ HIGH); // turn on internal pull-up resistor on button pin 
-} 
- 
-void loop(){ 
-  NupuOlek = digitalRead(nupp);​ // read current button state to variable 
-  if (NupuOlek == HIGH) { // if button state is high (+5 V)  
-    digitalWrite(LED,​ LOW); // turn LED off 
-  }  
-  else { // if button state is not high (GND)  
-    digitalWrite(LED,​ HIGH); // turn led on 
-  } 
-} 
-</​code>​ 
- 
-===== Example 1.2 On button push LED turns of for 1 second ===== 
-<code c> 
-// First part of code copy from example #1.1 
-void loop(){ 
-  if (digitalRead(nupp) == LOW) { // if button state is high (+5V) 
-    digitalWrite(LED,​ HIGH); // turn on LED  
-    delay(1000);​ // wait 1 second (1000 milliseconds) 
-  }  
-  digitalWrite(LED,​ LOW); // turn LED off 
-} 
-</​code>​ 
- 
-===== Example 1.3 LED turns on on button release ===== 
-<code c> 
-// First part of code copy from example #1.1 
-void loop(){ 
-  if (digitalRead(nupp) == LOW) { // if button pressed ​ 
-    while (digitalRead(nupp) == LOW){} // wait for button release 
-    digitalWrite(LED,​ HIGH); // turn on LED 
-  }  
-} 
-</​code>​ 
- 
-===== Task #1.1 ===== 
- 
-Modify example program so that LED blinks three times. 
-/​*Modifitseerida näiteprogrammi nii, et nupule vajutades vilgub LED (LCD laiendusplaadi korral võib kasutada taustavalguse LED-e) kolm korda.*/ 
-===== Task #1.2 ===== 
- 
-Modify example program so that on button press LED starts to blink with 1 second intervals. On second button press led stops blinking. 
-/​*Modifitseerida näiteprogrammi nii, et nupule vajutades hakkab LED konstantselt vilkuma 1 sekundilise intervalliga ja teine nupule vajutus katkestab vilkumise. 
-0 %).*/ 
- 
-====== Example #2 Analog inputs ====== 
- 
-===== Example #2.1 When exceeding potentiometer threshold value the LED turns on ===== 
- 
- 
-<code c> 
- 
-// Set threshold value at which the LED turns on 
-const int nivoo = 512;  
- 
-int pote_sisend = A1; // set potentiometer input pin 
-int led = 13; // set LED pin 
-int pote = 0; // integer variable to hold potentiometer value 
- 
-void setup() { 
-  pinMode(led,​ OUTPUT); // set LED pin to output 
-} 
- 
-void loop() { 
-  pote = analogRead(pote_sisend);​ // read Analog input value 
-  // if value is greater than threshold then turn on LED 
-  if (pote>​nivoo) digitalWrite(led,​ HIGH); 
-  else digitalWrite(led,​ LOW); // other cases turn LED off 
-} 
-</​code>​ 
- 
-===== Example #2.2 LED blinking speed depends on potentiometer value ===== 
- 
- 
-<code c> 
- 
-int pote_sisend = A1; // set potentiometer pin 
-int led = 13; // set LED pin 
-int pote = 0; // integer variable to hold potentiometer value 
- 
-void setup() { 
-  pinMode(led,​ OUTPUT); // define LED pin as output 
-} 
-void loop() { 
-  pote = analogRead(pote_sisend);​ // read potentiometer value and write into variable 
-  digitalWrite(led,​ HIGH); // turn off LED 
-  delay(pote);​ // generate delay <​sensorValue>​ milliseconds ​ 
-  digitalWrite(led,​ LOW); // turn on LED 
-  delay(pote);​ // generate delay <​sensorValue>​ milliseconds 
-} 
-</​code>​ 
- 
-===== Task #2 ===== 
- 
-Modify example program so that its possible to change LED brifgtness with potentiometer. Use delay functions. 
-/​*Modifitseerida näiteprogrammi nii, et potentsiomeetriga määratakse LED-i heledus, kasutades selleks delay funktsioone.*/​ 
- 
-====== Example #3 LCD ====== 
- 
-===== Example #3.1 LCD using ===== 
- 
- 
-<code c> 
- 
-#include <​LiquidCrystal.h>​ // include needed libraries 
- 
-// Initialize LCD 
-LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
- 
-void setup() { 
-  lcd.begin(16,​ 2); // set LCD cursor column and row 
-  lcd.print("​Tere Tallinn!"​);​ // Print text on LCD 
-} 
- 
-void loop() { 
-  ​ 
-  lcd.setCursor(0,​ 1); //set cursor position to first row and column 0 (1. rida on indeksiga 0) 
-  ​ 
-  lcd.print(millis()/​1000);​ // Print sensor value to LCD 
-  ​ 
-} 
-</​code>​ 
- 
-===== Example #3.2 LCD and analog inputs ===== 
- 
-<code c> 
- 
-#include <​LiquidCrystal.h>​ // include needed library 
- 
-// Initialize LCD 
-LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
-int pote_sisend = A1; // set potentiometer pin 
- 
-void setup() { 
-  lcd.begin(16,​ 2); // set LCD column and row 
-  lcd.print("​Potentsiomeeter"​);​ // Print out sensor name on LCD 
-} 
- 
-void loop() { 
-  ​ 
-  lcd.setCursor(0,​ 1); //set cursor position first row and column 0 (1. rida on indeksiga 0) 
-  lcd.print(analogRead(pote_sisend));​ //Print out potentiometer value to LCD 
-  lcd.print(" ​   "); //Print out empty spaces ​ 
-  delay (100);  ​ 
-} 
- 
- 
-</​code>​ 
- 
-===== Task #3.1 ===== 
- 
-Make a program that on button press changes LCD row. Potentiometer value has to be printed only on the new row.  
-/*Koostada programm, mis võimaldab nupuvajutusega vahetada LCD rida, kuhu trükitakse potentsiomeetri väärtus.*/​ 
- 
- 
- 
-====== Example 4 Sensors and LCD ====== 
- 
-===== Example #4.1 Temperature sensor with math library ===== 
- 
- 
-<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. 
en/arduino.txt · Last modified: 2018/12/27 12:53 (external edit)
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