About This Specialization
Design, create, and deploy a fun IoT device using Arduino and Raspberry Pi platforms.
This Specialization covers embedded systems, the Raspberry Pi Platform, and the Arduino environment for building devices that can control the physical world. In the final Capstone Project, you’ll apply the skills you learned by designing, building, and testing a microcontroller-based embedded system, producing a unique final project suitable for showcasing to future employers. Please note that this specialization does not offer discussion forums.
Introduction to the Internet of Things and Embedded Systems
About the Course
The explosive growth of the “Internet of Things” is changing our world and the rapid drop in price for typical IoT components is allowing people to innovate new designs and products at home. In this first class in the specialization you will learn the importance of IoT in society, the current components of typical IoT devices and trends for the future. IoT design considerations, constraints and interfacing between the physical world and your device will also be covered. You will also learn how to make design trade-offs between hardware and software. We’ll also cover key components of networking to ensure that students understand how to connect their device to the Internet. Please note that this course does not include discussion forums.
Upon completing this course, you will be able to:
1. Define the term “Internet of Things”
2. State the technological trends which have led to IoT
3. Describe the impact of IoT on society
4. Define what an embedded system is in terms of its interface
5. Enumerate and describe the components of an embedded system
6. Describe the interactions of embedded systems with the physical world
7. Name the core hardware components most commonly used in IoT devices
8. Describe the interaction between software and hardware in an IoT device
9. Describe the role of an operating system to support software in an IoT device
10. Explain the use of networking and basic networking hardware
11. Describe the structure of the Internet
12. Describe the meaning of a “network protocol”
13. Explain MANETs and their relation to IoT
What Is the Internet of Things (IoT)?
The Internet of Things (IoT) is a popular buzzword right now, but unlike many fads which have come and gone, the Internet of Things describes an important trend which is having lasting effects on society at large. The term itself, “Internet of Things”, is used to mean a variety of ideas, depending on the motivation and background of the speaker. This course will start by providing a definition of the term. We will talk about how various trends have enabled the Internet of Things, and how it changes the way design is performed. We will also discuss some of the ramifications that IoT is having on society today.
In Module 1, we introduced the concept of the Internet of Things at a high level, defining the term and outlining its implications. In this module we explore some of the details involved in the design and implementation of IoT devices. Unlike traditional computer-based systems, IoT devices are “embedded” within other devices in order to provide enhanced functionality without exposing the user to the complexities of a computer. The users interact with the device in a natural way, similar to their interactions with any other objects in the world. In this way, an embedded system has an interface that conforms to the expectations and needs of the users. Establishing a natural interface requires that the embedded system interface with the physical world directly through sensors, which read the state of the world, and actuators, which change the state of the world. In this module we will discuss the structure of embedded systems and describe these interactions with the physical world.
Hardware and Software
IoT devices are implemented using both hardware and software components. Dedicated hardware components are used to implement the interface with the physical world, and to perform tasks which are more computationally complex. Microcontrollers are used to execute software that interprets inputs and controls the system. This module discusses the roles of both the hardware and software components in the system. The functions of common hardware components are described and the interface between the software and hardware through the microcontroller is explained. IoT devices often use an operating system to support the interaction between the software and the microcontroller. We will define the role of an operating system in an IoT device and how an IoT operating system differs from a standard one.
Networking and the Internet
An important aspect of the Internet of Things is that devices are networked in some way, and often connected to the Internet. Networking enables devices to communicate with other IoT devices and larger cloud-based servers. IoT devices can often be thought of as small parts of a much larger collective system which includes large servers based in the cloud. This module will introduce the basics of networking and the Internet protocol in particular. Eventually, most IoT devices are connected to the Internet, so understanding the protocols associated with the Internet is important to the design of IoT devices. We will also introduce the concept of a Mobile Ad Hoc Network, or MANET, which describes small, local networks of IoT devices.
The Arduino Platform and C Programming
About the Course
The Arduino is an open-source computer hardware/software platform for building digital devices and interactive objects that can sense and control the physical world around them. In this class you will learn how the Arduino platform works in terms of the physical board and libraries and the IDE (integrated development environment). You will also learn about shields, which are smaller boards that plug into the main Arduino board to perform other functions such as sensing light, heat, GPS tracking, or providing a user interface display. The course will also cover programming the Arduino using C code and accessing the pins on the board via the software to control external devices. Please note that this course does not include discussion forums.
Upon completing this course, you will be able to:
1. Outline the composition of the Arduino development board
2. Describe what it means to program the board’s firmware
3. Read board schematics
4. Install Arduino IDE
5. Describe what “shields” are and how they are used
6. Specify the role of libraries in the use of shields
7. Compile and run a program
8. Name C Variables and Types
9. Name common C operators
10. Use conditionals and loops
11. Explain functions, their definition and invocation
12. Explain the implications of global variables
13. Undertake the Arduino build process
14. Describe the role of the tools behind the IDE
15. Describe how to invoke functions in classes
16. Explain the structure of an Arduino sketch
17. Access the pins of the Arduino
18. Differentiate between digital and analog pin
19. Debug embedded software
20. Explain the importance of controllability and observability in the debugging process
21. Describe common debugging architectures for embedded systems
22. Explain how the UART Serial communication protocol works
23. Describe how the Arduino Serial library performs serial communication
This module provides an introduction to the Arduino environment which is composed of three things: the Arduino board, the Arduino IDE, and the Arduino-compatible shields together with their libraries. We first investigate the board, discussing all of its main components, inputs, and outputs. We discuss how each component is used and we examine the board schematic to see how they are connected. We then discuss the Arduino Integrated Development Environment (IDE) which is used primarily to write, compile, and upload code. We survey the interface of the IDE and discuss how to install and use it. We also examine the use of shields to extend the functionality of an Arduino-based system. We discuss how shield libraries provide a useful abstraction to facilitate programming.
This module covers the basics of the C programming language which will be used to write code for the Arduino. The course first covers basic syntax, variables, and types. Most of the basic C operators are presented. Conditional statements (if, switch) and loops (while, for) are described. The concept of functions is presented together with how to define and call functions. Creation and use of global variables is explained.
This module describes the composition of an Arduino program, or sketch, and the process by which it is compiled and uploaded. The Arduino IDE is a user interface for the software tools which actually compile and upload the program. We outline the use of these tools in the build process. We describe the basic structure of a sketch, including the use of the setup() and loop() functions. The main interface of an Arduino is through its pins, so we describe how to access those pins from a sketch.
This module is an introduction on debugging embedded software on an Arduino. We discuss the basic debugging requirements: controllability and observability. The debugging environment available for an Arduino UNO is limited, so we describe how to use the UART communication protocol to gain controllability and observability. We present the use of the Serial library to communicate with the Arduino through the serial monitor.
Interfacing with the Arduino
About the Course
Arduino senses the environment by receiving inputs from add-on devices such as sensors, and can control the world around it by adjusting lights, motors, and other actuators. In this class you will learn how and when to use the different types of sensors and how to connect them to the Arduino. Since the external world uses continuous or analog signals and the hardware is digital you will learn how these signals are converted back-and-forth and how this must be considered as you program your device. You’ll also learn about the use of Arduino-specific shields and the shields software libraries to interface with the real world. Please note that this course does not include discussion forums.
IoT devices involve a combination of software and hardware. This module provides background on the basics of hardware design and wiring needed to build useful circuits. This module describes the functions of basic passive components and describes how to use them in simple circuits. This module also describes how to wire circuits together using a breadboard. The goal of this module is to enable students to design and implement the circuits they need to interact with basic sensors and actuators.
This module introduces sensors and actuators and discusses how to interface with them. We’ll examine different classes of sensors and actuators. For each type of sensor/actuator, we’ll examine the circuitry needed to interface with it. Additionally, we’ll take a look at the Arduino code needed to communicate with the sensors and actuators.
This module introduces the use of software libraries with an Arduino sketch. One of the best aspects of the Arduino environment is that the use of good libraries allows a programmer to use complicated hardware without dealing with the complexity. The Arduino environment is supported by many libraries and this module examines the use of several of the more common libraries that allow the use of hardware peripherals in the microprocessor.
In this module we’ll examine Arduino shields and how they are used to extend the capabilities of an Arduino-based system. Shields are printed circuit boards that are stacked on top of the Arduino together with libraries that enable the new hardware to be used through an Arduino sketch. We’ll describe the benefits of shields and their basic construction as well as the use of libraries in interfacing with each shield. This module also describes how to connect your IoT device to the Internet using shields. We focus on an Ethernet shield in order to establish a wired network connection, and a WiFi shield to establish a wireless connection.
The Raspberry Pi Platform and Python Programming for the Raspberry Pi
About the Course
The Raspberry Pi is a small, affordable single-board computer that you will use to design and develop fun and practical IoT devices while learning programming and computer hardware. In addition, you will learn how to set up up the Raspberry Pi environment, get a Linux operating system running, and write and execute some basic Python code on the Raspberry Pi. You will also learn how to use Python-based IDE (integrated development environments) for the Raspberry Pi and how to trace and debug Python code on the device. Please note that this course does not include discussion forums.
This module describes the basic functionality the Raspberry Pi B+ board. I’ll describe how to set up the board, configure it, and use it. An important point differentiating Raspberry Pi from the Arduino platform which we have talked about previously is that Raspberry Pi uses an operating system. I’ll describe some of the implications of an operating system on the behavior of the Raspberry Pi as an IoT device.
The Raspberry Pi is typically installed with a Linux-based operating system, so we present the basics of Linux and its use. We describe some of the main features including navigating the file system and managing processes. We describe the text-based user interface through the shell and we overview the graphic user interface which is the default with the Raspian Linux distribution.
We present the basics of the Python programming language to prepare you for programming on the Raspberry Pi. Many languages can be used but Python is the most convenient for the Raspberry Pi because convenient APIs are provided for basic operations such as controlling the pins. Python is a powerful language with useful features that we will present so that you can use these features to control the Raspberry Pi.
In this module we describe how to communicate with devices through the pins of the Raspberry Pi. We examine the RPi.GPIO library which provides Python functions used to access the pins. We discuss how to set up the pins, apply digital voltages, and generate Pulse Width Modulated signals. We also describe the Tkinter Python library and show how it can be used to access pins through a graphic user interface.
Interfacing with the Raspberry Pi
About the Course
The Raspberry Pi uses a variety of input/output devices based on protocols such as HDMI, USB, and Ethernet to communicate with the outside world. In this class you will learn how to use these protocols with other external devices (sensors, motors, GPS, orientation, LCD screens etc.) to get your IoT device to interact with the real world. Most physical devices use analog signals; however computer hardware is digital so in this class you will learn how these signals are converted back-and-forth and how this must be considered as you program your device. The basic design of a sensor-actuator system will also be covered. You will also learn how to build more sophisticated hardware systems using Raspberry Pi expansion boards to create fun and exciting IoT devices. Please note that this course does not include discussion forums.
This module presents the use of the Raspberry Pi to connect to the Internet, from a user perspective. The first way to use the Raspberry Pi as a networked device is to use it as a general-purpose computer rather than as a programmed IoT device. Using networking with a Raspberry Pi in this way is similar to using the network from any Linux machine, and we present its use in this module. We also present the standard Internet protocols that must be understood in order to develop network programs.
This module introduces the networking socket interface that is used to transfer data across the network programmatically. An essential aspect of the Internet of Things is for your IoT device to send and receive data on the Internet, and the socket interface is key to enabling that. We describe how to use socket in Python to act as both a client and a server.
This module focuses on how to have your Raspberry Pi interact with online services through the use of public APIs and SDKs. Many interesting and useful services are available in the cloud and this module describes how to write code that accesses those services. We define what an Application Programming Interface (API) is and what a Software Development Kit (SDK) is. We present some API examples and we show the use of the Twitter API in detail using the Twython package.
In this module we show how to use the Raspberry Pi to interface with more complicated sensors and actuators. We explore the use of the Raspberry Pi camera module and the use of a servo. The Raspberry Pi camera module is used through the picamera library, which we describe. Servos are controlled by generating pulse width modulated signals and varying their pulse width using library functions.
Programming for the Internet of Things Project
About the Capstone Project
In this Capstone course, you will design a microcontroller-based embedded system. As an option, you can also build and test a system. The focus of your project will be to design the system so that it can be built on a low-cost budget for a real-world application. To complete this project you’ll need to use all the skills you’ve learned in the course (programming microcontrollers, system design, interfacing, etc.). The project will include some core requirements, but leave room for your creativity in how you approach the project. In the end, you will produce a unique final project, suitable for showcasing to future potential employers.
Note that for the three required assignments you do NOT need to purchase software and hardware to complete this course. There is an optional fourth assignment for students who wish to build and demonstrate their system using an Arduino or Raspberry Pi. Please also note that this course does not include discussion forums.
Upon completing this course, you will be able to:
1. Write a requirements specification document
2. Create a system-level design
3. Explore design options
4. Create a test plan
This section will answer questions you might have about the project assignment, the grading rubric, and what you can expect in the upcoming weeks together.
Capstone Design, Part 1
This module will assist you in selecting an idea for your Capstone project. There are many variables to consider in this decision so it’s important to know the parameters and how they impact your choice. Your decision will then drive the content of the very first step in your Capstone project — preparing a requirements specification.
Capstone Design, Part 2
With the requirements specification out of the way, it’s time to turn your attention to the system-level design of your project. This module will walk you through the constraints your project will need to satisfy. You’ll also be informed about how to consider alternatives to your design.
Capstone Design, Part 3
Naturally testing is a key component of any technical design. This module will walk you through the important aspects of a test plan for your design.
Capstone Design, Part 4 (OPTIONAL)
In this final module, you will have the option of actually building out and then demonstrating your final project. This module is optional because it requires you to have the necessary equipment.
Let’s wrap up our time together as we have traveled through the specialization.
Reading · Keep the Momentum Going!
https://www.coursera.org/specializations/iotGet eBook Info Here