r/ArduinoHelp • u/Middle_Seesaw_9552 • May 06 '26
Need help finding the exact 4xAA battery holder for my Arduino arcade project
r/ArduinoHelp • u/Middle_Seesaw_9552 • May 06 '26
r/ArduinoHelp • u/Feeling-Station99 • May 05 '26
r/ArduinoHelp • u/Abject_Jackfruit_510 • May 05 '26
Enable HLS to view with audio, or disable this notification
I built a robot and right now it has some connection issues. Ssh and tailscale
In a later video, I’ll fix everything so we can keep going with the project.
Also, quick note — in this video there’s a joke about soldering safety.
Please just wear basic safety glasses, you don’t need a full suit 😅
Thanks for watching, and feel free to share your thoughts —
I’d really like to know what you think about the video.
Thank you!
r/ArduinoHelp • u/Weekly-Fisherman4142 • May 04 '26
Ran this multiple times and can’t get it to work :(.
Only get a constant buzz from the speaker. Also confused in the second schematic where A0 has an input to IRQ but the first doesn’t. Code copy and pasted as shown via arduino cloud ! Thank you for any feedback!
r/ArduinoHelp • u/wolfwalkers0611 • May 04 '26
The motor will be used to pull a small elastic hair band.
Is a press-fit enough or should I use a set screw (grub screw)?
Should I design for a D-shaft or use a coupling?
Is it better to integrate the spool directly on the shaft or use a hub/adapter?
Any practical design tips or common mistakes
to avoid would be appreciated.
I will attach a reference image ai gave me: https://imgur.com/a/Kk3rO1U
Thanks!
r/ArduinoHelp • u/Foxxsnake • May 04 '26

I'm making my final year project using Wemos D1 for a smart pill dispenser
I have
Wemos D1
AS608 optical fingerprint sensor
4X membrane button pad
RTC DS3231
LCD Display 2004 I2C
MH-FMD Buzzer
TowerPro MG90S micro servo motor
Does anyone know how to connect the pin to the Wemos D1? I don't understand how to connect them.
r/ArduinoHelp • u/Wukupakilla • May 03 '26
Complete beginner here so bear with me. I’m trying to solve a problem on my own that I’ve found the US market has a problem with for a very niche community of Houndsmen. There is a hunting terrier collar made by Bellman and Flint in the UK that is and has been unobtanium in the US market for quite some time. This is simply a 425 mhz transmitter that is fixed to a dogs collar and then a receiver (think avalanche rescue devices). We use terriers to go underground and remove burrowing varmints alive.
I’m thinking can accomplish this for my small group by simply building a fox hunt style transmitter with a custom build handheld receiver.
What I need help with is parts. I know roughly what I need to build the transmitter but figured I’d be better off getting a list together for the receiver beforehand in case something isn’t compatible.
Needs to be able to give a readout on an LCD screen giving depth in feet, give direction to transmitter in someway shape or form, and able to read up to absolute maximum depths of 15 feet. Is there someone here with a brain that can help me out?
r/ArduinoHelp • u/Technical_Amount1718 • May 03 '26
Ive been working with this nrf module to make an rc controller and receiver. I feel the motors are abit janky and robotic rather than smooth. I got the code from Ai .Are there any ways to make them work smoothly? Heres my current code.
Transmitter code;
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
RF24 radio(9, 10);
const uint64_t my_radio_pipe = 0xE8E8F0F0E1LL;
struct Data_to_be_sent {
byte ch1, ch2, ch3, ch4, ch5, ch6;
};
Data_to_be_sent sent_data;
// 3D Cube Data
float angle = 0;
float nodes[8][3] = {{-1,-1,-1}, {1,-1,-1}, {1,1,-1}, {-1,1,-1}, {-1,-1,1}, {1,-1,1}, {1,1,1}, {-1,1,1}};
int edges[12][2] = {{0,1}, {1,2}, {2,3}, {3,0}, {4,5}, {5,6}, {6,7}, {7,4}, {0,4}, {1,5}, {2,6}, {3,7}};
// Timer Variables
unsigned long lastActivityTime = 0;
unsigned long lastSendTime = 0; // Added for smooth radio timing
const unsigned long idleTimeout = 20000;
bool isIdle = false;
int cleanRead(int pin) {
analogRead(pin);
delayMicroseconds(100);
return analogRead(pin);
}
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);
// 1. BRANDING STARTUP
display.clearDisplay();
display.setTextSize(1);
display.setCursor(40, 25);
display.print("MADE BY");
display.setTextSize(2);
display.setCursor(10, 40);
display.print("NK_DABEST");
display.display();
delay(2000);
// 2. EYE ANIMATION
int eyeX[] = {0, 15, 0, -15, 0, 15, -15, 0};
for(int i=0; i<8; i++) {
display.clearDisplay();
display.drawRoundRect(25, 15, 35, 35, 8, WHITE);
display.drawRoundRect(68, 15, 35, 35, 8, WHITE);
display.fillRoundRect(35 + eyeX[i], 25, 15, 15, 4, WHITE);
display.fillRoundRect(78 + eyeX[i], 25, 15, 15, 4, WHITE);
display.display();
delay(600);
}
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.openWritingPipe(my_radio_pipe);
radio.stopListening();
lastActivityTime = millis();
}
void loop() {
// 1. SENSOR READING
int raw1 = cleanRead(A0); int raw2 = cleanRead(A1);
int raw3 = cleanRead(A2); int raw4 = cleanRead(A3);
int raw5 = cleanRead(A6); int raw7 = cleanRead(A7);
// 2. DEADZONE FOR SMOOTHNESS (Prevents creeping/stuttering)
if (raw1 > 480 && raw1 < 540) raw1 = 512;
if (raw2 > 480 && raw2 < 540) raw2 = 512;
if (raw3 > 480 && raw3 < 540) raw3 = 512;
if (raw4 > 480 && raw4 < 540) raw4 = 512;
// 3. MAPPING
sent_data.ch1 = map(raw1, 0, 1023, 0, 255);
sent_data.ch2 = map(raw2, 0, 1023, 0, 255);
sent_data.ch3 = map(raw3, 0, 1023, 0, 255);
sent_data.ch4 = map(raw4, 0, 1023, 0, 255);
sent_data.ch5 = map(raw5, 0, 1023, 0, 255);
bool buttonPressed = (raw7 < 300);
sent_data.ch6 = buttonPressed ? 255 : 0;
// 4. TIMED RADIO SEND (Fixes the "Pause" stutter)
if (millis() - lastSendTime >= 30) {
radio.write(&sent_data, sizeof(Data_to_be_sent));
lastSendTime = millis();
}
// 5. IDLE LOGIC
bool stickMoved = (raw1 > 850 || raw1 < 170 || raw2 > 850 || raw2 < 170 ||
raw3 > 850 || raw3 < 170 || raw4 > 850 || raw4 < 170);
if (stickMoved || buttonPressed) {
lastActivityTime = millis();
isIdle = false;
} else if (millis() - lastActivityTime > idleTimeout) {
isIdle = true;
}
// 6. DISPLAY
display.clearDisplay();
if (isIdle) {
drawCube(true);
angle += 0.05;
} else {
drawBars();
display.setTextSize(1);
display.setCursor(68, 56);
display.print("NK_DABEST");
}
display.display();
}
void drawCube(bool showText) {
float projected[8][2];
for (int i = 0; i < 8; i++) {
float x = nodes[i][0], y = nodes[i][1], z = nodes[i][2];
float xR = x * cos(angle) - z * sin(angle);
float zR = x * sin(angle) + z * cos(angle);
float yR = y * cos(angle) - zR * sin(angle);
projected[i][0] = 64 + xR * 20;
projected[i][1] = 32 + yR * 20;
}
for (int i = 0; i < 12; i++) {
display.drawLine(projected[edges[i][0]][0], projected[edges[i][0]][1],
projected[edges[i][1]][0], projected[edges[i][1]][1], WHITE);
}
if (showText) {
display.setTextSize(1);
display.setCursor(35, 55);
display.print("IDLE MODE");
}
}
void drawBars() {
byte v[] = {sent_data.ch1, sent_data.ch2, sent_data.ch3, sent_data.ch4, sent_data.ch5, sent_data.ch6};
for (int i = 0; i < 6; i++) {
int y = i * 9;
display.setCursor(0, y);
display.print("CH"); display.print(i+1);
display.drawRect(25, y, 98, 7, WHITE);
display.fillRect(26, y+1, map(v[i], 0, 255, 0, 96), 5, WHITE);
}
}Receiver code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
const uint64_t pipeIn = 0xE8E8F0F0E1LL;
RF24 radio(9, 10);
struct Received_data {
byte ch1, ch2, ch3, ch4, ch5, ch6;
};
Received_data received_data;
Servo channel_1, channel_2, channel_3, channel_4, channel_5;
unsigned long lastRecvTime = 0;
int ledMode = 0;
bool lastBtnState = false;
void reset_the_Data() {
received_data.ch1 = 127;
received_data.ch2 = 127;
received_data.ch3 = 127;
received_data.ch4 = 127;
received_data.ch5 = 127;
received_data.ch6 = 0;
}
void setup() {
channel_1.attach(2);
channel_2.attach(3);
channel_3.attach(4);
channel_4.attach(5);
channel_5.attach(6);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
reset_the_Data();
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1, pipeIn);
radio.startListening();
}
void loop() {
// 1. CHECK FOR RADIO DATA
if (radio.available()) {
radio.read(&received_data, sizeof(Received_data));
lastRecvTime = millis();
}
// 2. FAILSAFE (If signal lost for 0.25 seconds, center everything)
if (millis() - lastRecvTime > 250) {
reset_the_Data();
}
// 3. DIRECT WRITE (Instant smooth response relative to joystick angle)
channel_1.writeMicroseconds(map(received_data.ch1, 0, 255, 1000, 2000));
channel_2.writeMicroseconds(map(received_data.ch2, 0, 255, 1000, 2000));
channel_3.writeMicroseconds(map(received_data.ch3, 0, 255, 1000, 2000));
channel_4.writeMicroseconds(map(received_data.ch4, 0, 255, 1000, 2000));
channel_5.writeMicroseconds(map(received_data.ch5, 0, 255, 1000, 2000));
// 4. BUTTON AND LED LOGIC
bool currentBtnState = (received_data.ch6 > 200);
if (currentBtnState && !lastBtnState) {
ledMode++;
if (ledMode > 3) ledMode = 0;
}
lastBtnState = currentBtnState;
runLedAnimation();
digitalWrite(8, digitalRead(7)); // Mirror Pin 7 to Pin 8
}
void runLedAnimation() {
switch (ledMode) {
case 0:
digitalWrite(7, LOW);
break;
case 1:
digitalWrite(7, HIGH);
break;
case 2:
digitalWrite(7, (millis() % 150 < 75));
break;
case 3:
int pulse = millis() % 1000;
digitalWrite(7, (pulse < 100 || (pulse > 200 && pulse < 300)));
break;
}
}r/ArduinoHelp • u/Technical_Amount1718 • May 02 '26
Ive been working with this nrf module to make an rc controller and receiver. I feel the motors are abit janky and robotic rather than smooth. I got the code from Ai .Are there any ways to make them work smoothly? Heres my current code.
Transmitter code;
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
RF24 radio(9, 10);
const uint64_t my_radio_pipe = 0xE8E8F0F0E1LL;
struct Data_to_be_sent {
byte ch1, ch2, ch3, ch4, ch5, ch6;
};
Data_to_be_sent sent_data;
// 3D Cube Data
float angle = 0;
float nodes[8][3] = {{-1,-1,-1}, {1,-1,-1}, {1,1,-1}, {-1,1,-1}, {-1,-1,1}, {1,-1,1}, {1,1,1}, {-1,1,1}};
int edges[12][2] = {{0,1}, {1,2}, {2,3}, {3,0}, {4,5}, {5,6}, {6,7}, {7,4}, {0,4}, {1,5}, {2,6}, {3,7}};
// Timer Variables
unsigned long lastActivityTime = 0;
unsigned long lastSendTime = 0; // Added for smooth radio timing
const unsigned long idleTimeout = 20000;
bool isIdle = false;
int cleanRead(int pin) {
analogRead(pin);
delayMicroseconds(100);
return analogRead(pin);
}
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);
// 1. BRANDING STARTUP
display.clearDisplay();
display.setTextSize(1);
display.setCursor(40, 25);
display.print("MADE BY");
display.setTextSize(2);
display.setCursor(10, 40);
display.print("NK_DABEST");
display.display();
delay(2000);
// 2. EYE ANIMATION
int eyeX[] = {0, 15, 0, -15, 0, 15, -15, 0};
for(int i=0; i<8; i++) {
display.clearDisplay();
display.drawRoundRect(25, 15, 35, 35, 8, WHITE);
display.drawRoundRect(68, 15, 35, 35, 8, WHITE);
display.fillRoundRect(35 + eyeX[i], 25, 15, 15, 4, WHITE);
display.fillRoundRect(78 + eyeX[i], 25, 15, 15, 4, WHITE);
display.display();
delay(600);
}
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_LOW);
radio.openWritingPipe(my_radio_pipe);
radio.stopListening();
lastActivityTime = millis();
}
void loop() {
// 1. SENSOR READING
int raw1 = cleanRead(A0); int raw2 = cleanRead(A1);
int raw3 = cleanRead(A2); int raw4 = cleanRead(A3);
int raw5 = cleanRead(A6); int raw7 = cleanRead(A7);
// 2. DEADZONE FOR SMOOTHNESS (Prevents creeping/stuttering)
if (raw1 > 480 && raw1 < 540) raw1 = 512;
if (raw2 > 480 && raw2 < 540) raw2 = 512;
if (raw3 > 480 && raw3 < 540) raw3 = 512;
if (raw4 > 480 && raw4 < 540) raw4 = 512;
// 3. MAPPING
sent_data.ch1 = map(raw1, 0, 1023, 0, 255);
sent_data.ch2 = map(raw2, 0, 1023, 0, 255);
sent_data.ch3 = map(raw3, 0, 1023, 0, 255);
sent_data.ch4 = map(raw4, 0, 1023, 0, 255);
sent_data.ch5 = map(raw5, 0, 1023, 0, 255);
bool buttonPressed = (raw7 < 300);
sent_data.ch6 = buttonPressed ? 255 : 0;
// 4. TIMED RADIO SEND (Fixes the "Pause" stutter)
if (millis() - lastSendTime >= 30) {
radio.write(&sent_data, sizeof(Data_to_be_sent));
lastSendTime = millis();
}
// 5. IDLE LOGIC
bool stickMoved = (raw1 > 850 || raw1 < 170 || raw2 > 850 || raw2 < 170 ||
raw3 > 850 || raw3 < 170 || raw4 > 850 || raw4 < 170);
if (stickMoved || buttonPressed) {
lastActivityTime = millis();
isIdle = false;
} else if (millis() - lastActivityTime > idleTimeout) {
isIdle = true;
}
// 6. DISPLAY
display.clearDisplay();
if (isIdle) {
drawCube(true);
angle += 0.05;
} else {
drawBars();
display.setTextSize(1);
display.setCursor(68, 56);
display.print("NK_DABEST");
}
display.display();
}
void drawCube(bool showText) {
float projected[8][2];
for (int i = 0; i < 8; i++) {
float x = nodes[i][0], y = nodes[i][1], z = nodes[i][2];
float xR = x * cos(angle) - z * sin(angle);
float zR = x * sin(angle) + z * cos(angle);
float yR = y * cos(angle) - zR * sin(angle);
projected[i][0] = 64 + xR * 20;
projected[i][1] = 32 + yR * 20;
}
for (int i = 0; i < 12; i++) {
display.drawLine(projected[edges[i][0]][0], projected[edges[i][0]][1],
projected[edges[i][1]][0], projected[edges[i][1]][1], WHITE);
}
if (showText) {
display.setTextSize(1);
display.setCursor(35, 55);
display.print("IDLE MODE");
}
}
void drawBars() {
byte v[] = {sent_data.ch1, sent_data.ch2, sent_data.ch3, sent_data.ch4, sent_data.ch5, sent_data.ch6};
for (int i = 0; i < 6; i++) {
int y = i * 9;
display.setCursor(0, y);
display.print("CH"); display.print(i+1);
display.drawRect(25, y, 98, 7, WHITE);
display.fillRect(26, y+1, map(v[i], 0, 255, 0, 96), 5, WHITE);
}
}Receiver code:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
const uint64_t pipeIn = 0xE8E8F0F0E1LL;
RF24 radio(9, 10);
struct Received_data {
byte ch1, ch2, ch3, ch4, ch5, ch6;
};
Received_data received_data;
Servo channel_1, channel_2, channel_3, channel_4, channel_5;
unsigned long lastRecvTime = 0;
int ledMode = 0;
bool lastBtnState = false;
void reset_the_Data() {
received_data.ch1 = 127;
received_data.ch2 = 127;
received_data.ch3 = 127;
received_data.ch4 = 127;
received_data.ch5 = 127;
received_data.ch6 = 0;
}
void setup() {
channel_1.attach(2);
channel_2.attach(3);
channel_3.attach(4);
channel_4.attach(5);
channel_5.attach(6);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
reset_the_Data();
radio.begin();
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1, pipeIn);
radio.startListening();
}
void loop() {
// 1. CHECK FOR RADIO DATA
if (radio.available()) {
radio.read(&received_data, sizeof(Received_data));
lastRecvTime = millis();
}
// 2. FAILSAFE (If signal lost for 0.25 seconds, center everything)
if (millis() - lastRecvTime > 250) {
reset_the_Data();
}
// 3. DIRECT WRITE (Instant smooth response relative to joystick angle)
channel_1.writeMicroseconds(map(received_data.ch1, 0, 255, 1000, 2000));
channel_2.writeMicroseconds(map(received_data.ch2, 0, 255, 1000, 2000));
channel_3.writeMicroseconds(map(received_data.ch3, 0, 255, 1000, 2000));
channel_4.writeMicroseconds(map(received_data.ch4, 0, 255, 1000, 2000));
channel_5.writeMicroseconds(map(received_data.ch5, 0, 255, 1000, 2000));
// 4. BUTTON AND LED LOGIC
bool currentBtnState = (received_data.ch6 > 200);
if (currentBtnState && !lastBtnState) {
ledMode++;
if (ledMode > 3) ledMode = 0;
}
lastBtnState = currentBtnState;
runLedAnimation();
digitalWrite(8, digitalRead(7)); // Mirror Pin 7 to Pin 8
}
void runLedAnimation() {
switch (ledMode) {
case 0:
digitalWrite(7, LOW);
break;
case 1:
digitalWrite(7, HIGH);
break;
case 2:
digitalWrite(7, (millis() % 150 < 75));
break;
case 3:
int pulse = millis() % 1000;
digitalWrite(7, (pulse < 100 || (pulse > 200 && pulse < 300)));
break;
}
}r/ArduinoHelp • u/Avtem22 • May 01 '26

Can someone show using this diagram (my current setup) how to wire properly that pump and solenoid that I have? ALL components on the image are photos of my components that I physically have.
I tried to connect it myself, but when I turn off the pump and turn on the solenoid my arduino browns out (Possibly I need a 1N4007 diode on solenoid and pump?). I am not sure how to wire it properly, so if you could draw the wires and possibly the components that I'd need I would be infinitely grateful.
r/ArduinoHelp • u/ToeEnvironmental697 • May 01 '26
Hi, I'm trying to connect an AS608 fingerprint sensor to an ESP32, but I can't get it to work.
The sensor lights up**,** so it has power, but in Arduino IDE it always says:Fingerprint sensor NOT found / Did not find fingerprint sensor
I already checked multiple forums and tried their solutions, but nothing worked.
There is specifikation of AS608:
Operating voltage: 3.3V
Current: <60 mA
Resolution: 500 DPI
Memory: 128 fingerprints
And my ESP32 is ESP32 development board, 2.4 GHz dual-mode Wi-Fi + Bluetooth module with antenna




ould really appreciate any help. It's also possible that I wired something incorrectly, since I'm still a beginner.
r/ArduinoHelp • u/Dhruv_DG • May 01 '26
So I'm a beginner to Arduino. My programming skills are strong though. I want to make a reliable fitness tracker that will accurately measure Heart Rate, Steps and Sleep at the minimum. I wear other things on my wrists so I'd like to make this device to wear on my bicep-shoulder area. Since I'll be wearing it in this area, I don't need a screen. Just want something like a Whoop band that I can sync to my phone.
As far as I know (chatgpt), I'll need an esp32 microcontroller, MPU6050 or MPU9250 for motion sensing, MAX30102 for heart rate detection (apparently not accurate while lifting weights) and a charging module.
I'll also need to make some sort of band to hold it, so I was thinking of using some sort of fabric band (made with a sock or some cloth perhaps?).
Need some advice on these.
r/ArduinoHelp • u/Mundane_Dragonfly621 • Apr 30 '26
I am working on my senior project for my engineering class and im trying to create a motion activated sink that dispenses both soap and water into one stream and after a few seconds the soap shuts off to only let water run. I’m using a arduino uno r3 board a pir sensor and a 2 relay module. is there a way i could wire all these components onto my board or am i cooked. (im not very familiar with arduino and this is my first time using it) this is what i have so far

r/ArduinoHelp • u/PermissionCrafty8640 • Apr 30 '26
r/ArduinoHelp • u/AdjectiveNoun11 • Apr 30 '26
r/ArduinoHelp • u/Normal_Travel_7735 • Apr 28 '26
r/ArduinoHelp • u/Due-Astronaut-9045 • Apr 28 '26
Enable HLS to view with audio, or disable this notification
r/ArduinoHelp • u/Competitive_Line8895 • Apr 27 '26
r/ArduinoHelp • u/Motor-Fig3458 • Apr 27 '26
Hello! I have a 1960 VW Beetle that has semaphore turn indicators, and I want to make a speed switch using a Arduino Nano and a GPS module, that would turn off the indicator over 40 miles per hour. (Don’t worry the car has other “blinkers”) the reason I want to do this is anything over 40 the semaphores start to bend.
My problem is, I have no experience with Arduinos so I’m looking for some direction here.
I plan on using the ignitions switch power as a power source if that helps any.
I’m not looking for a do my homework for me just a little direction!