Human Following Robot Using Arduino and Ultrasonic Sensor

Submitted by Gourav Tak on

Working of Human Following Robot Using Arduino

In recent years, robotics has witnessed significant advancements, enabling the creation of intelligent machines that can interact with the environment. One exciting application of robotics is the development of human-following robots. These robots can track and follow a person autonomously, making them useful in various scenarios like assistance in crowded areas, navigation support, or even as companions. In this article, we will explore in detail how to build a human following robot using Arduino and three ultrasonic sensors, complete with circuit diagrams and working code. Also, check all the Arduino-based Robotics projects by following the link.

The working of a human following robot using Arduino code and three ultrasonic sensors is an interesting project. What makes this project particularly interesting is the use of not just one, but three ultrasonic sensors. This adds a new dimension to the experience, as we typically see humans following a robot built with one ultrasonic, two IR, and one servo motor.  This servo motor has no role in the operation and also adds unnecessary complications. So I removed this servo and the IR sensors and used 3 ultrasonic sensors. With ultrasonic sensors, you can measure distance and use that information to navigate and follow a human target. Here’s a general outline of the steps involved in creating such a robot.

 

 

Components Needed for Human Following Robot Using Arduino

  • Arduino UNO board ×1

  • Ultrasonic sensor ×3

  • L298N motor driver ×1

  • Robot chassis

  • BO motors ×2

  • Wheels ×2

  • Li-ion battery 3.7V ×2

  • Battery holder ×1

  • Breadboard

  • Ultrasonic sensor holder ×3

  • Switch and jumper wires

Human Following Robot Using Arduino Circuit Diagram

Here is the schematic diagram of a Human-following robot circuit.

Arduino Human Following Robot Circuit Diagram

This design incorporates three ultrasonic sensors, allowing distance measurements in three directions front, right, and left. These sensors are connected to the Arduino board through their respective digital pins. Additionally, the circuit includes two DC motors for movement, which are connected to an L298N motor driver module. The motor driver module is, in turn, connected to the Arduino board using its corresponding digital pins. To power the entire setup, two 3.7V li-ion cells are employed, which are connected to the motor driver module via a switch.

Overall, this circuit diagram showcases the essential components and connections necessary for the Human-following robot to operate effectively.

arduino human following robot circuit

Circuit Connection:

Arduino and HC-SR04 Ultrasonic Sensor Module:

HC-SR04 Ultrasonic sensor Module

  • Connect the VCC pin of each ultrasonic sensor to the 5V pin on the Arduino board.

  • Connect the GND pin of each ultrasonic sensor to the GND pin on the Arduino board.

  • Connect the trigger pin (TRIG) of each ultrasonic sensor to separate digital pins (2,4, and 6) on the Arduino board.

  • Connect the echo pin (ECHO) of each ultrasonic to separate digital pins (3,5, and 7) on the Arduino board.

Arduino and Motor Driver Module:

  • Connect the digital output pins of the Arduino (digital pins 8, 9, 10, and 11) to the appropriate input pins (IN1, IN2, IN3, and IN4) on the motor driver module.

  • Connect the ENA and ENB pins of the motor driver module to the onboard High state pin with the help of a female header.

  • Connect the OUT1, OUT2, OUT3, and OUT4 pins of the motor driver module to the appropriate terminals of the motors.

  • Connect the VCC (+5V) and GND pins of the motor driver module to the appropriate power (Vin) and ground (GND) connections on the Arduino.

Power Supply:

  • Connect the positive terminal of the power supply to the +12V input of the motor driver module.

  • Connect the negative terminal of the power supply to the GND pin of the motor driver module.

  • Connect the GND pin of the Arduino to the GND pin of the motor driver module.

Human Following Robot Using Arduino Code

Here is a simple 3 Ultrasonic sensor-based Human following robot using Arduino Uno code that you can use for your project.

Ultrsonic Sensors on Robot

This code reads the distances from three ultrasonic sensors (‘frontDistance’, ‘leftDistance’, and ‘rightDistance’). It then compares these distances to determine the sensor with the smallest distance. If the smallest distance is below the threshold, it moves the car accordingly using the appropriate motor control function (‘moveForward()’, ‘turnLeft()’, ‘turnRight()’). If none of the distances are below the threshold, it stops the motor using ‘stop()’.

In this section, we define the pin connections for the ultrasonic sensors and motor control. The S1Trig, S2Trig, and S3Trig, variables represent the trigger pins of the three ultrasonic sensors, while S1Echo, S2Echo, and S3Echo, represent their respective echo pins.

The LEFT_MOTOR_PIN1, LEFT_MOTOR_PIN2, RIGHT_MOTOR_PIN1, and RIGHT_MOTOR_PIN2 variables define the pins for controlling the motors.

The MAX_DISTANCE and MIN_DISTANCE_BACK variables set the thresholds for obstacle detection.

// Ultrasonic sensor pins
#define S1Trig 2
#define S2Trig 4
#define S3Trig 6
#define S1Echo 3
#define S2Echo 5
#define S3Echo 7
// Motor control pins
#define LEFT_MOTOR_PIN1 8
#define LEFT_MOTOR_PIN2 9
#define RIGHT_MOTOR_PIN1 10
#define RIGHT_MOTOR_PIN2 11
// Distance thresholds for obstacle detection
#define MAX_DISTANCE 40
#define MIN_DISTANCE_BACK 5

Make sure to adjust the values of ‘MIN_DISTANCE_BACK’ and ‘MAX_DISTANCE’ according to your specific requirements and the characteristics of your robot.

The suitable values for ‘MIN_DISTANCE_BACK’ and ‘MAX_DISTANCE’ depend on the specific requirements and characteristics of your human-following robot. You will need to consider factors such as the speed of your robot, the response time of the sensors, and the desired safety margin

Here are some general guidelines to help you choose suitable values.

MIN_DISTANCE_BACK’ This value represents the distance at which the car should come to a stop when an obstacle or hand is detected directly in front. It should be set to a distance that allows the car to back safely without colliding with the obstacle or hand. A typical value could be around 5-10 cm.

MAX_DISTANCE’ This value represents the maximum distance at which the car considers the path ahead to be clear and can continue moving forward. It should be set to a distance that provides enough room for the car to move without colliding with any obstacles or hands. If your hand and obstacles are going out of this range, the robot should be stop. A typical value could be around 30-50 cm.

These values are just suggestions, and you may need to adjust them based on the specific characteristics of your robot and the environment in which it operates.

These lines set the motor speed limits. ‘MAX_SPEED’ denotes the upper limit for motor speed, while ‘MIN_SPEED’ is a lower value used for a slight left bias. The speed values are typically within the range of 0 to 255, and can be adjusted to suit our specific requirements.

// Maximum and minimum motor speeds
#define MAX_SPEED 150
#define MIN_SPEED 75

The ‘setup()’ function is called once at the start of the program. In the setup() function, we set the motor control pins (LEFT_MOTOR_PIN1, LEFT_MOTOR_PIN2, RIGHT_MOTOR_PIN1, RIGHT_MOTOR_PIN2) as output pins using ‘pinMode()’ . We also set the trigger pins (S1Trig, S2Trig, S3Trig) of the ultrasonic sensors as output pins and the echo pins (S1Echo, S2Echo, S3Echo) as input pins. Lastly, we initialize the serial communication at a baud rate of 9600 for debugging purposes.

void setup() {
  // Set motor control pins as outputs
  pinMode(LEFT_MOTOR_PIN1, OUTPUT);
  pinMode(LEFT_MOTOR_PIN2, OUTPUT);
  pinMode(RIGHT_MOTOR_PIN1, OUTPUT);
  pinMode(RIGHT_MOTOR_PIN2, OUTPUT);
  //Set the Trig pins as output pins
  pinMode(S1Trig, OUTPUT);
  pinMode(S2Trig, OUTPUT);
  pinMode(S3Trig, OUTPUT);
  //Set the Echo pins as input pins
  pinMode(S1Echo, INPUT);
  pinMode(S2Echo, INPUT);
  pinMode(S3Echo, INPUT);
  // Initialize the serial communication for debugging
  Serial.begin(9600);
}

This block of code consists of three functions (‘sensorOne()’, ‘sensorTwo()’, ‘sensorThree()’) responsible for measuring the distance using ultrasonic sensors.

The ‘sensorOne()’ function measures the distance using the first ultrasonic sensor. It's important to note that the conversion of the pulse duration to distance is based on the assumption that the speed of sound is approximately 343 meters per second. Dividing by 29 and halving the result provides an approximate conversion from microseconds to centimeters.

The ‘sensorTwo()’ and ‘sensorThree()’ functions work similarly, but for the second and third ultrasonic sensors, respectively.

// Function to measure the distance using an ultrasonic sensor
int sensorOne() {
  //pulse output
  digitalWrite(S1Trig, LOW);
  delayMicroseconds(2);
  digitalWrite(S1Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(S1Trig, LOW);
  long t = pulseIn(S1Echo, HIGH);//Get the pulse
  int cm = t / 29 / 2; //Convert time to the distance
  return cm; // Return the values from the sensor
}
//Get the sensor values
int sensorTwo() {
  //pulse output
  digitalWrite(S2Trig, LOW);
  delayMicroseconds(2);
  digitalWrite(S2Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(S2Trig, LOW);
  long t = pulseIn(S2Echo, HIGH);//Get the pulse
  int cm = t / 29 / 2; //Convert time to the distance
  return cm; // Return the values from the sensor
}
//Get the sensor values
int sensorThree() {
  //pulse output
  digitalWrite(S3Trig, LOW);
  delayMicroseconds(2);
  digitalWrite(S3Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(S3Trig, LOW);
  long t = pulseIn(S3Echo, HIGH);//Get the pulse
  int cm = t / 29 / 2; //Convert time to the distance
  return cm; // Return the values from the sensor
}

In this section, the ‘loop()’ function begins by calling the ‘sensorOne()’, ‘sensorTwo()’, and ‘sensorThree()’ functions to measure the distances from the ultrasonic sensors. The distances are then stored in the variables ‘frontDistance’, ‘leftDistance’, and ‘rightDistance’.

Next, the code utilizes the ‘Serial’ object to print the distance values to the serial monitor for debugging and monitoring purposes.

void loop() {
  int frontDistance = sensorOne();
  int leftDistance = sensorTwo();
  int rightDistance = sensorThree();
  Serial.print("Front: ");
  Serial.print(frontDistance);
  Serial.print(" cm, Left: ");
  Serial.print(leftDistance);
  Serial.print(" cm, Right: ");
  Serial.print(rightDistance);
  Serial.println(" cm");

In this section of code condition checks if the front distance is less than a threshold value ‘MIN_DISTANCE_BACK’ that indicates a very low distance. If this condition is true, it means that the front distance is very low, and the robot should move backward to avoid a collision. In this case, the ‘moveBackward()’ function is called.

if (frontDistance < MIN_DISTANCE_BACK) {
    moveBackward();
    Serial.println("backward");

If the previous condition is false, this condition is checked. if the front distance is less than the left distance, less than the right distance, and less than the ‘MAX_DISTANCE’ threshold. If this condition is true, it means that the front distance is the smallest among the three distances, and it is also below the maximum distance threshold. In this case, the ‘moveForward()’ function is called to make the car move forward.

else if (frontDistance < leftDistance && frontDistance < rightDistance && frontDistance < MAX_DISTANCE) {
    moveForward();
    Serial.println("forward");

If the previous condition is false, this condition is checked. It verifies if the left distance is less than the right distance and less than the ‘MAX_DISTANCE’ threshold. This condition indicates that the left distance is the smallest among the three distances, and it is also below the minimum distance threshold. Therefore, the ‘turnLeft()’ function is called to make the car turn left.

else if (leftDistance < rightDistance && leftDistance < MAX_DISTANCE) {
    turnLeft();
    Serial.println("left");

If neither of the previous conditions is met, this condition is checked. It ensures that the right distance is less than the ‘MAX_DISTANCE’ threshold. This condition suggests that the right distance is the smallest among the three distances, and it is below the minimum distance threshold. The ‘turnRight()’ function is called to make the car turn right.

else if (rightDistance < MAX_DISTANCE) {
    turnRight();
    Serial.println("right");

If none of the previous conditions are true, it means that none of the distances satisfy the conditions for movement. Therefore, the ‘stop()’ function is called to stop the car.

 else {
    stop();
    Serial.println("stop");

In summary, the code checks the distances from the three ultrasonic sensors and determines the direction in which the car should move based on the 3 ultrasonic sensors with the smallest distance.

 

Important aspects of this Arduino-powered human-following robot project include:

  • Three-sensor setup for 360-degree human identification
  • Distance measurement and decision-making in real-time
  • Navigation that operates automatically without human assistance
  • Avoiding collisions and maintaining a safe following distance

 

 

Technical Summary and GitHub Repository 

Using three HC-SR04 ultrasonic sensors and an L298N motor driver for precise directional control, this Arduino project shows off the robot's ability to track itself. For simple replication and modification, the full source code, circuit schematics, and assembly guidelines are accessible in our GitHub repository. To download the Arduino code, view comprehensive wiring schematics, and participate in the open-source robotics community, visit our GitHub page.

Code Schematics Download Icon

 

Frequently Asked Questions

⇥ How does an Arduino-powered human-following robot operate?
Three ultrasonic sensors are used by the Arduino-powered human following robot to determine a person's distance and presence. After processing this data, the Arduino manages motors to follow the identified individual while keeping a safe distance.

⇥ Which motor driver is ideal for an Arduino human-following robot?
The most widely used motor driver for Arduino human-following robots is the L298N. Additionally, some builders use the L293D motor driver shield, which connects to the Arduino Uno directly. Both can supply enough current for small robot applications and manage 2-4 DC motors.

⇥ Is it possible to create a human-following robot without soldering?
Yes, you can use motor driver shields that connect straight to an Arduino, breadboards, and jumper wires to construct a human-following robot. For novices and prototyping, this method is ideal.

⇥ What uses do human-following robots have in the real world?
Shopping cart robots in malls, luggage-carrying robots in airports, security patrol robots, elderly care assistance robots, educational demonstration robots, and companion robots that behave like pets are a few examples of applications.

 

Conclusion

This human following robot using Arduino project and three ultrasonic sensors is an exciting and rewarding project that combines programming, electronics, and mechanics. With Arduino’s versatility and the availability of affordable components, creating your own human-following robot is within reach.

Human-following robots have a wide range of applications in various fields, such as retail stores, malls, and hotels, to provide personalized assistance to customers. Human-following robots can be employed in security and surveillance systems to track and monitor individuals in public spaces. They can be used in Entertainment and events, elderly care, guided tours, research and development, education and research, and personal robotics.

They are just a few examples of the applications of human-following robots. As technology advances and robotics continues to evolve, we can expect even more diverse and innovative applications in the future.

Explore Practical Projects Similar To Robots Using Arduino

Explore a range of hands-on robotics projects powered by Arduino, from line-following bots to obstacle-avoiding vehicles. These practical builds help you understand sensor integration, motor control, and real-world automation techniques. Ideal for beginners and hobbyists, these projects bring theory to life through interactive learning.

 Simple Light Following Robot using Arduino UNO

Simple Light Following Robot using Arduino UNO

Today, we are building a simple Arduino-based project: a light-following robot. This project is perfect for beginners, and we'll use LDR sensor modules to detect light and an MX1508 motor driver module for control. By building this simple light following robot you will learn the basics of robotics and how to use a microcontroller like Arduino to read sensor data and control motors.

Line Follower Robot using Arduino UNO: How to Build (Step-by-Step Guide)

Line Follower Robot using Arduino UNO: How to Build (Step-by-Step Guide)

This step-by-step guide will show you how to build a professional-grade line follower robot using Arduino UNO, with complete code explanations and troubleshooting tips. Perfect for beginners and intermediate makers alike, this project combines hardware interfacing, sensor calibration, and motor control fundamentals.

Have any question related to this Article?

How to Install Windows 11 on Raspberry Pi Devices

Submitted by Dharagesh on

If you’ve tinkered with Raspberry Pi boards for a while, you probably know the default choice: Raspberry Pi OS. It’s lightweight, optimised, and works flawlessly for most DIY projects. But what if you could install Windows 11 on Raspberry Pi? That's exactly what I accomplished on my Raspberry Pi 4 and later on the Pi 5 and Pi 3.

That’s exactly what I set out to do on my Raspberry Pi 4 and later on other models like the Pi 5 and Pi 3. Spoiler: it’s not as smooth as running Raspberry Pi OS, but it’s an exciting experiment that transforms your Pi into a tiny Windows PC. In this comprehensive guide, I'll share my complete journey of running Windows 11 ARM on Raspberry Pi using the Windows on Raspberry (WoR) project.

You'll learn everything about Windows 11 on Raspberry Pi 4 performance, Windows 11 on Raspberry Pi 5 setup, and how Raspberry Pi 5 Windows 11 performance compares to older models. Discover a wide range of creative and practical electronics projects on CircuitDigest, including detailed guides for the Raspberry Pi Pico and Raspberry Pi Zero projects and tutorials, perfect for beginners and hobbyists looking to explore embedded systems and IoT applications.

And if you’re someone who wants to dive deeper into the world of Raspberry Pi, whether it’s automation, IoT, robotics, or DIY electronics, you’ll find plenty more hands-on Raspberry Pi tutorials and projects here on Circuit Digest. This Windows 11 installation guide represents just one of many ways to unlock your Pi's potential.

Why Install Windows 11 on Raspberry Pi?

At first, I asked myself the same question. Raspberry Pi OS is fast, stable, and built specifically for the hardware, while Windows 11 is known to be a resource-hungry operating system. Why attempt Windows 11 Raspberry Pi installation at all?

Well, after diving into the project, I realised there are several good reasons to give it a try:

  • Familiar Interface: For many of us, Windows feels like home. If you’re used to the Start menu, File Explorer, and the Microsoft ecosystem, running Windows 11 on Pi makes the transition from a traditional PC to a single-board computer much easier.
  • Windows Software Access: While not everything works, some ARM64-native Windows apps do run. I was able to launch Office tools like Word and Excel, browse with Edge, and even test out lightweight developer tools without needing Linux equivalents. 
  • Experimentation & Learning: This was the biggest reason for me. Running Windows on hardware it was never meant for is like solving a fun puzzle. You learn about ARM architecture, UEFI firmware, and how operating systems boot under the hood.
  • Remote Management with Microsoft Tools: If you’re already working in a Windows environment, things like PowerShell, Remote Desktop, and Microsoft’s developer utilities integrate more seamlessly compared to Linux.
  • A Budget-Friendly Testbed: Raspberry Pi is cheap compared to buying an ARM laptop or Surface device. By running Windows 11 on Pi, I could test ARM-based Windows apps in a low-cost environment before moving them to more powerful hardware.
  • Show-Off Factor: Let’s be honest, there’s something cool about pointing at your tiny Raspberry Pi board and saying: “Yep, that’s Windows 11 running right there.” It’s a perfect conversation starter for tech meetups or classroom demos.
  • Expanding Project Possibilities: Some robotics and electronics engineers may prefer working in Windows. Running it on Pi means you can still connect to GPIO, USB devices, and other interfaces while coding or debugging in a familiar environment.

After completing the installation and testing Windows 11 ARM on Raspberry Pi across multiple models, I discovered several compelling reasons:

Benefits of Running Windows 11 on Raspberry Pi

BenefitDescriptionBest For
Familiar InterfaceWindows Start menu, File Explorer, and Microsoft ecosystem make transitioning from traditional PCs seamless for users unfamiliar with LinuxWindows users
Windows ARM SoftwareAccess to ARM64-native Windows apps including Office 365, Edge browser, and lightweight development tools without Linux alternativesProductivity tasks
Learning ExperienceDeep dive into ARM architecture, UEFI firmware, and operating system boot processes—perfect for understanding Windows internalsEducation
Remote ManagementPowerShell, Remote Desktop, and Microsoft developer utilities integrate seamlessly for Windows-centric workflowsIT professionals
Budget Testing PlatformTest ARM-based Windows applications in a low-cost environment ($35-75) before investing in expensive ARM laptops or Surface devicesDevelopers
Demonstration ValueImpressive conversation starter for tech meetups, classroom demonstrations, and showcasing technical capabilitiesEducators, makers

Even though Windows 11 on Raspberry Pi isn't officially supported and comes with trade-offs, the learning experience and experimentation possibilities make it worthwhile for curious makers and developers.

What You Need to Install Windows 11 on Raspberry Pi

Before you begin the Windows 11 Raspberry Pi installation process, gather the necessary hardware and software. Requirements differ slightly between Raspberry Pi 4 and Pi 5 models.

Windows 11 Raspberry Pi Compatibility

Raspberry Pi ModelMinimum RAMRecommended RAMPerformance RatingBest Use Case
Raspberry Pi 31GBN/A (Slow)Testing only
Raspberry Pi 42GB4GB-8GB(Moderate)Light tasks, browsing
Raspberry Pi 54GB8GB(Good)Office apps, development

Hardware Requirements for Raspberry Pi 4 and Pi 3

Components Quantity

Raspberry Pi board (minimum 2GB RAM, but 4GB is better)

1

MicroSD card (32GB or higher, but an SSD via USB is highly recommended)

1

USB keyboard, mouse, and HDMI display

1

Ethernet adapter or USB Cable (Tethering)

1

Windows PC (Flash and prepare everything)

1

Additional Requirements for Raspberry Pi 5 Windows 11

However, setting up Windows 11 on a Raspberry Pi 5 board requires two separate storage devices,

ComponentQuantityPurpose
Raspberry Pi 5 board14GB or 8GB RAM for optimal Raspberry Pi 5 Windows 11 performance
1GB+ microSD card1To hold UEFI firmware files (separate from Windows storage)
External USB SSD164GB+ for Windows 11 ARM installation (faster than microSD)
Same peripherals as Pi 4Keyboard, mouse, HDMI display, network adapter

Download Windows 11 ARM64 for Raspberry Pi

Unlike installing Windows on a standard PC, you can’t just grab any ISO from Microsoft’s website. For Raspberry Pi, we need the ARM64 build of Windows 11. Instead of the UUP dump, I used the official ESD Image Downloader from the Windows on Raspberry (WoR) project, which makes the process much simpler and more reliable. To install Windows 11 on Raspberry Pi, you need the ARM64 build. I used the official ESD Image Downloader from the Windows on Raspberry (WoR) project, which simplifies the process significantly compared to UUP dump methods.
Here’s how I did it:

Step 1:  How to Download Windows 11 ARM for Raspberry Pi

1. Open your browser and go to the WoR ESD download page.

2. In the Version dropdown, select the latest stable release of Windows 11.

Windows 11 ARM64 ESD Image Downloader showing version, build, architecture and edition selection for Raspberry Pi installation

3. In the Build menu, choose the build you want to install. For me I picked the stable build so I could get the reliable features and security patches.
4. Under Architecture, select ARM64. This is very important; if you choose x64 or x86, it won’t run on Raspberry Pi.

Selecting ARM64 architecture in Windows 11 ESD downloader for Raspberry Pi 4 and Pi 5 compatibility

5. Next, pick the Edition you prefer. For example:

  • Client: Windows 11 Home or Pro
  • Education or Enterprise editions, if you want more features

I went with Windows 11 Home (Client)  ARM64 for testing.

Selecting Windows 11 Home Client ARM64 edition for Raspberry Pi installation

6. Finally, choose your Language (I picked English (United States), but you can pick whichever suits you).

7. After making all these selections, click Download. The tool will fetch the official Windows files directly from Microsoft’s servers and create an ESD package for you.

Downloading Windows 11 ARM64 ESD package from Microsoft servers for Raspberry Pi installation

8. Once downloaded, you can add the ESD file to the WoR Imager in the next step.

At the end of this process, I had a clean, ARM64-compatible Windows 11 image sitting on my PC, ready to flash onto the Raspberry Pi.

Step 2: Install Windows 11 on Raspberry Pi Using WoR Imager

Once I had the Windows 11 ARM64 ESD image ready, the next challenge was to actually get it onto the Raspberry Pi. This is where the WoR Imager tool (Windows on Raspberry Pi Imager) comes in. Think of it as the bridge between the Windows image on your PC and your Raspberry Pi’s storage device.

Here’s exactly how I went through it:

Complete WoR Installation Process

1. First, I downloaded the Windows on Raspberry Pi Imager from the official WoR Project Downloads page.

Downloading Windows on Raspberry Imager tool for installing Windows 11 on Raspberry Pi

2. After extracting the ZIP file, I right-clicked on WoR.exe and selected Run as Administrator.

Running WoR Imager as administrator to install Windows 11 ARM on Raspberry Pi

3. The Welcome screen of WoR Imager popped up. I clicked Next to begin.

WoR Imager welcome screen for Windows 11 Raspberry Pi installation setup

4. On the next screen, WoR asked me to select the storage device.

  • For my Raspberry Pi 4, I used a 64GB microSD card.
  • For my Raspberry Pi 5, I chose an external SSD (recommended for speed).

Selecting storage device (microSD or SSD) for Windows 11 installation on Raspberry Pi

5. After picking the storage, I had to select the device type (Raspberry Pi model).

  • If you’re on Pi 4:  Select Raspberry Pi 4/400.

  • If you’re on Pi 5:  Here’s the trick: you actually need to choose the Raspberry Pi 2/3 option. Choosing Pi 4/400 results in an ACPI BIOS error when booting.

Selecting correct Raspberry Pi device type in WoR Imager for Windows 11 ARM installation

6. Next, WoR asked for the Image file. I clicked the (browse) button and pointed it to the Windows 11 ARM64 ESD/ISO I downloaded earlier.
7. The tool then let me pick which edition of Windows 11 I wanted to install (Home, Pro, etc.). I selected Windows 11 Pro ARM64 for additional features.

Selecting Windows 11 Pro edition for Raspberry Pi ARM installation in WoR Imager

8. WoR then displayed an Installation Overview with my selections, device type, storage device, and image file location. After confirming, I clicked Install, and it prepared the storage device by partitioning, copying files, and setting up the UEFI bootloader.

WoR Imager installation overview showing all settings before flashing Windows 11 to Raspberry Pi
9. Depending on your PC and storage speed, this process can take anywhere from 15 to 45 minutes. I let it run, grabbed a coffee, and came back to see the success message.

WoR Imager progress screen showing Windows 11 ARM installation process on Raspberry Pi storageWoR Imager success screen after completing Windows 11 ARM installation on Raspberry Pi
10. When it was finished, I hit Finish and safely ejected the storage device.

At this stage, my Raspberry Pi storage (microSD/SSD) had Windows 11 ARM fully installed on it. For Raspberry Pi 4 users, you can skip ahead to the boot section. But for Raspberry Pi 5 owners, there’s one extra step: setting up UEFI firmware (which I’ll cover in Step 3). Your Raspberry Pi storage now contains a complete Windows 11 ARM installation. 

Step 3: Configure UEFI Firmware for Raspberry Pi 5 Windows 11

If you’re using a Raspberry Pi 4 or 3, you can skip this step completely. But when I moved to my Raspberry Pi 5, I quickly discovered that things weren’t as straightforward.

The issue is that the WoR installer doesn’t officially support the Pi 5 yet. If you try to boot Windows directly after flashing it with WoR, you’ll most likely be greeted with an ACPI BIOS error and a frozen boot screen. That’s where the UEFI firmware workaround comes in. When testing Windows 11 on Raspberry Pi 5, I encountered a significant obstacle: the WoR installer doesn't officially support Pi 5 yet.

Why Raspberry Pi 5 Needs UEFI Firmware

Here’s how I handled it:

  1. I downloaded the latest Raspberry Pi 5 UEFI firmware package from its official GitHub release page. This is a small collection of boot files that essentially act as a translator, letting the Pi 5 understand how to load Windows 11.
  2. I grabbed a spare microSD card (at least 1GB) and formatted it to FAT32 using Windows’ built-in format tool.
  3. Once the card was ready, I extracted all the UEFI files from the GitHub download and copied them straight onto the root of the microSD card. 
  4. With that done, I inserted the microSD card into the Raspberry Pi 5. This card now acts like a custom BIOS chip, giving the Pi the extra instructions it needs to boot into Windows.
  5. Finally, I connected my external SSD (where I had flashed Windows 11 earlier using WoR) and powered on the Pi 5. This time, instead of the dreaded ACPI error, the UEFI firmware initialised correctly and handed things over to the Windows installer.

The setup is more complex than Pi 4, but it's currently the only way to achieve Raspberry Pi 5 Windows 11 performance testing until WoR adds official Pi 5 support.

Technical Note: The microSD card must remain inserted permanently for Raspberry Pi 5 Windows 11 installations. 

Before installing Windows 11 on a Raspberry Pi 4, there’s one extra step I highly recommend if you’re using a Raspberry Pi 4 or Raspberry Pi 3. Before installing Windows 11 on Raspberry Pi 4 or Pi 3, I strongly recommend updating the bootloader firmware. Updating the bootloader ensures that your Pi can boot cleanly from microSD cards or even from USB drives without weird glitches.

Bootloader Update Process

Here’s what I did:

1. On my Windows PC, I downloaded and launched the Raspberry Pi Imager and selected the board type.

Selecting Raspberry Pi board model in Raspberry Pi Imager for bootloader update

2. I clicked on Choose OS, then scrolled down to Misc utility images → Bootloader.

Navigating to misc utility images in Raspberry Pi Imager for bootloader selectionSelecting bootloader utility in Raspberry Pi Imager for firmware update

3. From there, I picked the boot mode I wanted:

  • SD card boot: If you plan to run Windows 11 from a microSD card.
  • USB boot: If you’re using an external SSD or USB flash drive (which I recommend for performance).

Selecting SD card boot or USB boot mode for Raspberry Pi bootloader update

4. Then I clicked on Choose Storage and selected my microSD card (just a small one is fine, 1GB+ is enough).
5. Finally, I hit Write to flash the new bootloader to the card.

Flashing bootloader update to microSD card for Raspberry Pi firmware update

6. Once the process finished, I inserted the card into my Pi, plugged in the power, and waited.

  • First, the green ACT LED on the board blinked rapidly.

  • Then, the screen connected to my Pi turned solid green; this is the Pi’s way of telling you the bootloader update was successful.

Raspberry pi Boot loader working demonstration

7. After seeing the green screen, I shut down the Pi, removed the bootloader card, and set it aside. Now my Pi was running the latest boot firmware, ready for Windows 11. Your Raspberry Pi now runs the latest boot firmware optimised for Windows 11 on Raspberry Pi 4 installations.

Step 5: Boot Windows 11 on Raspberry Pi

This was the moment I had been waiting for: actually seeing Windows 11 come to life on my Raspberry Pi. After hours of downloading, flashing, and preparing firmware, it was finally time to plug everything in and hit the power button. This is the exciting moment of actually seeing Windows 11 ARM on Raspberry Pi boot for the first time. 

Insert the storage devices 

Raspberry Pi 4/3

I just inserted the microSD card (or SSD if you used one) with Windows 11 flashed WoR.

Raspberry Pi 5

I inserted both: the microSD card with the UEFI firmware and the external SSD containing Windows 11.

First boot screen: When I powered on the Pi, I saw the WoR/UEFI splash screen appear. On the Pi, it took a few extra seconds for the UEFI firmware to initialise, but eventually the Windows installer kicked in.

WoR UEFI splash screen showing during first boot of Windows 11 on Raspberry Pi

 

Raspberry Pi booting Windows 11 ARM with Windows logo and loading animation

Region selection: The Windows installer asked me to choose my region. I picked India, but you can select your country/region from the list.

Windows 11 setup on Raspberry Pi showing region selection screen

Keyboard layout: Next, it asked for a keyboard layout. I went with the US Keyboard, but you can add a layout if needed.

Network connection & Microsoft Account sign-in (…or not): Now, here’s where things got interesting. By default, Microsoft really wants you to sign in with a Microsoft account and stay connected to the internet during setup. They’ve been pushing this more and more in Windows 11, and on a Raspberry Pi, where networking is already a bit tricky, it feels like a roadblock designed just to test your patience. However, for Windows 11 Raspberry Pi installations where networking can be tricky, there's a workaround. Once you have network connectivity, you might want to configure a static IP address on your Raspberry Pi for stable remote access and development work. For comparison, see how Android performs on Raspberry Pi using emteria.OS—another alternative operating system experiment worth exploring.

Windows 11 network connection screen during Raspberry Pi setup with bypass option available

At first, I connected my phone for USB tethering and did it the “official” way, just like Microsoft intended. But then I thought: “Wait, this is a Raspberry Pi project… Do we really need to play by Microsoft’s rules?” Turns out, you don’t!

Here’s the fun workaround:

1. When you’re stuck at the “Let’s connect you to a network” screen, press Shift + F10 on your keyboard. This opens a secret Command Prompt window during the setup process. Yes, right in the middle of Windows Setup.

Command Prompt window opened with Shift+F10 during Windows 11 Raspberry Pi setup for bypassing Microsoft account

2. Type the following command and hit Enter:

OOBE\BYPASSNRO

3. The system will restart once, and when you’re back, voilà, there’s now an option to create a local account without needing any internet connection.

Windows 11 setup showing local account option after bypassing network requirement on Raspberry Pi

It’s almost like pulling the curtain back on Microsoft’s little magic trick. They try so hard to push you online, but one tiny command lets you skip the whole charade. Honestly, it felt like discovering a cheat code in a video game.

Windows 11 device setup screen after successfully bypassing network requirement on Raspberry Pi

So whether you want to do it the “proper Microsoft way” (sign in with a Microsoft account and sync everything) or take the shortcut to a good old-fashioned local account, the choice is yours. I personally went with the bypass; it just felt more “Raspberry Pi hacker style.”

Privacy and personalisation options: The installer walked me through several toggles: location settings, data sharing, diagnostics, etc. I disabled most of them to save resources. Then it tried to upsell me on Microsoft 365 and Game Pass, and I skipped those, too. I disabled most options to conserve Raspberry Pi resources and improve Windows 11 on Raspberry Pi 4 performance.

Windows 11 privacy settings configuration during Raspberry Pi first-time setup

First reboot: After completing all the setup steps, the Pi restarted once more. This time, instead of the installer, the Windows 11 desktop appeared in all its glory. The system even popped up a message saying it created a temporary paging file, which is normal on ARM devices.

Windows 11 preparing your desktop screen during final setup stage on Raspberry PiWindows 11 desktop successfully running on Raspberry Pi showing Start menu and taskbar

And there it was, Windows 11 running on a Raspberry Pi. Seeing the Start menu open on a tiny single-board computer honestly felt surreal. Sure, it wasn’t blazing fast, but it worked. I was able to launch Edge, browse the web, and even type this article draft from within Windows 11 on my Pi. While Raspberry Pi 5 Windows 11 performance isn't blazing fast, it's functional enough for web browsing, Office applications, and light development work.

Reboot Pi Win 11 working demonstration

Limitations of Running Windows 11 on Raspberry Pi

While installing Windows 11 on Raspberry Pi is technically possible and educational, it's important to understand the significant limitations before committing time to this project. 

Raspberry Pi running Windows 11 with USB ethernet adapter showing WiFi limitation workaround

Onboard WiFi

The only thing missing was WiFi, since the chip’s OEM never released Windows ARM drivers. I used a USB-Ethernet adapter or phone tethering instead.

GPIO Pins

Don’t expect to run robotics or electronics projects that rely on GPIO. Windows on Raspberry doesn’t expose these like Raspberry Pi OS does.

HDMI Audio

No sound over HDMI. I had to use a 3.5mm audio jack workaround.

PCIe / Fan Control (Pi 5)

Features like the fan header and PCIe slot weren’t recognized. Still waiting on proper drivers.

Performance Hiccups

Heavy apps like Photoshop (ARM test build) or Visual Studio were either sluggish or crashed outright. Stick to lightweight tools.

For projects requiring GPIO functionality, consider these alternatives: Controlling Raspberry Pi GPIO using MQTT Cloud or getting started with Raspberry Pi for full hardware access.

Pi 4 vs Pi 5 - The Real Difference

On the Raspberry Pi 4 (2GB), Windows felt more like a proof-of-concept. It worked, but you constantly hit memory limits, freezing, and slowdowns. Honestly, I wouldn’t recommend using 2GB unless you’re doing this just for fun. A 4GB or 8GB Pi 4 would perform better.

On the Raspberry Pi 5, the experience was dramatically better. Faster boot, smoother browsing, and fewer hangs. Still not “daily driver” level, but at least usable. With 4GB or 8GB RAM, Windows 11 on Raspberry Pi 4 becomes moderately usable.

Windows 11 Raspberry Pi Performance: Pi 4 vs Pi 5 Comparison

After testing Windows 11 on Raspberry Pi 4 and Windows 11 on Raspberry Pi 5, the performance differences are substantial. Here's my real-world comparison based on extensive hands-on testing. Raspberry Pi 5 Windows 11 performance represents a significant leap forward. The Pi 5's improved CPU, faster memory, and better I/O make Windows 11 genuinely usable for everyday tasks.

MetricRaspberry Pi 4 (2GB)Raspberry Pi 4 (4GB)Raspberry Pi 5 (8GB)
Boot Time (Cold Start)5-6 minutes4-5 minutes1.5-2 minutes
Desktop Responsiveness(Laggy)(Moderate) (Smooth)
Microsoft Edge Launch15-20 seconds10-12 seconds5-7 seconds
Web Browsing (3-5 tabs)Frequent freezingUsable, occasional lagGenerally smooth
Office Apps (Word/Excel)Not recommendedLight documents onlyWorks well
Video Playback (720p)StutteringPlayable with dropsSmooth
Multitasking CapabilityVery limited2-3 apps max5-6 apps comfortably
Overall UsabilityProof-of-concept onlyLight tasks acceptableActually usable

Frequently Asked Questions About Windows 11 on Raspberry Pi

⇥ 1. Can I run Windows 11 on Raspberry Pi 3?
Yes, but it’s painfully slow. A Raspberry Pi 4 or 5 with at least 4GB RAM is highly recommended for usable performance.

⇥ 2. Do I really need to update the bootloader?
Not always, but if you’re on Pi 3 or Pi 4 and your board refuses to boot Windows, updating the bootloader with Raspberry Pi Imager usually fixes it.

⇥ 3. Why doesn’t WiFi work on Windows 11 for Raspberry Pi?
Because the WiFi chip manufacturer never released Windows ARM drivers. Without those, Windows simply can’t talk to the onboard WiFi hardware. Use a USB-Ethernet adapter or phone tethering instead.

⇥ 4. My Pi 5 shows an ACPI BIOS error when booting. What should I do?
That happens if you select the wrong device type in WoR. For Pi 5, always select Raspberry Pi 2/3 in WoR Imager and use the UEFI firmware microSD workaround.

⇥ 5. Can I create a local account instead of using a Microsoft account?
Yes! When stuck at the “Connect to network” screen, press Shift + F10, then type on CMD:

OOBE\BYPASSNRO

Hit Enter, and Windows will restart with the option to create a local account, no Microsoft account required.

⇥ 6. Why does my Pi take so long to boot Windows 11?
That’s normal. Windows 11 is heavy compared to Raspberry Pi OS. Expect around 4-5 minutes on Pi 4 and under 2 minutes on Pi 5.

⇥ 7. Can I use GPIO pins or other Pi hardware in Windows 11?
Not really. Windows doesn’t have drivers or APIs for Raspberry Pi GPIO. If GPIO access is critical, stick with Raspberry Pi OS or Linux.

⇥ 8. Which storage is best: microSD or SSD?
Windows 11 runs much faster from an SSD connected via USB 3. A microSD will work, but expect slower performance and longer boot times. 

Final Thoughts

Running Windows 11 on Raspberry Pi 4 or 5 is like strapping a jet engine onto a bicycle. It works, but it’s clunky, quirky, and not officially supported. Still, it’s one of the most satisfying Pi experiments I’ve done. It’s not the smoothest ride, but if you’re a tinkerer like me, the process itself is worth it. The WoR team has made the impossible possible, and now you can show off Windows 11 running on a credit-card-sized board. To learn how to set up and configure your device, explore this comprehensive tutorial on installing Windows 10 IoT Core on Raspberry Pi.

I tested Windows 11 on Raspberry Pi 4 and Raspberry Pi 5 for a long period of time. Here are my humble thoughts: it's an interesting way to "experiment" and learn about things like ARM architecture, operating systems, and hardware restrictions; however, it's not intended to be a daily driver replacement for Raspberry Pi OS.

This tutorial was created by the Circuit Digest engineering team. Our experts focus on creating practical, hands-on tutorials that help makers and engineers master Raspberry Pi  Projects, Arduino projects, and IoT development projects.

I hope you liked this article and learned something new from it. Share your Windows 11 Raspberry Pi journey in the comments below or use our Circuit Digest forum for a detailed discussion.

Would I use this daily? Probably not. But as a weekend project? Absolutely.

If you try this out, let me know how it went for you. I’d love to hear if you hit the same quirks or discovered new workarounds. 

Raspberry Pi-Based Tutorials

Explore essential Raspberry Pi tutorials covering setup, configuration, and performance enhancement for a wide range of DIY projects.

How to Boot Raspberry Pi from USB without SD Card

How to Boot Raspberry Pi from USB without SD Card

Learn how to boot a Raspberry Pi from USB without using an SD card. This step-by-step guide covers Raspberry Pi 3, 4, and 5 models, helping you improve system reliability and performance.

 How to install Android on Raspberry Pi

How to install Android on Raspberry Pi

In this tutorial, we will convert the Raspberry Pi into an Android device using a popular platform - emteria. OS.

How to Set a Static IP on Raspberry Pi?

How to Set a Static IP on Raspberry Pi?

Learn how to set a static IP on Raspberry Pi using NetworkManager (nmcli) and GUI methods. Complete step-by-step guide for Raspberry Pi OS Bookworm with screenshots and troubleshooting tips.

Have any question related to this Article?

STMicroelectronics Showcases Edge AI Processing with Interactive Robot Demo at electronica India 2025

Submitted by Abhishek on

STMicroelectronics showcased what their STM32MP2 microprocessors are capable of at their electronica India 2025 booth. Visitors could play a game of tic-tac-toe with a robotic arm. The demonstration clearly exhibited how the chips allow for AI-powered robotic applications without cloud connectivity.

Custom Silicon at 7 Dollars | wafer.space Makes Low-Volume Chip Fabrication Viable

Submitted by Abhishek on

You’re hunting through component distributors trying to find that perfect microcontroller for your project. Let’s say you need three SPI controllers, I²C interfaces, and some specific ADC configuration. You go on to find something that has just the right number of SPI controllers, but before you celebrate, you notice it lacks I²C compatibility.

ROHM’s SiC Devices Reflected 20 Years of R&D at electronica India 2025

Submitted by Abhishek on

ROHM Semiconductor was among the key players that exhibited at electronica India 2025. The company’s Group Manager - Technical Centre, Balaji Karthic, while giving us an overview, called attention to their near two decades of research and development in SiC (silicon carbide) that led to their fifth-generation devices.