Wednesday, November 8, 2017

IoT පද්ධතියක සංරචක

2020 වසර වන විට ලෝකයේ බිලියන 26 ක් ජාලාංග අන්තර්ජාලයට සම්බන්ධ වන බව පර්යේෂකයෝ විස්වාස කරති. සමහරු එය බිලියන 100 ක් වේ යයි කියති. කෙසේ උවද දැනුම් ආර්ථිකයක සිටින අපට ජාත්‍යන්තර IoT ක්‍ෂේත්‍රයේ රැකියා සහ සේවා අවස්ථා රැසක් ගලා එනු ඇත. IoT පර්යේෂණ සහ සංවර්ධනය, සේවා, නඩත්තුව, ආරක්‍ෂණය සහ IoT ව්‍යාපාර ඉන් සමහරක්. IoT විද්‍යාව, ගණිතය , තාක්‍ෂණය හා ඉංජිනේරු එකමුතුවක්. එහි මූලික වන්නේ භෞතික පරිගණනයයි. එනම් Physical Computing.
මූලික IoT සංරචක

1. Sensors - අප අවට පරිසරයෙන් විවිධ ආදාන ලබාගන්නා සංවේදක.
2  Algorithm - එම සංවේදක වලින් ලබාගන්නා දත්ත අනුව තීරණ ගන්නා අැලොගරිතම. මේවා Software හෝ Hardware විය හැක.
3. Control - අැලොගරිතම ගන්නා තීරණ අනුව පද්ධතියේ පාලනය සඳහා ක්‍රියාත්මක වල චාලක. (Actuators)
4. Internet - අන්තර්ජාලය සම්බන්ධ වී අනිකුත් ජාලාංග මගින් දත්ත විකාශණය හා ලබාගැනීමේ හැකියාව.
5. Power - IoT ක්‍රියාවලිය සඳහා විද්යුත් බ‍‍ලයක් අවශ්‍ය වේ. 3.3v - 5v දක්වා වෝල්ටීයතාවයකින් ඒවා වැඩ කරයි.
6. Security - IoT ආරක්‍ෂණය ඉතා වැදගත් අංශයක් වන්නේ එම පද්ධති අන්තර්ජාලයට සම්බන්ධවන නිසාය.
7. 5. Embeded Device - සංවේදක, චාලක, මුදුකාංග හා සන්නිවේදනය ලබාදෙන දෘඩාංගය. එය Arduino, microbit, Raspberry Pi වැනි පුවරුවකි. IoT පරිගණනයට අවශ්‍ය සියළු උපාංග එම පුවරුවට ඔබ්බා ඇත.
උදාහරණයක් ලෙස IoT ශීතකරණයක barcode ස්කෑනරය මගින් එයට දමන සහ ගන්න ආහාර දත්ත මත ක‍ල් ඉකුත් වන දිනය,වට්ටෝරු, මිලදී ගැනුම් ලැයිස්තු හා නැවත ඇණවුම් කල හැකිවේ. මෙහිදී අාහාර ඇසුරුම් දත්ත, ස්කෑනරයෙන් සංවේදනය කර, නීති මත පදනම් වූ ඇලොගරිතමයකින් අදාල තීරණ ගනී. එය අන්තර්ජාලයේ කෑම වට්ටෝරු සොයා අමතරව අවශ්‍ය දේ ඔබට යෝජනා කරනු ඇත. ඔබගේ පවුලේ ආහාර පුර‍ැදු අධ්‍යනය කර (machine learning) අනුව ආහාර සුරක්‍ෂිත භාවය වැඩිකරනු ඇත. නව්‍යකරණය තවත් දුරට යාහැක.
සන්නිවේදනය සඳහා සෑම උපාංගටක්ම ඒකීය ලිපිනයක් භාවිතා කළ යුතුය. unique address. එය සොයාගන්නා අයෙකුට එය Hack කල හැක. බිලියන ගණනාවක් ජාලාංග අන්තර්ජාලයට සම්බන්ධවීම මත ගැන සිතන්න. IoT ආරක්‍ෂණය හා පුද්ගලිකත්වය ඉතා වැදගත් බව දැන් ඔබට වැටහේද?
ඔබගේ නිවසේ රූපවාහිනියේ පාලනය අන්තර්ජාලයට සම්බන්ධ යයි සිතන්න. රූපවාහිනිය කියාත්මක වන්නේ ඔබ නිවසේ සිටන විටදී පමණය. ඔබ නිවසේ සිටින බව හෝ කිසිවෙකු නැති බව හොරෙකුට දැනගැනීමට අවශ්‍ය වේ. ඔහුට ඔබගේ නිවෙස් ජාලය විද්යුත්ව සිදුරු කර එම දත්තය ලබාගත හැක. එය ඔබ කලින් දැනසිටින්නේ නම් Polling, Proxy ආදී උපක්‍රම මගින් එය වලකා ගත හැක. නමුත් අන්තර්ජාලයට සම්බන්ධකිසිවක් 100% ආරක්‍ෂිත නොවන බව අප දනිමු.
Share with your friends. IoT is a great future to think.

Monday, July 17, 2017

Micro:bit Game Programming

Test it live online at makecode

https://makecode.microbit.org/_Vcs0WxcD3Fyd
//Niranjan Meegammana shilpasayura.org
let counter = 0
let x = 0
let y = 0
let pointsA = 0
let pointsB = 0
let playturn = 0
let mainplayer = 0
let Apos: number[] = []
let clrScreen = 0
let Bpos: number[] = []
let draws = 0

input.onButtonPressed(Button.A, () => {
    if (clrScreen == 1) {
        basic.clearScreen()
        clrScreen = 0
    }
    drawApos()
})

input.onButtonPressed(Button.B, () => {
    if (clrScreen == 1) {
        basic.clearScreen()
        clrScreen = 0
    }
    drawBpos()
})

draws = 0
mainplayer = Math.random(2)
playturn = mainplayer
pointsB = 0
pointsA = 0
y = 0
x = 0
counter = 0
Apos = [6]
Bpos = [6]
init()
playerSelect()

function playerSelect() {
    basic.clearScreen()
    clrScreen = 0
    if (playturn == 0) {
        leftArrow()
    } else {
        rightArrow()
    }
    clrScreen = 1
}
function init() {
    counter = 0
    pointsA = 0
    pointsB = 0
    draws = 0
    clrScreen = 1
    for (let i = 0; i < 3; i++) {
        Apos[i] = 0
        Apos[i + 3] = Math.random(4)
        Bpos[i] = 4
        Bpos[i + 3] = Math.random(4)
    }
    //basic.showNumber(Apos[4])
}

function eraseOld(ledPos: number[]) {
    for (let k = 0; k < 3; k++) {
        playTone()
        x = ledPos[k] // old position
        y = ledPos[k + 3]
        led.unplot(x, y)
    }
}
function drawCol(ledPos: number[]) {
    // if ((mainplayer == 0) && (draws == 6)) {
    //    winner()
    //}
    //basic.showNumber(ledPos[4])
    if (counter > 0) {
        eraseOld(ledPos)
    }
    for (let k = 0; k < 3; k++) {
        playTone()
        if (playturn == 0) {
            ledPos[k] = counter
        }
        else {
            ledPos[k] = 4 - counter
        }
        ledPos[k + 3] = Math.random(4)
        if (draws == 6) {
            cut(ledPos[k], ledPos[k + 3])
        }
        else {
            led.plot(ledPos[k], ledPos[k + 3])
        }

    }
    return ledPos
}

function drawBpos() {
    if (playturn == 0) {
        return
    }
    draws++
    Bpos = drawCol(Bpos)
    playturn = 0
    if (mainplayer == 0) {
        counter++
    }
    if (draws == 6) {
        winner()
    }
}


function drawApos() {
    if (playturn == 1) {
        return
    }
    draws++
    Apos = drawCol(Apos)
    playturn = 1
    if (mainplayer == 1) {
        counter++
    }
    if (draws == 6) {
        winner()
    }

}

function cut(x: number, y: number) {
    if (led.point(x, y)) {
        playTone()
        led.unplot(x, y)
        if (playturn == 0) {
            pointsA++
            pointsB--
        }
        else {
            pointsB++
            pointsA--
        }
    }
    else {
        if (playturn == 0) {
            pointsB++
            pointsA--
        }
        else {
            pointsA++
            pointsB--
        }
    }
    basic.pause(300)
    led.plot(x, y)
    playTone()
    basic.pause(200)

}

function winner() {
    counter = 0
    basic.clearScreen()

    if (pointsA > pointsB) {
        basic.showString("A")
        mainplayer = 1
    }
    else {
        if (pointsA == pointsB) {
            basic.showString("DRAW")
            mainplayer = playturn
        }
        else {
            basic.showString("B")
            mainplayer = 0
        }
    }
    playturn = mainplayer
    pointsA = 0
    pointsB = 0
    counter = 0
    draws = 0
    basic.pause(1000)
    playerSelect()
    clrScreen = 1
}
function rightArrow() {
    led.plot(4, 2)
    led.plot(3, 1)
    led.plot(3, 2)
    led.plot(3, 3)
}
function leftArrow() {
    led.plot(0, 2)
    led.plot(1, 1)
    led.plot(1, 2)
    led.plot(1, 3)
}
function playTone() {
    music.playTone(Math.random(1000), 30)
}