Lazerinis atstumo matuoklis

Posted: 2019-03-22 in Darbeliai
Žymos:,

Sugalvojau nedidelį projektėlį, kuriam reikia kažkokio atstumo daviklio. Arduino pasaulyje pilna pavyzdukų su ultragarsiniais jutikliais, bet jie man nelabai patinka. Galbūt mano „baimei“ nėra jokio pagrindo, bet visgi tai yra zyzeklis ir pusiau mechaninis įrenginys. Todėl kiek panaršęs galimų variantų nusprendžiau panaudoti pigų kinišką moduliuką GY-53, kuris atstumui matuoti naudoja infraraudoną lazerį. Tikslumas toks labai apytikris, bet man milimetrų nereikia, net ir centimetrai +/−3 yra ok.

Moduliukai parkeliavo:

Lazerinis atstumo matavimo modulis GY-53 | Elektronika | Darau, blė

Šitie moduliukai man patiko ir dar dėl vienos savybės: turi UART interfeisą. Kitaip sakant, prie lazerio prilipdytas dar ir mikrovaldiklis su firmware, kuri moka lazerio impulsus paversti kokia tai pusiau žmogiška kalba.

Nuoroda į modulio manualą (PDF).

UART interfeisas gerai, nes mano sugalvotame panaudos atvejyje tarp „proto“ ir šito modulio bus apie metro ilgio laidas. I²C magistralės atveju toks ilgis gali būti netinkamas. Taip pat šitas modulis dar turi ir PWM išvestį, kur atstumas atvaizduojamas impulso pločiu. Čia jeigu ir UART laidas pasidarytų per ilgas.

Labai knietėjo moduliuką kuo greičiau išbandyti, bet tingėjau pasijunginėti kokį valdiklį. Tad pasijungiau per UART keitiklį:

Lazerinis atstumo matavimo modulis GY-53 prijungtas per USB UART keitiklį | Elektronika | Darau, blė

Tada su Python pasirašiau niekingą kodo gabalėlį, kuris nuskaito, ką siunčia modulis ir pavaizduoja tai milimetrais:

Lazerinio atstumo matavimo modulio GY-53 testavimas | Elektronika | Darau, blė

Atstumą matuoja labai apytikriai, tikrai. +/−2 cm, be to, dar 3 cm prideda. Tarpe tarp 0-3 cm matuoja iš viso bile ką. Na ir „didelio tikslumo“ numatytuoju režimu matuoja kažkur iki metro. Man labiau tiktų 2 metrų režimas, bet su Python nesugebėjau padaryti perjungimo. Dar bandžiau perjungti į režimą, kad reaguotų tik į užklausas, o ne nuolat į UARTą pirsčiotų — nepadėjo. Kaip ir dzin galbūt. Man atstumo nuolat matuoti nereikia, pasitikrinti kas kokią pusę sekundės galbūt, tai galutiniame projekte šitą modulį per MOSFET tiesiog junginėsiu, kada jo prireiks.

Python kodas:

# -*- coding: utf-8 -*-

'''
Created on 2019-03-15

@author: Darau, blė
'''

# Change according to your setup
SERIAL_PORT = "/dev/ttyUSB4"

HEAD_BYTE = 0x5A
FRAME_LEN = 8
HIGH_BYTE = 4
LOW_BYTE = 5

import serial
from time import sleep

connected = False

ser = serial.Serial(SERIAL_PORT, 9600)

frame = [0, 0, 0, 0, 0, 0, 0, 0]
frameIdx = 0

while not connected:
    try:
        inp = ser.read(1)
        if inp[0] == HEAD_BYTE:
            frame[frameIdx] = inp
            frameIdx += 1
    except OSError:
        print('Could not connect to \'%s\'' % SERIAL_PORT)
        sleep(10)
        continue

    connected = True

sent = 0

while True:
    try:
        inp = ser.read(1)

        if frameIdx < 2:
            if inp[0] == HEAD_BYTE:
                frame[frameIdx] = inp[0]
                frameIdx += 1
            else:
                print('Failure reading header: %02X, continuing...' % inp[0])
                frameIdx = 0; # Corrupted read, reset to start
        else:
            frame[frameIdx] = inp[0]
            frameIdx += 1

        if frameIdx == FRAME_LEN:
            # TODO: add checksum calculation here
            ####
            # Frame read!
            distance = frame[HIGH_BYTE] << 8 | frame[LOW_BYTE]
            print("Calculated distance: %d mm" % distance)
            frameIdx = 0 # Reset again

            if sent == 0:
                # Try to change behaviour, doesn't seem to work
                ser.write([0xA5, 0x15, 0xBA])
                print("Command sent")
                sent = 1

    except OSError:
        print('Lost connection with UART \'%s\'adapter. Retrying.' % SERIAL_PORT)
        sleep(10)
        continue

ser.close()

Esate kas nors bandę su šituo moduliu šnekėtis ir jam komandas siuntinėt per UART?

Komentarai
  1. Mindaugas parašė:

    Tai vertas 10$ ar ne ?

  2. Aldas Baltutis parašė:

    o kas per projektelis?

  3. tadas parašė:

    sveikas, Darau blė. Esu nei protingas nei durakas, tiesiog eilinis “pravažiuojantis“ ar pan.
    Tamsta labai man patikot su savo pamokymais ( čia joks “nesilyzinimas“(nes to tiesiog negaliu pakęst))
    kažkaip susiderino taip, kad žinau tikrai, reik keptuvės normalios.tai, įsigijau tą Lodge, kur Tamsta parodęs esi.Tai, žinai, kepiau ir kepiau aš ją dahuja kartų kad “užkurt“ gyvenimui normaliam. viską pagal Tamstos rekomendacijas.iš pradžių kepiau kokius 4kartus su kiaulienos taukais, po to dusyk su kokosų aliejum, patom- su paprastu rimi kepimo aliejum.jau blizga kaip kaito pautai kai išimi iš petelnės):
    bet pabandziau bulves prakept-šūdas nieko.svyla kaip eilinėj metalinėj (teflomninėj ar aliumo).
    šitą visą reikalą atlikinėjau ne itin sąžiningai-kartais iškepus išimi keptuvę iš orkaitės ir matai kad paviršius netolygiai padengtas(nu neblizga kaip katino pautai):
    tai taip ir vargstu
    Ką tamsta patartum-vėl nušveist iki pilkumo ir su geru kepimo aliejum “užgrūdint“?

    • Darau, Blė parašė:

      Nuoširdžiai: velnias žino. Turbūt būtų galima nušveist iki pilkumo ir bandyt užgrūdint, bet tai ir užtrunka, ir paskui vėl prireikia laiko, kol pradeda keptuvė normaliai elgtis.

      Man kaip tik ant dienų vienas gabaliukas biškį per daug nusišveitė — buvau dienai guliašą pamiršęs, neišploviau. Tai šiandien vėl daržovių ir mėsos marmalą dariau, visas dugnas apsvilo, prikepė ir visiškas liūdesys apėmė. Tai tiesiog ištepiau aliejum, uždėjau ant viryklės, pakaitinau, kol dūmai parūko, likučius nuvaliau ir palikau atvėst — gal bus geriau kitą kartą.

      Tai siūlau bandyt neperšveičiant padengt, pakepint ir kokius porą kartų pabandyt pakept ką nors „švelnaus“ — kad ir plaktą kiaušinienę, bet ant labai labai mažos ugnies, kad plutelė nesusidarytų. Arba nerūgščias daržoves pakepint: paprikas, ankštines pupeles, svogūnus. Tai tiesiog, kad naujas sluoksnis susiformuotų naudojant kažkaip prasmingai.

      • scaniagti parašė:

        Pala pala, o tai posakis apie pirmą prisvilusį blyną reiškia instrukciją?! Liaudis tiesiog pataria prisvilint pirmą, kad kiti nesviltų? Tai man visą gyvenimą tą posakį sakė su iškreipta mintim?!

Palikti atsakymą: Mindaugas Atšaukti atsakymą

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.