= 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. * 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