Ардиуно сургалт
Tuesday, March 17, 2026
Motor driver 293D
Tuesday, March 3, 2026
1.Bluetooth ээр LED удирдах
char value;
void setup() {
Serial.begin(9600);//enable serial monitor
pinMode(6, OUTPUT);//define led pin
}
void loop() {
if (Serial.available() > 0) {
value = Serial.read();//read serial value
}
if (value == '1') {//check value
digitalWrite(6, HIGH);//led on
Serial.println("LED on");//print serial monitor "LED on"
} else if (value == '0') {
digitalWrite(6, LOW);//led off
Serial.println("LED off");//print serial monitor "LED on"
}
}
2.Bluetooth ээр Motor удирдах
Tuesday, February 10, 2026
Nokia ая базер
/*
Nokia Tune
Connect a piezo buzzer or speaker to pin 9 or select a new pin.
More songs available at https://github.com/robsoncouto/arduino-songs
Robson Couto, 2019
*/
#define NOTE_B0 31
#define NOTE_C1 33
#define NOTE_CS1 35
#define NOTE_D1 37
#define NOTE_DS1 39
#define NOTE_E1 41
#define NOTE_F1 44
#define NOTE_FS1 46
#define NOTE_G1 49
#define NOTE_GS1 52
#define NOTE_A1 55
#define NOTE_AS1 58
#define NOTE_B1 62
#define NOTE_C2 65
#define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
#define NOTE_F2 87
#define NOTE_FS2 93
#define NOTE_G2 98
#define NOTE_GS2 104
#define NOTE_A2 110
#define NOTE_AS2 117
#define NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262
#define NOTE_CS4 277
#define NOTE_D4 294
#define NOTE_DS4 311
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_FS4 370
#define NOTE_G4 392
#define NOTE_GS4 415
#define NOTE_A4 440
#define NOTE_AS4 466
#define NOTE_B4 494
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E6 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
#define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
#define REST 0
// change this to make the song slower or faster
int tempo = 180;
// change this to whichever pin you want to use
int buzzer = 9;
// notes of the moledy followed by the duration.
// a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on
// !!negative numbers are used to represent dotted notes,
// so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!!
int melody[] = {
// Nokia Ringtone
// Score available at https://musescore.com/user/29944637/scores/5266155
NOTE_E5, 8, NOTE_D5, 8, NOTE_FS4, 4, NOTE_GS4, 4,
NOTE_CS5, 8, NOTE_B4, 8, NOTE_D4, 4, NOTE_E4, 4,
NOTE_B4, 8, NOTE_A4, 8, NOTE_CS4, 4, NOTE_E4, 4,
NOTE_A4, 2,
};
// sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)
// there are two values per note (pitch and duration), so for each note there are four bytes
int notes = sizeof(melody) / sizeof(melody[0]) / 2;
// this calculates the duration of a whole note in ms
int wholenote = (60000 * 4) / tempo;
int divider = 0, noteDuration = 0;
void setup() {
// iterate over the notes of the melody.
// Remember, the array is twice the number of notes (notes + durations)
for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
// calculates the duration of each note
divider = melody[thisNote + 1];
if (divider > 0) {
// regular note, just proceed
noteDuration = (wholenote) / divider;
} else if (divider < 0) {
// dotted notes are represented with negative durations!!
noteDuration = (wholenote) / abs(divider);
noteDuration *= 1.5; // increases the duration in half for dotted notes
}
// we only play the note for 90% of the duration, leaving 10% as a pause
tone(buzzer, melody[thisNote], noteDuration * 0.9);
// Wait for the specief duration before playing the next note.
delay(noteDuration);
// stop the waveform generation before the next note.
noTone(buzzer);
}
}
void loop() {
// no need to repeat the melody.
}
Tuesday, January 27, 2026
led matrix
#define button 9
#define LED1 0
#define LED2 1
#define LED3 2
#define LED4 3
#define LED5 4
#define LED6 5
#define LED7 6
#define LED8 7
#define LED9 8
int state = 0;
int old =0;
int buttonPoll=0;
void setup(){
pinMode (button,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
pinMode(LED4,OUTPUT);
pinMode(LED5,OUTPUT);
pinMode(LED6,OUTPUT);
pinMode(LED7,OUTPUT);
pinMode(LED8,OUTPUT);
pinMode(LED9,OUTPUT);
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
digitalWrite(LED5, LOW);
digitalWrite(LED6, LOW);
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED9, LOW);
}
void loop(){
buttonPoll = digitalRead(button);
if(buttonPoll==1){
delay(50);
buttonPoll =digitalRead(button);
if(buttonPoll==0){
state=old+1;
}}
else{
delay(100);
}
switch (state){
case 1:
digitalWrite(LED7,HIGH);
digitalWrite(LED8,HIGH);
digitalWrite(LED9,HIGH);
old=state;
break;
case 2:
digitalWrite(LED3,HIGH);
digitalWrite(LED6,HIGH);
digitalWrite(LED9,HIGH);
old=state;
break;
case 3:
old=state;
break;
default:
old=0;
break;
}
}
Sunday, January 18, 2026
Хөрсний чийг мэдрэгч
FC-28 Хөрсний чийг мэдрэгчийг Arduino-той холбох
📌 Мэдрэгчийн ажиллах зарчим
Хөрсний чийг мэдрэгч нь хоёр электрод (зонд)-оос бүрддэг. Эдгээр зонд нь хөрсөн дундуур цахилгаан гүйдэл нэвтрүүлж, улмаар хөрсөн дэх усны эзлэхүүний агууламжийг (volumetric water content) тодорхойлдог.
-
Хөрсөнд ус их байх үед
→ Цахилгаан сайн дамжина
→ Эсэргүүцэл бага -
Хөрс хуурай үед
→ Цахилгаан муу дамжина
→ Эсэргүүцэл их
Ингэж эсэргүүцлийн өөрчлөлтөөр чийгийг тодорхойлно.
🔌 Холболтын горим
FC-28 мэдрэгч нь 2 горимоор ажиллана:
-
Аналог горим (Analog mode)
-
Дижитал горим (Digital mode)
Энд аналог горимыг тайлбарлая.
🔢 Аналог горим (Analogue Mode)
Аналог горимд мэдрэгчийн A0 гаралтаас аналог сигнал уншина.
-
Arduino нь 0–1023 хооронд утга уншина
-
Эдгээр утгыг 0–100% болгон хөрвүүлж,
хөрсний чийгшлийг хувиар илэрхийлнэ -
Энэ утгад үндэслэн:
-
Усны насос асаах / унтраах
-
Анхааруулга өгөх
-
Автомат усалгаа хийх боломжтой
-
🔗 Arduino-той холбох
| FC-28 мэдрэгч | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| A0 | A0 |
Модулийн дээр потенциометр (эргүүлж тохируулдаг эсэргүүцэл) байрладаг. Энэ нь босго утгыг (threshold value) тохируулах зориулалттай.
-
Потенциометрээр тохируулсан босго утгыг
LM393 харьцуулагч (comparator) микросхем мэдрэгчийн дохиотой харьцуулна. -
Хөрсний чийг мэдрэгчийн утга босго утгаас их эсвэл бага байхаас хамаарч:
-
Гаралтын LED асах эсвэл унтрах
-
Дижитал гаралт (DO) HIGH / LOW болж өөрчлөгдөнө
-
Өөрөөр хэлбэл, хөрсний чийг тодорхой хэмжээнээс ихэсвэл эсвэл багасвал LED болон дижитал дохио автоматаар өөрчлөгдөнө.
Дижитал горим (Digital Mode)
Хөрсний чийг мэдрэгч FC-28-ийг дижитал горимоор ашиглах үед мэдрэгчийн дижитал гаралтыг (D0) Arduino-гийн дижитал оролт руу холбоно.
⚙️ Ажиллах зарчим
Мэдрэгчийн модуль дээр потенциометр байрладаг бөгөөд энэ нь босго утгыг (threshold value) тохируулах үүрэгтэй.
-
Потенциометрээр тохируулсан босго утгыг
LM393 харьцуулагч (comparator) микросхем мэдрэгчийн гаралтын утгатай харьцуулна -
LM393 нь:
-
Мэдрэгчийн утга босго утгаас их байвал
→ Дижитал гаралт 5V (HIGH)
→ Мэдрэгч дээрх LED асна -
Мэдрэгчийн утга босго утгаас бага байвал
→ Дижитал гаралт 0V (LOW)
→ LED унтарна
-
Ингэснээр хөрсний чийг тодорхой түвшнээс их эсвэл бага эсэхийг дижитал байдлаар шууд мэдэж болно.
Analog code:
Saturday, January 17, 2026
LDR ашиглан гэрлийн хүчийг хэмжих
Оршил
Люксметр нь гэрэлтэлтийг (illuminance) болон гэрлийн цацралтыг SI нэгж болох люкс-ээр хэмждэг төхөөрөмж юм. Энэ нь тодорхой нэгж талбай дээр тусаж буй гэрлийн чадлын хэмжээг үр дүнтэйгээр хэмждэг боловч уг хэмжилт нь хүний нүд янз бүрийн долгионы уртад хэр мэдрэмтгий байдгийг харгалзан жинлэгддэг. Илүү энгийнээр тайлбарлавал, люксметр нь мэдрэгч дээр тусаж буй гэрэл хэр тод байгааг хэмждэг гэж ойлгож болно. Зах зээл дээрх бэлэн люксметрүүд ойролцоогоор 15 ам.доллараас эхлээд хэдэн зуун ам.долларын үнэтэй байдаг ч өөрөө хийж бүтээх нь хямд төдийгүй илүү сонирхолтой байдаг.
Гэрэл мэдрэгч
Люксметрийн гэрэл мэдрэгч нь фотодиод, фототранзистор зэрэг хэд хэдэн төрлийн мэдрэгч байж болох ч ашиглахад хамгийн хялбар, мөн хамгийн түгээмэл олддог нь фоторезистор буюу гэрлээс хамааралтай эсэргүүцэл (LDR) юм. Нэрнээс нь харахад LDR-ийн эсэргүүцэл нь түүн дээр тусаж буй гэрлийн хэмжээнээс хамаарч өөрчлөгдөнө. Хэрэв та LDR-ийн эсэргүүцлийг хэмжиж чадвал, мөн тухайн LDR-ийн шинж чанарыг мэддэг бол, түүн дээр тусаж буй люксийн хэмжээг тодорхойлох боломжтой.
Ерөнхийдөө гэрэл ихсэх тусам эсэргүүцэл багасдаг. Гэвч харамсалтай нь LDR-ийн эсэргүүцэл ба люксийн хоорондын хамаарал нь шулуун (шугаман) биш юм. Харин энэ нь экспоненциал хамааралтай байдаг тул тооцоход арай төвөгтэй. Гэсэн хэдий ч бага зэрэг хугацаа зарцуулж, хэд хэдэн хэмжилт хийснээр эсэргүүцэл ба люксийн хоорондын математик хамаарлыг тодорхойлж, түүнийг микроконтроллерт програмчилснаар энгийн бөгөөд хангалттай үр ашигтай люксметр хийх боломжтой.
Төслийн зорилго
Энэ төслөөр би танд LDR-ийн шинж чанарыг тодорхойлох, гэрэлтэлтийг тооцоолох программ бичих, мөн LDR ба Arduino-д суурилсан люксметр бүтээх үйл явцыг шат дараатайгаар танилцуулах болно.
Шаардлагатай тоног төхөөрөмж
-
1 ширхэг гэрлээс хамааралтай эсэргүүцэл (LDR) — яг аль загвар байх нь хамаагүй, бүр эд ангийн дугаарыг нь мэдэх шаардлагагүй
-
5 кОм эсэргүүцэл
-
Arduino
-
2×16 LCD дэлгэцтэй шилд (LCD shield)
-
Breadboard (туршилтын плат)
-
Дижитал мультиметр (DMM)
-
Бэлэн (арилжааны) люксметр — LDR-ийг шинжлэх, тохируулахад ашиглана
#define LDR_PIN 0
#define MAX_ADC_READING 1023
#define ADC_REF_VOLTAGE 5.0
#define REF_RESISTANCE 5030 // measure this for best results
#define LUX_CALC_SCALAR 12518931 // from experiment
#define LUX_CALC_EXPONENT -1.405 // from experiment
void setup(void) {
Serial.begin(9600);
Serial.println(F("Light Sensor Test")); Serial.println("");
}
void loop(void) {
int ldrRawData;
float resistorVoltage, ldrVoltage;
float ldrResistance;
float ldrLux;
ldrRawData = analogRead(LDR_PIN);
resistorVoltage = (float)ldrRawData / MAX_ADC_READING * ADC_REF_VOLTAGE;
// voltage across the LDR is the 5V supply minus the 5k resistor voltage
ldrVoltage = ADC_REF_VOLTAGE - resistorVoltage;
ldrResistance = ldrVoltage / resistorVoltage * REF_RESISTANCE;
ldrLux = LUX_CALC_SCALAR * pow(ldrResistance, LUX_CALC_EXPONENT);
Serial.print("LDR Raw Data : "); Serial.println(ldrRawData);
Serial.print("LDR Voltage : "); Serial.print(ldrVoltage); Serial.println(" volts");
Serial.print("LDR Resistance : "); Serial.print(ldrResistance); Serial.println(" Ohms");
Serial.print("LDR Illuminance: "); Serial.print(ldrLux); Serial.println(" lux");
delay(1000);
}
Friday, January 16, 2026
Температур болон чийгшил хэмжигч
DHT22 (AM2302) нь өндөр нарийвчлалтай температурын мэдрэгч модуль бөгөөд Arduino-гийн дижитал IO хөлд холбогдож, тохируулга хийж температур ба чийгшлийн утгыг өгдөг. DHT22 нь температурыг Цельсийн хэмжигдэхүүнээр гаргана. Arduino-гийн програм нь уг температурыг Фаренгейт, Кельвин, Ранкины хэмжигдэхүүнд хөрвүүлж, сериал портоор дамжуулан ашиглаж болно.
Эд анги ба бүрдэл хэсгүүд
-
Arduino Uno самбар = 1 ширхэг
-
DHT22 (AM2302) = 1 ширхэг
-
10 кОм эсэргүүцэл = 1 ширхэг
Хэрэгтэй сангуудыг суулгах заавар:
Arduino IDE нээнэ
Sketch → Include Library → Manage Libraries…
Search хэсэгт:
Adafruit Unified Sensor
Adafruit Unified Sensor → Install дарна
Дараа нь:
DHT sensor library by Adafruit→ Install
Arduino IDE-г restart хийнэ
Дахин compile хийнэ6
DHT22 дижитал температур / чийгшлийн мэдрэгч нь –40°C-аас +80°C хүртэлх температурыг, 0%-аас 100% хүртэлх чийгшлийг хэмжинэ. Температурын нарийвчлал нь хамгийн ихдээ ±0.1°C байна.
DHT22-ын өгөгдлийн (data) хөл нь Arduino-гийн дижитал IO хөлд холбогдож, 10 кОм эсэргүүцлээр дамжуулан Vcc рүү татагдсан (pull-up) байна. DHT22 (AM2302) нь калибрлагдсан дижитал өгөгдлийн дохио гаргана.
Энэ загварын DHT22 мэдрэгч бүр температурыг нөхөн тооцоолсон (temperature compensated) бөгөөд өндөр нарийвчлалтай калибрлах камерт калибрлагдсан байдаг. Калибрлах коэффициент нь дотоод OTP санах ойд хадгалагдсан.
Мэдрэгч нь өгөгдлийг алсын зайд дамжуулах боломжтой. Arduino нь температурыг болон чийгшлийг 2 секундийн интервалтай уншиж, сериал порт руу илгээнэ.
Цельсийн температурыг бусад хэмжигдэхүүнд хөрвүүлэх томьёонууд:
Ранкин: T(°R) = (T(°C) + 273.15) × 9/5
Алхам 2: Програм хангамж
Оруулсан DHT сан (library) нь мэдрэгчээс өгөгдөл унших интерфэйсийг хангана.
Arduino нь температур ба чийгшлийн утгуудыг 2 секунд тутамд уншина.
Температур нь эхлээд Цельсийн хэлбэрээр уншигдаж, дараа нь програмын тусламжтайгаар Фаренгейт, Кельвин, Ранкин хэлбэрт хөрвүүлэгдэнэ.
Бүх дөрвөн хэлбэрийн температурын утгыг сериал порт руу илгээж, сериал терминал дээр хэвлэн харуулна.
Код:
#include <DHT.h> //San g suulgah
//holbolt #define DHTPIN 2 // 2 dugaar holond holbono #define DHTTYPE DHT22 // DHT22
DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor for normal 16mhz Arduino
//Variables float hum; //chiigshiliig hum gesen huvisagchid hadgalah float temp; //temperaturiig temp gesen huvisagchid hadgalah
void setup() { Serial.begin(9600); Serial.println("DHT22 medregchiig shalgah"); dht.begin(); }
void loop() { float converted = 0.00; //chiigshil ba temperaturiin utgiig unshij huvisagchid onooh hum = dht.readHumidity(); temp= dht.readTemperature();
Serial.print("Celsius = ");Serial.print(temp); //Print degree symbol Serial.write(176);Serial.println("C"); Serial.print("Humidity ="); Serial.println(hum);
//2000mS zaitai temperatur bolon chiigshiliig damjuulna delay(2000);
}
Эсвэл
#include "DHT.h" #define DHTPIN 2 //Pin where is the sensor connecte
#define DHTTYPE DHT22 // Sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Serial.println("Loading...");
dht.begin();
}
void loop() {
delay(2000);
float h = dht.readHumidity(); //Reading the humidity
float t = dht.readTemperature(); //Reading the temperature in Celsius degree
float f = dht.readTemperature(true); //Reading the temperature in Fahrenheit degrees
//--------Sending the reading through Serial port-------------
Serial.print("Humidity ");
Serial.print(h);
Serial.print(" %t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.println(" *F");
}