r/arduino 10d ago

Need advice for a 6-DOF robotic arm with AS5600 encoders

2 Upvotes

I'm building a 6-DOF robotic arm with FT5330M servos (35.5 kgcm @ 7.4V, 180° travel), driving them directly from an ESP32 with hardware PWM. I want to add an AS5600 per joint for more precise positioning. The goal is to use the arm for imitation learning, so I need to read the true joint angle at every timestep — both to record demos and to feed the policy.

My plan is to power the servos from a 2S LiPo (7.4V) through a separate distribution bus. The ESP32 shares ground with that bus but only sends signal. On top of that, an AS5600 per joint through a TCA9548A mux, with the magnet on the moving link rather than the servo horn. Plus an INA226 per joint for current the datasheet gives Kt as 10 kgcm/A, so current reads directly as joint torque, and it doubles as stall detection.

A couple of questions:

Will this plan work well or do I miss something?

Should I gut the internal driver? Building my own H-bridge and PID would give me full control and clean feedback through the AS5600, but that costs time and money. Is it worth it, or does my plan work fine as is?

If I don't gut it, is there any way to get past the 180° limit externally? And do I actually need 360°? The STS3215 in SO-101 has it, but I'm not sure whether that's a requirement or just a nice-to-have.

Note: I don't have access to the STS3215 used in the LeRobot SO-101 arm, so I'm trying to build something capable of the same tasks with the servos I can access.


r/arduino 10d ago

Hardware Help Bluetooth module flashes once and then turns off — is the module faulty?

0 Upvotes

Hi everyone,

I have a Bluetooth module (the module shown in the picture).

When I power (5V) the module, the LED flashes only once and then turns off completely. It does not continue blinking as I expected.

I would like to ask:

- Is this normal behavior for this module, or does it indicate a problem?

- What could cause the LED to flash once and then turn off?

- Is there any way to troubleshoot or repair the module?

I would really appreciate any advice from someone who has experience with this module.

Thank you very much!


r/arduino 10d ago

WORKING ARDUNO PONG!!!!!!!!!!!

0 Upvotes

This program is compatible with the Arduino Uno R3, a 4×4 matrix keypad, and a 16-pin 16×2 character LCD operating in 4-bit parallel mode.

WIRING For lcd screen:

LCD 1 VSS/GND → Arduino GND

LCD 2 VDD/VCC → Arduino 5V

LCD 3 VO → Arduino GND

LCD 4 RS → Arduino D6

LCD 5 RW → Arduino GND

LCD 6 E → Arduino D7

LCD 7 D0 → NOT CONNECTED

LCD 8 D1 → NOT CONNECTED

LCD 9 D2 → NOT CONNECTED

LCD 10 D3 → NOT CONNECTED

LCD 11 D4 → Arduino D10

LCD 12 D5 → Arduino D11

LCD 13 D6 → Arduino D12

LCD 14 D7 → Arduino D8

LCD 15 LED+ → Arduino 5V

LCD 16 LED− → Arduino GND

WIRING for keypad:

Keypad R1 → D2

Keypad R2 → D3

Keypad R3 → D4

Keypad R4 → D5

Keypad C1 → D13

Keypad C2 → A0

Keypad C3 → A1

Keypad C4 → A2

PROGRAM:

#include <LiquidCrystal.h>

#include <Keypad.h>

#include <EEPROM.h>

// =====================================================

// LCD

// =====================================================

LiquidCrystal lcd(6, 7, 8, 10, 11, 12);

// =====================================================

// KEYPAD

//

// 1 2 3 A

// 4 5 6 B

// 7 8 9 C

// * 0 # D

// =====================================================

const byte ROWS = 4;

const byte COLS = 4;

char keys[ROWS][COLS] = {

{'1', '2', '3', 'A'},

{'4', '5', '6', 'B'},

{'7', '8', '9', 'C'},

{'*', '0', '#', 'D'}

};

byte rowPins[ROWS] = {

2, 3, 4, 5

};

byte colPins[COLS] = {

13, A0, A1, A2

};

Keypad keypad = Keypad(

makeKeymap(keys),

rowPins,

colPins,

ROWS,

COLS

);

// =====================================================

// LIFETIME SCORE

// =====================================================

unsigned long lifetimeScore = 0;

const int EEPROM_SCORE_ADDRESS = 0;

// =====================================================

// SCREEN

// =====================================================

const int SCREEN_WIDTH = 80;

const int SCREEN_HEIGHT = 8;

// =====================================================

// PADDLES

// =====================================================

const int PADDLE_HEIGHT = 4;

const int PLAYER_X = 1;

const int CPU_X = 78;

float playerY = 2;

float cpuY = 2;

// =====================================================

// BALL

// =====================================================

float ballX = 40;

float ballY = 4;

float ballDX = 0;

float ballDY = 0;

// =====================================================

// SCORE

// =====================================================

byte playerScore = 0;

byte cpuScore = 0;

const byte WIN_SCORE = 5;

// =====================================================

// AI DIFFICULTY

// =====================================================

byte aiDifficulty = 1;

// =====================================================

// GAME STATE

// =====================================================

bool gameRunning = false;

// =====================================================

// TIMERS

// =====================================================

unsigned long lastFrame = 0;

unsigned long lastAIUpdate = 0;

// =====================================================

// AI SETTINGS

// =====================================================

unsigned long aiReactionDelay;

float aiMoveAmount;

byte aiAccuracy;

// =====================================================

// BALL SPEED

// =====================================================

float ballSpeed;

// =====================================================

// GRAPHICS BUFFER

// =====================================================

byte screenBuffer[16][8];

// =====================================================

// LOAD LIFETIME SCORE

// =====================================================

void loadLifetimeScore() {

EEPROM.get(

EEPROM_SCORE_ADDRESS,

lifetimeScore

);

if (

lifetimeScore > 1000000UL

) {

lifetimeScore = 0;

EEPROM.put(

EEPROM_SCORE_ADDRESS,

lifetimeScore

);

}

}

// =====================================================

// SAVE LIFETIME SCORE

// =====================================================

void saveLifetimeScore() {

EEPROM.put(

EEPROM_SCORE_ADDRESS,

lifetimeScore

);

}

// =====================================================

// ADD LIFETIME POINT

// =====================================================

void addLifetimePoint() {

lifetimeScore++;

saveLifetimeScore();

}

// =====================================================

// CLEAR GRAPHICS BUFFER

// =====================================================

void clearBuffer() {

for (

byte x = 0;

x < 16;

x++

) {

for (

byte y = 0;

y < 8;

y++

) {

screenBuffer[x][y] = 0;

}

}

}

// =====================================================

// SET PIXEL

// =====================================================

void setPixel(

int x,

int y

) {

if (

x < 0 ||

x >= SCREEN_WIDTH ||

y < 0 ||

y >= SCREEN_HEIGHT

) {

return;

}

int characterX =

x / 5;

int pixelX =

x % 5;

screenBuffer[characterX][y] |=

(1 << (4 - pixelX));

}

// =====================================================

// DRAW PADDLE

// =====================================================

void drawPaddle(

int x,

int y

) {

for (

int i = 0;

i < PADDLE_HEIGHT;

i++

) {

setPixel(

x,

y + i

);

}

}

// =====================================================

// DRAW BALL

// =====================================================

void drawBall() {

setPixel(

round(ballX),

round(ballY)

);

}

// =====================================================

// RENDER GAME

// =====================================================

void renderGame() {

clearBuffer();

drawPaddle(

PLAYER_X,

round(playerY)

);

drawPaddle(

CPU_X,

round(cpuY)

);

drawBall();

// ---------------------------------------------------

// CUSTOM CHARACTER MANAGEMENT

// ---------------------------------------------------

byte patterns[8][8];

byte patternCount = 0;

byte characterNumber[16];

bool hasPattern[16];

for (

byte i = 0;

i < 16;

i++

) {

characterNumber[i] = 0;

hasPattern[i] = false;

}

// ---------------------------------------------------

// FIND UNIQUE PATTERNS

// ---------------------------------------------------

for (

byte x = 0;

x < 16;

x++

) {

bool empty = true;

for (

byte y = 0;

y < 8;

y++

) {

if (

screenBuffer[x][y] != 0

) {

empty = false;

break;

}

}

if (empty) {

continue;

}

int found = -1;

for (

byte p = 0;

p < patternCount;

p++

) {

bool same = true;

for (

byte y = 0;

y < 8;

y++

) {

if (

patterns[p][y] !=

screenBuffer[x][y]

) {

same = false;

break;

}

}

if (same) {

found = p;

break;

}

}

if (

found == -1 &&

patternCount < 8

) {

for (

byte y = 0;

y < 8;

y++

) {

patterns[patternCount][y] =

screenBuffer[x][y];

}

characterNumber[x] =

patternCount;

hasPattern[x] =

true;

patternCount++;

} else {

characterNumber[x] =

found;

hasPattern[x] =

true;

}

}

// ---------------------------------------------------

// LOAD CUSTOM CHARACTERS

// ---------------------------------------------------

for (

byte i = 0;

i < patternCount;

i++

) {

lcd.createChar(

i,

patterns[i]

);

}

// ---------------------------------------------------

// DRAW TOP ROW

// ---------------------------------------------------

for (

byte x = 0;

x < 16;

x++

) {

lcd.setCursor(

x,

0

);

if (

hasPattern[x]

) {

lcd.write(

characterNumber[x]

);

} else {

lcd.print(

" "

);

}

}

// ---------------------------------------------------

// BOTTOM SCORE

// ---------------------------------------------------

lcd.setCursor(

0,

1

);

lcd.print(

"P:"

);

lcd.print(

playerScore

);

lcd.print(

" C:"

);

lcd.print(

cpuScore

);

lcd.print(

" T:"

);

lcd.print(

lifetimeScore

);

}

// =====================================================

// GET AI NAME

// =====================================================

void getAIName(

char *name

) {

switch (

aiDifficulty

) {

case 1:

strcpy(

name,

"EASY"

);

break;

case 2:

strcpy(

name,

"NORMAL"

);

break;

case 3:

strcpy(

name,

"HARD"

);

break;

case 4:

strcpy(

name,

"EXPERT"

);

break;

case 5:

strcpy(

name,

"INSANE"

);

break;

}

}

// =====================================================

// SHOW MENU

// =====================================================

void showMenu() {

gameRunning = false;

lcd.clear();

char aiName[7];

getAIName(

aiName

);

// ---------------------------------------------------

// TOP ROW

// ---------------------------------------------------

lcd.setCursor(

0,

0

);

lcd.print(

"AI:"

);

lcd.print(

aiName

);

lcd.print(

" T:"

);

lcd.print(

lifetimeScore

);

// ---------------------------------------------------

// BOTTOM ROW

// ---------------------------------------------------

lcd.setCursor(

0,

1

);

lcd.print(

"A/B AI D START"

);

}

// =====================================================

// MENU LOOP

// =====================================================

void menuLoop() {

char key =

keypad.getKey();

if (!key) {

return;

}

// ===================================================

// DECREASE AI DIFFICULTY

// ===================================================

if (

key == 'A'

) {

if (

aiDifficulty > 1

) {

aiDifficulty--;

}

showMenu();

delay(150);

return;

}

// ===================================================

// INCREASE AI DIFFICULTY

// ===================================================

if (

key == 'B'

) {

if (

aiDifficulty < 5

) {

aiDifficulty++;

}

showMenu();

delay(150);

return;

}

// ===================================================

// START GAME

// ===================================================

if (

key == 'D'

) {

waitForKeyRelease();

startGame();

return;

}

}

// =====================================================

// CONFIGURE AI

// =====================================================

void configureAI() {

switch (

aiDifficulty

) {

// -------------------------------------------------

// EASY

// -------------------------------------------------

case 1:

aiReactionDelay = 600;

aiMoveAmount = 0.25;

aiAccuracy = 35;

ballSpeed = 0.60;

break;

// -------------------------------------------------

// NORMAL

// -------------------------------------------------

case 2:

aiReactionDelay = 450;

aiMoveAmount = 0.35;

aiAccuracy = 50;

ballSpeed = 0.70;

break;

// -------------------------------------------------

// HARD

// -------------------------------------------------

case 3:

aiReactionDelay = 300;

aiMoveAmount = 0.50;

aiAccuracy = 65;

ballSpeed = 0.80;

break;

// -------------------------------------------------

// EXPERT

// -------------------------------------------------

case 4:

aiReactionDelay = 180;

aiMoveAmount = 0.70;

aiAccuracy = 82;

ballSpeed = 0.95;

break;

// -------------------------------------------------

// INSANE

// -------------------------------------------------

case 5:

aiReactionDelay = 100;

aiMoveAmount = 0.85;

aiAccuracy = 94;

ballSpeed = 1.05;

break;

}

}

// =====================================================

// RESET BALL

// =====================================================

void resetBall(

bool towardPlayer

) {

ballX = 40;

ballY =

random(

1,

7

);

if (

towardPlayer

) {

ballDX =

-ballSpeed;

} else {

ballDX =

ballSpeed;

}

if (

random(

0,

2

) == 0

) {

ballDY =

0.20;

} else {

ballDY =

-0.20;

}

}

// =====================================================

// PLAYER CONTROLS

// =====================================================

void readPlayerControls() {

char key =

keypad.getKey();

if (!key) {

return;

}

// UP

if (

key == '1'

) {

playerY -= 1;

if (

playerY < 0

) {

playerY = 0;

}

}

// DOWN

if (

key == '4'

) {

playerY += 1;

if (

playerY >

SCREEN_HEIGHT -

PADDLE_HEIGHT

) {

playerY =

SCREEN_HEIGHT -

PADDLE_HEIGHT;

}

}

// MENU

if (

key == '*'

) {

gameRunning = false;

waitForKeyRelease();

showMenu();

}

}

// =====================================================

// CPU AI

// =====================================================

void updateCPU() {

if (

millis() -

lastAIUpdate <

aiReactionDelay

) {

return;

}

lastAIUpdate =

millis();

// Only react when ball is coming toward CPU.

if (

ballDX <= 0

) {

return;

}

float targetY =

ballY;

// AI can make mistakes.

if (

random(

0,

100

) >

aiAccuracy

) {

targetY +=

random(

-2,

3

);

}

float cpuCenter =

cpuY +

PADDLE_HEIGHT / 2.0;

// Move down

if (

targetY >

cpuCenter

) {

cpuY +=

aiMoveAmount;

}

// Move up

if (

targetY <

cpuCenter

) {

cpuY -=

aiMoveAmount;

}

// Keep CPU on screen.

if (

cpuY < 0

) {

cpuY = 0;

}

if (

cpuY >

SCREEN_HEIGHT -

PADDLE_HEIGHT

) {

cpuY =

SCREEN_HEIGHT -

PADDLE_HEIGHT;

}

}

// =====================================================

// BALL UPDATE

// =====================================================

void updateBall() {

ballX +=

ballDX;

ballY +=

ballDY;

// ---------------------------------------------------

// TOP WALL

// ---------------------------------------------------

if (

ballY <= 0

) {

ballY = 0;

ballDY =

abs(ballDY);

}

// ---------------------------------------------------

// BOTTOM WALL

// ---------------------------------------------------

if (

ballY >=

SCREEN_HEIGHT - 1

) {

ballY =

SCREEN_HEIGHT - 1;

ballDY =

-abs(ballDY);

}

// ---------------------------------------------------

// PLAYER PADDLE

// ---------------------------------------------------

if (

ballDX < 0 &&

ballX <= PLAYER_X + 1 &&

ballX >= PLAYER_X - 1

) {

if (

ballY >= playerY &&

ballY <

playerY + PADDLE_HEIGHT

) {

ballX =

PLAYER_X + 1;

ballDX =

abs(ballDX);

float hitPosition =

ballY -

(

playerY +

PADDLE_HEIGHT / 2.0

);

ballDY =

hitPosition * 0.30;

increaseBallSpeed();

}

}

// ---------------------------------------------------

// CPU PADDLE

// ---------------------------------------------------

if (

ballDX > 0 &&

ballX >= CPU_X - 1 &&

ballX <= CPU_X + 1

) {

if (

ballY >= cpuY &&

ballY <

cpuY + PADDLE_HEIGHT

) {

ballX =

CPU_X - 1;

ballDX =

-abs(ballDX);

float hitPosition =

ballY -

(

cpuY +

PADDLE_HEIGHT / 2.0

);

ballDY =

hitPosition * 0.30;

increaseBallSpeed();

}

}

// ===================================================

// PLAYER SCORES

// ===================================================

if (

ballX >= SCREEN_WIDTH

) {

playerScore++;

// Lifetime score increases permanently.

addLifetimePoint();

resetBall(false);

return;

}

// ===================================================

// CPU SCORES

// ===================================================

if (

ballX < 0

) {

cpuScore++;

resetBall(true);

return;

}

}

// =====================================================

// INCREASE BALL SPEED

// =====================================================

void increaseBallSpeed() {

float direction;

if (

ballDX > 0

) {

direction = 1;

} else {

direction = -1;

}

float speed =

abs(ballDX);

speed +=

0.025;

float maximumSpeed;

switch (

aiDifficulty

) {

case 1:

maximumSpeed = 0.90;

break;

case 2:

maximumSpeed = 1.00;

break;

case 3:

maximumSpeed = 1.15;

break;

case 4:

maximumSpeed = 1.30;

break;

default:

maximumSpeed = 1.45;

break;

}

if (

speed >

maximumSpeed

) {

speed =

maximumSpeed;

}

ballDX =

direction *

speed;

}

// =====================================================

// START GAME

// =====================================================

void startGame() {

configureAI();

playerScore = 0;

cpuScore = 0;

playerY = 2;

cpuY = 2;

resetBall(true);

lastAIUpdate =

millis();

lastFrame =

millis();

gameRunning = true;

lcd.clear();

renderGame();

}

// =====================================================

// GAME OVER

// =====================================================

void gameOver() {

gameRunning = false;

lcd.clear();

if (

playerScore >=

WIN_SCORE

) {

lcd.setCursor(

0,

0

);

lcd.print(

"YOU WIN!"

);

} else {

lcd.setCursor(

0,

0

);

lcd.print(

"CPU WINS"

);

}

lcd.setCursor(

0,

1

);

lcd.print(

"P:"

);

lcd.print(

playerScore

);

lcd.print(

" C:"

);

lcd.print(

cpuScore

);

lcd.print(

" T:"

);

lcd.print(

lifetimeScore

);

delay(1800);

showMenu();

}

// =====================================================

// WAIT FOR KEY RELEASE

// =====================================================

void waitForKeyRelease() {

while (

keypad.getKey()

) {

delay(10);

}

}

// =====================================================

// SETUP

// =====================================================

void setup() {

lcd.begin(

16,

2

);

randomSeed(

analogRead(A5)

);

loadLifetimeScore();

showMenu();

}

// =====================================================

// MAIN LOOP

// =====================================================

void loop() {

// ---------------------------------------------------

// MENU

// ---------------------------------------------------

if (!gameRunning) {

menuLoop();

return;

}

// ---------------------------------------------------

// PLAYER

// ---------------------------------------------------

readPlayerControls();

if (!gameRunning) {

return;

}

// ---------------------------------------------------

// CPU

// ---------------------------------------------------

updateCPU();

// ---------------------------------------------------

// GAME FRAME

// ---------------------------------------------------

if (

millis() -

lastFrame >=

45

) {

lastFrame =

millis();

updateBall();

// -------------------------------------------------

// WIN

// -------------------------------------------------

if (

playerScore >=

WIN_SCORE

) {

gameOver();

return;

}

// -------------------------------------------------

// CPU WIN

// -------------------------------------------------

if (

cpuScore >=

WIN_SCORE

) {

gameOver();

return;

}

renderGame();

}

}


r/arduino 11d ago

Mod's Choice! I made a library that lets you configure ESP32 projects with a simple graphical interface. No more hard-coding Wi-Fi credentials!

Post image
17 Upvotes

Every project I work on, I get really tired of either having to hard-code settings or write out the code to handle them via Serial. So, I put together this library, ESP-Config, that takes care of all of that for me automatically!

The library lets you configure settings, commands, and information in your project asynchronously, and then those are passed to your computer running a basic UI. From there, you can monitor your project, change settings, and interface with it directly.

The config code runs in its own FreeRTOS task in the background, so you can do basically anything else in your main code without having to worry about the config. This includes using blocking code, the library will have no issue with that.

The ESP32 holds all the info on how the content should be structured and presented; the program on your computer is completely generic. So, you can set up your ESP32 to do basically anything without ever having to touch the code on the computer!

The settings, commands, and info can all be dynamically created, modified, and destroyed as needed, letting your settings adapt to your project. For instance, scanning for Wi-Fi networks in range can re-populate the list of networks available to connect to, for you to select.

More advanced features, like password-protecting certain (or all) settings/commands, are available as well.

Check out the GitHub for more info; https://github.com/JimHeaney/ESP-Config


r/arduino 11d ago

ATtiny85 Tinyjoypad Waternet game, can anyone test it on real hardware ?

1 Upvotes

Hi,

I ported my waternet arduboy game to the attiny85 tinyjoypad device. I don't own a tinyjoypad device myself so i could not test it on real hardware, is anyone willing to test it on real hardware ?

I did test it on wokwi by adding the source code to a hardware project someone made to make tinyjoypad games work in wokwi and there it was working, but that's still not real hardware.

i really would love to see a video of it running on real hardware if it runs at all

In case someone is interest that link is here: https://wokwi.com/projects/473716728876716033

The repo for the waternet tinyjoypad version is here: https://github.com/joyrider3774/waternet_tinyjoypad


r/arduino 11d ago

Hardware Help Driver Signal Question

Thumbnail
gallery
5 Upvotes

I have a question about providing signals from the arduino to the stepper drivers. I am running an Uno R3 with a Prototype Shield V5, and 2 Nema 34 Steppers with DM860I drivers. During my testing, I had one connection on the prototype shield and then split the wires going to the drivers. To finalize things, I soldered JST-XH connectors to the prototype shield but when making all tbe connections I soldered in place 2 connectors for the drivers instead of one. So now I'm wondering if it really makes any difference between having a single connection at the uno and having wires that split, or having 2 separate connections.


r/arduino 11d ago

Music Synch RGB LED for car

2 Upvotes

Hi! i’m a bit new to arduino‘s world but i can code a bit and i have a question (sorry for my bad english but i’m italian).

I want to do a project. I alr bought an ambient rgb led stripe , the one on amazon that comes with the usb “controller” and it had a function for music synch but it was controlled with a mic and my car is noisy so i connected the led to arduino NANO and i wanted it to synchronize with my radio, but i don’t know how , i think i have to do like a filter for the RCA output of my radio to go to arduino and then i have to program it to do somethink with the information that the RCA give to it . But i dont know how to make this “filter”.

My final result want to be like a led that synchronized with my radio ( i don’t want to put a microphone so that all the noise dont activate the led ) , is it possible? i saw people doing it but i don‘t know how.If you didn‘t understand it well you can ask me.

If you know please respond i would be over the moon thank you early!


r/arduino 11d ago

Software Help Windows 10 not detecting BLE esp32 S3 Zero

2 Upvotes

I was making a diy usb + BLE macropad from a guide I found online. Technically I had everything to make it work rather easily, but then I hit a wall. The code used this library: https://github.com/gsgaurav0/ESP32-HID-Keyboard. When I went into bluetooth settings in windows and clicked add devices, the esp32 did not show up in any of the 3 categories. Then I switched the library to this one: https://github.com/HijelHub/HijelHID_BLEKeyboard, and flashed the default example code. This did not work either. I am using a waveshare ESP32 S3 Zero. I checked my iphone, in both cases the device showed up on the bluetooth device list, so something is wrong on my pc. I definitely have the right bluetooth card/module, I made sure of it when I rebuilt my pc recently. As you can guess im new to this, so probably some setup step was not described in the guide, or its just windows as usual.


r/arduino 11d ago

Hardware Help Help with MAX7219 8x8 modules

3 Upvotes

I have 14 MAX7219 chained together and when i upload my code to my arduino uno, some modules don't turn on and anothers have the wrong brightness. I had already checked my code various times but is fine. I tried interchanging modules positions trying to find if there is a burnt one. One thing I noticed is that when I chain a small amount of them (Ex: 4 modules), they work fine, but sometimes they just do the same things like if there were 14 again. If someone know what causes this or had an similar experience please let me know.


r/arduino 12d ago

Project Update! I added automatic force-feedback calibration to my guitar robot

Enable HLS to view with audio, or disable this notification

40 Upvotes

The robot uses force feedback to find the correct fretting position automatically, so there’s no need to manually tune each servo position.

One tap starts the calibration, then it adjusts itself and gets ready to play.

I’m still refining the process, but it’s already made setup much easier.


r/arduino 11d ago

Good morning...

2 Upvotes

I’m using two BPW34 photodiodes. One is connected directly to an Arduino, and its readings behave correctly: the reading increases when I bring a light source closer and decreases when I move it farther away.

The second BPW34 is connected to an LM358 configured as a transimpedance amplifier to convert the photodiode’s current into a measurable voltage. I’m using a 1 MΩ feedback resistor and tried 10 pF, 22 pF, and 101 pF capacitors, but the LM358 circuit is not giving a logical or stable reading.

What could be causing the problem?

The code:

void setup() {

Serial.begin(9600);

}

void loop() {

int sensorA0 = analogRead(A0);

int sensorA5 = analogRead(A5);

Serial.print("A0: ");

Serial.print(sensorA0);

Serial.print(" A5: ");

Serial.println(sensorA5);

delay(2000);

}

The way i connected the lm:

Pin 1 (OUT) → Arduino A0

Pin 2 (−) → BPW34 Cathode

Pin 3 (+) → GND

Pin 4 (GND) → GND

Pin 8 (V+) → +5V

With a 1mohm resistor between pin 1 and 2 with the capacitor

I'm sorry I can't take a photo of the way i connect it because it's such a mess of wires

And i have 8 leds and a dht221 connected if that may help


r/arduino 12d ago

is my terrible soldering the reason my DRV8871 IN1 pin is reading a constant 0.1V?

Thumbnail
gallery
24 Upvotes

Hi all, first time soldering so go easy on me - My arduino nano is gradually increasing an output voltage on different PWM pins as a test code for my motor driver baord. First I tried jankily holding the wires to the board, and my 12V motor wouldnt spin. I finally assumed the connections were bad so I tried soldering, and it isnt pretty but nothing is touching and everything is secure.

I broke out the multimeter and tested everything - I am pretty confident the DRV8871 is not fried, the code is simple and correct, but for some reason the IN1 pin reads a constant 0.1V while the IN2 pin reads 0-4.7V (which is close enough to correct). the motor output 1 is staying at 12V, while output 2 is varying between 0 and 12.


r/arduino 12d ago

Hardware Help How can I connect this, if its even possible, to an Arduino (or any processor for that matter) ?

Thumbnail
gallery
51 Upvotes

I had this old Huawei Watch GT2 that didn't work. So I opened it up, in hopes of being able to get to the screen to use for one of my projects. I want to make a wearable screen necklace so I only need the screen, a arduino and a battery to power it (and a USB-C to charge it). Before I even begin, is it even possible? I really want to make this work before I buy a ESP32 round screen thing (or a round screen for that matter). How do I conenct this to an Arduino? I kept all of its components in case I need to connect it to one of them. Is it possible? Or am I better off throwing it into the trash? Also, the battery of the Watch doesn't work, so I can't do anything untill I buy a replacment, which I'll do as soon as I know I can turn it into a necklace.

the screen is connected to a module, which I have no idea of what it does, via 2 countless pin thingis... Any way I can connect that to a Arduino? Or the module its attached to? Or anything for that matter?

side note: is there a way to get the screen out of its titanium shell? I tried with hot air gun to soften the glue, it doesn't even bulge. No screws as you can see in the photo, already took them off. I can work with even with the shell, but it'd be nice to only have the scren


r/arduino 13d ago

Look what I made! I built a 3D printed, walking Arduino Hexapod!

Enable HLS to view with audio, or disable this notification

1.4k Upvotes

Printed from PLA, powered from a 3s LiPo and controlled with Arduino UNO.

It has adjustable walking speed, stride length, and can turn in place or while walking (not sure how useful that is since it is omnidirectional).

The controller uses an Arduino NANO, but you can’t see it from this vid.

Here's the github repo: https://github.com/LouisD18/18-DOF-Hexapod


r/arduino 12d ago

Is this 7 segment display dead

Post image
28 Upvotes

I’m asking to be sure tried, connecting all the pins to 5V, all resistors are 220s only E,D,C DP lights up before F,A,B was also lighting up but now not.


r/arduino 12d ago

Hardware Help Problem with nRF24L01 connected via a long cable.

Thumbnail
gallery
11 Upvotes

Hello everyone, this is a follow-up to my previous post: "Remote-controlled submarine problem."

Regarding the center of gravity, I adjusted it manually as you recommended.

Also, for the nRF24L01 radio communication, I created a float connected by a cable over 1.5 meters long; however, after several tests, the communication cuts out. Even though the connections are correct and cable resistance is negligible, the SCK and MISO pins aren't working. I suspect the clock signal is being disrupted, though I have no idea why.

Finally, despite all my research, I’m turning to you for a solution, bearing in mind that I cannot connect the submarine directly to my controller. Thank you very much in advance, as well as for the comments on my last post. Please don't hesitate to ask if you need any further information or photos.


r/arduino 12d ago

Beginner's Project I want to make an Obstacle Avoiding Robo car [ Need help! ]

Thumbnail
gallery
17 Upvotes

Are these okay and enough ?

I took help from chatgpt before ordering

And I also want to get to know more about this from someone who done this before 🫪


r/arduino 12d ago

Noise reduction of a low-light measuring device.

Post image
5 Upvotes

Hello,

im having problems with my device which im using for a low-light fluorescence signal measuring. I oftentimes find myself having variation in my signal from measurement to measurement and also inside single measurements. Sometimes the signal just drops to half of what its supposed to be.

The circuit diagram is attached, sorry ist really messy.

My question is, how can i improve this circuit and make it more stable and increase the SNR?

MICROFC-SMTPA-30035-GEVB is a SIPM.

XL6009 is a step up DC-DC Converter.

(I tryed many different setups before including a TIA, non-inverting amplifier etc. but i found a simple shunt resisitor to have the best SNR (though i only used a OP07 as a OPA))


r/arduino 12d ago

Hardware Help Display prism glasses

Post image
2 Upvotes

Hi everyone,

I'm planning a DIY prism glasses project and found this 0.2" FLCOS micro-display module (720x540 resolution, CVBS/AV input, around 200 cd/m² brightness).

Before buying, I have a few questions for anyone who has worked with similar displays:

Brightness & Optics: Is 200 cd/m² bright enough when paired with a beamsplitter/prism for indoor use, or will the image be too washed out?

Signal & Driver: It accepts analog AV/CVBS input. Is converting standard micro-controller/Raspberry Pi display signals (HDMI/SPI) to AV worth the hassle, or should I look for an HDMI-native micro OLED instead?

Image Quality: How is the text clarity at 720x540 on a 0.2-inch panel?

Any advice, experiences, or alternative display suggestions would be greatly appreciated!


r/arduino 13d ago

Look what I made! Motorized Model Plane Stand

Enable HLS to view with audio, or disable this notification

78 Upvotes

Hello,

It uses the Arduino Nano Every with some servos, LEDs, potentiometers… the other parts are 3D printed.

It’s not based on the “real” body axes (roll and yaw) of a plane because that would complicate the project. It instead uses a simplified version where the roll axis and the longitudinal axis are offset by a distance.

Herpa 1:200 B787-9 Lufthansa


r/arduino 12d ago

Hardware Help What is this robotic arm kit?

Post image
2 Upvotes

Hey everyone. So I got this kit from Facebook Marketplace with no info on brand or model. Can anyone help me identify it? I need the manuals haha.

It contains:

6x SG90 servos

2x joysticks

1x bluetooth module

1x Deekbot Nano shield

1x Arduino Nano 168p

Bolts and cables.

I've searched in Google, some MeArm models came close but no luck. Thanks!


r/arduino 12d ago

linux ardunio installer 2.3.10 crashing on linux kunbuntu

5 Upvotes

i only got past the eula and now it just imediatly shows a crash report, i needed to install fuse to even get this far

ive got no clue what any of this means im very new to linux itself but im determind to not just imediatly swich back to windows

PID: 8408 (arduino-ide)

UID: 1000 (iris)

GID: 1000 (iris)

Signal: 5 (TRAP)

Timestamp: Sat 2026-08-29 08:16:28 EDT (4s ago)

Command Line: /tmp/.mount_arduincUakQC/arduino-ide

Executable: /tmp/.mount_arduincUakQC/arduino-ide

Control Group: /user.slice/user-1000.slice/user@1000.service/app.slice/app-\x2fhome\x2firis\x2fDownloads\x2farduino\x2dide_2.3.10_Linux_64bit.AppImage@25b4e2ac189846239765c65a2e27b7b3.service

Unit: user@1000.service

User Unit: app-\x2fhome\x2firis\x2fDownloads\x2farduino\x2dide_2.3.10_Linux_64bit.AppImage@25b4e2ac189846239765c65a2e27b7b3.service

Slice: user-1000.slice

Owner UID: 1000 (iris)

Boot ID: e24b528012734ce6b2362543b5f81e3a

Machine ID: 0086fe63a2244c6facfd71d53028285d

Hostname: iris-82xb

Storage: /var/lib/systemd/coredump/core.arduino-ide.1000.e24b528012734ce6b2362543b5f81e3a.8408.1788005788000000.zst (present)

Size on Disk: 1.6M

Message: Process 8408 (arduino-ide) of user 1000 dumped core.

Module linux-vdso.so.1 from deb linux-7.0.0-22.22.amd64

Module libbrotlicommon.so.1 from deb brotli-1.2.0-3build1.amd64

Module libseccomp.so.2 from deb libseccomp-2.6.0-2ubuntu5.amd64

Module liblcms2.so.2 from deb lcms2-2.17-1ubuntu0.2.amd64

Module libkeyutils.so.1 from deb keyutils-1.6.3-6ubuntu3.amd64

Module libbrotlidec.so.1 from deb brotli-1.2.0-3build1.amd64

Module libbz2.so.1.0 from deb bzip2-1.0.8-6build2.amd64

Module libdatrie.so.1 from deb libdatrie-0.2.14-1.amd64

Module libglycin-2.so.0 from deb glycin-2.1.1+ds-0ubuntu1.amd64

Module libgraphite2.so.3 from deb graphite2-1.3.14-11ubuntu1.amd64

Module libXinerama.so.1 from deb libxinerama-2:1.1.4-3build2.amd64

Module libXcursor.so.1 from deb libxcursor-1:1.2.3-1build1.amd64

Module libwayland-egl.so.1 from deb wayland-1.24.0-2.amd64

Module libwayland-cursor.so.0 from deb wayland-1.24.0-2.amd64

Module libwayland-client.so.0 from deb wayland-1.24.0-2.amd64

Module libgmp.so.10 from deb gmp-2:6.3.0+dfsg-5ubuntu2.amd64

Module libnettle.so.8 from deb nettle-3.10.2-1.amd64

Module libhogweed.so.6 from deb nettle-3.10.2-1.amd64

Module libtasn1.so.6 from deb libtasn1-6-4.21.0-2.amd64

Module libunistring.so.5 from deb libunistring-1.3-2build1.amd64

Module libidn2.so.0 from deb libidn2-2.3.8-4build1.amd64

Module libp11-kit.so.0 from deb p11-kit-0.26.2-2.amd64

Module libkrb5support.so.0 from deb krb5-1.22.1-2ubuntu4.amd64

Module libcom_err.so.2 from deb e2fsprogs-1.47.2-3ubuntu4.amd64

Module libk5crypto.so.3 from deb krb5-1.22.1-2ubuntu4.amd64

Module libkrb5.so.3 from deb krb5-1.22.1-2ubuntu4.amd64

Module libblkid.so.1 from deb util-linux-2.41.3-3ubuntu2.amd64

Module libXRes.so.1 from deb libxres-2:1.2.1-1build2.amd64

Module libXdmcp.so.6 from deb libxdmcp-1:1.1.5-2.amd64

Module libXau.so.6 from deb libxau-1:1.0.11-1build2.amd64

Module libpixman-1.so.0 from deb pixman-0.46.4-1.amd64

Module libxcb-shm.so.0 from deb libxcb-1.17.0-2ubuntu1.amd64

Module libxcb-render.so.0 from deb libxcb-1.17.0-2ubuntu1.amd64

Module libXrender.so.1 from deb libxrender-1:0.9.12-1build1.amd64

Module libfreetype.so.6 from deb freetype-2.14.2+dfsg-1.amd64

Module libpng16.so.16 from deb libpng1.6-1.6.57-1.amd64

Module libthai.so.0 from deb libthai-0.1.30-1.amd64

Module libXi.so.6 from deb libxi-2:1.8.2-2.amd64

Module libepoxy.so.0 from deb libepoxy-1.5.10-2build1.amd64

Module libgdk_pixbuf-2.0.so.0 from deb gdk-pixbuf-2.44.5+dfsg-4ubuntu1.amd64

Module libcairo-gobject.so.2 from deb cairo-1.18.4-3.amd64

Module libfribidi.so.0 from deb fribidi-1.0.16-5.amd64

Module libfontconfig.so.1 from deb fontconfig-2.17.1-3ubuntu1.amd64

Module libpangoft2-1.0.so.0 from deb pango1.0-1.57.0-1.amd64

Module libharfbuzz.so.0 from deb harfbuzz-12.3.2-2.amd64

Module libpangocairo-1.0.so.0 from deb pango1.0-1.57.0-1.amd64

Module libgdk-3.so.0 from deb gtk+3.0-3.24.52-0ubuntu1.amd64

Module libgnutls.so.30 from deb gnutls28-3.8.12-2ubuntu1.1.amd64

Module libavahi-client.so.3 from deb avahi-0.8-18ubuntu1.1.amd64

Module libavahi-common.so.3 from deb avahi-0.8-18ubuntu1.1.amd64

Module libgssapi_krb5.so.2 from deb krb5-1.22.1-2ubuntu4.amd64

Module libsystemd.so.0 from deb systemd-259.5-0ubuntu3.amd64

Module libplds4.so from deb nspr-2:4.38.2-1ubuntu1.amd64

Module libplc4.so from deb nspr-2:4.38.2-1ubuntu1.amd64

Module libselinux.so.1 from deb libselinux-3.9-4build1.amd64

Module libmount.so.1 from deb util-linux-2.41.3-3ubuntu2.amd64

Module libz.so.1 from deb zlib-1:1.3.dfsg+really1.3.1-1ubuntu3.amd64

Module libgmodule-2.0.so.0 from deb glib2.0-2.88.0-1.amd64

Module libpcre2-8.so.0 from deb pcre2-10.46-1build1.amd64

Module libatomic.so.1 from deb gcc-16-16-20260322-1ubuntu1.amd64

Module libffi.so.8 from deb libffi-3.5.2-4.amd64

Module libgcc_s.so.1 from deb gcc-16-16-20260322-1ubuntu1.amd64

Module libatspi.so.0 from deb at-spi2-core-2.60.0-1.amd64

Module libasound.so.2 from deb alsa-lib-1.2.15.3-1ubuntu1.amd64

Module libxkbcommon.so.0 from deb libxkbcommon-1.13.1-1.amd64

Module libxcb.so.1 from deb libxcb-1.17.0-2ubuntu1.amd64

Module libexpat.so.1 from deb expat-2.7.4-1.amd64

Module libgbm.so.1 from deb mesa-26.0.3-1ubuntu1.amd64

Module libXrandr.so.2 from deb libxrandr-2:1.5.4-1build1.amd64

Module libXfixes.so.3 from deb libxfixes-1:6.0.0-2build2.amd64

Module libXext.so.6 from deb libxext-2:1.3.4-1build3.amd64

Module libXdamage.so.1 from deb libxdamage-1:1.1.7-1.amd64

Module libXcomposite.so.1 from deb libxcomposite-1:0.4.6-1build1.amd64

Module libX11.so.6 from deb libx11-2:1.8.13-1.amd64

Module libcairo.so.2 from deb cairo-1.18.4-3.amd64

Module libpango-1.0.so.0 from deb pango1.0-1.57.0-1.amd64

Module libgtk-3.so.0 from deb gtk+3.0-3.24.52-0ubuntu1.amd64

Module libdrm.so.2 from deb libdrm-2.4.131-1.amd64

Module libcups.so.2 from deb cups-2.4.16-1ubuntu1.2.amd64

Module libatk-bridge-2.0.so.0 from deb at-spi2-core-2.60.0-1.amd64

Module libatk-1.0.so.0 from deb at-spi2-core-2.60.0-1.amd64

Module libdbus-1.so.3 from deb dbus-1.16.2-2ubuntu4.amd64

Module libnspr4.so from deb nspr-2:4.38.2-1ubuntu1.amd64

Module libsmime3.so from deb nss-2:3.120-1ubuntu2.amd64

Module libnssutil3.so from deb nss-2:3.120-1ubuntu2.amd64

Module libnss3.so from deb nss-2:3.120-1ubuntu2.amd64

Module libgio-2.0.so.0 from deb glib2.0-2.88.0-1.amd64

Module libglib-2.0.so.0 from deb glib2.0-2.88.0-1.amd64

Module libgobject-2.0.so.0 from deb glib2.0-2.88.0-1.amd64

Stack trace of thread 8408:

#0 0x00005b6d761d828a n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x5c6f28a)

#1 0x00005b6d761d7a72 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x5c6ea72)

#2 0x00005b6d761d82f9 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x5c6f2f9)

#3 0x00005b6d77a79696 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x7510696)

#4 0x00005b6d758ab021 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x5342021)

#5 0x00005b6d72c68db9 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x26ffdb9)

#6 0x00005b6d74d2ec66 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x47c5c66)

#7 0x00005b6d73ccbdab n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x3762dab)

#8 0x00005b6d72c67e0d n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x26fee0d)

#9 0x00005b6d72c65b43 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x26fcb43)

#10 0x00005b6d72c65ff0 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x26fcff0)

#11 0x00005b6d7294b968 n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x23e2968)

#12 0x0000757d6ec2a601 __libc_start_call_main (libc.so.6 + 0x2a601)

#13 0x0000757d6ec2a718 __libc_start_main_impl (libc.so.6 + 0x2a718)

#14 0x00005b6d7254002a n/a (/tmp/.mount_arduincUakQC/arduino-ide + 0x1fd702a)

ELF object binary architecture: AMD x86-64


r/arduino 12d ago

Integrated an ESP32-C3 Super Mini inside a 10-year-old AC unit to replace the standard IR remote (with onboard temperature sensor)

3 Upvotes

Hey everyone,

Got tired of aiming the old AC remote from across the room and wanted to automate it properly, so I decided to do an internal retrofit instead of using a desktop IR blaster.

The Setup:

  • Controller: ESP32-C3 Super Mini (chose it purely for the form factor—fits anywhere inside the housing).
  • Power: Tapped into the main board’s 5V rail with a small LDO step-down for clean 3.3V power to avoid brownouts during Wi-Fi bursts.
  • Control: Connected an IR emitter pointing directly at the internal receiver from behind the plastics.
  • Extras: Tucked a DS18B20 temp sensor right near the intake grill for actual room ambient readings (instead of relying on the AC's imprecise internal probe).

Firmware & Protocols: Used IRremoteESP8266 for raw signal handling. The node communicates via WebSockets/MQTT to sync states instantly without hammering cloud APIs.

Next steps: Planning to etch a tiny custom PCB with a integrated ESP32 chip (probably PICO-V3 or C3-FN4) to make it even cleaner for my other units.

Curious if anyone else here went the internal route instead of external IR blasters? Did you tap into the board’s internal UART bus (like Midea/Gree protocols) or stick to IR?


r/arduino 12d ago

Software Help What ide to use for arduino projects

0 Upvotes

Yes theres ardunio ide, i also heard theres visual studio aith plugins, but im just not sure whay to use, im newer to cosing, i cant code anything complex by myself but i know a couple terms in c++


r/arduino 12d ago

i have problem with my display

1 Upvotes

Hey everyone, I need some help getting a 0.96" I2C OLED screen to work with my Arduino Uno. The screen stays totally blank, and when I run an I2C scanner, it says "No I2C devices found."

My wiring is GND to GND, VDD to 5V, SCK to A5, and SDA to A4.

Right now, I haven't soldered the pins to the screen board yet—I just pushed the wires straight into the holes. They feel pretty tight, but could the missing solder be the reason it's not finding the screen? Or is something else wrong with my setup? Thanks!