3 ARDUINO BOARD 3.1 Specs and interface The Arduino Uno is a microcontroller board based on the ATmega328 .It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a 16 MHz ceramic resonator, a USB connection, a power jack, an ICSP header, and a reset button. It contains everything needed to support the microcontroller; simply connect it to a computer with a USB cable or power it with an AC-to-DC adapter or battery to get started. The Uno differs from all preceding boards in that it does not use the FTDI USB-to-serial driver chip. Instead, it features the Atmega16U2 programmed as a USB-to-serial converter. Specs: - Microcontroller ATmega328 - Operating Voltage 5V - Input Voltage (recommended) 7-12V - Input Voltage (limits) 6-20V - Digital I/O Pins 14 (of which 6 provide PWM output) Internet based smart home robot Page 16 ch3 ARDUINO BOARD - Analog Input Pins 6 - DC Current per I/O Pin 40 mA - DC Current for 3.3V Pin 50 mA - Flash Memory 32 KB (ATmega328) of which 0.5 KB used by boot loader - SRAM 2 KB (ATmega328) - EEPROM 1 KB (ATmega328) - Clock Speed 16 MHz Power The Arduino Uno can be powered via the USB connection or with an external power supply. The power source is selected automatically. External (non-USB) power can come either from an AC-to-DC adapter (wall-wart) or battery. The adapter can be connected by plugging a 2.1mm center-positive plug into the board's power jack. Leads from a battery can be inserted in the Gnd and Vin pin headers of the POWER connector. The board can operate on an external supply of 6 to 20 volts. If supplied with less than 7V, however, the 5V pin may supply less than five volts and the board may be unstable. If using more than 12V, the voltage regulator may overheat and damage the board. The recommended range is 7 to 12 volts. The power pins are as follows: VIN. The input voltage to the Arduino board when it's using an external power source (as opposed to 5 volts from the USB connection or other regulated power source). You can supply voltage through this pin, or, if supplying voltage via the power jack, access it through this pin. 5V.This pin outputs a regulated 5V from the regulator on the board. The board can be supplied with power either from the DC power jack (7 12V), the USB connector (5V), or the VIN pin of the board (7-12V). Internet based smart home robot Page 17 ch3 ARDUINO BOARD Supplying voltage via the 5V or 3.3V pins bypasses the regulator, and can damage your board. We don't advise it. 3V3. A 3.3 volt supply generated by the on-board regulator. Maximum current draw is 50 mA. GND. Ground pins. IOREF. This pin on the Arduino board provides the voltage reference with which the microcontroller operates. A properly configured shield can read the IOREF pin voltage and select the appropriate power source or enable voltage translators on the outputs for working with the 5V or 3.3V. Input and Output Each of the 14 digital pins on the Uno can be used as an input or output, using pin Mode (), digital Write (), and digital Read () functions. They operate at 5 volts. Each pin can provide or receive a maximum of 40 mA and has an internal pull-up resistor (disconnected by default) of 20-50 ohms. In addition, some pins have specialized functions: Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to the corresponding pins of the ATmega8U2 USB-to-TTL Serial chip. External Interrupts: 2 and 3. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attach Interrupt () function for details. PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analog Write () function. SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication using the SPI library. LED: 13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off. The Uno has 6 analog inputs, labeled A0 through A5, each of which provide 10 bits of resolution (i.e. 1024 different values). By default they measure from ground to 5 volts, though is it possible to change the upper end of their range using the AREF pin and the analog Reference () function. Additionally, some pins have specialized functionality: TWI: A4 or SDA pin and A5 or SCL pin. Support TWI communication using the Wire library. There are a couple of other pins on the board: Internet based smart home robot Page 18 ch3 ARDUINO BOARD AREF. Reference voltage for the analog inputs. Used with analog Reference (). Reset. Bring this line LOW to reset the microcontroller. Typically used to add a reset button to shields which block the one on the board. The Arduino Uno has a number of facilities for communicating with a computer, another Arduino, or other microcontrollers. The ATmega328 provides UART TTL (5V) serial communication, which is available on digital pins 0 (RX) and 1 (TX). An ATmega16U2 on the board channels this serial communication over USB and appears as a virtual com port to software on the computer. The '16U2 firmware uses the standard USB COM drivers, and no external driver is needed. However, on Windows, an .inf file is required. The Arduino software includes a serial monitor which allows simple textual data to be sent to and from the Arduino board. The RX and TX LEDs on the board will flash when data is being transmitted via the USB-to-serial chip and USB connection to the computer (but not for serial communication on pins 0 and 1). A Software Serial library allows for serial communication on any of the Uno's digital pins. The ATmega328 also supports I2C (TWI) and SPI communication. The Arduino software includes a Wire library to simplify use of the I2C bus; see the documentation for details. For SPI communication, use the SPI library. FIGURE 3.1 SHOWS THE ARDUINO UNO BOARD Internet based smart home robot Page 19 ch3 ARDUINO BOARD FIGURE 3.1 THE ARDUINO UNO BOARD Figure 3.2 shows the arduino interface on a PC FIGURE 3.2 ARDUINO INTERFACE Internet based smart home robot Page 20 ch3 ARDUINO BOARD 3.2 At mega 328P 3.2.1 Overview High Performance, Low Power Atmel®AVR® 8-Bit Microcontroller - Advanced RISC Architecture 131 Powerful Instructions – Most Single Clock Cycle Execution 32 x 8 General Purpose Working Registers Fully Static Operation Up to 20 MIPS Throughput at 20MHz On-chip 2-cycle Multiplier Peripheral Features - Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode - One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode - Real Time Counter with Separate Oscillator - Six PWM Channels - 8-channel 10-bit ADC in TQFP and QFN/MLF package Temperature Measurement - 6-channel 10-bit ADC in PDIP Package Temperature Measurement - Programmable Serial USART - Master/Slave SPI Serial Interface - Byte-oriented 2-wire Serial Interface (Philips I2C compatible) - Programmable Watchdog Timer with Separate On-chip Oscillator - On-chip Analog Comparator - Interrupt and Wake-up on Pin Change Internet based smart home robot Page 21 ch3 ARDUINO BOARD 3.2.3 Block diagram: FIGURE 3.3 ATMEGA 328P BLOCK DIAGRAM 3.2.4 External interrupt The External Interrupts are triggered by the INT0 and INT1 pins or any of the PCINT23...0 pins. Observe that, if enabled, the interrupts will trigger even if the INT0 and INT1 or PCINT23...0 pins are configured as outputs. This feature provides a way of generating a software interrupt. The pin Internet based smart home robot Page 22 ch3 ARDUINO BOARD change interrupt PCI2 will trigger if any enabled PCINT[23:16] pin toggles. The pin change interrupt PCI1 will trigger if any enabled PCINT[14:8] pin toggles. The pin change interrupt PCI0 will trigger if any enabled PCINT[7:0] pin toggles. The PCMSK2, PCMSK1 and PCMSK0 Registers control which pins contribute to the pin change interrupts. Pin change interrupts on PCINT23...0 are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode. The INT0 and INT1 interrupts can be triggered by a falling or rising edge or a low level. This is set up as indicated in the specification for the External Interrupt Control Register A – EICRA. When the INT0 or INT1 interrupts are enabled and are configured as level triggered, the interrupts will trigger as long as the pin is held low. The external interrupt was used here on pin2 to monitor the change of the square pulse coming from the wheel encoder, so whenever a change in the pulse occurs, an interrupt occurs on pin2 and an ISR(interrupt service routine is called and executed) which will be discussed later on in the encoders operation section. 3.3 Analog feedback and encoders operation A rotary encoder , figure 3.3, also called a shaft encoder, is an electromechanical device that converts the angular position or motion of a shaft or axle to an analog or digital code. There are two main types: absolute and incremental (relative). The output of absolute encoders indicates the current position of the shaft, making them angle transducers. The output of incremental encoders provides information about the motion of the shaft, which is typically further processed elsewhere into information such as speed, distance, and position. Rotary encoders are used in many applications that require precise shaft unlimited rotation—including industrial controls, robotics, special purpose photographic lenses, computer input devices (such as optomechanical mice and trackballs), controlled stress rheometers, and rotating radar platforms. Internet based smart home robot Page 23 ch3 ARDUINO BOARD FIGURE 3.4 ABSOLUTE ROTARY ENCODER Optical absolute encoders The optical encoder's disc is made of glass or plastic with transparent and opaque areas. A light source and photo detector array reads the optical pattern that results from the disc's position at any one time. This code can be read by a controlling device, such as a microprocessor or microcontroller to determine the angle of the shaft. The absolute analog type produces a unique dual analog code that can be translated into an absolute angle of the shaft (by using a special algorithm). Magnetic absolute encoders The magnetic encoder uses a series of magnetic poles (2 or more) to represent the encoder position to a magnetic sensor (typically magnetoresistive or Hall Effect). The magnetic sensor reads the magnetic pole positions. Internet based smart home robot Page 24 ch3 ARDUINO BOARD This code can be read by a controlling device, such as a microprocessor or microcontroller to determine the angle of the shaft, similar to an optical encoder. The absolute analog type produces a unique dual analog code that can be translated into an absolute angle of the shaft (by using a special algorithm). Sine wave encoder A variation on the Incremental encoder is the sine wave encoder. Instead of producing two quadrature square waves, the outputs are quadrature sine waves (a sine and a cosine). By performing the arctangent function, arbitrary levels of resolution can be achieved. In our case, when connected to an oscilloscope, a sine wave showed, so the encoders of the Sankyo motor is a sine wave encoder, this created a problem when reading the encoders with the microcontroller interrupt pin. The sine wave signal was too small (100 mv) for the microcontroller to notice the change from high to low or low to high, so a conditioning circuit was constructed to modify the signal so as to obtain the desired wave form. 2 circuits were proposed, either a comparator followed by an OPAMP, this will convert the sine wave to a square wave then the OP-AMP will amplify the signal to be easily read by the micro controller ,or a frequency to voltage converter followed by the OP-AMP so the frequency of the sine wave will be converted to a voltage range that can be monitored and tailored to the application. 3.4 Interface with the main controller As stated earlier, the Arduino can interface easily with any other device through USB interface to offer flexibility and speed. The main controller in our case is a laptop due to the lack of platforms that interface with the Kinect sensor, so the best available main controller that can provide both connectivity assurance and speed as well as the internet connection was a PC or a laptop(for mobility). Internet based smart home robot Page 25