= Smorgasbord = == Stepper motors == [[Image(http://cdn.instructables.com/F65/M3G8/HMMF4YRG/F65M3G8HMMF4YRG.MEDIUM.jpg, align=right, width=128)]]Stepper motors move in small, discrete steps and are useful for a wide range of precision positioning. They used to be used in mechanical disk drives (soooo 1990s) to position the disk's head at the desired track. 3D printers use stepper motors to position their extrusion heads and platforms accurately. The team has a number of BYJ48 (small 5v 4-phase) stepper motors with ULN2003 driver boards for you to experiment with. Each step is 1/64th of a rotation. **Exercise**: follow [http://www.instructables.com/id/BYJ48-Stepper-Motor/ this instructable] to connect a stepper motor to your Arduino and control it. == IR Proximity Sensors == [[Image(http://s3.electrodragon.com/wp-content/uploads/2013/05/InfraredIR-Obstacle-Avoidance-Sensor-ModuleAdjust-Distance-350x350.jpg, align=right, width=128)]] * [http://blog.whatgeek.com.pt/arduino/keyesir-obstacle-avoidance-sensor/ IR proximity sensors] provide a very inexpensive way to detect objects at a fixed distance. You configure the sensing distance with a potentiometer. The module then outputs a 1 if an object is closer than that or a 0 if not. IR sensors are useful because they are very inexpensive and require very little processing power (no distance calculation is needed). **Exercise**: Ask a mentor for an IR proximity sensor and connect it to your Arduino. Use the IR sensor as a proximity warning (e.g. to keep your robot away from walls) == Serial Communications == * [https://www.arduino.cc/en/Reference/Serial Serial communications] note: requires a [http://www.gearbest.com/development-boards/pp_139898.htm TTL-to-RS-232 adapter] - ask a mentor. * [https://www.arduino.cc/en/Tutorial/SoftwareSerialExample Software Serial] (aka bit-banging) [[Image(https://hackadaycom.files.wordpress.com/2009/09/officespace.jpg?w=270, align=right, title=wrong way to bit-bang)]] - Serial interfaces use a small number of wires (usually 3) to carry information between devices. The information is encoded as a sequence of digital bits (high or low voltages) sent sequentially at a fixed, mutually agreed rate. Your Arduino has a hardware serial interface that can be used to send information to your desktop computer and receive information from it. You can, for example, display debug output or give your Arduino a command prompt. **Exercise**: send information (e.g. distance as measured by an ultrasonic rangefinder) to your desktop computer using a TTL-to-RS232 serial converter and software on your PC such as PuTTY. == LCD Displays == [[Image(http://www.dfrobot.com/wiki/images/thumb/e/e8/I2C_LCD1602_TOY0046.jpg/400px-I2C_LCD1602_TOY0046.jpg, align=right, width=128)]] For low power portable information output, it's hard to beat LCD displays. The team has a small number of LCD-1602 display modules which can display 16 characters x 2 lines of text. It is amazing how helpful it is on an embedded system (like a robot) to have a status display. If you add a few buttons, you have a powerful, built-in user interface; printers often use a 2-line LCD with 4 buttons for configuration and status. These displays run on +5v which your Arduino can supply and use the industry standard HD44780 controller. Programming the LCD controller can be complex, but fortunately Arduino provides libraries to make it a breeze. == IR Remote Control == [[Image(http://ecx.images-amazon.com/images/I/21WjXmdTpGL.jpg, align=right, width=128)]] Most remote controls use LEDs that emit infra-red light. They use a technique called On-Off Keying (OOK) which turns an infra-red LED on and off 38000 times per second (38kHz). When the LED is active (turning on and off at 38kHz), a '1' is being transmitted. When the LED is turned off, a '0' is being transmitted. An IR receiver detects this signal by filtering out all signals that are *not* changing at 38kHz; the receiver output goes high when a 38kHz signal is being received and low otherwise. You can (and should) read about this [https://learn.sparkfun.com/tutorials/ir-communication here]. The team has a set of IR receivers that you can connect to your Arduino. If you're clever, you can then use your favorite TV remote control to direct your mini-bot! You can learn more about how to do this using this [http://www.instructables.com/id/The-Easiest-Way-to-Use-Any-IR-Remote-with-Ardiuno/?ALLSTEPS instructable]. == Other Topics == * LEDs and speakers for input * Speaker as microphone [http://www.circuitstoday.com/speaker-to-microphone-converter-circuit transistor preamp] * !OpAmps 101 [https://www.youtube.com/watch?v=7FYHt5XviKc EEVBlog tutorial] * Capacitors, Inductors, and Resonance * [http://www.robotshop.com/blog/en/lidar-lite-laser-rangefinder-simple-arduino-sketch-of-a-180-degree-radar-15284 LIDAR] [http://myrobotlab.org/content/lidar-lite-distance-measurement-and-creating-point-cloud Point Cloud tutorial] * 6 or 9DOF sensors