Basics of open source embedded development board (

62
Basics of open source embedded Development Board (Arduino) Prepared By: D. Y. Vankawala

Transcript of Basics of open source embedded development board (

  1. 1. Prepared By: D. Y. Vankawala
  2. 2. What is a Microcontroller (C, MCU) Computer on a single integrated chip Processor (CPU) Memory (RAM / ROM / Flash) I/O ports (USB, I2C, SPI, ADC) Common microcontroller families: Intel: 4004, 8008, etc. Atmel: AT and AVR Microchip: PIC ARM: (multiple manufacturers) Used in: Cellphones, Toys Household appliances Cars Cameras
  3. 3. Arduino Overview The Arduino microcontroller is an easy to use yet powerful single board computer that has gained considerable traction in the hobby and professional market. The Arduino is open-source, which means hardware is reasonably priced and development software is free. The Arduino project was started in Italy to develop low cost hardware for interaction design. The Arduino hardware comes in several flavors. In the United States, Sparkfun (www.sparkfun.com) is a good source for Arduino hardware. With the Arduino board, you can write programs and create interface circuits to read switches and other sensors, and to control motors and lights with very little effort.
  4. 4. Continue The Arduino programming language is a simplified version of C/C++. If you know C, programming the Arduino will be familiar. If you do not know C, no need to worry as only a few commands are needed to perform useful functions. An important feature of the Arduino is that you can create a control program on the host PC, download it to the Arduino and it will run automatically. Remove the USB cable connection to the PC, and the program will still run from the top each time you push the reset button. Remove the battery and put the Arduino board in a closet for six months. When you reconnect the battery, the last program you stored will run. This means that you connect the board to the host PC to develop and debug your program, but once that is done, you no longer need the PC to run the program.
  5. 5. The ATmega328P Microcontroller (used by the Arduino) AVR 8-bit RISC architecture Available in DIP package Up to 20 MHz clock 32kB flash memory 1 kB SRAM 23 programmable I/O channels Six 10-bit ADC inputs Three timers/counters Six PWM outputs
  6. 6. What is Arduino Not? It It It It It is is is is is not not not not not a a a a a chip (IC) board (PCB) company or a manufacturer programming language computer architecture (although it involves all of these things...)
  7. 7. So what is Arduino? Its a movement, not a microcontroller: Founded by Massimo Banzi and David Cuartielles in 2005 Based on Wiring Platform, which dates 2003 Open-source hardware platform Open source development environment to Easy-to learn language and libraries (based on Wiring language) Integrated development environment (based on Processing programming environment) Available for Windows / Mac / Linux
  8. 8. What is Arduino? Arduino is a popular open source single board microcontroller. It is designed to make the process of using electronics in multidisciplinary projects more accessible. This idea began in Italy and its initial purpose was to make STUDENT design projects more affordable than other prototyping projects at the time.
  9. 9. Continue Open Source Hardware, you can make your own board, or buy one. Cheap, easily available. Open Source Software. Very widespread, many projects openly available. Extra HW (shields) available.
  10. 10. The Many Flavors of Arduino Arduino Arduino Arduino Arduino Arduino Arduino Arduino Arduino Uno Leonardo LilyPad Mega Nano Mini Mini Pro BT
  11. 11. Arduino-like Systems Cortino (ARM) Xduino (ARM) LeafLabs Maple (ARM) BeagleBoard (Linux) Wiring Board (Arduino predecessor)
  12. 12. Arduino Add-ons (Shields) TFT Touch Screen Data logger Motor/Servo shield Ethernet shield Audio wave shield Cellular/GSM shield WiFi shield ...many more
  13. 13. Where to Get an Arduino Board Purchase from worldwide) online vendor (available ... Sparkfun Adafruit DFRobot or build your own PC board Solderless breadboard http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard
  14. 14. Different types of Arduinos Arduino Mega 2560 Arduino LilyPad Arduino Uno DIY Arduino Boarduino Kit
  15. 15. Arduino Duemilanove (2009)
  16. 16. Arduino Uno
  17. 17. Arduino Mega 2560
  18. 18. Original Arduino with RS-232
  19. 19. Arduino on breadboard
  20. 20. Arduino Nano
  21. 21. Ardweeny
  22. 22. Other Hardware Choices-Sheilds Xbee Shield The Xbee shield allows an Arduino board to communicate wirelessly using Zigbee. The module can communicate up to 100 feet indoors or 300 feet outdoors (with line-of-sight). It can be used as a serial/usb replacement or you can put it into a command mode and configure it for a variety of broadcast and mesh networking options. The Xbee shield was created in collaboration with Libelium, who developed it for use in their SquidBee motes (used for creating sensor networks). Adafruit Servo/Stepper/DC Motor shield A shield that can control 2 hobby servos and up to 2 unipolar/bipolar stepper motors or 4 bi-directional DC motors. Battery Shield A shield from Liquidware that connects to the back of the Arduino, with a USB- rechargable lithium ion battery that can power an Arduino for 14-28 hours depending on the circuit Liquidware TouchShield OLED touch screen shield.
  23. 23. Continue Adafruit Wave shield Plays any size 22KHz audio files from an SD memory card for music, effects and interactive sound art Adafruit GPS & Datalogging shield Connects up a GPS module and can log location, time/date as well as sensor data to an SD memory flash card. Adafruit XPort/Ethernet shield Allows use of an XPort module for connecting to the Internet as a client or server.
  24. 24. Continue
  25. 25. Continue Liquidware TouchShield OLED touch screen shield. Adafruit Servo/Stepper/DC Motor shield A shield that can control 2 hobby servos and up to 2 unipolar/bipolar stepper motors or 4 bi-directional DC motors.
  26. 26. Bluetooth to TTL 5V module
  27. 27. USB to TTL module
  28. 28. RS-232 to TTL module
  29. 29. Pin Diagram and functions
  30. 30. Pins on Arduino Starting clockwise from the top center: Analog Reference pin (orange) Digital Ground (light green) Digital Pins 2-13 (green) Digital Pins 0-1/Serial In/Out - TX/RX (dark green) - These pins cannot be used for digital i/o (digitalRead and digitalWrite) if you are also using serial communication (e.g. Serial.begin). Reset Button - S1 (dark blue) In-circuit Serial Programmer (blue-green) Analog In Pins 0-5 (light blue) Power and Ground Pins (power: orange, grounds: light orange) External Power Supply In (9-12VDC) - X1 (pink) Toggles External Power and USB Power (place jumper on two pins closest to desired supply) - SV1 (purple) USB (used for uploading sketches to the board and for serial communication between the board and the computer; can be used to power the board) (yellow)
  31. 31. Digital Pins In addition to the specific functions listed below, the digital pins on an Arduino board can be used for general purpose input and output via the pinMode(), digitalRead(), and digitalWrite() commands. Each pin has an internal pull-up resistor which can be turned on and off using digitalWrite() (w/ a value of HIGH or LOW, respectively) when the pin is configured as an input. The maximum current per pin is 40 mA.
  32. 32. Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. On the Arduino Diecimila, these pins are connected to the corresponding pins of the FTDI USB-to-TTL Serial chip. On the Arduino BT, they are connected to the corresponding pins of the WT11 Bluetooth module. On the Arduino Mini and LilyPad Arduino, they are intended for use with an external TTL serial module (e.g. the Mini-USB Adapter). 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 attachInterrupt() function for details. PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function. On boards with an ATmega8, PWM output is available only on pins 9, 10, and 11. Reset: 7. (Arduino BT-only) Connected to the reset line of the bluetooth module. SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). These pins support SPI communication, which, although provided by the underlying hardware. It allow serial communication with another interface by connecting it serially. LED: 13. On the Diecimila and LilyPad, 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.
  33. 33. Analog Pins In addition to the specific functions listed below, the analog input pins support 10-bit analog-to-digital conversion (ADC) using the analogRead() function. Most of the analog inputs can also be used as digital pins: analog input 0 as digital pin 14 through analog input 5 as digital pin 19. Analog inputs 6 and 7 (present on the Mini and BT) cannot be used as digital pins. I2C: 4 (SDA) and 5 (SCL). Support I2C (TWI) communication using the Wire library
  34. 34. Power Pins VIN (sometimes labelled "9V"). 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. Note that different boards accept different input voltages ranges, please see the documentation for your board. Also note that the LilyPad has no VIN pin and accepts only a regulated input. 5V. The regulated power supply used to power the microcontroller and other components on the board. This can come either from VIN via an on-board regulator, or be supplied by USB or another regulated 5V supply. 3V3. (Diecimila-only) A 3.3 volt supply generated by the on- board FTDI chip. GND. Ground pins.
  35. 35. Other Pins AREF. Reference voltage for the analog inputs. It provide the analog reference voltage for analog to digital conversion Reset. (Diecimila-only) Bring this line LOW to reset the microcontroller. Typically used to add a reset button to shields which block the one on the board.
  36. 36. Block Diagram of arduino
  37. 37. Function of Each block USB Plug: By using this plug we can download hex file of our program by connecting it with PC. It also provide supply to arduino board. This USB plug is connected with FTDI Chip internally FTDI Chip: This chip is nothing but voltage level converter chip. This chip is used to convert USB voltage level to TTL level and vice versa. Digital I/O and PWM section: This section is used as for general purpose input output usage. By using this section we can perform digital input and output functions. In this section some pins are also used as PWM output pins. It is used for PWM based application like servo motors.
  38. 38. Continue Serial Tx and Rx Section: These two pins are used for serial communication in arduino. It is internally connected with USB plug through FTDI chip. Power Supply: Power supply section provide different voltage level to different part of arduino board. This part contain bridge rectifier and voltage regulator. AVR Atmega CPU: This block is the heart of the controller. Generally Atmega 8, Atmega 16, Atmega 32, Atmega 328 controller are used in arduino board. This block execute all the fuctions that written in arduino program. SPI Interface section: This section is used for serial peripheral interfacing. Power Pins section: This section include various voltage level pins including ground pins. Analog input section: We know that Atmega 8 CPU has inbuilt 6 channel 10 bit ADC. This ADC can convert analog data from analog pin into digital. So, for taking analog value for digital conversion we have to use this section.
  39. 39. Circuit Diagram of Arduino
  40. 40. The Arduino Environment
  41. 41. Board Type
  42. 42. Serial Port / COM Port
  43. 43. The Environment
  44. 44. Parts of the Sketch
  45. 45. Comments Comments can be anywhere Comments created with // or /* and */ // is used for single line comment. /* */ is used for multiline comments Comments do not affect code You may not need comments, but think about the community!
  46. 46. //- Single line comment /* */ - Multiline comment { } used to define a block of code that starts and ends. ; - used to define the end of a line of code. Programming Symbols
  47. 47. Math Operators = (assignment) makes something equal to something else. For example, x = 10*2, thus x = 20. % (modulo) this gives the remainder when one number is divided by another. For example 12 % 10 gives 2. + (addition) - (subtraction) * (multiplication) / (division)
  48. 48. Comparison Operators These are used to make logical comparisons. == (equal to) - For example 12==10 is FALSE and 12 ==12 is TRUE. != (not equal to) - For example 12!=10 is TRUE and 12!=12 is FALSE. < (less than) > (greater than)
  49. 49. Control Structures These execute code based on CONDITIONS. Here are just a few. if(condition) { } else if (condition) { } else(condition) { } This will execute the code between the curly braces if the condition is true, and if not test the condition of the else if. If that is false , the else code will execute. for (int i =0; i < #repeats; i ++) { } Used when you would like to repeat a line of code a specific # of times. Often called a FOR LOOP.
  50. 50. Activity 1: LED Blink Load the Blink example (FileExamplesBasicsBlink) Use pin 13 as digital output Set output high (+5V) Wait 1000 milliseconds Set output low (0V) Compile, then upload the program Congratulations! you are now blinkers! void setup() { // initialize the digital pin as an output. // Pin 13 has an LED connected on most Arduino boards: pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(13, LOW); // set the LED off delay(1000); // wait for a second }
  51. 51. Now connect your own LED Anatomy of an LED: Notes: Resistor is needed to limit current Resistor and LED may be interchanged (but polarity of LED is important) Pin 13 is special: has built-in resistor and LED Change program and upload http://www.wikipedia.org/
  52. 52. Aside: Using a Solderless Breadboard Connected together 300 mils Connected together
  53. 53. Example: Using a Solderless Breadboard
  54. 54. Experimenting Change the blink rate how fast can the LED blink (before you no longer perceive the blinking?) can How would you make the LED dimmer? (...without changing the resistor?)
  55. 55. Digital Input: Reading and Buttons Switches Writing HIGH to an input pin: enables an internal pull-up resistor Turn on/off LED based on switch Pin 12 reads Pin 12 reads LOW when switch is closed HIGH when switch is open (pull-up) Without the internal pull-up resistor, unconnected digital inputs could read either high or low void setup() { pinMode(11, OUTPUT); // Use pin 11 for digital out pinMode(12, INPUT); // Use pin 12 for digital input digitalWrite(12, HIGH); // Enable pullup resistor } void loop() { boolean state; state = digitalRead(12); // read state of pin 12 digitalWrite(11, state); // set state of pin 11 (LED) delay(100); // wait for a 1/10 second }
  56. 56. Activity 2: Seven-Segment Display Write a that program that counts from 0 9 and displays the result on a seven- segment LED display to Consider writing a function: void writeDigit(int n) that writes a single digit
  57. 57. Seven-Segment Display Table Useful: bitRead(x,n) Get the value of the Example: nth bit of an integer x bitRead(0x7E,7); // returns 1 (see table above) Digit ABCDEFG A B C D E F G 0 07E on on on on on on off 1 030 off on on off off off off 2 06D on on off on on off on 3 079 on on on on off off on 4 033 off on on off off on on 5 05B on off on on off on on 6 05F on off on on on on on 7 070 on on on off off off off 8 07F on on on on on on on 9 07B on on on on off on on
  58. 58. Serial Communication - Writing IMPORTANT: USB serial communication is shared with Arduino pins 0 and 1 (RX/TX) Initialize serial rate) Example: port for communication (and sets baud Note: Serial.end() command is usually unnecessary, unless you need to use pins 0 & 1 Serial.begin(9600); // 9600 baud Format can be: BIN, HEX, OCT, or an integer specifying the number of digits to display Prints data to the serial Examples: port Serial.print(Hi); Serial.print(78); Serial.print(variable); Serial.print(78,BIN); // // // // print works works a string with with numbers, too variables 1001110will print Same as Serial.print(), but with line-feed Serial.println(val) Serial.print(val), Serial.print(val,fmt) Serial.begin(baud)
  59. 59. Activity 3: Hello World! Serial Monitor: Write an Arduino program that prints the message Hello world to the serial port ...whenever you press a switch/button Use the Serial Monitor to see the output (Ctrl-Shift-M) Try increasing baud rate Make sure this agrees with your program, i.e., Serial.begin(9600);
  60. 60. Program for serial transmission
  61. 61. Serial Communication - Reading Returns the number of bytes Example: if (Serial.available() > 0) data = Serial.read(); } available to be read, if any { To read data from serial port: letter = Serial.read() letters = Serial.readBytesUntil(character, buffer, length) number = Serial.parseInt() number = Serial.parseFloat() Serial.available()