Want to keep learning?

This content is taken from the Raspberry Pi Foundation & National Centre for Computing Education's online course, Teaching Physical Computing with Raspberry Pi and Python. Join the course to learn more.
A prototyped robot buggy, being held by the team who created it

Creating a physical computing project

Over the past two weeks of the course, you have acquired a set of physical computing skills. This week, you are going to use those skills to create a physical computing project, using your imagination to design and plan a solution to a real-world problem.

The computing cycle comes back around

Illustration of a circular process, showing the computing stages: input, storage, process, and output

The first step is to remind yourself of the computing cycle in its entirety, as you will have to incorporate each step into your project. In the following sections, I will pose some questions that will help you when you are planning your project this week.


Any project you create will have to include some method of providing input.

A group of makers posing for a picture to be input to their computing project

When designing your system, you should consider the following:

How will my device interact with the world?

A physical computing project should involve some interaction with the physical world. This can happen in one of two ways: the device can automatically gather data about the environment and react to it, or it will require manual interactions from a user. You have used components in both of these categories: a button is a manual input and sensors are automatic.

Your project may have both manual and automatic inputs, as long as it has some way of interacting with the world. Ask yourself:

What inputs would best suit my system?

For the beginning of your project I want you to keep it simple, and you should think about which input is most appropriate.

Ask yourself whether your chosen input will prevent anyone from using the device. It is good to think about accessibility when designing your system. Using a couple of inputs may help, so that someone who might struggle with one input can use another. If you have a button, it might be a good idea to also have a physical indicator for the button, such as a raised arrow, which will allow someone who is visually impaired to find it.


Some programs you write will require you to store files, or you may not need to store anything directly. Just like the Hello World program you saw earlier, some programs will handle the storage portion for you. Either way it would still be beneficial to ask yourself the following when creating your project:

What type of data will I need to store?


You will have to create some tasks, and program them so that the inputs your system receives result in the correct output. Some of the steps in your processing may not impact the actual output directly, but may be necessary steps that are needed to arrive at that output — for example, providing credentials to access Twitter. When you design the program, you need to plan out both of these types of task.

What parts of the processing does the user need to see?

For each step that your program will take, it is useful to think about whether your user wants or needs to see the output of that processing. For example, in a photo booth that posts pictures to Twitter when a photo is taken, your user will probably want to see the photo and also to have the opportunity to stop it being sent.

What parts of the processing will the user NOT see?

There will also be some parts that the user does not need to see. For the Twitter photo booth, the user does not need to see the program logging in to Twitter. This is a piece of code that will take some time to create, but it will not be directly experienced by the user at all.


The final part to consider is the output; some of these outputs will have become apparent from the last questions. If there is something the user should see, you have to output it. It is important to think about the accessibility of outputs, just like inputs. As far as you can, you should try to create a project that can be used by everybody.

A girl and her father watching an output on a computer screen

What do I want my user to experience?

The outputs of your system should present the information from your processing in a meaningful way, and the best way to design them is to think first and foremost of the user experience. This means that you should add prompts and messages that let your user know when things have happened, as there is nothing worse than not knowing if the project is working.

The seed of your idea

Hopefully these questions have got your imagination going. In a couple of steps’ time you are going to share some of your ideas for projects. To prepare, consider the following questions.

  • What real-world problem would you like to address?
  • What project are you going to make to help resolve it?

Don’t share them here; we will be collecting all your ideas in a later step.

Share this article:

This article is from the free online course:

Teaching Physical Computing with Raspberry Pi and Python

Raspberry Pi Foundation