[PYTHON] Capteur à ultrasons SRF02 piloté par pyton utilisant i2c

Capteur à ultrasons SRF02

SRF02.png

Environ 2400 yens en Akizuki http://akizukidenshi.com/catalog/g/gM-06685/ ・ Micro-ordinateur utilisé: 16F687-I / ML ・ Plage de mesure: 16 cm ~ 6 m. ・ Alimentation: 5V (consommation de courant 4mA Typ.)

La précision du capteur de distance à ultrasons est-elle bonne? Connectez-le à une tarte aux râpes et contrôlez-le avec la communication 12c

connexion i2c

SRF02_2.png Souder l'en-tête de la broche La broche de mode n'est pas connectée pour i2c Connectez chaque broche à une tarte à la râpe Aucune résistance à la traction requise pour la tarte aux râpes Au terminal

sudo i2cdetect -y 1

Vérifier l'adresse doit être 0x70 (112) par défaut

contrôle

Programmation avec 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!!")

Ecrire en détail

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

0x51 est la commande de mesure en centimètres (Pouces si 0x50)

time.sleep(DELAY)

Vous devez retarder la commande de mesure 70ms dans la fiche technique

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

Location2 est High Byte, Location3 est Low Byte 8 bits échelonnés et combinés

Parfois, la valeur s'envole

Parfois, la valeur peut sauter avec le programme ci-dessus Apparemment, le logiciel utilisé pour la mesure est différent location0 est "Software Revision" selon la fiche technique lors de la lecture Habituellement 6 ici mais parfois 134 est retourné La signification de la valeur est inconnue ...

    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]

Dans ce cas, il n'y a aucun problème à changer ici

Recommended Posts

Capteur à ultrasons SRF02 piloté par pyton utilisant i2c
Exécutez Yocto sur Ubuntu en utilisant QEMU.
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Essayez d'utiliser le capteur de température (LM75B) avec Raspeye.
[EV3 MicroPython] Mesure de distance avec capteur DIST-ToF (et communication I2C)