From 3746a32b31a1e8b74e84c3909edc610c083a730b Mon Sep 17 00:00:00 2001 From: Langspielplatte Date: Fri, 18 Sep 2020 09:36:30 +0200 Subject: [PATCH] =?UTF-8?q?=C3=84nderungen=20hinzugef=C3=BCgt.=20Sensoren?= =?UTF-8?q?=20waren=20kaputt,=20daher=20mussten=20wir=20Workarounds=20bast?= =?UTF-8?q?eln.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Versuchstag-2/Pipfile | 12 -- Versuchstag-2/Pipfile.lock | 51 ----- Versuchstag-2/gpio_class.pyc | Bin 1271 -> 1010 bytes Versuchstag-2/iot_car.py | 10 +- Versuchstag-2/iot_car.pyc | Bin 0 -> 5609 bytes Versuchstag-2/keyikt_main (copy).py | 257 ------------------------- Versuchstag-2/linuxWiimoteLib.pyc | Bin 0 -> 16375 bytes Versuchstag-2/servo_ctrl.pyc | Bin 3317 -> 2360 bytes Versuchstag-2/wiikt_main.py | 75 +++++--- Versuchstag-3/simple-client.py | 3 +- Versuchstag-4/autoparking.py | 155 +++++++++++++++ Versuchstag-4/autoparking.pyc | Bin 0 -> 3182 bytes Versuchstag-4/gpio_class.py | 32 ++++ Versuchstag-4/gpio_class.pyc | Bin 0 -> 1010 bytes Versuchstag-4/ikt_car_sensorik.py | 285 ++++++++++++++++++++++------ Versuchstag-4/ikt_car_sensorik.pyc | Bin 0 -> 12979 bytes Versuchstag-4/ikt_car_webserver.py | 111 +++++++++-- Versuchstag-4/index.html | 114 ++++++++++- Versuchstag-4/iot_car.py | 143 ++++++++++++++ Versuchstag-4/iot_car.pyc | Bin 0 -> 5609 bytes Versuchstag-4/sensor_test.py | 42 ++++ Versuchstag-4/servo_ctrl.py | 62 ++++++ Versuchstag-4/servo_ctrl.pyc | Bin 0 -> 2360 bytes Versuchstag-4/set_value.py | 21 ++ 24 files changed, 945 insertions(+), 428 deletions(-) delete mode 100644 Versuchstag-2/Pipfile delete mode 100644 Versuchstag-2/Pipfile.lock create mode 100644 Versuchstag-2/iot_car.pyc delete mode 100755 Versuchstag-2/keyikt_main (copy).py create mode 100644 Versuchstag-2/linuxWiimoteLib.pyc mode change 100644 => 100755 Versuchstag-2/wiikt_main.py create mode 100755 Versuchstag-4/autoparking.py create mode 100644 Versuchstag-4/autoparking.pyc create mode 100644 Versuchstag-4/gpio_class.py create mode 100644 Versuchstag-4/gpio_class.pyc mode change 100644 => 100755 Versuchstag-4/ikt_car_sensorik.py create mode 100644 Versuchstag-4/ikt_car_sensorik.pyc create mode 100644 Versuchstag-4/iot_car.py create mode 100644 Versuchstag-4/iot_car.pyc create mode 100755 Versuchstag-4/sensor_test.py create mode 100644 Versuchstag-4/servo_ctrl.py create mode 100644 Versuchstag-4/servo_ctrl.pyc create mode 100644 Versuchstag-4/set_value.py diff --git a/Versuchstag-2/Pipfile b/Versuchstag-2/Pipfile deleted file mode 100644 index f072803..0000000 --- a/Versuchstag-2/Pipfile +++ /dev/null @@ -1,12 +0,0 @@ -[[source]] -name = "pypi" -url = "https://pypi.org/simple" -verify_ssl = true - -[dev-packages] - -[packages] -pygame = "==1.9.4" - -[requires] -python_version = "3.8" diff --git a/Versuchstag-2/Pipfile.lock b/Versuchstag-2/Pipfile.lock deleted file mode 100644 index e56f070..0000000 --- a/Versuchstag-2/Pipfile.lock +++ /dev/null @@ -1,51 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "66dc4fa611a558e59e4b96b5c720de3680644511017efcb95d30b2a242825bec" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.8" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "pygame": { - "hashes": [ - "sha256:06dc92ccfea33b85f209db3d49f99a2a30c88fe9fb80fa2564cee443ece787b5", - "sha256:0919a2ec5fcb0d00518c2a5fa99858ccf22d7fbcc0e12818b317062d11386984", - "sha256:0a8c92e700e0042faefa998fa064616f330201890d6ea1c993eb3ff30ab53e99", - "sha256:220a1048ebb3d11a4d48cc4219ec8f65ca62fcafd255239478677625e8ead2e9", - "sha256:315861d2b8428f7b4d56d2c98d6c1acc18f08c77af4b129211bc036774f64be2", - "sha256:3469e87867832fe5226396626a8a6a9dac9b2e21a7819dd8cd96cf0e08bbcd41", - "sha256:54c19960180626165512d596235d75dc022d38844467cec769a8d8153fd66645", - "sha256:5ba598736ab9716f53dc943a659a9578f62acfe00c0c9c5490f3aca61d078f75", - "sha256:60ddc4f361babb30ff2d554132b1f3296490f3149d6c1c77682213563f59937a", - "sha256:6a49ab8616a9de534f1bf62c98beabf0e0bb0b6ff8917576bba22820bba3fdad", - "sha256:6d4966eeba652df2fd9a757b3fc5b29b578b47b58f991ad714471661ea2141cb", - "sha256:700d1781c999af25d11bfd1f3e158ebb660f72ebccb2040ecafe5069d0b2c0b6", - "sha256:73f4c28e894e76797b8ccaf6eb1205b433efdb803c70f489ebc3db6ac9c097e6", - "sha256:786eca2bea11abd924f3f67eb2483bcb22acff08f28dbdbf67130abe54b23797", - "sha256:7bcf586a1c51a735361ca03561979eea3180de45e6165bcdfa12878b752544af", - "sha256:82a1e93d82c1babceeb278c55012a9f5140e77665d372a6d97ec67786856d254", - "sha256:9e03589bc80a21ae951fca7659a767b7cac668289937e3756c0ab3d753cf6d24", - "sha256:aa8926a4e34fb0943abe1a8bb04a0ad82265341bf20064c0862db0a521100dfc", - "sha256:aa90689b889c417d2ac571ef2bbb5f7e735ae30c7553c60fae7508404f46c101", - "sha256:c9f8cdefee267a2e690bf17d61a8f5670b620f25a981f24781b034363a8eedc9", - "sha256:d9177afb2f46103bfc28a51fbc49ce18987a857e5c934db47b4a7030cb30fbd0", - "sha256:deb0551d4bbfb8131e2463a7fe1943bfcec5beb11acdf9c4bfa27fa5a9758d62", - "sha256:e7edfe57a5972aa9130ce9a186020a0f097e7a8e4c25e292109bdae1432b77f9", - "sha256:f0ad32efb9e26160645d62ba6cf3e5a5828dc4e82e8f41f9badfe7b685b07295" - ], - "index": "pypi", - "version": "==1.9.4" - } - }, - "develop": {} -} diff --git a/Versuchstag-2/gpio_class.pyc b/Versuchstag-2/gpio_class.pyc index 0a04e561ed3e9711b69780e2f634f7026edfc0a0..81511fee589c759a66b5a6d598e1b3bbdddd56f5 100644 GIT binary patch delta 111 zcmey)`H7u_`7AFUnuQ5vD Qlb@W({1%V)$@^I>0Km^9@c;k- delta 414 zcmeyw{+*M9`7Ha_m#N-pq FS^y*!liC0P diff --git a/Versuchstag-2/iot_car.py b/Versuchstag-2/iot_car.py index 8a41797..00bb071 100644 --- a/Versuchstag-2/iot_car.py +++ b/Versuchstag-2/iot_car.py @@ -35,7 +35,7 @@ class Iot_car(): def __init__(self, testmode=True): self.is_testmode_activated = testmode if not testmode: - import servo_ctrl + from servo_ctrl import Motor, Steering self.motor = Motor(1) self.streeting = Steering(2) @@ -84,28 +84,28 @@ class Iot_car(): else: self.speed_cruise_control = s - def def cruise_control_reset(self): + def cruise_control_reset(self): self.speed_cruise_control = 0 def activate_cruise_control_forward(self): self.speed_last = self.speed_cur self.speed_cur = self.speed_cruise_control self.is_testmode_servo_active = True - if not is_testmode_activated: + if not self.is_testmode_activated: self.__accelerate(self.speed_cruise_control) def activate_cruise_control_backward(self): self.speed_last = self.speed_cur self.speed_cur = -1 * self.speed_cruise_control self.is_testmode_servo_active = True - if not is_testmode_activated: + if not self.is_testmode_activated: self.__accelerate(-1 * self.speed_cruise_control) def deactivate_cruise_control(self): self.speed_last = self.speed_cur self.speed_cur = 0 self.is_testmode_servo_active = False - if not is_testmode_activated: + if not self.is_testmode_activated: self.__accelerate(0) def reset_streeting(self): diff --git a/Versuchstag-2/iot_car.pyc b/Versuchstag-2/iot_car.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9c0f8248afa3aeac66af4bea12c3231593aa2f48 GIT binary patch literal 5609 zcmcgwYi}FJ6`dt1N|Y%pwj^6lokV#xY@0+)`bZy6A}6R(Ck_#eilpV2#b$RTZOwB zzW4ByzXr+hADO-}Juo$s)y=cW^dj*M@#tJK*|N!+=9w|y8uN!!VYb7G8op zrIiny%ffh?s^_cti`%~sWBDPZaFM}r2h@m^uY%h>8V%g;gM9ZZSCq%;QR$Pzci!L4 zM?OxI;@t<2{WZ)=lYV;KPrQqhGNz;c^*nS{HO{vsCy;VNFLKsYG!lmJjv0H8(y zJmudF$faQQ;ch;`Q#P;>2lIs4fWnMmo-&P|OsEIjY?xk?M%r68ZpHLk#;uy(B^qq6 zExIOpS#;fG+opF#^eX4Ww4XudhRIfF;Jr=nrvOn_e}PJn42cMBIYHNT@~{(rDYph^cC@&;&)88r3tT^?3$R@Om&EVPZU7DWS^f^V!+-vRpT^$U^sny86Z5wLSB`O$@=$q_{FYgL1_s^-UyH?*cL*k2 ztsj{|%{;A{L7l!D(OK(qNKA#t%3bN7XfBx{jMKpT<%?Rh!zJV~UyS^y@I2pr?_7}& z59OY+ybf*2Z-L}x>|N;xql}K>^GEQI%rk0~u6Q(xQ(yG$8k+VpU*SRn32t$UFP!s` zT)BGb`UhHcBDH#XVT}QT5#2C(R!59EhflLQAN-KHV9>;HS;aN z41B;0fet8QXlXJH@eGrQC&FJ-3<4}srTnfUtEIMHDl2YBRMF2`&{iO7YU4wim zS5<)fU2*LEHfGM^9FP^-PUmGeD2wXSK^dSH#)@Yd&mQGC#!(0M<7OHg+9cumHj&Z+Qt!JWe)qZP%YO zqdG~yc|yiCwYv^+kY9xq%7B;Ug-iXys59zRf^VT!GM5^Jpf>(mc-HW|P&*rtKEkw9 zo&{_fZy1ym@b3f9_f%v7jG7s?*bjKY%e1J+q|9pW7yq_A{wWKOGcbKfM5q(KM#U$lJq_?NHAwy1tH)d^vqzu%?blvCC_3&Ru1MT8#?$Js z?z9a4I*!}AA-B+!W~@x5YiJ>D+4nJ4WkbEBLFI&GVNWFhQ`O@lKRogUyH-F9(_sxI z<{237U~mir@SDQ0Lm2o21GJCiqliBN3gwA;P!Qg3&ecMFDLh_A)Bcp?XCyx-IjOj1 zv1ES%varg$`BWZ%+I7_Pu3aDCQl@YWc zo}rkb7K5EL zP6xot$V@@6ii^Ll$%*s}%5&&T^C=$>^qbV*$On7k;k2V}=MApIt~eeh1Bd#Ub!Z&p zrheQ {})".format(speed_cur, angle_cur, (speed_cur - last) / delta)) + ", Servo_active: " + str(testmode_vars['is_servo_active']) - - except KeyboardInterrupt: - print "Exiting through keyboard event (CTRL + C)" - - # gracefully exit pygame here - pygame.quit() diff --git a/Versuchstag-2/linuxWiimoteLib.pyc b/Versuchstag-2/linuxWiimoteLib.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f8eede4e0105ad319fa3e01ea383c2640594649a GIT binary patch literal 16375 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 F764wXa|{3g literal 3317 zcmd5;-EJF26h6Cl>^MI_OVh#?AP};IlC4q+2?nr^c8T07&A zKzdc4fydxEcpn}BzVEEMw=>=@TrMu_9Oj5^}FGFoT+N4i;1PfbsxN}YScjPUkXy?YQ=dpyY4z0^Yd2TMoac{#m{~CluJJA+@aW8&9$_PldC2|=Zra%b`No`1k(@mt6 zPt5D+HyUHGLQd%^UC`D^uBz0F=*V=@fR)y3o}!%BS!fO}~E3y6QM5U33utqt8pZ9u7L zY6Gf8QyVr|5*RJzoXe6>>|*Ry%YpLAij@LI!yU$q6d=*xOThOS{?8Hs{(qU_wG14$ z!0_>c;k6o&`mZoNDRpp#+!dR|w6YsML;!M-wW7MgH*@??6s>Dlm7>+Sk72ndrj(*z zot&4%k5gT_iiD=b@)_N2KsD%ZqGPU8yh*{2*-N@IJM40)xkaHMU_sM!R*jqZz4Q^9 zCwpGurWnlB?Xz4OG|_K~Kv$~6W0wU(PBYxRVh$;le%ch2&w2GcjmGCg>*hOu0W(DE Ay8r+H diff --git a/Versuchstag-2/wiikt_main.py b/Versuchstag-2/wiikt_main.py old mode 100644 new mode 100755 index e0243dd..86dec19 --- a/Versuchstag-2/wiikt_main.py +++ b/Versuchstag-2/wiikt_main.py @@ -1,11 +1,11 @@ #!/usr/bin/env python ####################################################################### -# Aufgabe 2 # +# Aufgabe 2 # ####################################################################### from linuxWiimoteLib import * -frim iot_car import Iot_car +from iot_car import Iot_car # initialize wiimote wiimote = Wiimote() @@ -13,11 +13,13 @@ wiimote = Wiimote() #Insert address and name of device here # hcitool scan # -device = ('', '') +# B8:AE:6E:30:0F:0F Nintendo RVL-CNT-01-TR +# +device = ('B8:AE:6E:30:0F:0F', 'Nintendo RVL-CNT-01-TR') connected = False -car = Iot_car(testmode=True) +car = Iot_car(testmode=False) # AUFGABE d def set_led(remote): @@ -30,32 +32,34 @@ def set_led(remote): remote.SetLEDs(True, True, False, False) elif p > 0.5 and p <= 0.75: remote.SetLEDs(True, True, True, False) - else: + elif p == 1: remote.SetLEDs(True, True, True, True) + else: + remote.SetLEDs(False, False, False, False) try: - print "Press any key on wiimote to connect" - while (not connected): - connected = wiimote.Connect(device) + print "Press any key on wiimote to connect" + while (not connected): + connected = wiimote.Connect(device) - print "succesfully connected" + print "succesfully connected" - wiimote.SetAccelerometerMode() - - wiistate = wiimote.WiimoteState - while True: - # re-calibrate accelerometer - if (wiistate.ButtonState.Home): - print 're-calibrating' - wiimote.calibrateAccelerometer() - sleep(0.1) + wiimote.SetAccelerometerMode() + wiistate = wiimote.WiimoteState + step = True + counter = 0 + print 'entering loop' + while True: + # re-calibrate accelerometer + if (wiistate.ButtonState.Home): + print 're-calibrating' + wiimote.calibrateAccelerometer() + sleep(0.1) # Set acceleration and deceleration if wiistate.ButtonState.One: - car.activate_cruise_control_forward() - else: - car.deactivate_cruise_control() - if wiistate.ButtonState.Two: + car.activate_cruise_control_forward() + elif wiistate.ButtonState.Two: car.activate_cruise_control_backward() else: car.deactivate_cruise_control() @@ -63,25 +67,38 @@ try: # streeting if wiistate.ButtonState.Up: # streeting left - car.car.streeting_left() + car.streeting_left() if wiistate.ButtonState.Down: # streeting right car.streeting_right() if not wiistate.ButtonState.Down and not wiistate.ButtonState.Up: car.reset_streeting() + if wiistate.ButtonState.Right and step: + car.cruise_control_increase() + step = False + if wiistate.ButtonState.Left and step: + car.cruise_control_decrease() + step = False + # reset button if wiistate.ButtonState.Minus: - car.reset() + car.stop() car.cruise_control_reset() # set led states set_led(wiimote) - + + counter = counter + 1 + if counter == 50: + step = True + counter = 0 + delta = 1.0 / 50 - print("({},{} --> {})".format(car.speed_cur, car.angle_cur, (car.speed_cur - car.speed_last) / delta)) + ", Servo_active: " + str(car.is_testmode_servo_active) + "CC Speed: " str(car.speed_cruise_control) - sleep(1 / 50) + print wiimote.getAccelState() + #print '({},{} --> {})'.format(car.speed_cur, car.angle_cur, (car.speed_cur - car.speed_last) / delta) + ", Servo_active: " + str(car.is_testmode_servo_active) + " CC Speed: " + str(car.speed_cruise_control) + sleep(0.01) except KeyboardInterrupt: - print "Exiting through keyboard event (CTRL + C)" - exit(wiimote) + print "Exiting through keyboard event (CTRL + C)" + exit(wiimote) diff --git a/Versuchstag-3/simple-client.py b/Versuchstag-3/simple-client.py index c68567b..ae88c75 100755 --- a/Versuchstag-3/simple-client.py +++ b/Versuchstag-3/simple-client.py @@ -8,6 +8,7 @@ if __name__ == "__main__": parser.add_argument('-s', type=str, required=True, help='IPv4 address of the servers') parser.add_argument('--tcp', action='store_true', help='Use TCP.') parser.add_argument('--udp', action='store_true', help='Use UDP.') + parser.add_argument('--raspivid', defalt='-t 0 -fps 20 -w 1280 -h 720 -b 2000000 -o', help='Raspivid arguments.') args = parser.parse_args() if args.udp and args.tcp: @@ -40,7 +41,7 @@ if __name__ == "__main__": sock.connect((IP,PORT)) # raspivid starten - cmd_raspivid = 'raspivid -t 0 -fps 20 -w 1280 -h 720 -b 2000000 -o -' + cmd_raspivid = 'raspivid ' + args.raspivid + ' -' rasprocess = subprocess.Popen(cmd_raspivid,shell=True,stdout=subprocess.PIPE) while True: diff --git a/Versuchstag-4/autoparking.py b/Versuchstag-4/autoparking.py new file mode 100755 index 0000000..65559d1 --- /dev/null +++ b/Versuchstag-4/autoparking.py @@ -0,0 +1,155 @@ +#!/usr/bin/python +from time import sleep + +from iot_car import Iot_car +from ikt_car_sensorik import Value_collector + +car = Iot_car(testmode=False) +vc = Value_collector() + +def is_state_save(vc): + return True + distance_front = vc.ultrasonic_front.distance + distance_back = vc.ultrasonic_back.distance + if distance_front > 10 and distance_back > 10: + return True + return False + +def stop(vc, car): + print 'danger' + car.set_angle(0) + car.accelerate(0) + vc.stop() + exit(0) + +def website_stop(): + car.set_angle(0) + car.accelerate(0) + vc.stop() + +def park_lite(): + + car.set_angle(0) + car.accelerate(0) + try: + bearing_start = vc.compass.bearing + # steeling right + car.set_angle(45) + sleep(0.2) + print + 'Backward' + car.accelerate(-5) + while is_state_save(vc) and not (vc.compass.bearing <= bearing_start - 45): + sleep(0.1) + if not is_state_save(vc): + stop(vc, car) + + print + 'stop' + car.accelerate(0) + sleep(0.1) + car.set_angle(-45) + sleep(0.1) + print + 'Backward' + car.accelerate(-5) + while is_state_save(vc) and not (vc.compass.bearing >= bearing_start): + sleep(0.1) + if not is_state_save(vc): + stop(vc, car) + + print + 'stop' + car.accelerate(0) + print + 'end' + + car.accelerate(0) + car.set_angle(0) + + except KeyboardInterrupt: + car.accelerate(0) + car.set_angle(0) + vc.stop() + exit(0) + + car.accelerate(0) + car.set_angle(0) + vc.stop() + exit(0) + + + +def park(): + car = Iot_car(testmode=False) + vc = Value_collector() + car.accelerate(0) + car.set_angle(0) + + #angle_offset = -10 + + print 'Wait for Values' + sleep(10) + print 'Dist Front: ' + str(vc.ultrasonic_front.distance) + print 'Dist Back: ' + str(vc.ultrasonic_back.distance) + speed = 4 + + car.set_angle(0) + car.accelerate(0) + try: + # drive forward an find gab + print 'Forward' + car.accelerate(0) + while is_state_save(vc) and not vc.infrared.passed_gab: + print vc.infrared.distance + print vc.infrared.passed_gab + + sleep(0.1) + if not is_state_save(vc): + stop(vc, car) + + print 'stop' + car.accelerate(0) + bearing_start = vc.compass.bearing + # steeling right + car.set_angle(45) + print 'Backward' + car.accelerate(-5) + while is_state_save(vc) and not (vc.compass.bearing <= bearing_start - 45): + sleep(0.1) + if not is_state_save(vc): + stop(vc, car) + + print 'stop' + car.accelerate(0) + + car.set_angle(-45) + print 'Backward' + car.accelerate(-5) + while is_state_save(vc) and not (vc.compass.bearing >= bearing_start): + sleep(0.1) + if not is_state_save(vc): + stop(vc, car) + + print 'stop' + car.accelerate(0) + print 'end' + + car.accelerate(0) + car.set_angle(0) + + except KeyboardInterrupt: + car.accelerate(0) + car.set_angle(0) + vc.stop() + exit(0) + + car.accelerate(0) + car.set_angle(0) + vc.stop() + exit(0) + +if __name__ == "__main__": + park() + + diff --git a/Versuchstag-4/autoparking.pyc b/Versuchstag-4/autoparking.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3dcbbeccef9fd1fc44c48b8599a3fd6db7531fd7 GIT binary patch literal 3182 zcmbVO&2QX96n|syX0sppC{P+Cgd!whFC{_(6;*{GKGGJXNI0lLxmb=pO}*>2w==VC zBP9nEE{Fq&8yvWBg+BlZjvP31hjY&yL4x0V_Ifwa0>O#LZ{E(ld7r;G{;x}&?>>#g zn5xIe_cgrs6ATId6=g&tMSF@A&ppaK8u_&6mvf)82927u*CeHVN*bgW=!Dc>i*yqN z?JZK$qz^%~DOnJrLrF`BE+vaX^eAZyu|#^Ak`4_$G9Qy(VhJk8xn0`n_n=ey2cEtH z<(jN#ruDd-wlKY3xG;`P$yfp7MwCr-7#CTlV^#OS1>rD zog<=wqJc-pikS9=_UK5lLxv49FVm4Xqj`^OKtq86TAF9^);<^{gM9|n z#;szcH^%A44Q=cszJ)UnF21-COuvV|w`mq#*z7ePUgLz0v{q|=TVw(S;JLX;n9lY*i? z`^~j6SnWdaGwoQHD2{ce4b&6QT4*nXzLz@jeZYHg0ug5cK4Z;lXN?_4 z>8{?lDTfYzc>;6GZY8lm^yhr%<3;};FnhTEhnFf722DDy7nX5Dv=U!TzE;@`OJVc9 z7s$2P`yX9`c{ zp9d^u?<|%D0XQrdb48b{U&y{{t!SO~zTfRjt|)13qLjy~KkB9mOtoi=7Nb^&us%w-6vwlaz<@a-st@maMDP+Ikv?ns?7_4FK9`Ag~?cx4qY3sqG! zV@zEQU!y|ddIZ8D7Nj`m1+VH3Fb8Cf8o_*k9#A?da}Ifpq+;A_NpKZixOxpeuVS|6 zm@PU+I{{+UvdTVFopSh%LT3b^VnvOY_g*2OAjETh{UYadY0yJ5*Av-;^Mzlk)-G%9 zE2Q{zv;Ccb^$-N{Rjr}r{^c|_W0?jkbnH(R?TV#n-_IYu;QjmI$;!;&5&=&It}Oah zDf&YXMSm)2rU%(Q}{L4t$K#RxJ0C-6(bIHw&{aw;n6^5NY3U z;*znx#dnU&>y{xv7_Z}=aCtrDI*^jzD$HG!b&VKO@d7DwQ{mZudEua>Zv~gH5faf literal 0 HcmV?d00001 diff --git a/Versuchstag-4/gpio_class.py b/Versuchstag-4/gpio_class.py new file mode 100644 index 0000000..5814478 --- /dev/null +++ b/Versuchstag-4/gpio_class.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +import os + +def sb_write(fd, servo, pulse): + try: + os.write(fd, '%d=%d\n' % (servo,pulse)) + except IOError as e: + print e + +def write(servo, pulse): + if servo == 1: + if pulse < 100 or pulse > 200: + print 'PWM %d out of range!' % (pulse) + return + + if servo == 2: + if pulse < 100 or pulse > 200: + print 'PWM %d out of range!' % (pulse) + return + + sb_write(fd, servo, pulse) + +try: + fd = os.open('/dev/servoblaster', os.O_WRONLY) +except OSError as e: + print 'could not open /dev/servoblaster' + raise SystemExit(5) +except (KeyboardInterrupt, SystemExit): + os.close(fd) + pass + + diff --git a/Versuchstag-4/gpio_class.pyc b/Versuchstag-4/gpio_class.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6a010337a62a1092c5407121a79d743cf09c07e4 GIT binary patch literal 1010 zcmb7C-D(q25T4o1PZJx&A4+>uR!AT>nwwsDVMUOV7B!I#m>QIj>^Vu+B)ehHNi`5b zjJ}Bv3p6cL_MW&`BvyH9p6fkQ1==uuWlE|DDG^*F z&jo%VW|neg(s>Eugy|C9JM|)v#J};hA|GZBl7~Epm{X|LFu(gO)Zsj<@MV-{O&1;j=BEX&fYE(l!2 zNVy23v#Zoui{;E{%Q)9{D00eFVKpY{TsIbRLA?&uDM%usmV{>nh1Q0?e)>Yq6arF$7-?m`jo^C6eG=>7egJMcD?zG}EF4MDZV z1_F4abU9N&k^ 0: + dist = (1.0 / (v / 15.69)) - 0.42 + else: + dist = 0 return dist +class Windowed_values(): + + def __init__(self, size=100): + self.size = size + self.values = [] + + def add(self, value): + if len(self.values) > self.size: + self.values.pop(0) + self.values.append(value) + else: + self.values.append(value) + + def get_mean(self): + return sum(self.values) / len(self.values) + + def clear(self): + self.values = [] class InfraredThread(threading.Thread): ''' Thread-class for holding Infrared data ''' # distance to an obstacle in cm distance = 0 + last_distance = 0 # length of parking space in cm parking_space_length = 0 + parking_step = 0 + parking_length_start = 0 + parking_length_stop = 0 + + passed_gab = False + + + gab_counter = 0 + + sensor = None + stopped = False + encoder = None + step_count = 0 + + # Aufgabe 4 # # Hier muss der Thread initialisiert werden. def __init__(self, address, encoder=None): - return 0 + threading.Thread.__init__(self) + self.sensor = Infrared(address) + self.encoder = encoder + + self.windowed_values = Windowed_values() + self.curr_distance_values = Windowed_values(size=10) def run(self): while not self.stopped: - read_infrared_value() - calculate_parking_space_length() + tmp = self.distance + self.distance = self.read_infrared_value() + self.windowed_values.add(self.distance) + self.curr_distance_values.add(self.distance) + #self.parking_space_length = self.calculate_parking_space_length() + self.last_distance = tmp + + #print "Window: " + str(self.windowed_values.get_mean()) + #print "Value: " + str(self.curr_distance_values.get_mean()) + if abs(self.windowed_values.get_mean() - self.curr_distance_values.get_mean()) >= 10: + if self.gab_counter == 1: + self.passed_gab = True + self.gab_counter = 0 + self.windowed_values.clear() + self.curr_distance_values.clear() + self.gab_counter = 1 + #print 'Infrared distance: ' + str(self.distance) + #print 'Infraread parking: ' + str(self.parking_space_length) + + sleep(0.1) + + # Aufgabe 4 # # Diese Methode soll den Infrarotwert aktuell halten - def read_infrared_value(self): - return 0 + def read_infrared_value(self): + return self.sensor.get_distance() # Aufgabe 5 # # Hier soll die Berechnung der Laenge der Parkluecke definiert werden def calculate_parking_space_length(self): - return 0 + length = self.parking_space_length + if self.step_count > 5: + self.step_count = 0 + if self.parking_step == 0 and self.distance > self.last_distance + 10: + self.parking_step = 1 + self.parking_length_start = time() + + if self.parking_step == 1 and self.distance + 10 < self.last_distance: + self.parking_step = 0 + self.parking_length_stop = time() + length = self.parking_length_stop - self.parking_length_start + #self.passed_gab = True + + + self.step_count = self.step_count + 1 + return length def stop(self): self.stopped = True @@ -219,32 +314,32 @@ class Encoder(object): # Aufgabe 2 # # Wieviel cm betraegt ein einzelner Encoder-Schritt? - STEP_LENGTH = 0 # in cm !!!ONP: to measure the wheel!!! + # Wheel is 6.5cm + STEP_LENGTH = 1.27627# in cm !!!ONP: to measure the wheel!!! # number of encoder steps counter = 0 def __init__(self, pin): self.pin = pin - GPIO.add_event_detect(encoder_pin, GPIO.BOTH, callback=count, bouncetime=1) + GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_UP) + GPIO.remove_event_detect(pin) + GPIO.add_event_detect(pin, GPIO.BOTH, callback=self.count, bouncetime=1) # Aufgabe 2 # # Jeder Flankenwechsel muss zur Berechnung der Entfernung gezaehlt werden. # Definieren Sie alle dazu noetigen Methoden. - def count(channel): - global counter - counter = counter + 1 - print "Number of impulses" + str(counter) + def count(self, channel): + self.counter = self.counter + 1 + #print "Number of impulses " + str(self.counter) # Aufgabe 2 # # Diese Methode soll die gesamte zurueckgelegte Distanz zurueckgeben. def get_travelled_dist(self): - global counter - global STEP_LENGTH - dist = counter * STEP_LENGTH + dist = self.counter * self.STEP_LENGTH return dist class EncoderThread(threading.Thread): @@ -252,24 +347,40 @@ class EncoderThread(threading.Thread): # current speed. speed = 0 + last_distance = 0 + + last_time = 0 # currently traversed distance. distance = 0 + encoder = None + + stopped = False + # Aufgabe 4 # # Hier muss der Thread initialisiert werden. def __init__(self, encoder): - try: - GPIO.setmode(GPIO.BCM) - GPIO.setup(encoder_pin, GPIO.IN) - except: - print "ERROR: Encoder GPIO init failed!" - return 0 + threading.Thread.__init__(self) + self.encoder = encoder + self.last_time = time() def run(self): while not self.stopped: - get_values() + tmp = self.distance + self.distance = self.encoder.get_travelled_dist() + + time_curr = time() + self.speed = (self.distance - self.last_distance) / (time_curr - self.last_time) + self.last_time = time_curr + + self.last_distance = tmp + + #print 'Encoder traveled distance: ' + str(self.distance) + + sleep(0.05) + # Aufgabe 4 # @@ -282,9 +393,42 @@ class EncoderThread(threading.Thread): def stop(self): self.stopped = True + +class Value_collector(): + + def __init__(self): + e = Encoder(23) + self.ultrasonic_front = UltrasonicThread(0x70) + self.ultrasonic_front.start() + self.ultrasonic_back = UltrasonicThread(0x71) + self.ultrasonic_back.start() + self.infrared = InfraredThread(0x4f, encoder=e) + self.infrared.start() + self.encoder = EncoderThread(e) + self.encoder.start() + self.compass = CompassThread(0x60) + self.compass.start() + + def get_values_as_json(self): + return '{"speed":"' +str(self.encoder.speed) \ + + '", "compass":"' + str(self.compass.bearing) \ + + '", "dist0":"' + str(self.infrared.distance) \ + + '", "dist1":"' + str(self.ultrasonic_front.distance) \ + + '", "dist2":"' + str(self.ultrasonic_back.distance) \ + + '", "travel":"' + str(self.encoder.distance) \ + + '", "length":"' + str(self.infrared.parking_space_length) + '"}' + + def stop(self): + self.ultrasonic_front.stop() + self.ultrasonic_back.stop() + self.infrared.stop() + self.encoder.stop() + self.compass.stop() + + ################################################################################# # Main Thread -################################################################################# +################################################################################# if __name__ == "__main__": @@ -308,3 +452,34 @@ if __name__ == "__main__": # Aufgabe 6 # # Hier sollen saemtlichen Messwerte periodisch auf der Konsole ausgegeben werden. + us_front = Ultrasonic(ultrasonic_front_i2c_address) + us_back = Ultrasonic(ultrasonic_rear_i2c_address) + c = Compass(compass_i2c_address) + i = Infrared(infrared_i2c_address) + e = Encoder(encoder_pin) + + while True: + print 'Ultrasonic Front distance: ' + str(us_front.get_distance()) + 'cm' + print 'Ultrasonic Back distance: ' + str(us_back.get_distance()) + 'cm' + print 'Compass bearing: ' + str(c.get_bearing()) + ' degree' + print 'Infrared distance: ' + str(i.get_distance()) + 'cm' + #print 'Traveled distance: ' + str(e.get_travelled_dist()) + sleep(1) + print(chr(27) + '[2j') + print('\033c') + print('\x1bc') + + #coll = Value_collector() + #run = True + #while run: + #try: + # print 'loop' + # print coll.get_values_as_json() + # sleep(5) + # print + # coll.get_values_as_json() + #except KeyboardInterrupt: + # run = False + # exit(0) + #coll.stop() + GPIO.cleanup() diff --git a/Versuchstag-4/ikt_car_sensorik.pyc b/Versuchstag-4/ikt_car_sensorik.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b1cea264420922b54f2228e305dcf4d7b213507 GIT binary patch literal 12979 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 + Parking control: + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
Geschwindigkeit:
+
Himmelrichtung:
+
Abstand vom Auto zum Hindernis:
IR:
+
Front:
+
Rear:
+
Länge der Parklücke:
+
Encoder Traveled distance:
+
@@ -41,16 +77,45 @@ // Aufgabe 4 // // Damit die Daten dargestellt werden können muss ein Websocket geöffnet werden, der bei jeder neuen Nachricht die Daten aus dieser Nachricht rausholt und visualisiert. - var dataSocket = ; + var dataSocket = new WebSocket("ws://192.168.1.42:8081/ws"); + // THE IP NEED TO BE CHANGED! + var reply = 'nop'; + + document.getElementById("btn_stop").addEventListener('click', + ()=>{ + reply = 'stop_true'; + dataSocket.send(reply); + console.log("ParkCtrl: Stopping"); + }); + + document.getElementById("btn_start").addEventListener('click', + ()=>{ + reply = 'park_true'; + dataSocket.send(reply); + console.log("ParkCtrl: Parking"); + }); dataSocket.onopen = function(){ - console.log("connected"); - }; + console.log("connected"); + dataSocket.send('connection established') + }; dataSocket.onmessage = function(evt) { // Aufgabe 4 // Die empfangenen Daten müssen an die Charts weitergegeben werden. + // evt.data == {"speed":"value", "compass":"value", "dist":"value", "length":"value"} + console.log(evt.data); + dataSocket.send(reply); + var msg = JSON.parse(evt.data); + + speed.append(new Date().getTime(), parseFloat(msg.speed)); + compass.append(new Date().getTime(), parseFloat(msg.compass)); + dist0.append(new Date().getTime(), parseFloat(msg.dist0)); + dist1.append(new Date().getTime(), parseFloat(msg.dist1)); + dist2.append(new Date().getTime(), parseFloat(msg.dist2)); + length.append(new Date().getTime(), parseFloat(msg.length)); + travel.append(new Date().getTime(), parseFloat(msg.travel)); }; dataSocket.onclose = function(evt) { @@ -61,6 +126,49 @@ // Aufgabe 4 // // Für jeden Datensatz muss ein eine SmoothieChart in einem vorher definierten canvas-Element erstellt werden. + var speedChart = new SmoothieChart({ minValue: 0, maxValue: 15, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var speed = new TimeSeries(); + speedChart.addTimeSeries(speed); + speedChart.streamTo(document.getElementById("speed"), 100); + + var compassChart = new SmoothieChart({ minValue: 0, maxValue: 360, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var compass = new TimeSeries(); + compassChart.addTimeSeries(compass); + compassChart.streamTo(document.getElementById("compass"), 100); + + var dist0Chart = new SmoothieChart({ minValue: 0, maxValue: 100, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var dist0 = new TimeSeries(); + dist0Chart.addTimeSeries(dist0); + dist0Chart.streamTo(document.getElementById("dist0"), 100); + + var dist1Chart = new SmoothieChart({ minValue: 0, maxValue: 100, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var dist1 = new TimeSeries(); + dist1Chart.addTimeSeries(dist1); + dist1Chart.streamTo(document.getElementById("dist1"), 100); + + var dist2Chart = new SmoothieChart({ minValue: 0, maxValue: 100, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var dist2 = new TimeSeries(); + dist2Chart.addTimeSeries(dist2); + dist2Chart.streamTo(document.getElementById("dist2"), 100); + + var lengthChart = new SmoothieChart({ minValue: 0, maxValue: 300, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var length = new TimeSeries(); + lengthChart.addTimeSeries(length); + lengthChart.streamTo(document.getElementById("length"), 100); + + var travelChart = new SmoothieChart({ minValue: 0, maxValue: 500, grid: { strokeStyle: 'rgb(125, 0, 0)', fillStyle: 'rgb(60, 0, 0)', lineWidth: 1, millisPerLine: 500, verticalSections: 6 } }); + + var travel = new TimeSeries(); + travelChart.addTimeSeries(length); + travelChart.streamTo(document.getElementById("travel"), 100); + + diff --git a/Versuchstag-4/iot_car.py b/Versuchstag-4/iot_car.py new file mode 100644 index 0000000..00bb071 --- /dev/null +++ b/Versuchstag-4/iot_car.py @@ -0,0 +1,143 @@ +import math + +def calculate_acceleration(speed, acc, V_MAX=11): + sigma = 2.5 + mu = V_MAX / 2 + return acc * (1 - 0.5 * (1 + (math.erf((abs(speed) - mu) / (math.sqrt(2 * sigma**2)))))) + +def calculate_friction(speed, f, V_MAX=11): + # TODO hier stimmt was nicht + sigma = 4 + mu = V_MAX / 2 + return (f/2) * (1 + (math.erf((abs(speed) - mu) / (math.sqrt(2 * sigma**2))))) + +class Iot_car(): + + V_MAX = 11 #m/s + A_MAX = 45 # degree + + acc = 2.6 # Max acceleration of the car (per sec.) + dec = 4.5 # Max deceleration of the car (per sec.) + frict = -1 # max friction + angle_acc = 300 # max change of angle (per sec.) + + is_testmode_activated = True + is_testmode_servo_active = False + + speed_cur = 0 + speed_last = 0 + angle_cur = 0 + speed_cruise_control = 0 # m/s but only positive + + motor = None + streeting = None + + def __init__(self, testmode=True): + self.is_testmode_activated = testmode + if not testmode: + from servo_ctrl import Motor, Steering + self.motor = Motor(1) + self.streeting = Steering(2) + + # for keyboard control + def __testmode_accelerate(self): + calc_acc = calculate_acceleration(self.speed_cur, self.acc) + self.speed_last = self.speed_cur + self.speed_cur = min(self.V_MAX, self.speed_cur + calc_acc) + self.is_testmode_servo_active = True + + def __testmode_decelerate(self): + calc_dec = calculate_acceleration(self.speed_cur, self.dec) + self.speed_last = self.speed_cur + self.speed_cur = max(-1 * self.V_MAX, self.speed_cur - calc_dec) + self.is_testmode_servo_active = True + + def __accelerate(self, speed): + self.speed_last = self.speed_cur + self.speed_cur = speed + self.motor.set_speed(speed) + + def accelerate(self, speed=0, direct=False): + if direct and self.is_testmode_activated: # Mouse testmode + self.last = self.speed_cur + self.speed_cur = speed + elif self.is_testmode_activated: + if speed > 0: + self.__testmode_accelerate() + elif speed < 0: + self.__testmode_decelerate() + else: + self.__accelerate(speed) + + # for wii remote + def cruise_control_increase(self): + s = min(self.V_MAX, self.speed_cruise_control + 2.75) + if s < 0: + self.speed_cruise_control = 0 + else: + self.speed_cruise_control = s + + def cruise_control_decrease(self): + s = min(self.V_MAX, self.speed_cruise_control - 2.75) + if s < 0: + self.speed_cruise_control = 0 + else: + self.speed_cruise_control = s + + def cruise_control_reset(self): + self.speed_cruise_control = 0 + + def activate_cruise_control_forward(self): + self.speed_last = self.speed_cur + self.speed_cur = self.speed_cruise_control + self.is_testmode_servo_active = True + if not self.is_testmode_activated: + self.__accelerate(self.speed_cruise_control) + + def activate_cruise_control_backward(self): + self.speed_last = self.speed_cur + self.speed_cur = -1 * self.speed_cruise_control + self.is_testmode_servo_active = True + if not self.is_testmode_activated: + self.__accelerate(-1 * self.speed_cruise_control) + + def deactivate_cruise_control(self): + self.speed_last = self.speed_cur + self.speed_cur = 0 + self.is_testmode_servo_active = False + if not self.is_testmode_activated: + self.__accelerate(0) + + def reset_streeting(self): + self.set_angle(0) + + def streeting_right(self, angle=0): + if angle > 0: + a = angle + else: + a = min(self.A_MAX, self.angle_cur + self.angle_acc) + self.set_angle(a) + + def streeting_left(self, angle=0): + if angle < 0: + a = angle + else: + a = max(-1 * self.A_MAX, self.angle_cur - self.angle_acc) + self.set_angle(a) + + def set_angle(self, angle): + self.angle_cur = angle + if not self.is_testmode_activated: + self.streeting.set_angle(angle) + + def stop(self): + self.speed_last = self.speed_cur + self.speed_cur = 0 + self.angle_cur = 0 + + def symulate(self): + if self.is_testmode_activated: + if not self.is_testmode_servo_active: + self.speed_last = self.speed_cur + self.speed_cur = min(0, self.speed_cur - calculate_friction(self.speed_cur, self.frict)) + diff --git a/Versuchstag-4/iot_car.pyc b/Versuchstag-4/iot_car.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2930bcaa52b24568067c6bce9f9d83b07fe96d2d GIT binary patch literal 5609 zcmcgw>uwvz6`mz2N|Y%pwk2CmokU5RmTfL-+BE6KN#z7J>eL~MQIVuXfyHKbByG%# zy*qMhzy=D${nO{@@-}ep4r6dXv>mZc&@XTe;%=zZrhV^gPR{!FH>L-sX0p0@8kt@sz9Al+OD0=3S<^f<=4)gA(yQ~Gz0L~W&;N^0 zH@^TjrQjtzt9U-bQ{Dx^%qMm87*c9x^GU-zhHSjwAoa$485v(Qk0CfRj~ix-T^L4} z=#>rhZ{oSOv9+<+q4e$n2tJM7yoRql0vUIG^Se$1El)B?{GsQLT(Ph3)@^DvelKnfQb9CbjANcl3jox{<Lp)^z8*wmCm<=e*2<9o%=*fh7u+4_)HEE>1W#d*%uVvh->0O|~ z_S&Lrq8CNiO}1rvmqagfK1};5WL`1Z3JtusVX~H(O_QyPxylzIGrM4()=cl3$=d4Q zGTEA#>n6J>=6RE?i}``co)dG!WS7LeV6w|%UZk|_iWYrI{D$~#lWl6k%O<-j<`t7& z6Z5LEd!6e*Lw=UO3GU!O|K_K$J2w5xyYj^R4ZxLS+@w5Io+Q6zRv&|b_rcd7OvYGzQUuSRs%x*QTy;jwa8`X`!8W(ean@P7HC7VU5edCVsxKPo)Wch5Ul zAFhigNiWpj&OhY`wB;twi*A#;QOH?VptH^4pt(VG-QE_@ySV9qiQdd7Iy<*oO zAIen~;Qm}3IlqOOvp5H2g|^dq*(;Pqb?KlCPzz(lvy5ktavbB_>li30+C-aCJGwCk zwk`(G0~;(fAh*FUG$ONg26Q}@ZZJr$E&MFQupr7@YOhTigXC`^w9%>T^C0su!7I;- z2}Fdr@7~5DGni~ga!~G>k4)(&V5p@iETeK(nHBOPdfQsVnqE#}N8ib%W{#tm}@H|&L9gsf2 zv=g2MY#DDDloasq0nfKpWC4tt8MfFDc)`oGsK=ztYVPJ-IOxWx5&{h|kbT8zag>)X zPDevujQW+id4{rbVa@5I$3-F0z~lD#&`ER_G|O47$0@63n6l<*{`;}! z)x25l!#VO+^*unajjf*r!52w-j~FDFGp>RVa1eTCFyLl|0k4v$F`)9H%t7i>^e*2M zgQ7iz?a7(XSg)=e(}P#_cRT5qPHFl(Ie3~;=FZUja8_L^J5ODv*`V%Nk9jUQ&BMv? zpzof+P?^T$eDSpS9dVaqH{=(MkvUF>@gbNhqi&K%aX-9qGA&SpddLhqC1h75ZW`lB zby#;=27evLE!~h?Xi76yrqVUEkhbj4F;-+>^<03ye^aZKLHBmiFr^E-fqs-LVYPbUPRNrL-I?KcS(*b zZdokZUx6&FGH*VW%6+%*AF-#>c>AmZGGy{#pOGnFlWsMhG{BgRG$GE?YJvi)mRMy3 zEr@3*W~jxY3P{G^@#45vobN}kU_$UCP*l7jBqD5#nQ=YBtpxakQB9+RHvSBrMdeFB zy8n-Aqbh1AF`ltVF2$4_Hd@>j17rgubBT4u3!8>D!QeSLSW=Vs!O5MaW**#~-k@jH zQnu3p@G>$}(5vF&uWNE5{etog`qF&LM+5yP^-uD_o_ILzsN4A=*I`#250imIeat#E zj&V~z>Z2L%Ofq?S083?ilSIa^^eiQQ#=aAp$Vr&SbxG}xhEBH?D~sb*(sFtG8VNJI zrO8=dCG8s|{MEz0MY2P}`;`3!$*)O%LqhMfOhxv65WYV{&R3UN-go4DtfQOwfl3dq z|EKx(N~?*#rS-MeGXCnK_--$^ms?A%rLX}x7`GBGq&!P4@_%hlr*ku$#|N}hxmUZ^ IUTQc02ke02hyVZp literal 0 HcmV?d00001 diff --git a/Versuchstag-4/sensor_test.py b/Versuchstag-4/sensor_test.py new file mode 100755 index 0000000..4617439 --- /dev/null +++ b/Versuchstag-4/sensor_test.py @@ -0,0 +1,42 @@ +#!/usr/bin/python + +#from smbus import SMBus +import smbus +import time + +bus = smbus.SMBus(1) # 1 indicates /dev/i2c-1 + +address_SRF_v = 0x70 # Addresse vorderer Ultraschallsensor +address_SRF_h = 0x71 # Addresse hinterer Ultraschallsensor + +#Messung starten und Messwert in cm +bus.write_byte_data(address_SRF_v, 0x00, 0x51) +bus.write_byte_data(address_SRF_h, 0x00, 0x51) + +#Wartezeit von 70 ms +time.sleep(0.07) +# Messwert abholen (vorderer Ultraschallsensor) +range_High_Byte = bus.read_byte_data(address_SRF_v, 0x02) #hoeherwertiges Byte +range_Low_Byte = bus.read_byte_data(address_SRF_v, 0x03) #niederwertiges Byte +# Lichtwert abholen (vorderer Ultraschallsensor) +light_v = bus.read_byte_data(address_SRF_v, 0x01) + +print(range_High_Byte) +print(range_Low_Byte) +print(light_v) + +#Address Infrarot +address_IR = 0x4f +#Messwert Abholen +distance_IR = bus.read_byte(address_IR) + +print('infrared ' + str(distance_IR)) + +#Address Kompass +address_COM = 0x60 +#Messwert abholen +bear_High_Byte = bus.read_byte_data(address_COM, 2) #hoeherwertiges Byte +bear_Low_Byte = bus.read_byte_data(address_COM, 3) #niederwertiges Byte + +print(bear_High_Byte) +print(bear_Low_Byte) diff --git a/Versuchstag-4/servo_ctrl.py b/Versuchstag-4/servo_ctrl.py new file mode 100644 index 0000000..f2b6f98 --- /dev/null +++ b/Versuchstag-4/servo_ctrl.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +####################################################################### +# Aufgabe 1.3 # +####################################################################### + +import gpio_class + +def write(servo, pulse): + gpio_class.write(servo, pulse) + +class Motor(object): + + PWM_PIN = 1 # GPIO pin 11 + min_pulse = 100 #ms -> -11 m/s + max_pulse = 200 #ms -> 11 m/s + servo = None + __is_active = False + v_max = 11.0 + + + def __init__(self, servo): + self.servo = servo + + def set_speed(self, speed): + if abs(speed) > self.v_max: + speed = self.v_max + if speed == 0: + self.__is_active = False + else: + self.__is_active = True + + pulse = 150 + ((speed / self.v_max) * ((self.max_pulse - self.min_pulse)/2)) + write(self.servo, pulse) + + def stop(self): + self.set_speed(0) + + # Aufgabe 1d + def is_active(self): + return self.__is_active + +class Steering(object): + + PWM_PIN = 2 # GPIO pin 12 + min_pulse = 115 # -45 + max_pulse = 195 # 45 + servo = None + angle_max = 45 + + def __init__(self, servo): + self.servo = servo + + def set_angle(self, angle): + if abs(angle) > self.angle_max: + angle = self.angle_max + + pulse = 155 + ((angle / self.angle_max) * ((self.max_pulse - self.min_pulse)/2)) + write(self.servo, pulse) + + def stop(self): + self.set_angel(0) diff --git a/Versuchstag-4/servo_ctrl.pyc b/Versuchstag-4/servo_ctrl.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6488514e3379ef0d05be5fd855861b6f0c0e122b GIT binary patch literal 2360 zcmbtV+lmuG5UrWXCY!x@UoTH0iUdUWK@kKMFDUq6SbD`vUYhKrjk9JmVY+u!SV2(m z4}9@+eDQz$06nKV$toync9O1C_e^)yoH})qeOq35_c6D*jIRv8w=n!Ym>#}~3`9C` zQuzQUkzOV)mFIA3TzN0@tdmJ^Zn9dRuGYAFz16@;#dlooJcY}_D0eaZF_<8-naHll zZX)kfNf33tmEcCZ#b?6;On+3AHXn4o4|ABls*2#^T~58Lc1pc5+8%hL**sK(OQSc2@tPQ(Atlkn9+si3a?W}2i8~m64aP+% zU{k&%0Z65T7oL|+U0g#t^8~8X9HZ1(AVLIiQF@9{XGwYuU0D{h-eT;6Aqu>{6klQb z7`V>gn!?816t-nJKns{ztj-2 z8Zv+;^ac*<$O>v&DCo6b|tR zU?f>dmiS4V>DeS_i8-cR;A;>o?Ny*3`-it9B-%>mAm-6yva@8TWD4cz9QIFmFiD2L z$^-U#Oy(C#vW52-UHfBFB&I)3q1_@zW1Hf$WT z#2w0+a_F>-hQ}LbX-Iifry*qK5Dg*TgG{}DR~80hMAf=_T2H2*teG_zn>9^-Jvdht z!+wq@^&+HqF#K(pKgtb+rmjNMm>6UFJbDV}uX+M8`Bg4dQ#LcmMLLlSl@{vAPjbOX?cy_RR0^#&S)v`- z9ri&RbiVQ=GKR(YUBBzI`|fu=W@VzxQ5CnH5g?s5wESuu{hKoSFNF|2r2jJX`Un{z=h2jTY6+V2EmRV9au3)8)aC ZONN_gjjVlnJ<7;U(!=v~$Z&T2^bcG-j@JMH literal 0 HcmV?d00001 diff --git a/Versuchstag-4/set_value.py b/Versuchstag-4/set_value.py new file mode 100644 index 0000000..b1133f8 --- /dev/null +++ b/Versuchstag-4/set_value.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python2 + +from iot_car import Iot_car +import argparse + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Set pwm value for testing. Aufgabe 4d') + parser.add_argument('--motor', action='store_true', default=False) + parser.add_argument('--steering', action='store_true', default=False) + parser.add_argument('-v', '--value', required=True) + args = parser.parse_args() + car = Iot_car(testmode=False) + if args.motor and args.steering: + print "Wrong usage! Can not set both." + exit(1) + elif args.motor: + car.accelerate(float(args.value)) + elif args.steering: + car.set_angle(float(args.value)) + else: + print "Something went wrong."