How to come up with these ideas?

Hey guys,

I have the Elegoo 2560 mega kit and know how to work with the arduino, sensors and modules but I don't really know how to come up with cool project ideas that apply these to automate/help me in my daily life. I saw these 2 simple, yet cool projects:

https://youtu.be/VzPWT4HbCbM?si=jLLJpYVz77L_Pmhi (simple use of an ultrasonic sensor)
https://www.youtube.com/shorts/VI9V8hI0A1o (simple use of a tilt sensor)

Both projects only involve one sensor and a few output devices so are pretty easy to program up. I can easily wire the components and make them function as I want them to, but not really sure how to come up with the project idea (i.e. a bad posture alarm/warning) in the first place.

Does anyone know how I can come up with such Arduino project ideas that solve tiny problems around me? I've tried to brainstorm problems and potential projects but I am struggling to come up with something unique and interesting. If anyone has some ideas, that would be valuable to get the juices flowing!

Thanks

Start by observing real-world problems or inefficiencies in your daily life. Identify annoyances that could be solved with automation, monitoring, or feedback. Pay attention to repetitive tasks, forgotten routines, or things that require manual checking.

Notice moments where timing, reminders, or environmental awareness could improve comfort, efficiency, or safety.

Consider how simple physical interactions—pressing, turning, moving—might be enhanced or replaced by sensors and actuators. Observe others’ frustrations too, not just your own. Even small discomforts or moments of hesitation can inspire a useful project when addressed with thoughtful design.

Basically identify a problem and build a solution :slight_smile: (not the other way around)

Thanks! That helps. Still, I've been trying all day to think of problems but for some reason my mind is blank. I'm not sure if I'm just not a creative person :confused:

Do you have any ideas that spring to your mind?

  • Lots of useless projects out there ;)



  • This might increase your curiosity:

what is allways usefull is a CLOCK. You can make digital, analog classic, artistic, strange looking and so on. For clock designs you find hundreds of examples on the web on just typing Clock into Google.
what do you think about this one ?

That is very creative.

Enter 'arduino project' into your search engine. Hundreds of results.

As you learn more ways to do things, some of that should be able to apply to the real world.

What makes you take interest in the world?

It doesn't have to be about being "creative". You are not trying to create problems. There are enough of those in life already without trying to create more!

It's more about observation, problem solving and resourceful thinking.

So don't spend all day thinking about it. Just spend the day doing everyday things, but observing and listening out for problems.

Either you have a perfect life or a very boring one :slight_smile: if you don’t have problems or annoying stuff that you could enhance.

Are you a member of a club - any need to facilitate the club’s life or activities?

Do you have kids or friends/relatives with kids? Invent a game with them (and teach them programming, maths, physics, electronics along the way - may be that will click and help them become awesome engineers or just interested in other things than their social network).

Does your city face challenges? Which ones? Can you help?

Do you have elderly relatives or neighbors? Could you build something to assist them in daily life, like reminders, alerts, or safety devices? (careful on safety stuff, touchy grounds)

Are you into music, photography, or art? Could you create interactive installations, instruments, light shows, or custom tools to enhance your hobby?

Do you practice a sport or outdoor activity? Could you track performance, environmental data, or add automation or safety to your setup?

Are you into gardening or houseplants? Could you automate watering, monitor light and moisture, or log data over time?

Do you enjoy cooking or brewing? Could you build smart timers, temperature monitors, or kitchen gadgets to improve your process?

Do you repair or collect vintage devices? Could you modernize them subtly or automate some repair process (cleaning …)

Do you travel or camp often? Could you make portable tools, power monitors, or tracking systems to improve your experience?

Do you have pets? Could you build feeders, toys, trackers, or monitoring systems for them?

…

Just be constantly open to your surroundings and you’ll start noticing things. It won’t come to you by sitting at your chair in front of the TV (well even there you could build a smart remote or a device that detects if you fell asleep and turns the TV off to save energy).

Good luck

What about an NTP WiFi clock automatically updating the current time?

I did this a few months ago replacing an old broken digital clock in the living room, using just a Wemos D1 mini board (I know you don't have it, but it's very common, cheap, and small) and a standard 16x2 LCD with I2C interface.

This is the code, if you dare to build it (just connect the LCD to SDA/SCL pins):

netclock.ino:

#define PRJVER "NetClock1"

// change to your network SSID
const char* W_SSID  = "myssid";
// change to your network key
const char* W_PASSW = "mypassword";
// Change to your nearest NTP pool
const char* NTPSERVER = "0.pool.ntp.org";
// Change to your timezone real name
const char* MYTIMEZONE = "Europe/Rome";

#include <ezTime.h>
#include <ESP8266WiFi.h>

Timezone myTZ;

// Data ed ora corrente
int Year, Month, Day;
int Hour, Min, Sec;
// Data ed ora precedenti
int prevYear, prevMonth, prevDay;
int prevHour, prevMin, prevSec;

// Library for LCD DIsplay with I2C
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "LargeNumbers.h"

unsigned long nextUpdTime;

bool dots = true;

void setup() {
  Serial.begin(115200);
  Serial.println("STARTING...");

  // initialize the LCD
  initLcd();

  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  // Attempt to connect to Wifi network:
  Serial.print("Connecting Wifi");
  lcd.setCursor(0,0);
  lcd.print("Connecting Wifi");
  lcd.setCursor(0,1);
  lcd.print(W_SSID);
  WiFi.begin(W_SSID, W_PASSW);
  delay(1000);

  while (WiFi.status() != WL_CONNECTED) {
    lcd.setCursor(15, 1);
    lcd.print("x");
    delay(500);
    lcd.setCursor(15, 1);
    lcd.print("+");
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  lcd.setCursor(0, 0);
  lcd.print("WiFi connected! ");
  delay(2000);

  // ezTime init
  waitForSync();
  // Set time zone change it 
  myTZ.setLocation(MYTIMEZONE);
  
  lcd.clear();

  UpdateDisplay();

  Serial.println("STARTED");
}


void loop() {
  UpdateDisplay();
  delay(1000);
}

void UpdateDisplay()
{  
  if (Min != myTZ.minute())
  {
    Hour = myTZ.hour();
    Min = myTZ.minute();
    Sec = myTZ.second();
    
    lcd.clear();
    printValue(1, Hour);

    printValue(8, Min);

    Serial.print(Hour);Serial.print(":");Serial.println(Min);
  }
  if (dots)
    printDots(7);
  else
    noDots(7);
  dots = !dots;
  //Serial.println(dots);

}

LargeNumbers.h:

// the 8 arrays that form each segment of the custom numbers
byte bar1[8] = 
{
        B11100,
        B11110,
        B11110,
        B11110,
        B11110,
        B11110,
        B11110,
        B11100
};
byte bar2[8] =
{
        B00111,
        B01111,
        B01111,
        B01111,
        B01111,
        B01111,
        B01111,
        B00111
};
byte bar3[8] =
{
        B11111,
        B11111,
        B00000,
        B00000,
        B00000,
        B00000,
        B11111,
        B11111
};
byte bar4[8] =
{
        B11110,
        B11100,
        B00000,
        B00000,
        B00000,
        B00000,
        B11000,
        B11100
};
byte bar5[8] =
{
        B01111,
        B00111,
        B00000,
        B00000,
        B00000,
        B00000,
        B00011,
        B00111
};
byte bar6[8] =
{
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B11111,
        B11111
};
byte bar7[8] =
{
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B00111,
        B01111
};
byte bar8[8] =
{
        B11111,
        B11111,
        B00000,
        B00000,
        B00000,
        B00000,
        B00000,
        B00000
};

void initLcd() {
  lcd.init();
  lcd.backlight();

  lcd.createChar(1,bar1);
  lcd.createChar(2,bar2);
  lcd.createChar(3,bar3);
  lcd.createChar(4,bar4);
  lcd.createChar(5,bar5);
  lcd.createChar(6,bar6);
  lcd.createChar(7,bar7);
  lcd.createChar(8,bar8);
}

// Le cifre da 0 a 9, mentre 10 è lo spazio
byte custom[11][6] = {
  {2,8,1,2,6,1},      // 0
  {32,32,1,32,32,1},  // 1
  {5,3,1,2,6,6},      // 2
  {5,3,1,7,6,1},      // 3
  {2,6,1,32,32,1},    // 4
  {2,3,4,7,6,1},      // 5
  {2,3,4,2,6,1},      // 6
  {2,8,1,32,32,1},    // 7
  {2,3,1,2,6,1},      // 8
  {2,3,1,7,6,1},      // 9
  {32,3,32,32,3,32}   // :
};

void printChar(byte col, char value) {
  int i = value - '0';
  if ( value == ' ' ) i = 10;
  lcd.setCursor(col, 0);
  for (int j=0; j<=5; ++j) {
    if ( j == 3 ) lcd.setCursor(col, 1); 
    lcd.write(custom[i][j]);
  }
}  

void printDots(byte col) {
  lcd.setCursor(col, 0);
  lcd.write('.');
  lcd.setCursor(col, 1); 
  lcd.write('.');
}

void noDots(byte col) {
  lcd.setCursor(col, 0);
  lcd.write(' ');
  lcd.setCursor(col, 1); 
  lcd.write(' ');
}

void printValue(byte col, int v) {
  char buf[3];
  sprintf(buf, "%02d", v);
  for(byte c=0; c<2; ++c) {
    printChar(col, buf[c]);
    col += 3;
  }
}