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 горимоор ажиллана:

  1. Аналог горим (Analog mode)

  2. Дижитал горим (Digital mode)

Энд аналог горимыг тайлбарлая.


🔢 Аналог горим (Analogue Mode)

Аналог горимд мэдрэгчийн A0 гаралтаас аналог сигнал уншина.

  • Arduino нь 0–1023 хооронд утга уншина

  • Эдгээр утгыг 0–100% болгон хөрвүүлж,
    хөрсний чийгшлийг хувиар илэрхийлнэ

  • Энэ утгад үндэслэн:

    • Усны насос асаах / унтраах

    • Анхааруулга өгөх

    • Автомат усалгаа хийх боломжтой


🔗 Arduino-той холбох

FC-28 мэдрэгчArduino
VCC5V
GNDGND
A0A0

Модулийн дээр потенциометр (эргүүлж тохируулдаг эсэргүүцэл) байрладаг. Энэ нь босго утгыг (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:

int sensor_pin = A0;
int output_value ;

void setup() {
  Serial.begin(9600);
  Serial.println("Reading From the Sensor ...");
  delay(2000);
  }

void loop() {

  output_value= analogRead(sensor_pin);
  output_value = map(output_value,550,0,0,100);
  Serial.print("Mositure : ");
  Serial.print(output_value);
  Serial.println("%");
  delay(1000);
  }


Digital code:
int led_pin =13;
int sensor_pin =8;
void setup() {
pinMode(led_pin, OUTPUT);
pinMode(sensor_pin, INPUT);
}
void loop() {
if(digitalRead(sensor_pin) == HIGH){
digitalWrite(led_pin, HIGH);
} else {
digitalWrite(led_pin, LOW);
delay(1000);
}
}






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-ийг шинжлэх, тохируулахад ашиглана




#include <Wire.h>

#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(°F) = T(°C) × 9/5 + 32
Кельвин:  T(K) = T(°C) + 273.15
Ранкин: 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");
}

Thursday, January 8, 2026

LCD температур хэмжигч

 



Код: 
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(32,16,2);


void setup()
{
  lcd.begin(16,2);
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Temperature: ");
}

void loop() 
{
  // Read the temperature from the sensor
  int sensorValue = analogRead(A0);

  // Convert the temperature to degrees Celsius

float  temperature = (sensorValue * 5.0 / 1024.0 - 0.5 ) * 100.0; // convert the sensor value to temperature in degrees Celsius

  
  // Display the temperature on the LCD
  lcd.setCursor(8, 1);
  lcd.print(temperature);
  lcd.print(" C");
}