Servo Clock

Servo Clock

Use Aduino NANO for control Rc Servo to tell the Time clock, along with a RTC module DS3231 for time keeping

  • 801 views
  • 1 comment
  • 4 respects

Components and supplies

Necessary tools and machines

RTC MODULE DS3231
EMAX ES08A II Mini Plastic Gear Analog Servo 1.8kg/Sec For RC Models

About this project

I want to decorate my home with some strange clock, so I get some idea to use RC Servo to display the time in a half circle Because Servo can move only 0 degree to 180 degree

Hour hand rotate clockwise from 0-23 hours

Minute hand rotate clockwise form 0-59 minute

I divided the second 0-30 rotate clockwise and 31-0 second rotate counter-clockwise

Code

SERVO CODEArduino
#include <LiquidCrystal.h>
#include <RTClib.h>
#include <SPI.h>
#include <Wire.h>
#include <Servo.h>
Servo Second_Servo;
Servo Minute_Servo;
Servo Hour_Servo;
RTC_DS3231 RTC;
LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
int value = 0;
int HOUR;
int MINUTE;
int SECOND;
int DAY;
int MONTH;
int YEAR;
int HOUR_READ;
int MINUTE_READ;
int SECOND_READ;
int DAY_READ;
int MONTH_READ;
int YEAR_READ;
int HOUR_SERVO_READ;
int MINUTE_SERVO_READ;
int SECOND_SERVO_READ;
int increase = LOW;
int decrease = LOW;
int select = LOW;
int buttonStateSelect;
int buttonStateIncrease;
int buttonStateDecrease;
int last_select_State = LOW;
int last_increase_State = LOW;
int last_decrease_State = LOW;
const int buttonPin_select = 6;    
const int buttonPin_increase = 7;
const int buttonPin_decrease = 8;
const int ledPin = 13;      
int ledState = LOW ;
long lastDebounceTime = 0;
long debounceDelay = 55;
long Timestamp;

void setup () 
{
  pinMode(buttonPin_select, INPUT_PULLUP);
  pinMode(buttonPin_increase, INPUT_PULLUP);
  pinMode(buttonPin_decrease, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, ledState);
  Serial.begin(9600);
  Timestamp = millis();
  lcd.begin(16, 2);
  lcd.clear();
  Wire.begin();
  RTC.begin();
  //RTC.adjust(DateTime(__DATE__, __TIME__));

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }

  Second_Servo.attach(11);
  Minute_Servo.attach(10);
  Hour_Servo.attach(9);
  Second_Servo.write(12);
  delay(500);
  Minute_Servo.write(3);
  delay(500);
  Hour_Servo.write(18);
  delay(500);

}
  
void loop ()
{


//*******************************  select *******************************************************  

int select = digitalRead(buttonPin_select);

 if (select != last_select_State) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {

    if (select != buttonStateSelect) {
      buttonStateSelect = select;
      if (buttonStateSelect == LOW) {
        value = value + 1;
        ledState = HIGH; 
       
        if (value > 6){
          value = 0;   
          lcd.noBlink();       
        }
         Serial.print("select ");Serial.println (value);
         
         
      }else
      {
        ledState = LOW;
      }
       
    }
    
  }

  digitalWrite(ledPin, ledState);

  last_select_State = select;

  
//************************************* increase  ************************************************************

int select_increase = digitalRead(buttonPin_increase);

  if (select_increase != last_increase_State) 
    {
     lastDebounceTime = millis();
    }

  if ((millis() - lastDebounceTime) > debounceDelay) {

  if (select_increase != buttonStateIncrease) {
      buttonStateIncrease = select_increase;
      if (buttonStateIncrease == LOW) {
       

       if(value ==1)
        {
          DateTime now = RTC.now();
           HOUR_READ = now.hour();
           HOUR_READ++;
           if (HOUR_READ > 23)
           {
            HOUR_READ = 0;
           }
           HOUR = dectobcd (HOUR_READ);
   
         
           
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x02); // select register
           Wire.write(HOUR); // hours (BCD)
           Wire.endTransmission();
           ledState = HIGH; 
           Serial.println(HOUR_READ,DEC);
           Serial.println("increase hour");
        
      }
       
        if(value == 2)
        
        {
           DateTime now = RTC.now();
           MINUTE_READ = now.minute();
 
           MINUTE_READ++;

           if (MINUTE_READ > 59)
           {
            MINUTE_READ = 0;
           }
           MINUTE = dectobcd (MINUTE_READ);            
 
            
           
           
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x01); // select register
           Wire.write(MINUTE); // minutes (BCD)
           Wire.endTransmission();

           
          ledState = HIGH;
          Serial.println(MINUTE_READ,DEC);
          Serial.println("increase minutes");
         
        }

       if(value == 3)
        {

           DateTime now = RTC.now();
           SECOND_READ = now.minute();
 
           SECOND_READ++;
           
           if (SECOND_READ > 58)
           {
            SECOND_READ = 0;
           }
           SECOND = dectobcd (SECOND_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x00); // select register
           Wire.write(SECOND); // second (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(SECOND_READ,DEC);
           Serial.println(" increase second");
        }
        
       if(value == 4)
        {

           DateTime now = RTC.now();
           DAY_READ = now.day();
 
           DAY_READ++;
           
           if (DAY_READ > 31)
           {
            DAY_READ = 1;
           }
           DAY = dectobcd (DAY_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x04); // select register
           Wire.write(DAY); // second (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(DAY_READ,DEC);
           Serial.println(" increase day");
        }
        
       if(value == 5)
        {

           DateTime now = RTC.now();
           MONTH_READ = now.month();
 
           MONTH_READ++;
           
           if (MONTH_READ > 12)
           {
            MONTH_READ = 1;
           }
           MONTH = dectobcd (MONTH_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x05); // select register
           Wire.write(MONTH); // month (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(MONTH_READ,DEC);
           Serial.println(" increase month");
        }

       if(value == 6)
        {

           DateTime now = RTC.now();
           YEAR_READ = now.year();
 
           YEAR_READ++;
           
         
           YEAR = dectobcd (YEAR_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x06); // select register
           Wire.write(YEAR); // year (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(YEAR_READ,DEC);
           Serial.println(" increase year");
        }  



         
      }else
      {
        ledState = LOW;
      }
       
    }
    
 }

  digitalWrite(ledPin, ledState);

last_increase_State = select_increase;


//************************************************* Decrease ***************************************************************


int select_decrease = digitalRead(buttonPin_decrease);

  if (select_decrease != last_decrease_State) 
    {
     lastDebounceTime = millis();
    }

  if ((millis() - lastDebounceTime) > debounceDelay) {

  if (select_decrease != buttonStateDecrease) {
      buttonStateDecrease = select_decrease;
      if (buttonStateDecrease == LOW) {
       
       if(value ==1)
        {
           DateTime now = RTC.now();
           HOUR_READ = now.hour();
 
           
           HOUR_READ-- ;
           

          if (HOUR_READ < 0)
           {
            HOUR_READ = 23;
           }
  
          
           HOUR = dectobcd (HOUR_READ);
 
          
          Wire.beginTransmission(0x68); // address DS3231
          Wire.write(0x02); // select register
          Wire.write(HOUR); // hour (BCD)
          Wire.endTransmission();
          ledState = HIGH; 
          Serial.println(HOUR_READ,DEC);
          Serial.println("decrease hour");
        }
       
       if(value == 2)
        {
           DateTime now = RTC.now();
           MINUTE_READ = now.minute();
           MINUTE_READ--;
           if (MINUTE_READ < 0)
           {
            MINUTE_READ = 59;
           }

          
           MINUTE = dectobcd (MINUTE_READ);
 
           
          
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x01); // select register
           Wire.write(MINUTE); // minutes (BCD)
           Wire.endTransmission();
           ledState = HIGH;
           Serial.println(MINUTE_READ,DEC);
           Serial.println("decrease minute");    
        }

       if(value == 3)
        {
           DateTime now = RTC.now();
           SECOND_READ = now.second();
           SECOND_READ--;
           if (SECOND_READ < 0)
           {
            SECOND_READ = 59;
           }

          
           SECOND = dectobcd (SECOND_READ);
 
           
          
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x00); // select register
           Wire.write(SECOND); // second (BCD)
           Wire.endTransmission();
          ledState = HIGH;
          Serial.println(SECOND_READ,DEC);
          Serial.println( "decrease secound");
        }

               if(value == 4)
        {

           DateTime now = RTC.now();
           DAY_READ = now.day();
 
           DAY_READ--;
           
           if (DAY_READ < 1)
           {
            DAY_READ = 31;
           }
           DAY = dectobcd (DAY_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x04); // select register
           Wire.write(DAY); // day (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(DAY_READ,DEC);
           Serial.println(" decrease day");
        }

               if(value == 5)
        {

           DateTime now = RTC.now();
           MONTH_READ = now.month();
 
           MONTH_READ--;
           
           if (MONTH_READ < 1)
           {
            MONTH_READ = 12;
           }
           MONTH = dectobcd (MONTH_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x05); // select register
           Wire.write(MONTH); // month (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(MONTH_READ,DEC);
           Serial.println(" decrease month");
        }

               if(value == 6)
        {

           DateTime now = RTC.now();
           YEAR_READ = now.year();
 
           YEAR_READ--;
           
           if (YEAR_READ < 2000)
           {
            YEAR_READ = 2000;
           }
           YEAR = dectobcd (YEAR_READ);            
 
           Wire.beginTransmission(0x68); // address DS3231
           Wire.write(0x06); // select register
           Wire.write(YEAR); // year (BCD)
           Wire.endTransmission();

           ledState = HIGH;
           Serial.println(YEAR_READ,DEC);
           Serial.println(" decrease year");
        }


         
      }else
      {
        ledState = LOW;
      }
       
    }
    
 }

  digitalWrite(ledPin, ledState);

last_decrease_State = select_decrease;
  

//*************************************************************************************


  
  if (millis() > Timestamp + 1000)
  {
  DateTime now = RTC.now();
  lcd.clear();
  lcd.home();
  
  if (now.hour()  < 10)
    { 
      lcd.setCursor(4,0);
      lcd.print("0");lcd.print(now.hour(),DEC);lcd.print(":");
      HOUR_SERVO_READ = DEC_To_Hour_Servo(now.hour());
      Hour_Servo.write(HOUR_SERVO_READ);
    }
    else
    {
      lcd.setCursor(4,0);
      lcd.print(now.hour(),DEC);
      lcd.print(":");
      HOUR_SERVO_READ = DEC_To_Hour_Servo(now.hour());
      Hour_Servo.write(HOUR_SERVO_READ);
    }
   
 if (now.minute() < 10)
    {
    lcd.print("0");lcd.print(now.minute(), DEC);lcd.print(":");
    MINUTE_SERVO_READ = DEC_To_Minute_Servo(now.minute());
    Minute_Servo.write(MINUTE_SERVO_READ);
    }
    else
    {
    lcd.print(now.minute(), DEC);lcd.print(":");
    MINUTE_SERVO_READ = DEC_To_Minute_Servo(now.minute());
    Minute_Servo.write(MINUTE_SERVO_READ);
    }
    
  if (now.second() < 10)
    {
    lcd.print("0");lcd.print(now.second(), DEC);
    SECOND_SERVO_READ = DEC_To_Second_Servo (now.second());
    Second_Servo.write(SECOND_SERVO_READ);
    }
    else
    {
    lcd.print(now.second(), DEC);
    SECOND_SERVO_READ = DEC_To_Second_Servo (now.second());
    Second_Servo.write(SECOND_SERVO_READ);
    }
    lcd.setCursor(3, 1);
 if (now.day() < 10)
    {
    lcd.print("0");lcd.print(now.day(), DEC);lcd.print("/");
    }
    else
    {
    lcd.print(now.day(), DEC);lcd.print("/");
    }
 if (now.month() < 10)
    {
    lcd.print("0");lcd.print(now.month(), DEC);lcd.print("/");
    }
    else
    {
    lcd.print(now.month(), DEC);lcd.print("/");
    }
 if (now.year() < 10)
    {
    lcd.print("0");lcd.print(now.year(), DEC);
    }
    else
    {
    lcd.print(now.year(), DEC);
    }



    
Serial.println(RTC.oscillatorCheck());

    
  if (value == 1){
   lcd.blink();
  lcd.setCursor(5, 0);
  }
  if (value == 2){
   lcd.blink();
    lcd.setCursor(8, 0);
  }
  if (value == 3){
     
     lcd.blink();
     lcd.setCursor(11, 0);
  }
    if (value == 4){
     
     lcd.blink();
     lcd.setCursor(4, 1);
  }
    if (value == 5){
     
     lcd.blink();
     lcd.setCursor(7, 1);
  }
    if (value == 6){
     
     lcd.blink();
     lcd.setCursor(12, 1);
  }

  Timestamp = millis();
  }

  
}

int dectobcd ( int decvalue)
{
  int result;
    switch (decvalue)
           {
            case 0 : result = (0x00);break;
            case 1 : result = (0x01);break;
            case 2 : result = (0x02);break;
            case 3 : result = (0x03);break;
            case 4 : result = (0x04);break;
            case 5 : result = (0x05);break;         
            case 6 : result = (0x06);break;
            case 7 : result = (0x07);break;
            case 8 : result = (0x08);break;
            case 9 : result = (0x09);break;
            case 10: result = (0x10);break;
            case 11 : result = (0x11);break;
            case 12 : result = (0x12);break;
            case 13 : result = (0x13);break;
            case 14 : result = (0x14);break;
            case 15 : result = (0x15);break;
            case 16 : result = (0x16);break;
            case 17 : result = (0x17);break;
            case 18 : result = (0x18);break;
            case 19 : result = (0x19);break;
            case 20 : result = (0x20);break;
            case 21 : result = (0x21);break;
            case 22 : result = (0x22);break;
            case 23 : result = (0x23);break;
            case 24 : result = (0x24);break;
            case 25 : result = (0x25);break;
            case 26 : result = (0x26);break;
            case 27 : result = (0x27);break;
            case 28 : result = (0x28);break;
            case 29: result = (0x29);break;
            case 30 : result = (0x30);break;
            case 31 : result = (0x31);break;
            case 32 : result = (0x32);break;
            case 33 : result = (0x33);break;
            case 34 : result = (0x34);break;
            case 35 : result = (0x35);break;
            case 36 : result = (0x36);break;
            case 37 : result = (0x37);break;
            case 38 : result = (0x38);break;
            case 39 : result = (0x39);break;
            case 40 : result = (0x40);break;
            case 41 : result = (0x41);break;
            case 42 : result = (0x42);break;
            case 43 : result = (0x43);break;
            case 44 : result = (0x44);break; 
            case 45 : result = (0x45);break;
            case 46 : result = (0x46);break;
            case 47 : result = (0x47);break;
            case 48 : result = (0x48);break;
            case 49 : result = (0x49);break;
            case 50 : result = (0x50);break;
            case 51 : result = (0x51);break;
            case 52 : result = (0x52);break;
            case 53 : result = (0x53);break;
            case 54 : result = (0x54);break;
            case 55 : result = (0x55);break;
            case 56 : result = (0x56);break;
            case 57 : result = (0x57);break;
            case 58 : result = (0x58);break;
            case 59 : result = (0x59);break;
// ***************************************************YEAR CONVERT LOOP UP TABLE******************************************************
            case 1999 : result = (0x1999);break;
            case 2000 : result = (0x2000);break;
            case 2001 : result = (0x2001);break;
            case 2002 : result = (0x2002);break;
            case 2003 : result = (0x2003);break;
            case 2004 : result = (0x2004);break;
            case 2005 : result = (0x2005);break;
            case 2006 : result = (0x2006);break;
            case 2007 : result = (0x2007);break;
            case 2008 : result = (0x2008);break;
            case 2009 : result = (0x2009);break;
            case 2010 : result = (0x2010);break;
            case 2011 : result = (0x2011);break;
            case 2012 : result = (0x2012);break;
            case 2013 : result = (0x2013);break;
            case 2014 : result = (0x2014);break;
            case 2015 : result = (0x2015);break;
            case 2016 : result = (0x2016);break;
            case 2017 : result = (0x2017);break;
            case 2018 : result = (0x2018);break;
            case 2019 : result = (0x2019);break;
            case 2020 : result = (0x2020);break;
            case 2021 : result = (0x2021);break;
            case 2022 : result = (0x2022);break;
            case 2023 : result = (0x2023);break;
            case 2024 : result = (0x2024);break;
            case 2025 : result = (0x2025);break;
            case 2026 : result = (0x2026);break;
            case 2027 : result = (0x2027);break;
            case 2028 : result = (0x2028);break;
            case 2029 : result = (0x2029);break;
            case 2030 : result = (0x2030);break;
            case 2031 : result = (0x2031);break;
            case 2032 : result = (0x2032);break;
            case 2033 : result = (0x2033);break;
            case 2034 : result = (0x2034);break; 
            case 2035 : result = (0x2035);break; 
            case 2036 : result = (0x2036);break; 
            case 2037 : result = (0x2037);break; 
            case 2038 : result = (0x2038);break; 
            case 2039 : result = (0x2039);break; 
            case 2040 : result = (0x2040);break; 
            case 2041 : result = (0x2041);break; 
            case 2042 : result = (0x2042);break; 
            case 2043 : result = (0x2043);break; 
            case 2044 : result = (0x2044);break; 
            case 2045 : result = (0x2045);break; 
            case 2046 : result = (0x2046);break; 
            case 2047 : result = (0x2047);break; 
            case 2048 : result = (0x2048);break; 
            case 2049 : result = (0x2049);break; 
            case 2050 : result = (0x2050);break; 
            default : result = (0x00);
           }
           return result;
}
//888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888

int DEC_To_Second_Servo ( int Second_Servo_Value)
{
  int result;
    switch (Second_Servo_Value)
           {
            case 0 : result = (12);break;
            case 1 : result = (18);break;
            case 2 : result = (23);break;
            case 3 : result = (29);break;
            case 4 : result = (35);break;
            case 5 : result = (40);break;         
            case 6 : result = (45);break;
            case 7 : result = (50);break;
            case 8 : result = (55);break;
            case 9 : result = (60);break;
            case 10: result = (66);break;
            case 11 : result = (71);break;
            case 12 : result = (76);break;
            case 13 : result = (81);break;
            case 14 : result = (86);break;
            case 15 : result = (92);break;
            case 16 : result = (97);break;
            case 17 : result = (103);break;
            case 18 : result = (109);break;
            case 19 : result = (114);break;
            case 20 : result = (119);break;
            case 21 : result = (124);break;
            case 22 : result = (130);break;
            case 23 : result = (135);break;
            case 24 : result = (140);break;
            case 25 : result = (146);break;
            case 26 : result = (151);break;
            case 27 : result = (157);break;
            case 28 : result = (163);break;
            case 29 : result = (169);break;
            case 30 : result = (175);break;
            case 31 : result = (169);break;
            case 32 : result = (163);break;
            case 33 : result = (157);break;
            case 34 : result = (152);break;
            case 35 : result = (146);break;
            case 36 : result = (140);break;
            case 37 : result = (135);break;
            case 38 : result = (130);break;
            case 39 : result = (124);break;
            case 40 : result = (118);break;
            case 41 : result = (113);break;
            case 42 : result = (108);break;
            case 43 : result = (103);break;
            case 44 : result = (97);break; 
            case 45 : result = (92);break;
            case 46 : result = (86);break;
            case 47 : result = (81);break;
            case 48 : result = (76);break;
            case 49 : result = (71);break;
            case 50 : result = (65);break;
            case 51 : result = (60);break;
            case 52 : result = (55);break;
            case 53 : result = (50);break;
            case 54 : result = (44);break;
            case 55 : result = (40);break;
            case 56 : result = (35);break;
            case 57 : result = (29);break;
            case 58 : result = (24);break;
            case 59 : result = (18);break;
            default : result = (10);
           }
           return result;
}

int DEC_To_Minute_Servo ( int Minute_Servo_Value)
{
  int result;
    switch (Minute_Servo_Value)
           {
            case 0 : result = (1);break;
            case 1 : result = (176);break;
            case 2 : result = (173);break;
            case 3 : result = (170);break;
            case 4 : result = (166);break;
            case 5 : result = (164);break;         
            case 6 : result = (160);break;
            case 7 : result = (157);break;
            case 8 : result = (153);break;
            case 9 : result = (151);break;
            case 10: result = (148);break;
            case 11 : result = (145);break;
            case 12 : result = (142);break;
            case 13 : result = (139);break;
            case 14 : result = (136);break;
            case 15 : result = (133);break;
            case 16 : result = (129);break;
            case 17 : result = (126);break;
            case 18 : result = (123);break;
            case 19 : result = (120);break;
            case 20 : result = (118);break;
            case 21 : result = (115);break;
            case 22 : result = (112);break;
            case 23 : result = (109);break;
            case 24 : result = (106);break;
            case 25 : result = (103);break;
            case 26 : result = (99);break;
            case 27 : result = (96);break;
            case 28 : result = (93);break;
            case 29 : result = (90);break;
            case 30 : result = (87);break;
            case 31 : result = (84);break;
            case 32 : result = (81);break;
            case 33 : result = (78);break;
            case 34 : result = (75);break;
            case 35 : result = (72);break;
            case 36 : result = (69);break;
            case 37 : result = (66);break;
            case 38 : result = (64);break;
            case 39 : result = (61);break;
            case 40 : result = (58);break;
            case 41 : result = (55);break;
            case 42 : result = (52);break;
            case 43 : result = (49);break;
            case 44 : result = (46);break; 
            case 45 : result = (43);break;
            case 46 : result = (40);break;
            case 47 : result = (37);break;
            case 48 : result = (34);break;
            case 49 : result = (31);break;
            case 50 : result = (28);break;
            case 51 : result = (25);break;
            case 52 : result = (22);break;
            case 53 : result = (19);break;
            case 54 : result = (17);break;
            case 55 : result = (14);break;
            case 56 : result = (11);break;
            case 57 : result = (8);break;
            case 58 : result = (6);break;
            case 59 : result = (3);break;
            default : result = (0);
           }
           return result;
}



int DEC_To_Hour_Servo ( int Hour_Servo_Value)
{
  int result;
    switch (Hour_Servo_Value)
           {
            case 1 : result = (168);break;
            case 2 : result = (161);break;
            case 3 : result = (154);break;
            case 4 : result = (147);break;
            case 5 : result = (141);break;         
            case 6 : result = (133);break;
            case 7 : result = (127);break;
            case 8 : result = (121);break;
            case 9 : result = (114);break;
            case 10: result = (107);break;
            case 11 : result = (101);break;
            case 12 : result = (94);break;
            case 13 : result = (87);break;
            case 14 : result = (81);break;
            case 15 : result = (75);break;
            case 16 : result = (69);break;
            case 17 : result = (63);break;
            case 18 : result = (56);break;
            case 19 : result = (50);break;
            case 20 : result = (44);break;
            case 21 : result = (37);break;
            case 22 : result = (31);break;
            case 23 : result = (25);break;
            case 24 : result = (19);break;
            default : result = (18);
           }
           return result;
}

Comments

Similar projects you might like

Arduino Alarm Clock Project

Project tutorial by CSteele

  • 1,939 views
  • 0 comments
  • 9 respects

Servo Control with TV Remote Control

Project showcase by eldo85

  • 5,596 views
  • 5 comments
  • 17 respects

Italian Word Clock

Project tutorial by Tittiamo

  • 5,080 views
  • 2 comments
  • 15 respects

Dual Axis Servo Control with Joystick

Project tutorial by Arnov Sharma

  • 1,231 views
  • 0 comments
  • 10 respects

Servo Motor Using Arduino & PCA9685 16 Chanel Module

Project tutorial by Jithin Sanal

  • 30,866 views
  • 2 comments
  • 16 respects

Clock without using RTC in Arduino with Temperature and humi

Project tutorial by ahmadordi

  • 6,633 views
  • 10 comments
  • 28 respects
Add projectSign up / Login