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