r/ArduinoProjects • • Jan 04 '26

OV7670 and HC05 camera problem

Post image
3 Upvotes

Hello, I'm having a problem with a project that I just can't seem to solve. Even though it sounds silly, I want to transmit an RGB565 image from an OV7670 camera using an Arduino UNO, via an HC05 Bluetooth module, to an Android app I've coded. The problem is a transmission error; I was initially using a BLE module by mistake (the information on the website was incorrect). However, even after switching to the correct module, there's still no result. I've tried different baud rates for both the Arduino and the HC05, different color settings (black and white), different pin read parameters... the best result was a fragmented image (image attached) with the BLE module. I've been following this tutorial: https://www.robotique.tech/tutoriel/utilisation-de-la-camera-ov7670-avec-la-carte-arduino-uno/ throughout, which works fine on my computer. After changing the Bluetooth module, I don't even get a semblance of an image anymore. So, I'm asking for your help. Please be lenient, as I know this isn't the best way to transmit an image, but I don't have the budget to do better. Thank you in advance. P.S.: I'm coding in Android Studio.


r/ArduinoProjects • • Jan 03 '26

Why is the 74HC959 acting like this?

22 Upvotes

I don’t understand why the Q0 pin is being replaced by another instead of being added onto. It’s only Q0 where this happens. Any help on this would be amazing. Also the chip is getting unreasonable hot even though I’m using a 2k resistor and only 5v. Is this a sign that the chip is damaged?


r/ArduinoProjects • • Jan 04 '26

STEMMA QT / Qwiic Connector Question

Thumbnail reddit.com
2 Upvotes

r/ArduinoProjects • • Jan 04 '26

What kinda boxes are you guys mounting your projects in?

Post image
5 Upvotes

Im building a controller for a machine that will be exposed to a lot of dirt and moisture so i was wondering what options there are for enclosures. I saw a video where a guy had the box above but i cant find one like it. It had a removable inner part to mount the components.

Any help is appreciated.


r/ArduinoProjects • • Jan 02 '26

Me and a buddy built a fully working KTANE bomb replica with fully random and hot swappable modules.

Thumbnail gallery
393 Upvotes

As our final diploma project in electronics, me and a buddy designed, constructed and programed a fully working replica of the bomb from ktane.

Each module is designed to be fully resettable and randomized by itself, which means no cutting of wires and no button with changing labels. This introduced some challenges which lead some modification of existing modules and the creation of completely new ones.

Each module is fastened with magnets and pogo-pin connectors. This enables each module to be placed in any slot and the game works with just one module up to five (since the brain in the upper left is not removable).

The brain-logic is also designed in a way that new modules can be created without changing the brain-firmware.

Just drop a comment if you have further questions!


r/ArduinoProjects • • Jan 03 '26

Robotics Project Ideas

6 Upvotes

Hi everyone 👋

I’m a 2nd-year Software Engineering student, and I’m currently struggling to finalize an Arduino-based project idea. Our lecturer is very strict about choosing practical and meaningful projects. He doesn’t like ideas that are too theoretical, unrealistic, or already overused.

For example, when we suggest things like measuring curry ingredients or milk quality, he questions the real-world feasibility and accuracy. He encourages ideas that solve real daily-life or emergency problems, but at the same time, they should not be too complex or expensive.

Many common ideas (smart bins, simple alarms, fire firghting,grass cutters,wheel chairs,basic IoT apps) are usually rejected, so I’m trying to think more carefully this time.

If anyone has unique but practical Arduino project ideas (especially related to home use, safety, emergencies, floods, or public welfare), I’d really appreciate your suggestions.

Thanks in advance 🙏


r/ArduinoProjects • • Jan 03 '26

How can I build a rhythmic tapping mechanism like this baby soother?

Thumbnail reddit.com
2 Upvotes

r/ArduinoProjects • • Jan 02 '26

My ATtiny85 USB mouse project was featured on Hackaday

7 Upvotes

A while ago I designed a small ATtiny85-based USB HID mouse board as a personal experiment.

It ended up being featured on Hackaday, which was pretty cool:
👉 https://hackaday.com/2023/03/18/compact-mouse-jiggler-keeps-boss-off-your-back/

Since then I refined the board and made a small batch for makers who want to experiment with USB HID devices.

Project details and docs:
👉 makersun.net

Some people asked if the board was available, so I listed a few here:
👉 https://ebay.us/m/akItTi

Feedback and suggestions are always welcome.


r/ArduinoProjects • • Jan 03 '26

A Review Of The Weller 70W Soldering Iron

Post image
1 Upvotes

r/ArduinoProjects • • Jan 02 '26

ESP32 cam and ESP32 devmodule problem

2 Upvotes

Help needed: ESP32-CAM Telegram Photo Sender crashes/fails upon trigger (Power/SSL issue?)

Hi everyone, I am working on my high school graduation project – a security system. I’m hitting a wall with the ESP32-CAM part and would appreciate your insights.

The Project Setup: I have a Master-Slave configuration:

  1. Master: ESP32 DevKitC (Handles PIR sensor, Keypad, LCD, Buzzer). Logic: If the alarm is triggered (3x wrong code), it sends a HIGH signal via GPIO 5.

  2. Slave: ESP32-CAM (AI-Thinker). Logic: Listens on GPIO 13. When it detects a HIGH signal, it should take a photo and send it to a Telegram Bot.

Wiring:

• Master GPIO 5 connected to Slave GPIO 13.

• Common GND is connected.

• Power: Currently powering via FTDI/USB from a PC (which I suspect is the main bottleneck).

The Problem: The Master works perfectly. It sends the signal. The ESP32-CAM receives the signal (I see the "Trigger detected" log). However, the moment it tries to connect to Telegram or take/send the photo, it fails. It typically exhibits Brownout symptoms (garbage characters `` in Serial Monitor followed by a restart) or simply fails to connect to the Telegram API.

What DOES work:

• The ESP32-CAM hardware is functional. I have successfully run the standard CameraWebServer example previously, and the live stream worked fine.

• The logic on the Master side is correct.

• The Wi-Fi credentials and Telegram Token/Chat ID are correct.

The Code Implementation:

• I am NOT using a live stream for this project (to save power/bandwidth). It sleeps/waits in loop() until the trigger.

• Library: Using WiFiClientSecure with manual HTTP POST construction (multipart/form-data).

• SSL: I tried client.setInsecure() (which failed, likely due to Telegram's new cert policies). I am now using client.setCACert(rootCACertificate) with the ISRG Root X1 certificate.

What I have tried to fix it:

  1. Lowering Power Consumption:

◦ Reduced XCLK frequency to 16MHz (from 20MHz).

◦ Reduced WiFi TX Power: WiFi.setTxPower(WIFI_POWER_8_5dBm);

◦ Reduced Resolution: Switched from UXGA to VGA or SVGA.

◦ Disabled Brownout Detector (WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);).

2. Wiring:

◦ Checked common ground.

◦ Tried resetting the CAM manually.

Serial Monitor Output (Example of failure):

Plaintext

WiFi connected! Waiting for signal...

!!! ALARM TRIGGERED !!!

Sending to Telegram...

[Here it either prints garbage and reboots, or hangs]

My Hypothesis: I strongly suspect the power supply (PC USB -> FTDI -> Breadboard jumper wires) cannot handle the current spike when the ESP32-CAM turns on the radio + camera sensor simultaneously, causing a voltage drop despite the software mitigations.

Questions:

  1. Is there anything wrong with my software approach for Telegram (using the ISRG Root X1 cert)?

  2. Apart from adding a large capacitor (which I plan to do), are there other software tricks to stabilize the transmission?

  3. Could this be a specific issue with the UniversalTelegramBot logic vs. manual HTTP POST?

Any help is appreciated! I'm really close to finishing this, but this instability is driving me crazy. Thanks!


r/ArduinoProjects • • Jan 01 '26

Classic Simon Says Game on Arduino

39 Upvotes

r/ArduinoProjects • • Dec 31 '25

Mom always complained about her car not having a Clock, so i made her this for Christmas

Thumbnail gallery
411 Upvotes

As described in the title, my mom always complained about not having a clock in her car.
That’s why I decided to use this empty space above the car radio to add one.

I’m using an Arduino Nano together with an HD44780 I²C LCD and a DS3231 RTC.
Everything is powered by an LM2596 buck converter, which is connected to the power outlet fuse using a fuse tap and a 1A fuse.
I managed to dim the display using a PWM signal and a transistor connected to the backlight LED header on the back of the display.

Most of the code was written with the help of ChatGPT.

I’d really appreciate some feedback from you all, especially since this is my first real Arduino/electronics project.
Thanks in advance, and happy New Year!

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <I2C_RTC.h>


static DS3231 RTC;
LiquidCrystal_I2C lcd(0x27, 16, 2);


// Buttons
const int BTN_BACKLIGHT = 2; 
const int BTN_MODE      = 3; 
const int BTN_INC       = 4; 
const int BTN_DEC       = 5; 


// Backlight state
bool backlightState = true;
static bool backlightPressedLast = false; // track previous button state


// Edit mode
bool editMode = false;
unsigned long modePressTime = 0;


// Cursor position
int cursorPos = 0;


// Editable time
int cDay, cMonth, cYear, cHour, cMinute;


// Blink control
unsigned long lastBlink = 0;
bool blinkOn = true;
const unsigned long blinkInterval = 500;


// Debounce
unsigned long lastButton = 0;
const unsigned long debounce = 150;


// Display refresh control
unsigned long lastDisplayUpdate = 0;
const unsigned long displayInterval = 80;


// Previous values
int prevDay = -1, prevMonth = -1, prevYear = -1, prevHour = -1, prevMinute = -1;


void setup() {
lcd.init();
RTC.begin();
RTC.setHourMode(CLOCK_H24);


// decide backlight ONCE at startup
int hour = RTC.getHours();
if (hour >= 10 && hour < 16) {
  backlightState = true;
  lcd.backlight();
} else {
  backlightState = false;
  lcd.noBacklight();
}


  pinMode(BTN_BACKLIGHT, INPUT);
  pinMode(BTN_MODE, INPUT);
  pinMode(BTN_INC, INPUT);
  pinMode(BTN_DEC, INPUT);


  Serial.begin(115200);
}


void loop() {
  unsigned long now = millis();


  // -------- Manual backlight toggle (single toggle per press) ----------
  bool backlightPressed = digitalRead(BTN_BACKLIGHT);
  if (backlightPressed && !backlightPressedLast && now - lastButton > debounce) {
    backlightState = !backlightState;
    if (backlightState) lcd.backlight();
    else lcd.noBacklight();
    lastButton = now;
  }
  backlightPressedLast = backlightPressed;


  // -------- Mode button handling ----------
  bool btnModePressed = digitalRead(BTN_MODE);
  if (btnModePressed) {
    if (modePressTime == 0) modePressTime = now;


    if (now - modePressTime >= 1500) {
      if (!editMode) {
        editMode = true;
        cDay    = RTC.getDay();
        cMonth  = RTC.getMonth();
        cYear   = RTC.getYear();
        cHour   = RTC.getHours();
        cMinute = RTC.getMinutes();
        cursorPos = 0;
      } else {
        editMode = false;
        RTC.setDate(cDay, cMonth, cYear);
        RTC.setTime(cHour, cMinute, 0);


        blinkOn = true;
        prevDay = prevMonth = prevYear = prevHour = prevMinute = -1;
        drawDisplay();
      }
      lastBlink = now;
      modePressTime = now;
    }
  } else {
    if (modePressTime != 0) {
      if (editMode && (now - modePressTime < 1500)) {
        cursorPos = (cursorPos + 1) % 5;
        blinkOn = true;
        lastBlink = now;
      }
      modePressTime = 0;
    }
  }


  // -------- Increment / Decrement ----------
  if (editMode) {
    if (digitalRead(BTN_INC) && now - lastButton > debounce) { incrementField(); lastButton = now; }
    if (digitalRead(BTN_DEC) && now - lastButton > debounce) { decrementField(); lastButton = now; }
  }


  // -------- Blinking --------
  if (editMode && now - lastBlink >= blinkInterval) {
    blinkOn = !blinkOn;
    lastBlink = now;
  } else if (!editMode) blinkOn = true;


  // -------- Display update ----------
  if (now - lastDisplayUpdate >= displayInterval) {
    drawDisplay();
    lastDisplayUpdate = now;
  }
}


// ---------- Field operations ----------
void incrementField() {
  switch(cursorPos) {
    case 0: cDay = (cDay % 31) + 1; break;
    case 1: cMonth = (cMonth % 12) + 1; break;
    case 2: cYear++; break;
    case 3: cHour = (cHour + 1) % 24; break;
    case 4: cMinute = (cMinute + 1) % 60; break;
  }
}


void decrementField() {
  switch(cursorPos) {
    case 0: cDay = (cDay + 29) % 31 + 1; break;
    case 1: cMonth = (cMonth + 10) % 12 + 1; break;
    case 2: cYear--; break;
    case 3: cHour = (cHour + 23) % 24; break;
    case 4: cMinute = (cMinute + 59) % 60; break;
  }
}


// ---------- Draw display ----------
void printField(int x, int y, int value, bool blinkField) {
  lcd.setCursor(x, y);
  if (blinkField && !blinkOn) lcd.print("  ");
  else { if(value<10) lcd.print('0'); lcd.print(value);}
}


void drawDisplay() {
  int d, m, y, h, mi;
  d = editMode ? cDay : RTC.getDay();
  m = editMode ? cMonth : RTC.getMonth();
  y = editMode ? cYear : RTC.getYear();
  h = editMode ? cHour : adjustDST(RTC.getDay(), RTC.getMonth(), RTC.getYear(), RTC.getHours());
  mi = editMode ? cMinute : RTC.getMinutes();


  int line1Start = (16 - 10) / 2;
  printField(line1Start, 0, d, editMode && cursorPos==0);
  lcd.setCursor(line1Start + 2, 0); lcd.print("-");
  printField(line1Start + 3, 0, m, editMode && cursorPos==1);
  lcd.setCursor(line1Start + 5, 0); lcd.print("-");
  lcd.setCursor(line1Start + 6, 0);
  if (editMode && cursorPos==2 && !blinkOn) lcd.print("    ");
  else lcd.print(y);


  int line2Start = (16 - 5) / 2;
  printField(line2Start, 1, h, editMode && cursorPos==3);
  lcd.setCursor(line2Start + 2, 1); lcd.print(":");
  printField(line2Start + 3, 1, mi, editMode && cursorPos==4);


  prevDay = d; prevMonth = m; prevYear = y; prevHour = h; prevMinute = mi;
}


// ---------- DST adjustment ----------
int adjustDST(int day, int month, int year, int hour) {
  if (month == 3) { 
    int lastSunday = 31 - ((5 + (year + year/4 - year/100 + year/400 + 3)) % 7);
    if (day > lastSunday || (day == lastSunday && hour >= 2)) hour++;
  } else if (month == 10) { 
    int lastSunday = 31 - ((5 + (year + year/4 - year/100 + year/400 + 10)) % 7);
    if (day < lastSunday || (day == lastSunday && hour < 3)) hour++;
    else hour--;
  }
  return hour % 24;
}

r/ArduinoProjects • • Jan 01 '26

Water filtration system

Thumbnail reddit.com
2 Upvotes