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