r/arduino

▲ 34 r/arduino+1 crossposts

Tiny desktop friend

Made this little guy to check up on me and make sure I don't zone out. If it doesn't detect motion in 3 minutes it waves and asks me if I am ok. If I press no it asks if I want water. If no again - do I want to take a walk. If no again - what can be done? It asks. Didn't know where to go from there so just had it cycle back to smiling idle. Where can it go after it asks - what can be done?

u/jzzywzzy — 3 hours ago
▲ 61 r/arduino

Would soldering fix it?

I was trying to take my nano out of the breadboard and I put too much force into it and the connector snapped right off 💀 If I were to solder the edges back to the nano will that work?

u/Sadhya — 9 hours ago
▲ 26 r/arduino

Evolving projects is so satisfying. From v1 to v7. Rc car.

From a huge box with a breadboard inside and tank steering, to a 16g frame with snap mounts, pcb components with standoffs, and ackerman steering. All modeled in fusion360 and 3d printed.

Never knew how satisfying it is to iterate when I got into this.

u/MentokTehMindTaker — 8 hours ago

Touchscreen shield that will work with Elegoo Uno R4 WiFi?

I bought the Elegoo 2.8 TFT touchscreen and quickly discovered there are a lot of issues trying to get it working with the UNO R4 so I sent it back.

Are there any touchscreen shields which will work with the R4 that don’t require a lot of messing around?

This is my first dive into arduino kits so I’d like something that’s relatively simple to plug in and get working if possible.

reddit.com
u/LV426_Tourism_Board — 13 hours ago
▲ 55 r/arduino

Designing and building a line-following robot and have a question about the front wheel(s) design

I’ve been struggling to design a front wheel system that is able to change directions smoothly when the motorized wheels on the back change course. This wheel on a swivel I designed moves freely when I move it with my hand, but when on the floor it gets stuck at awkward angles. What is the best design you have found?

Some things I’m considering trying are putting the motorized wheels at the front and letting the back wheel just drag along. I’m also considering eliminating the front wheel altogether and designing a sphere that will glide along the paper.

I’m trying not to just copy some tutorial from the internet, so I’ve been working on choosing my own components and designs. As you can see in the first picture the dc motors I used early on were not geared and I soon found out that this was not the way to go. Even after experimenting with PWM, i couldn’t get the output I needed and the torque was also lacking. They’ve since been replaced by geared motors. I‘m also swapping the 9V batteries for 18650 batteries.

Why do these boards use different USB jacks?

Three boards and three styles of USB. Why? Why are they not all USB-C (which none of them are)? Why would I ever want to see USB-B or the micro version of it again? Yet that's what I have on brand new boards.

reddit.com

Custom control interface for Arduino?

So I’m thinking of making a cyberdeck and was planning on using an arduino connected to it via usb to control extra doodads on it. I was wondering if there’s a way to make a custom interface for anything I connect to control it (like a macro button or thermometer). I also don’t know how to code. If not, is there a similar premade sofyware for this kind of thing?

reddit.com
u/Doggodueler — 1 day ago
▲ 182 r/arduino

My First Project

I was inspired by the awesome Adafruit eye app. Without looking at their code I wrote my own and designed and 3D printed a case. This is my very first project to make it off of the breadboard. Obviously their eye is much better but I learned a lot from this project and I now have a companion at my computer😀 still coding responses based on the ultrasonic distance but coming along. Thought I would share my progress. Running on a feather M4

u/scottslinux2 — 2 days ago
▲ 356 r/arduino+1 crossposts

I Built a Custom Game Boy from Scratch — Huge Project Update!

Howdy, members of this awesome community!

️All photos are in the comments due to Reddit’s post limitations

It’s been a while since my last post, where I shared the original concept and asked a couple of questions.

Today I’m back with a huge update on my UWU Game Boy project. Let’s jump right into it.

What’s this project about?

(Skip this part if you’ve seen my previous post.)

My goal is to build a portable game console that’s easy to customize, with completely custom firmware written from scratch by me.

What’s inside?

• ESP32-WROOM
• TP4056 charging module
• 1000mAh Li-Ion battery
• 7 tactile buttons
• KY-023 joystick
• 2.0” TFT display
• Passive buzzer

What’s the killer feature?

Unlike many DIY handheld projects that permanently stack multiple perfboards together, mine can be split into two separate modules simply by unscrewing a few nuts (check out one of the first photos).

The two halves reconnect using simple wire connectors, so I can easily take the console apart for upgrades, repairs, or modifications.
In other words, I wanted to solve the classic DIY problem of “once you solder everything together, you never want to touch it again”

What does the firmware do right now?

At the moment it’s mainly a hardware test.

As you can see in the videos, every button and joystick movement is detected and displayed on the screen in real time. The firmware also monitors and displays the current battery level.

Nothing fancy yet - but it’s a great milestone because all the hardware is finally working together

What’s planned for the firmware?

One thing I really want to avoid is turning this into a giant spaghetti-code nightmare.

My plan is to build a central system service that handles all hardware management, while games interact with a simple interface instead of dealing with the hardware themselves.

This service will be responsible for:
• Battery monitoring
• Making sure every component is working correctly
• Managing the main game loop
• Giving games access to hardware components
• Rendering notifications, pause menus, the main menu, and other system UI

Hopefully this will make developing games for the console much easier later on.

That’s everything for now!

I’d love to hear your thoughts, suggestions, or ideas for improving the project.

P.S. If you like what you see, an upvote would absolutely make my day. ❤️

And remember…

There is only one rule: DO NOT EVER ASK WHY IT’S CALLED “UWU GAME BOY”.

u/MichaelCelestial — 2 days ago

what's the smallest form factor that still has bluetooth?

So far the smallest form factor I come across is the esp32 C3/S3, but I'm looking for something half the size or smaller.

Anyone know if such a board exists?

reddit.com
u/dilldoeorg — 2 days ago
▲ 2 r/arduino+1 crossposts

Help PLEASE (13 internal error)

I'm getting "13 INTERNAL" error while trying to install esp32 by espressif in boards manager. I've tried EVERYTHING. Disabling antivrius, deleting tmp and staging, files, re installing arduino IDE, putting github link in preferences, trying installing older version of esp in boards manager. And its still not fixed.

I also tried manually installing the file from github, but whenever I run get.py it throws a "Certificate not valid" error Somebody help me please I've legit been trying to fix this since 4 hours 😭 😭

Additional info: I'm using latest version of Arduino.

reddit.com
u/Fun_Employment_9656 — 2 days ago

How does it works?

Seller wrote that it is "flex sensor" and it looks like something similar, but it have only 2 port (+ and - i think) so I'm interested how does it can work

u/Minimum_Way4628 — 2 days ago
▲ 102 r/arduino

LightMap: 179-cuboid interactive light sculpture, Adafruit RP2040 + Pi 5, custom serial protocol

Just finished this build after a few months of work. It's a physical 3D map of Monaco made of 179 hand-cut PMMA cuboids, each individually lit and driven live off real-time event data (Grand Prix weekend lights the circuit red, yacht show lights the harbor blue, etc.).

Hardware:

  • around 800 RGBW LEDs across 16 channels, ~10m total, hand-cut and soldered
  • 2x Adafruit Feather RP2040 Scorpio boards (8 chanels each via NeoPXL8, PIO+DMA)
  • Raspberry Pi 5 as the master controller
  • 2x Meanwell PSUs, 2x fuseboxes
  • 2020 aluminum extrusion frame, birch ply shell, laser-cut stainless top plate

Software:

  • Pi runs Python, talks to both Scorpios over USB serial
  • Custom binary framed protocol: start byte, length, payload, checksum. Scorpios push the info sent by the Pi
  • Mode system (ambient, data, event-reactive, touch) with crossfaded transitions
  • Flask operator panel on LAN, phone-controllable
  • Data pipeline: elevation from Copernicus (via a weather API bc institutional access wasn't realistic), building heights from OSM, gridded around 90m x 9m in QGIS, mapped 1:1 to the cuboids

Originally built the LED driver stack on Olimex boards, industrial-looking, PoE, seemed ideal. In practice: constant flashing failures and random crashes that ate a couple weeks of the schedule. Swapped everything to the Adafruit Scorpio boards and it's been rock solid since. Not the answer I expected going in.

full build : https://youtu.be/-wLMfcOFt5M

u/-2811 — 3 days ago
▲ 4 r/arduino+1 crossposts

Wifi Radio Help

Hello cherished Arduino Community!

I'm currently working on an ESP32 D1 Mini powered internet radio and i'm stuck at a dead end. I've been following this tutorial https://projecthub.arduino.cc/zetro/diy-esp32-internet-radio-4353a4. I currently don't have a Wroom laying around, so i picked the D1 Mini. It is connecting to Wifi, but the radio stations aren't loading.

I'm positive the hardware connections are fine, so it must be a code-related issue. I also added a transformer to cancel out any noise that might be caused. I think the issue lays with the links to the stations?

It's my birthday and my only wish is to make this work. pls help

#include <WiFi.h>  // Include WiFi library for ESP32's WiFi functionality
#include <VS1053.h>  // Include library to control the VS1053 MP3 decoder
#include <U8g2lib.h>  // Include library for controlling the OLED display

// Define the VS1053 MP3 decoder pins
#define VS1053_CS     32  // Chip Select for VS1053
#define VS1053_DCS    33  // Data Command Select for VS1053
#define VS1053_DREQ   35  // Data Request pin for VS1053

// Button pins to switch between radio stations
#define BUTTON_NEXT  16  // Pin for the 'next station' button
#define BUTTON_PREV  17  // Pin for the 'previous station' button

// OLED Display setup with I2C communication
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);  // Create OLED display object

// WiFi settings: replace with your own network credentials
const char *ssid = "removed for reddit";  // Your WiFi network name
const char *password = "removed for reddit";  // Your WiFi network password

// Radio station details
const char* stationNames[] = {"OE1", "Al Jazeera"};  // Array of station names
const char* stationHosts[] = {"audioapi.orf.at", "aljazeera.com"};  // Host URLs for the stations
const char* stationPaths[] = {"/oe1/json/4.0/broadcasts?_o=oe1.orf.at", "/audio/live/:1"};  // Paths to the radio streams
int currentStation = 0 ;  // Index of the currently playing station
const int totalStations = sizeof(stationNames) / sizeof(stationNames[0]);  // Calculate the number of available stations

// VS1053 MP3 player object
VS1053 player(VS1053_CS, VS1053_DCS, VS1053_DREQ);  // Create VS1053 object to control MP3 playback
WiFiClient client;  // WiFi client object to connect to the radio stream

// Variables for scrolling text on the OLED display
int textPosition = 128;  // Initial text position for scrolling
unsigned long previousMillis = 0;  // Store the last time the display was updated
const long interval = 50;  // Time interval for updating the display (50 ms)

void setup() {
    Serial.begin(115200);  // Start the serial monitor for debugging

    // Wait for VS1053 and PAM8403 amplifier to power up
    delay(3000);

    u8g2.begin();  // Initialize the OLED display
    u8g2.setFlipMode(1);  // Flip the display 180 degrees
    u8g2.setFont(u8g2_font_ncenB08_tr);  // Set font for OLED display

    // Display startup messages on OLED
    u8g2.clearBuffer();
    u8g2.drawStr(0, 16, "Starting Radio...");  // Initial message
    u8g2.sendBuffer();
    delay(2000);

    u8g2.clearBuffer();
    u8g2.drawStr(0, 16, "Starting Engine...");  // Second message
    u8g2.sendBuffer();
    delay(2000);

    u8g2.clearBuffer();
    u8g2.drawStr(0, 16, "Connecting to WiFi...");  // WiFi connection message
    u8g2.sendBuffer();

    Serial.println("\n\nSimple Radio Node WiFi Radio");  // Debug message in the serial monitor

    SPI.begin();  // Initialize SPI communication for VS1053

    player.begin();  // Start the VS1053 decoder
    if (player.getChipVersion() == 1.2 ) {  // Check for correct version of VS1053
        player.loadDefaultVs1053Patches();  // Load patches for MP3 decoding if needed
    }
    player.switchToMp3Mode();  // Switch VS1053 to MP3 decoding mode
    player.setVolume(100);  // Set the volume (range: 0-100)

    Serial.print("Connecting to SSID ");
    Serial.println(ssid);  // Debug message: attempting WiFi connection
    WiFi.begin(ssid, password);  // Start WiFi connection

    // Disable WiFi power saving mode for a more stable connection
    WiFi.setSleep(false);

    // Attempt to connect to WiFi with retries
    int attempts = 0;
    while (WiFi.status() != WL_CONNECTED && attempts < 20) {
        delay(500);
        Serial.print(".");  // Print dots to indicate connection progress
        attempts++;
    }

    // Check if WiFi connection is successful
    if (WiFi.status() == WL_CONNECTED) {
        Serial.println("WiFi connected");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());  // Print the assigned IP address

        // Display success message on OLED
        u8g2.clearBuffer();
        u8g2.drawStr(0, 16, "Connected Yay!");
        u8g2.sendBuffer();
        delay(2000);
    } else {
        // Display failure message on OLED if WiFi connection fails
        Serial.println("WiFi not connected");
        u8g2.clearBuffer();
        u8g2.drawStr(0, 16, "Not Connected");
        u8g2.sendBuffer();
        delay(2000);
    }

    // Initialize button pins with pull-up resistors
    pinMode(BUTTON_NEXT, INPUT_PULLUP);
    pinMode(BUTTON_PREV, INPUT_PULLUP);

    // Set font for displaying station names
    u8g2.setFont(u8g2_font_profont17_mr);

    displayStation();  // Display the initial station name on the OLED
    connectToHost();  // Connect to the radio station stream
}

void loop() {
    // Reconnect if the WiFi client is disconnected
    if (!client.connected()) {
        Serial.println("Reconnecting...");
        connectToHost();  // Attempt to reconnect to the stream
    }

    // Read data from the radio stream and send it to the VS1053 decoder for playback
    if (client.available() > 0) {
        uint8_t buffer[32];
        size_t bytesRead = client.readBytes(buffer, sizeof(buffer));  // Read data from stream
        player.playChunk(buffer, bytesRead);  // Play the received audio data
    }

    handleButtons();  // Check if buttons are pressed and switch stations accordingly
    scrollText();  // Scroll the station name on the OLED display
}

void connectToHost() {
    // Connect to the current radio station's server
    Serial.print("Connecting to ");
    Serial.println(stationHosts[currentStation]);

    if (!client.connect(stationHosts[currentStation], 80)) {
        Serial.println("Connection failed");  // Display error if connection fails
        return;
    }

    // Send HTTP request to the server to get the radio stream
    Serial.print("Requesting stream: ");
    Serial.println(stationPaths[currentStation]);

    client.print(String("GET ") + stationPaths[currentStation] + " HTTPS/1.1\r\n" +
                 "Host: " + stationHosts[currentStation] + "\r\n" +
                 "Connection: close\r\n\r\n");

    // Skip the HTTP headers in the response
    while (client.connected()) {
        String line = client.readStringUntil('\n');
        if (line == "\r") {
            break;  // End of headers
        }
    }

    Serial.println("Headers received");  // Debug message: headers successfully received
}

void handleButtons() {
    static bool lastButtonNextState = HIGH;  // Track the previous state of the 'next' button
    static bool lastButtonPrevState = HIGH;  // Track the previous state of the 'previous' button

    bool currentButtonNextState = digitalRead(BUTTON_NEXT);  // Read current state of 'next' button
    bool currentButtonPrevState = digitalRead(BUTTON_PREV);  // Read current state of 'previous' button

    // If 'next' button is pressed (LOW), switch to the next station
    if (lastButtonNextState == HIGH && currentButtonNextState == LOW) {
        nextStation();
    }
    // If 'previous' button is pressed (LOW), switch to the previous station
    if (lastButtonPrevState == HIGH && currentButtonPrevState == LOW) {
        previousStation();
    }

    lastButtonNextState = currentButtonNextState;  // Update the last state for the 'next' button
    lastButtonPrevState = currentButtonPrevState;  // Update the last state for the 'previous' button
}

void nextStation() {
    currentStation = (currentStation + 1) % totalStations;  // Move to the next station (wrap around)
    displayStation();  // Update the OLED display with the new station name
    connectToHost();  // Connect to the new station
}

void previousStation() {
    currentStation = (currentStation - 1 + totalStations) % totalStations;
    displayStation();
    connectToHost();
}

void displayStation() {
    textPosition = 128;  // Reset text position to start from the right
    u8g2.clearBuffer();
    u8g2.drawLine(0, 0, 127, 0);
    u8g2.drawLine(0, 31, 127, 31);
    u8g2.setCursor(textPosition, 22);
    u8g2.print(stationNames[currentStation]);
    u8g2.sendBuffer();
}

void scrollText() {
    unsigned long currentMillis = millis();

    if (currentMillis - previousMillis >= interval) {
        previousMillis = currentMillis;
        textPosition--;  // Move text to the left
        if (textPosition < -u8g2.getUTF8Width(stationNames[currentStation])) {
            textPosition = 128;  // Reset position to start from the right again
        }

        u8g2.clearBuffer();
        u8g2.drawLine(0, 0, 127, 0);
        u8g2.drawLine(0, 31, 127, 31);
        u8g2.setCursor(textPosition, 22);
        u8g2.print(stationNames[currentStation]);
        u8g2.sendBuffer();
    }
}
u/Unable_Candle_7132 — 1 day ago

Beginner Oled Screen

I’ve been trying to get this screen to show basically anything for a bit, but am unsure on how to. I’ve followed several tutorials and even tried ChatGPT but it won’t turn on at all.

Using a Nano R4 and a cheap blue IC2 Oled screen off of Amazon.

Currently the wiring is just:
5V > VCC
GND > GND
A5 > SCL
A4 > SDA

Is there something more I’m missing?

u/NubCakeDaScrub — 2 days ago
▲ 10 r/arduino

Free courses for beginners

Hello, I recently started learning arduino as new hobby as someone who has zero knowledge on programming or electronics and I’ve been really enjoying it and learning a lot. But the tutorials I’m following were made in 2019, and even tho they’re really good and are helping me understand the concept really well I find as I’m getting deeper into the course that a lot of the codes don’t really work the same as the original creator and I’m having to rely on ChatGPT to modify so they can work (which I don’t really like because I want to understand what I’m doing). And I wonder if it’s because they might be outdated now. What are the best tutorials to learn in 2026?

reddit.com
u/Silent-Soft3117 — 2 days ago

Help with Circuit Diagram, beginner!

Hi guys, so i just started with arduino projects, and i want to make a desk buddy. However there is just one thing i cannot understand, how to wire some components.

Please see the picture, for example the red wires (+). On the circuit diagram it shows that it only goes from the 5.0V to the multiple components. But how do I connect all these components to the single 5.0V? THat's what i just cannot understand. Do i just solder all the loose wires together into one into the 5.0V component? Or can i put the red wires on more than 1 place on the ESP32 2mini? please someone help!

https://preview.redd.it/ys3ilrcja2bh1.png?width=1339&format=png&auto=webp&s=01af46b6effa749773c95deda85eef9f459135fe

reddit.com
u/Simple_Economy_9901 — 2 days ago

Feedback on my first build...

Hi, I've been wanting to get into hardware for a while now... and I am starting off this summer with a first project! Amrada, a robtic arm that can mimic arm movements by their user through tracking arm movements in a user-worn wristband. I submitted the project to hack club, and spent the last few days planning and learning how arduino works and the mechanics. In haven't heard back from hack club and I really want feedback on my work so I am here....Please if you have the time to review my poject that would be really nice and I would be glad to receive any constructive criticism from people with well expereince in hardware. I know I have much to learn... Link to repository

u/Best-Emergency5459 — 2 days ago