[PYTHON] SRF02 Ultraschallsensor, der von Pyton mit i2c angetrieben wird

Ultraschallsensor SRF02

SRF02.png

Ungefähr 2400 Yen in Akizuki http://akizukidenshi.com/catalog/g/gM-06685/ ・ Verwendeter Mikrocomputer: 16F687-I / ML ・ Messbereich: 16 cm ~ 6 m. ・ Stromversorgung: 5 V (Stromaufnahme 4 mA Typ.)

Ist die Genauigkeit des Ultraschall-Abstandssensors gut? Verbinden Sie dies mit einem Raspeltorte und steuern Sie ihn mit 12c-Kommunikation

i2c-Verbindung

SRF02_2.png Löten Sie den Stiftkopf Der Mode-Pin ist für i2c nicht angeschlossen Verbinden Sie jeden Stift mit einer Raspeltorte Für Raspeltorte ist kein Pull-up-Widerstand erforderlich Am Terminal

sudo i2cdetect -y 1

Adresse überprüfen Sollte standardmäßig 0x70 (112) sein

Steuerung

Programmieren mit Python

from time import sleep
import smbus

i2c = smbus.SMBus(1)
address = 0x70
SLEEPTIME = 0.5
DELAY = 0.1

if __name__ == '__main__':
    try:
        print ("cancel:CTRL+C")
        cnt = 1
        while True:
            i2c.write_i2c_block_data(0x70,0x00,[0x51])
            time.sleep(DELAY)

            block = i2c.read_i2c_block_data(address,0x00,4)
            distance = (block[2]<<8 | block[3])
            print(int(cnt),distance)
            cnt = cnt + 1
            time.sleep(SLEEPTIME)
             
    except KeyboardInterrupt:
        print("finishing...")
    finally:
        print("finish!!")

Schreiben Sie im Detail

i2c.write_i2c_block_data(0x70,0x00,[0x51])

0x51 ist der Messbefehl in Zentimetern (Zoll wenn 0x50)

time.sleep(DELAY)

Sie müssen nach dem Messbefehl verzögern 70ms im Datenblatt

block = i2c.read_i2c_block_data(address,0x00,4)
distance = (block[2]<<8 | block[3])

Standort2 ist High Byte, Standort3 ist Low Byte 8bit versetzt und kombiniert

Manchmal fliegt der Wert

Gelegentlich kann der Wert mit dem obigen Programm springen Anscheinend ist die für die Messung verwendete Software anders location0 ist "Software Revision" gemäß Datenblatt beim Lesen Normalerweise 6 hier, aber gelegentlich 134 zurück Die Bedeutung des Wertes ist unbekannt ...

    i2c.write_i2c_block_data(0x70,0x00,[0x51])
    time.sleep(DELAYTIME)
    block = i2c.read_i2c_block_data(address,0x00,6)
    if(block[0]==6):
        distance = (block[2]<<8 | block[3])
    else:
        distance = (block[2]<<8 | block[3]) + block[4]

In diesem Fall gibt es kein Problem, hier zu ändern

Recommended Posts

SRF02 Ultraschallsensor, der von Pyton mit i2c angetrieben wird
Führen Sie Yocto unter Ubuntu mit QEMU aus.
Lassen Sie einen Servomotor mit Python auf Raspberry Pi 3 laufen
Versuchen Sie es mit dem Temperatursensor (LM75B) mit Raspeye.
[EV3 MicroPython] Entfernungsmessung mit DIST-ToF-Sensor (& I2C-Kommunikation)