មេរៀន Microbit

មេរៀន៖ Gas Sensor with micro:bit

គោលបំណងមេរៀន
• អានតម្លៃ Gas Sensor (Analog & Digital)


• បង្ហាញសញ្ញាព្រមានលើ micro:bit
• បញ្ជា Buzzer និង LED ពេលរកឃើញឧស្ម័ន

🔌 ការភ្ជាប់ឧបករណ៍

Gas Sensor micro:bit Pin ពន្យល់
VCC 3V ផ្គត់ផ្គង់អគ្គិសនី
GND GND ដី (Ground)
AO P0 អានតម្លៃ Analog Gas
DO P1 សញ្ញា Digital (Gas Detected)
Buzzer P2 សម្លេងព្រមាន
LED 1 P8 ភ្លើងព្រមាន
LED 2 P9 ភ្លើងព្រមាន
⚠️ ចំណាំ: Gas Sensor ត្រូវកំដៅ (Warm-up) ប្រហែល 20–30 វិនាទី មុនអានតម្លៃឱ្យបានត្រឹមត្រូវ

💻 កូដ micro:bit (JavaScript)

let gasAnalog = 0
let gasDigital = 0

basic.forever(function () {
    // Read gas sensor
    gasAnalog = pins.analogReadPin(AnalogPin.P0)
    gasDigital = pins.digitalReadPin(DigitalPin.P1)

    // Send data to serial monitor
    serial.writeValue("Gas_AO", gasAnalog)
    serial.writeValue("Gas_DO", gasDigital)

    // Condition: gas detected
    if (gasAnalog > 400) {
        basic.showIcon(IconNames.Skull)
        for (let index = 0; index <= 5; index++) {
            pins.digitalWritePin(DigitalPin.P2, 1)
            basic.pause(100)
            pins.digitalWritePin(DigitalPin.P2, 0)
            basic.pause(100)

            pins.digitalWritePin(DigitalPin.P8, 1)
            basic.pause(100)
            pins.digitalWritePin(DigitalPin.P8, 0)
            basic.pause(100)

            pins.digitalWritePin(DigitalPin.P9, 1)
            basic.pause(100)
            pins.digitalWritePin(DigitalPin.P9, 0)
            basic.pause(100)
        }
    } else {
        basic.showIcon(IconNames.Happy)
        pins.digitalWritePin(DigitalPin.P2, 0)
        pins.digitalWritePin(DigitalPin.P8, 0)
        pins.digitalWritePin(DigitalPin.P9, 0)
    }
    basic.pause(500)
})
    

📊 ការបកស្រាយកូដ

  • AnalogPin.P0 អានកម្រិតឧស្ម័ន (0–1023)
  • DigitalPin.P1 បង្ហាញ 0 ឬ 1 ពេល Gas លើសកម្រិត
  • តម្លៃ 400 ជា Threshold (អាចកែតម្រូវបាន)
  • បង្ហាញ Skull ពេលមានគ្រោះថ្នាក់
  • Buzzer និង LED ភ្លឺជាបន្តបន្ទាប់
==============================================================================================================

🔥 មេរៀន៖ Flame Sensor with micro:bit

មេរៀននេះប្រើ Flame Sensor ដើម្បីចាប់សញ្ញាភ្លើង។ នៅពេលមានភ្លើង → micro:bit បង្ហាញ Icon និងបើក Buzzer។

📜 កូដ MakeCode (JavaScript)

let flame_value = 0

basic.forever(function () {
    // Read analog value from flame sensor
    flame_value = pins.analogReadPin(AnalogPin.P0)

    if (flame_value < 400) {
        // Flame detected
        basic.showIcon(IconNames.Skull)

        // Activate buzzer
        pins.digitalWritePin(DigitalPin.P1, 1)
    } else {
        basic.clearScreen()

        // Turn off buzzer
        pins.digitalWritePin(DigitalPin.P1, 0)
    }
    basic.pause(100)
})

🔌 របៀបភ្ជាប់ឧបករណ៍

  • Flame Sensor VCC → 3V (micro:bit)
  • Flame Sensor GND → GND (micro:bit)
  • Flame Sensor AO → P0 (micro:bit)
  • Buzzer (+) → P1 (micro:bit)
  • Buzzer (-) → GND (micro:bit)

🧠 ការពន្យល់កូដ

  • analogReadPin(P0) អានតម្លៃពី Flame Sensor
  • តម្លៃតូចជាង 400 មានន័យថា មានភ្លើង
  • បង្ហាញ Icon ☠️ នៅលើ micro:bit LED
  • បើក Buzzer ដោយ pin P1 = 1
  • គ្មានភ្លើង → បិទ Buzzer និងលុបអេក្រង់

Khmer PC Knowledge – STEAM & Microcontroller Learning

===========================================================================================================================

📡 មេរៀន៖ Sonar System with Micro:bit (Auto Door)

គោលបំណងមេរៀន
ប្រើ Sonar Sensor វាស់ចម្ងាយ ហើយបញ្ជា Servo Motor ឲ្យបើក/បិទទ្វារ ដោយស្វ័យប្រវត្តិ។

🔌 ការភ្ជាប់ឧបករណ៍

  • Sonar Sensor
    • VCC → 3V (Micro:bit)
    • GND → GND
    • TRIG → P1
    • ECHO → P2
  • Servo Motor
    • Red → 5V / Battery +
    • Brown / Black → GND
    • Yellow / Orange → P0

💻 កូដ Micro:bit (JavaScript)

let distance = 0

// Close door at start
pins.servoWritePin(AnalogPin.P0, 0)

basic.forever(function () {
    // Measure distance in cm
    distance = sonar.ping(
        DigitalPin.P1,
        DigitalPin.P2,
        PingUnit.Centimeters
    )

    // If someone is close, open the door
    if (distance > 0 && distance <= 15) {
        // Open door
        pins.servoWritePin(AnalogPin.P0, 90)
        basic.pause(3000)
    } else {
        // Close door
        pins.servoWritePin(AnalogPin.P0, 0)
    }
    basic.pause(200)
})

🧠 សេចក្តីពន្យល់កូដ

  • sonar.ping() ប្រើវាស់ចម្ងាយពី Sonar (cm)
  • P1 = TRIG, P2 = ECHO
  • ចម្ងាយ ≤ 15cm → Servo បើកទ្វារ 90°
  • គ្មានវត្ថុ → Servo ត្រឡប់ទៅ 0°
=================================================================================================================================

មេរៀន៖ PIR Sensor ជាមួយ micro:bit

គោលបំណងមេរៀន
• រៀនប្រើ PIR Sensor ដើម្បីចាប់ចលនា
• បញ្ជា LED ឬ Buzzer ដោយ micro:bit
• អនុវត្ត JavaScript (MakeCode)

ឧបករណ៍ត្រូវការ

  • micro:bit
  • PIR Motion Sensor
  • LED ឬ Buzzer
  • Resistor 220Ω (ប្រសិនបើប្រើ LED)
  • ខ្សែ Jumper

ការភ្ជាប់ឧបករណ៍

PIR Sensor
• VCC → 3V (micro:bit)
• GND → GND (micro:bit)
• OUT → P0

LED / Buzzer
• (+) → P1
• (–) → GND

កូដ micro:bit (JavaScript)


let motion = 0

basic.forever(function () {
    motion = pins.digitalReadPin(DigitalPin.P0)

    if (motion == 1) {
        basic.showIcon(IconNames.Surprised)
        // Turn ON buzzer/LED
        pins.digitalWritePin(DigitalPin.P1, 1)
        basic.pause(100)
        // Turn OFF buzzer/LED
        pins.digitalWritePin(DigitalPin.P1, 0)
        basic.pause(100)
    } else {
        basic.clearScreen()
        pins.digitalWritePin(DigitalPin.P1, 0)
        basic.pause(100)
    }
    basic.pause(100)
})

ការពន្យល់កូដ

DigitalPin.P0 ទទួលសញ្ញាពី PIR Sensor
• PIR = 1 → មានចលនា → បង្ហាញ icon និងបើក LED/Buzzer
• PIR = 0 → គ្មានចលនា → បិទ LED/Buzzer
P1 ប្រើសម្រាប់បញ្ជាឧបករណ៍ចេញ

លទ្ធផលដែលទទួលបាន

  • មានចលនា → micro:bit បង្ហាញ Icon 😮 និងមានសំឡេង/ភ្លើង
  • គ្មានចលនា → LED/Buzzer បិទ
=================================================================================================================================================

មេរៀន៖ Control Stepper Motor 4 Buttons with micro:bit

មេរៀននេះបង្ហាញពីការបញ្ជា Stepper Motor 28BYJ-48 តាមរយៈ ULN2003 Driver ដោយប្រើ micro:bit និង ប៊ូតុង 4 ដើម្បីតំណាងជាជាន់ (Floor 1–4) ដូចជាជណ្តើរយន្ត (Elevator)។

📌 Micro:bit MakeCode (JavaScript)

function moveStepper (steps: number) {
    let direction = steps > 0 ? 1 : -1
    steps = Math.abs(steps)
    for (let s = 0; s <= steps - 1; s++) {
        let idx = (s * direction) & 7
        pins.digitalWritePin(IN1, stepSeq[idx][0])
        pins.digitalWritePin(IN2, stepSeq[idx][1])
        pins.digitalWritePin(IN3, stepSeq[idx][2])
        pins.digitalWritePin(IN4, stepSeq[idx][3])
        basic.pause(2)
    }
}

// Move elevator to a specific floor (1–4)
function goToFloor (target: number) {
    if (target == currentFloor) {
        return
    }
    basic.showNumber(target)
    stepPerFloor = 500
    move = (target - currentFloor) * stepPerFloor
    moveStepper(move)
    currentFloor = target
}

// --------------------------
// Elevator Control (4 Floors)
// Stepper: 28BYJ-48 + ULN2003
// Buttons use Pull-Up
// --------------------------

let move = 0
let stepPerFloor = 0
let currentFloor = 0
let stepSeq: number[][] = []

let IN1 = DigitalPin.P13
let IN2 = DigitalPin.P14
let IN3 = DigitalPin.P15
let IN4 = DigitalPin.P16

let BTN_F1 = DigitalPin.P0
let BTN_F2 = DigitalPin.P1
let BTN_F3 = DigitalPin.P2
let BTN_F4 = DigitalPin.P8

pins.setPull(BTN_F1, PinPullMode.PullUp)
pins.setPull(BTN_F2, PinPullMode.PullUp)
pins.setPull(BTN_F3, PinPullMode.PullUp)
pins.setPull(BTN_F4, PinPullMode.PullUp)

stepSeq = [
[1,0,0,0],
[1,1,0,0],
[0,1,0,0],
[0,1,1,0],
[0,0,1,0],
[0,0,1,1],
[0,0,0,1],
[1,0,0,1]
]

currentFloor = 1

basic.forever(function () {
    if (pins.digitalReadPin(BTN_F1) == 0) goToFloor(1)
    if (pins.digitalReadPin(BTN_F2) == 0) goToFloor(2)
    if (pins.digitalReadPin(BTN_F3) == 0) goToFloor(3)
    if (pins.digitalReadPin(BTN_F4) == 0) goToFloor(4)
})

🔧 របៀបភ្ជាប់ឧបករណ៍ (Wiring)

1️⃣ Stepper Motor 28BYJ-48 + ULN2003

ULN2003micro:bit
IN1P13
IN2P14
IN3P15
IN4P16
VCC5V (External Power)
GNDGND

📌 ចំណាំ

  • Stepper Motor ត្រូវការថាមពល 5V ខាងក្រៅ

  • ត្រូវភ្ជាប់ GND របស់ Power Supply និង micro:bit ជាមួយគ្នា (Common Ground)


2️⃣ Button 4 (Pull-Up)

Button (Floor)micro:bit Pin
Floor 1P0
Floor 2P1
Floor 3P2
Floor 4P8

🔹 Button មួយភ្ជាប់ទៅ GND
🔹 Button មួយភ្ជាប់ទៅ Pin (ប្រើ Pull-Up ក្នុង Code)


📘 សេចក្តីពន្យល់ខ្លី

  • Button នីមួយៗតំណាងឲ្យ ជាន់ (Floor)

  • ពេលចុច Button → micro:bit គណនាចំនួន Steps

  • Stepper Motor បង្វិលឡើង ឬចុះ ដូចជា ជណ្តើរយន្ត

  • stepPerFloor អាចកែប្រែតាម កម្ពស់ជាន់ពិតប្រាកដ

============================================================================================================================================

មេរៀន: Identify the pins of a 4-leg RGB LED with Microbit

🔧 របៀបភ្ជាប់ឧបករណ៍

  • RGB LED (4-leg, Common Cathode)
  • Micro:bit
  • របៀបភ្ជាប់:
    • Leg-Cathode (Longest leg) → GND on Micro:bit
    • Red leg → P0
    • Green leg → P1
    • Blue leg → P2
              ចំណាំ : ជើងទាំង៣ ត្រូវភ្ជាប់និង resistor 

💻 កូដ Microbit (MakeCode JavaScript / Blocks)

// RGB LED on pins P0, P1, P2 (Common Cathode)
function setColor(red: number, green: number, blue: number) {
    pins.digitalWritePin(DigitalPin.P0, red)
    pins.digitalWritePin(DigitalPin.P1, green)
    pins.digitalWritePin(DigitalPin.P2, blue)
}

basic.forever(function () {
    setColor(1, 0, 0)  // Red
    basic.pause(500)
    setColor(0, 1, 0)  // Green
    basic.pause(500)
    setColor(0, 0, 1)  // Blue
    basic.pause(500)
    setColor(1, 1, 0)  // Yellow
    basic.pause(500)
    setColor(0, 1, 1)  // Cyan
    basic.pause(500)
    setColor(1, 0, 1)  // Magenta
    basic.pause(500)
    setColor(1, 1, 1)  // White
    basic.pause(500)
})
  
===============================================================================================================================================
📘 មេរៀន៖ PIR Motion Sensor with micro:bit

មេរៀននេះបង្ហាញពីរបៀបប្រើ PIR Motion Sensor ជាមួយ BBC micro:bit ដើម្បីចាប់សញ្ញាចលនា និងបញ្ជា LED ឬ Buzzer

🔌 របៀបភ្ជាប់ឧបករណ៍ (Wiring)
PIR Sensor micro:bit ពន្យល់
VCC 3V ផ្គត់ផ្គង់អគ្គិសនី
GND GND ដី (Ground)
OUT P0 សញ្ញាចលនា (Digital Input)
ឧបករណ៍បន្ថែម micro:bit ពន្យល់
LED / Buzzer (+) P1 បញ្ជា ON / OFF
LED / Buzzer (-) GND ដី (Ground)
💻 កូដ micro:bit (JavaScript)

let motion = 0

basic.forever(function () {
    motion = pins.digitalReadPin(DigitalPin.P0)

    if (motion == 1) {
        basic.showIcon(IconNames.Surprised)

        // Turn ON buzzer/LED
        pins.digitalWritePin(DigitalPin.P1, 1)
        basic.pause(100)

        // Turn OFF buzzer/LED
        pins.digitalWritePin(DigitalPin.P1, 0)
        basic.pause(100)

    } else {
        basic.clearScreen()

        // Ensure buzzer/LED is OFF
        pins.digitalWritePin(DigitalPin.P1, 0)
        basic.pause(100)
    }

    basic.pause(100)
})
    
📖 សេចក្ដីពន្យល់កូដ
  • DigitalPin.P0 – ទទួលសញ្ញាពី PIR Sensor
  • បើមានចលនា (motion == 1) → បង្ហាញ Icon 😲 និងបើក LED/Buzzer
  • បើគ្មានចលនា → បិទ LED/Buzzer និងលុបអេក្រង់
  • DigitalPin.P1 – Output សម្រាប់ LED ឬ Buzzer
⚠️ ចំណាំ៖ PIR Sensor ត្រូវការពេល 5–10 វិនាទី ដើម្បី Calibrate បន្ទាប់ពីភ្ជាប់ភ្លើង។

Post a Comment

0 Comments