3.1.1 Katse Nuppude ja Slideswitch’i kasutamise võimalus
Töö kirjeldus:
Looma situatsiooni kui LED põleb nuppu vajutamisel
Komponendid:
Arduino Uno
Arendusplaat
LED valgusdiood
Takisti 3 tk 220 Om
Juhtmed 7 tk
Ühendamise skeem:

Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | const int button1Pin = 2 ; //viik kunu on ühebdatud nupp1 const int button2Pin = 3 ; //viik kuhu on ühendatud nupp2 const int ledPin = 13 ; void setup () { pinMode (button1Pin, INPUT ); //algväärtuse nupu viigu sisendiks pinMode (button2Pin, INPUT ); //algväärtuse nupu viigu sisendiks pinMode (ledPin, OUTPUT ); //algväärtuse LED viigu väljundiks } void loop () { int button1State, button2State; //nupu oleku muutujad ( переменные для сохранения состояния кнопок) // Поскольку кнопки имеют только два состояния (нажаты и не нажаты) мы будем // работать с ними используя цифровые порты ввода. Для того чтобы считывать // digitalRead() функция позволяет получить один параметр с цифрового порта и возвратить либо HIGH (+5V), либо LOW ("0"). button1State = digitalRead (button1Pin); // salvestame muutujasse nupu hetke väärtuse button2State = digitalRead (button2Pin); if (((button1State = = LOW ) | | (button2State = = LOW )) // kui nupu on alla vajutatud (сравниваем, нажата ли одна из кнопок) & & ! // и если нет ((button1State = = LOW ) & & (button2State = = LOW ))) // kui nupude on alla vajutatud (сравниваем, нажаты ли обе кнопки тогда...) { digitalWrite (ledPin, HIGH ); // süütame LEDi (включаем светодиод) } else { digitalWrite (ledPin, LOW ); // kustutame LEDi (выключаем светодиод) } } |
Foto:
Nuppu vajutamisel LED põleb
3.1.2 Slideswitch’i kasutamine
Töö kirjeldus:
Looma
Komponenid:
Arduino Uno
Arendusplaat
Patarei 9V
SlideSwitch 1tk
LED valgusdiood
Takisti 1 tk 220 Om
Juhtmed 7 tk
Ühendamise skeem:

Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | // C++ code // int swPin = 4 ; int ledPin = 10 ; int switchstate = 0 ; void setup () { pinMode (swPin, INPUT ); pinMode (ledPin, OUTPUT ); } void loop () { switchstate = digitalRead (swPin); if (switchstate = = HIGH ) { digitalWrite (ledPin, HIGH ); } else { digitalWrite (ledPin, LOW ); } } |
Foto:
Switch ON – LED põleb, Switch OFF – LED ei põle
3.2 Katse Photoresistor
Töö kirjeldus:
Imiteerima pime ja valgust, et LED põleks pime ajal ja valguse ajal ei põleks
Komponendid:
Arduino Uno
Arendusplaat
Fototakisti 1tk
LED valgusdiood
Takisti 1 tk 220 Om, 1 tk 10 kOm
Juhtmed 6 tk
Ühendamise skeem:

Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | const int sensorPin = 0 ; const int ledPin = 9 ; int lightLevel, high = 0 , low = 1023 ; // создадим глобальные переменные для уровней яркости high (высокий), low (низкий): void setup () { pinMode (ledPin, OUTPUT ); Serial.begin ( 9600 ); // //Serial monitori seadistamine (для отладки, чтобы увидеть показания датчиков) } void loop () { // Диапазон чисел с которыми работает функция analogRead() находится в пределах от 0 (0 вольт) и 1023 (5 вольт). // Но! Управлением яркостью светодиода занимается функция analogWrite(), она использует диапазон от от 0 до 255. lightLevel = analogRead (sensorPin); //loeme mõõdetud analoogväärtuse // Эту проблему можно решить с помощью двух полезных функций под названием map() и constrain(): // Функция map() может преобразовывать один диапазон значений в другой. К примеру - мы указываем map() в параметрах, диапазон "из" 0-1023 "в" 0-255, она преобразует первый больший диапазон во второй, более мелкий. // Поскольку map() может столкнуться с числами за пределами диапазона, скажем или больше, или меньше, или даже с отрицательными. // Поэтому нужно за ранее подготовиться к такому повороту событий, для этого можно, и даже нужно использовать еще одну функцию - constrain(). // Функция constrain() проверит содержится ли число в заданном диапазоне. // Если число выше диапазона, он будет уменьшено до самого большого, а если число ниже диапазона, он будет увеличенно до самого низкого // Пример: если constrain() столкнулось с числами 1024, 1025, 1026.., она их преобразует в 1023, 1023, 1023..). С отрицательными числами она сделает тоже самое, т.е все отрицательные станут 0. // lightLevel = constrain(lightLevel, 0, 255); manualTune(); // ручное изменение диапазона от светлого к темному //autoTune(); // автоматическое analogWrite (ledPin, lightLevel); // Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) "lightLevel" на "255-lightLevel". Теперь у нас получился ночник! // для отладки, чтобы увидеть показания датчиков через "монитор порта" Serial.print (lightLevel); // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023)) Serial.println ( "" ); delay ( 1000 ); } void manualTune() { lightLevel = map (lightLevel, 300 , 800 , 0 , 255 ); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)). lightLevel = constrain (lightLevel, 0 , 255 ); } void autoTune() { if (lightLevel < low) // если уровень "lightLevel" меньше 1023, то присвоим { low = lightLevel; // теперь самым "низким" ~ 800 } if (lightLevel > high) { high = lightLevel; } lightLevel = map (lightLevel, low + 0 , high - 30 , 0 , 255 ); lightLevel = constrain (lightLevel, 0 , 255 ); } |
Foto:
Valguse vahetamisel LED põleb kui on pime, kui on valgus siis LED ei põle
Ülesanne 3.1 Öölamp
Töö kirjeldus:
Luua öölamp
Komponenid:
Arduino Uno
Arendusplaat
RGB LED valgusdiood 1tk
Potentsioometr 1tk
Fototakisti 1 tk
Takisti 1 tk 10 K Om
Takisti 1 tk 220 Om
Juhtmed 12 tk
Ühendamise skeem:

Seletamine:
Öölamp ei põle kui potentsiomeetri väärtus on väiksem või võrdleb 10 ning kui fototakisti väärtus on <100 siis ei põle.
Juhul kui eespool nimetatud kriteriiumid on suurem siis random funktsioonil valib põlemise intensiivsus 0-255.
Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | //defineerime pinne RGB LED, potentsiometer ja fototakisti int redPin = 4 ; int greenPin = 2 ; int bluePin = 3 ; int potentiometerPin = A0; int photoresistorPin = A1; void setup () { Serial.begin ( 9600 ); pinMode (redPin, OUTPUT ); pinMode (greenPin, OUTPUT ); pinMode (bluePin, OUTPUT ); } void loop () { int photoresistorValue = analogRead (photoresistorPin); //loeme fototakisti andmed int potentiometerValue = analogRead (potentiometerPin); //loeme potentsiometri andmed Serial.println (photoresistorValue); if (photoresistorValue < 100 ) { //juhul kui fototakisti väärtus on <100 siis ei põle digitalWrite (redPin, LOW ); digitalWrite (greenPin, LOW ); digitalWrite (bluePin, LOW ); } else { if (potentiometerValue < = 10 ) { //juhul kui potenstiomeetri väärtus on <= 10 siis ei põle digitalWrite (redPin, LOW ); digitalWrite (greenPin, LOW ); digitalWrite (bluePin, LOW ); } else { analogWrite (redPin, random ( 255 )); //kui potentsioometri väärtus on suurem > 10 siis põleb random 0-255 tugevusel analogWrite (greenPin, random ( 255 )); analogWrite (bluePin, random ( 255 )); delay ( 300 ); } } } |
Video:
https://drive.google.com/drive/folders/1QIIOFeZJeWjZsU1fwYtt2furDs4VmduP
Kus võib seda kasutada:
Öölampid, öösel põleb, päeval ei põle
Päikesepaneelid, mis võtavad vastu elektri valgusest
Trükimasinasse esitatavate paberilehtede arvu kontrollimine
infrapunakiirguse
infrapuna soojus- ja spektromeetria sensorite
keskkonnasaaste kontrolli aparatuuri
kosmoseuuringute
termodiagnostika meditsiinis
Ülesanne 3.1 Öölamp (Teine variant)

Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | const int slideSwitchPin = 12 ; const int rgbRedPin = 7 ; const int rgbGreenPin = 6 ; const int rgbBluePin = 5 ; const int buttonPin = 4 ; const int photoresistorPin = A0; int brightnessMode = 0 ; // 0 = madal heledus, 1 = keskmine heledus, 2 = kõrg heledus int photoresistorValue = 0 ; bool isDark = false ; void setup () { pinMode (slideSwitchPin, INPUT_PULLUP); pinMode (rgbRedPin, OUTPUT ); pinMode (rgbGreenPin, OUTPUT ); pinMode (rgbBluePin, OUTPUT ); pinMode (buttonPin, INPUT_PULLUP); Serial.begin ( 9600 ); } void loop () { // Loe fototakisti väärtust photoresistorValue = analogRead (photoresistorPin); // Kontrollige, kas slaidilüliti on sisse lülitatud if ( digitalRead (slideSwitchPin) = = HIGH ) { // Kontrollige, kas on pime if (photoresistorValue > 500 ) { isDark = true ; } else { isDark = false ; } // Kui on pime, lülitage sisse RGB LED if (isDark) { // Kontrollige, kas nuppu vajutatakse heledusrežiimi muutmiseks if ( digitalRead (buttonPin) = = LOW ) { brightnessMode = (brightnessMode + 1 ) % 3 ; delay ( 100 ); // Wait for button debounce } // RGB LED-i heleduse määramine heleduse režiimi alusel switch (brightnessMode) { case 0 : setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 20 ); break ; case 1 : setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 127 ); break ; case 2 : setRgbBrightness(rgbRedPin, rgbGreenPin, rgbBluePin, 255 ); break ; } // RGB LED-i värvi määramine valgeks setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 255 , 255 , 255 ); } else { // Kui see pole pime, lülitage RGB LED välja ja lähtestage heledusrežiim setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 0 , 0 , 0 ); brightnessMode = 0 ; } } else { // Kui slaidilüliti on välja lülitatud, lülitage RGB LED välja ja lähtestage heledusrežiim setRgbColor(rgbRedPin, rgbGreenPin, rgbBluePin, 0 , 0 , 0 ); brightnessMode = 0 ; } // Prindi fototakisti ja isDark (0 on hele, 1 on tume) väärtus Serial Monitor Serial.print ( "Photoresistor value: " ); Serial.print (photoresistorValue); Serial.print ( ", isDark: " ); Serial.println (isDark); } // Helper function to set the color of the RGB LED void setRgbColor( int redPin, int greenPin, int bluePin, int redValue, int greenValue, int blueValue) { analogWrite (redPin, redValue); analogWrite (greenPin, greenValue); analogWrite (bluePin, blueValue); } // Helper function to set the brightness of the RGB LED void setRgbBrightness( int redPin, int greenPin, int bluePin, int brightness) { analogWrite (redPin, brightness); analogWrite (greenPin, brightness); analogWrite (bluePin, brightness); } |