4.1 Katse Temperatuuri andur


const int temperaturePin = 0; void setup() { Serial.begin(9600); } void loop() { float voltage, degreesC, degreesF; // Сначала мы измерим напряжение на аналоговом входе. Обычно для этого мы // использовали функцию analogRead(), которая возвращает число от 0 до 1023. // Здесь же мы написали специальную функцию, о ней чуть дальше, под // названием getVoltage(), которая возвращает напряжение (от 0 до 5 вольт), // присутствующего на аналоговом входе. voltage = getVoltage(temperaturePin); degreesC = (voltage - 0.5) * 100.0; // degreesC = voltage * 100.0; degreesF = degreesC * (9.0/5.0) + 32.0; Serial.print("voltage: "); Serial.print(voltage); Serial.print(" deg C: "); Serial.print(degreesC); Serial.print(" deg F: "); Serial.println(degreesF); // Вывод информации будет иметь вид подобно следующему: // "voltage: 0.73 deg C: 22.75 deg F: 72.96" delay(1000); // ootame 1 sek (повторение через одну секунду (можете поменять!)) } float getVoltage(int pin) { return (analogRead(pin) * 0.004882814); // Это уравнение преобразует значение напряжения от 0,0 до 5,0 В., полученное с помощью функции analogRead() с аналогового порта, в значения от 0 до 1023. }

// Множество библиотек доступных для применений, можно найти на http://arduino.cc/en/Reference/Libraries, #include <Servo.h> // nii teavitame Arduino IDE-t vajadusest kasutada Servo.h teeki (подключаем дополнительную библиотеку) // Как только вы "подключаете" библиотеку, так сразу получаете доступ к этим функциям. Вы можете найти список функций в библиотеке // сервопривода в: http://arduino.cc/en/Reference/Servo. Большинство библиотек доступно из меню "Файл / примеры". Servo servo1; // Peame looma servo objekti nimega servo1 (объект управления сервоприводом) void setup() { // Сейчас мы прикрепим (attach) объект servo1 к цифровому пину 9. Если вы собираетесь управлять более чем одним // сервоприводом, Вы должны прикрепить каждый новый объект серво к своему, отдельному порту, причем это порт должен быть цифровым. servo1.attach(9); //ütleme Arduinole, et infosuhtlus servo-objektiga servo käib läbi klemmi number 9. Tegu on digitaal-klemmiga--PWM digitaalne osa! Kontrollime, kas skeemil kasutame sama klemmi. } void loop() { int position; // Для управления сервоприводом, вы указываете ему угол на который он должен переместиться. Сервоприводы не могут повернуться на 360 // градусов, но вы можете указать ему, чтобы он поворачивался в определенную позицию от 0 до 180 градусов. servo1.write(90); //pööramise nurk =90 (Говорим серве повернуться на позицию 90 градусов, т.е устанавливаем в среднее положение) delay(1000); servo1.write(180); //pööramise nurk =180 (180 градусов, т.е устанавливаем в крайнее правое положение.) delay(1000); servo1.write(0); //pööramise nurk =0 (0 градусов, т.е устанавливаем в крайнее левое положение.) delay(1000); // servo positsiooni muutmine väike kiirusega pärisuunas (Изменение позиции на более низкой скорости): for(position = 0; position < 180; position += 2) { servo1.write(position); // positsiooni muutmine ( Перемещаемся на следующую позицию) delay(20); } // servo positsiooni muutmine väike kiirusega vastupäeva ("Говорим" сервоприводу повернуться на позицию 0 градусов, с шагом в 1 градус): for(position = 180; position >= 0; position -= 1) { servo1.write(position); // positsiooni muutmine (Переместиться на следующую позицию) delay(20); } }
Ülesanne 4 Temperatuuritundlik servolülitus(Kasvuhoone temperatuuri reguleegimine)

#include <Servo.h> // nii teavitame Arduino IDE-t vajadusest kasutada Servo.h teeki (подключаем дополнительную библиотеку) Servo servo1; const int temperaturePin = A0; const int sensorPin = A1; const int ledPin = 10; int lightLevel, high = 0, low = 1023; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); servo1.attach(9); } void loop() { float voltage, degreesC; voltage = getVoltage(temperaturePin); degreesC = (voltage - 0.5) * 100.0; Serial.print("voltage: "); Serial.print(voltage); Serial.print(" deg C: "); Serial.print(degreesC); delay(1000); int position; if (degreesC<35 && degreesC>30) { for(position = 0; position < 180; position += 1) { servo1.write(position); // positsiooni muutmine ( Перемещаемся на следующую позицию) delay(20); } } else if (degreesC<24 && degreesC>20) { for(position = 180; position >= 0; position -= 1) { servo1.write(position); // positsiooni muutmine (Переместиться на следующую позицию) delay(20); } } lightLevel = analogRead(sensorPin); manualTune(); analogWrite(ledPin, lightLevel); } float getVoltage(int pin) { return (analogRead(pin) * 0.004882814); } void manualTune() { lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)). lightLevel = constrain(lightLevel, 0, 255); }
https://www.tinkercad.com/things/3LHJ7vmPias-copy-of-copy-of-daring-amberis-bombul/editel
Oli kasutatud:
takistid 2 tk
LED lamp 1 tk
juhtmed 15 tk
arduino uno R3 1 tk
arendusplaat 1tk
servomootor 1 tk
termoandur 1tk
Töö kirjeldus:
Programmi alguses ühendatakse vajalikud raamatukogud ning deklareeritakse muutujad ja viigud. Servo.h raamatukogu kasutatakse servoajami käitamiseks. Funktsiooniga setup() reguleeritakse viigud, initsialiseeritakse jadaport ja ühendatakse servo viiguga 9. Funktsioonis loop() toimub programmi põhisilmus. Kõigepealt mõõdetakse pinge, kasutades funktsiooni getVoltage(), ja seejärel teisendatakse see Celsiuse kraadidesse. Pinge ja temperatuuri väärtused väljastatakse jadaporti. Seejärel täidetakse kaks if-else tingimust sõltuvalt mõõdetud temperatuurist. Kui temperatuur on vahemikus 30-35 kraadi Celsiuse järgi, pöörleb servo aeglaselt 0 kuni 180 kraadi. Vastasel juhul, kui temperatuur on vahemikus 20 kuni 24 kraadi Celsiuse järgi, pöörleb ajam aeglaselt 180 kraadist 0 kraadini tagasi. Seejärel mõõdetakse valguse tase funktsiooniga analoogRead() ja väärtus piiratakse funktsiooniga constrain(). Seejärel kutsutakse funktsioon manualTune(), mis teisendab valgustugevuse taseme vahemikku 0 kuni 255, kasutades funktsiooni map(). Saadud valgustugevuse taseme väärtust kasutatakse pin 10 külge ühendatud LEDi juhtimiseks funktsiooniga analoogWrite(). Funktsiooni getVoltage() kasutatakse analoogviigu väärtuse teisendamiseks pingeks. Funktsioon manualTune() teisendab valgustugevuse taseme vahemikus 300-800 vahemikku 0-255, kasutades funktsiooni map(), ja piirab saadud väärtust funktsiooni constrain() abil.