Ublox EEPROM NEO-6M GPS Module Aircraft Flight Controller Arduino MWC IMU APM2
Akkordiongruppe: Rasenroboter
Kompass
HMC5883L Triple Axis Compass Magnetometer Sensor Module 3V-5V B
Ultraschall
Ultrasonic Module HC-SR04 Distance Measuring Transducer Sensor for Arduino UNO
Das Modul kostet auf eBay 1,19 € inkl. Versand aus China. Die Menge macht wahrscheinlich den Gewinn. Also habe ich gleich vier Stück bestellt.
Entfernung mit Ultraschall messen. Eine Beschreibung gibt es hier.
Damit der Rasenroboter nicht alles über den Haufen fährt, bekommt er ein paar Ultraschall-Sensoren. Nach vorn, nach hinten und zu den Seiten.
Programm dazu. (Ist noch nicht getestet und Haftung muss ich mal wieder ausschließen.)
#Bibliotheken einbinden
import
RPi.GPIO as GPIO
import
time
#GPIO Modus (BOARD / BCM)
GPIO.setmode(GPIO.BCM)
#GPIO Pins zuweisen
GPIO_TRIGGER
=
18
GPIO_ECHO
=
24
#Richtung der GPIO-Pins festlegen (IN / OUT)
GPIO.setup(GPIO_TRIGGER, GPIO.OUT)
GPIO.setup(GPIO_ECHO, GPIO.IN)
def
distanz():
# setze Trigger auf HIGH
GPIO.output(GPIO_TRIGGER,
True
)
# setze Trigger nach 0.01ms aus LOW
time.sleep(
0.00001
)
GPIO.output(GPIO_TRIGGER,
False
)
StartZeit
=
time.time()
StopZeit
=
time.time()
# speichere Startzeit
while
GPIO.
input
(GPIO_ECHO)
=
=
0
:
StartZeit
=
time.time()
# speichere Ankunftszeit
while
GPIO.
input
(GPIO_ECHO)
=
=
1
:
StopZeit
=
time.time()
# Zeit Differenz zwischen Start und Ankunft
TimeElapsed
=
StopZeit
-
StartZeit
# mit der Schallgeschwindigkeit (34300 cm/s) multiplizieren
# und durch 2 teilen, da hin und zurueck
distanz
=
(TimeElapsed
*
34300
)
/
2
return
distanz
if
__name__
=
=
'__main__'
:
try
:
while
True
:
abstand
=
distanz()
print
(
"Gemessene Entfernung = %.1f cm"
%
abstand)
time.sleep(
1
)
# Beim Abbruch durch STRG+C resetten
except
KeyboardInterrupt:
print
(
"Messung vom User gestoppt"
)
GPIO.cleanup()
Schrittmotoren
28BYJ-48 mit einem ULN2003A als Treiber.
Pythoncode für eine Umdrehung (Ich kann leider nicht für diesen Programmcode haften, du benutzt ihn auf deine eigene GEFAHR!):
from time import sleep
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
A=12
B=16
C=18
D=22
time = 0.001
GPIO.setup(A,GPIO.OUT)
GPIO.setup(B,GPIO.OUT)
GPIO.setup(C,GPIO.OUT)
GPIO.setup(D,GPIO.OUT)
GPIO.output(A, False)
GPIO.output(B, False)
GPIO.output(C, False)
GPIO.output(D, False)
def Step1():
GPIO.output(D, True)
sleep (time)
GPIO.output(D, False)
def Step2():
GPIO.output(D, True)
GPIO.output(C, True)
sleep (time)
GPIO.output(D, False)
GPIO.output(C, False)
def Step3():
GPIO.output(C, True)
sleep (time)
GPIO.output(C, False)
def Step4():
GPIO.output(B, True)
GPIO.output(C, True)
sleep (time)
GPIO.output(B, False)
GPIO.output(C, False)
def Step5():
GPIO.output(B, True)
sleep (time)
GPIO.output(B, False)
def Step6():
GPIO.output(A, True)
GPIO.output(B, True)
sleep (time)
GPIO.output(A, False)
GPIO.output(B, False)
def Step7():
GPIO.output(A, True)
sleep (time)
GPIO.output(A, False)
def Step8():
GPIO.output(D, True)
GPIO.output(A, True)
sleep (time)
GPIO.output(D, False)
GPIO.output(A, False)
for i in range (512):
Step1()
Step2()
Step3()
Step4()
Step5()
Step6()
Step7()
Step8()
# print i
GPIO.cleanup()