The script IR_Remote_Control.py makes your cyber:bot drive in whatever direction you send it — even into walls. If you have a Ping))) sensor, you can give your 'bot a bit of self-preservation behavior.
Additional parts needed:
- Ping))) Ultrasonic Distance Sensor (#28015)
- 2.2 k-ohm resistor from your robot's Electronic Component Pack
- Jumper wires
The Ping))) sensor can go directly into the breadboard.
- Add the Ping))) sensor to the cyber:bot and connect its signal pin to P8, as shown below. You may need to re-position the IR receiver, but that is fine as long as its signal pin still connects to P10.
The script # IR_Remote_Control_with_Ping.py is just an expansion of the original. Up top, it adds from ping import *. Then, it takes the entire contents of the while True: loop and wraps it in a nested conditional while loop. This inner loop only executes while (ping(8).distance('cm')) > 15:. If that condition is not true, meaning you have driven your cyber:bot close too an object, some new lines of code at the bottom of the conditional loop make the cyber:bot express its surprise and turn away until the obstacle is no longer detected.
- Try it!
# IR_Remote_Control_with_Ping.py from cyberbot import * from tv_remote import * from ping import * wL = 0 wR = 0 img = Image.HAPPY bot(22).tone(2000, 300) while True: while (ping(8).distance('cm')) > 15: num = ir(10).remote() if num == 1: wL = 0 wR = -75 img = Image.ARROW_SE elif num == 2: wL = 75 wR = -75 img = Image.ARROW_S elif num == 3: wL=75 wR=0 img=Image.ARROW_SW elif num == 4: wL=-75 wR=-75 img=Image.ARROW_E elif num == 5: wL=0 wR=0 img=Image.HAPPY elif num == 6: wL=75 wR=75 img=Image.ARROW_W elif num == 7: wL=0 wR=75 img=Image.ARROW_NE elif num == 8: wL=-75 wR=75 img=Image.ARROW_N elif num == 9: wL=-75 wR=0 img=Image.ARROW_NW display.show(img) bot(18).servo_speed(wL) bot(19).servo_speed(wR) display.show(Image.SURPRISED) bot(18).servo_speed(-50) bot(19).servo_speed(-50) bot(22).tone(500, 1000)