Ничего не найдено :(
    В гостях у Самоделкина! » С сайтов » Спец » Необычные часы со стрелкам-шариками

    Необычные часы со стрелкам-шариками



    Не обычные часы сделал мастер-самодельщик с ником tomatoskins. Конечно идея не совсем его, он ориентировался на часы STORY Clock, но учитывая первый опыт мастера в использовании Ардуино и минимум информации об оригинальны часа, получилось очень даже не плохо.



    Инструменты и материалы:
    -ДСП 33,02 х 33,02 х 5,08 см (склейка);
    -ДВП 33,02 х 33,02 см.;
    -Ардуино Нано;
    -Модуль времени;
    -Шаговые двигатели и драйверы;
    -Датчики Холла;
    -Магниты;
    -Кабель;
    -АС адаптер;
    -Разъем;
    -Крепеж;
    -3D-печатные части;
    -Шпон 30,48 x 30,48 см. (лицевая часть);
    -Шпон 101,6 см (полоса);
    -Спрей-лак;
    -Черная краска-спрей;
    -Циркуль;
    -Нож;
    -Клей;
    -Хомуты;
    -Ацетон;
    -Кисточка;
    -ленточнопильный станок с кругорезным приспособлением;
    -Ножовка;
    -Шлифмашинка;
    -Струбцины;
    -Линейка;
    -Сверла;
    -Отвертка;
    -Паяльник;
    -Клеевой пистолет;











    Шаг первый: склейка
    Чтобы получить материал нужного размера мастер склеивает три заготовки из ДСП.




    Шаг второй: круги
    Дальше нужно вырезать пять кругов с диаметром: 30,48 см, 28,57 см, 22,86 см, 17,78 см, 13,65 см.







    Шаг третий: 3D-печать
    Зубчатые колеса разделены на сегменты, поэтому их можно распечатать на принтере и затем собрать. Все детали были напечатаны в ABS. После печати нужно отшлифовать все края и поверхности деталей.

    Напечатать нужно следующее количество деталей:
    1 шт. Hour Retaining Ring Segment Stepper Mount.STL
    6 шт. Hour Ring Gear Segment Basic.STL
    1 шт. Hour Ring Gear Segment Magnet.STL
    1 шт. Minute Hall Effect Sensor Holder.STL
    6 шт. Minute Retaining Ring Segment Basic.STL
    1 шт. Minute Retaining Ring Segment Stepper Mount.STL
    7 шт. Minute Ring Gear Segment Basic.STL
    1 шт. Minute Ring Gear Segment Magnet.STL
    2 шт. Spur Gear.STL
    1 шт. Electronics Mount.STL
    1 шт. Hour Hall Effect Sensor Holder.STL
    6 шт. Hour Retaining Ring Segment Basic


    После печати нужно растворить в ацетоне обрезки нити или неудачные детали ABS и с помощью получившейся смеси склеить детали. После отвержения места склейки зашлифовать.



    Шаг четвертый: сборка
    Установите зубчатые колеса и стопорные кольца в раму и вырежьте отверстие для шаговых двигателей.



    Вырежьте во внутреннем кольце прорезь для датчика Холла минутного и для датчика Холла часового.



    Склейте наружное кольцо.

    Для корректной работы датчика Холла мастер отрезал от болта головку и сделал прорезь. Затем на болт будет наклеен магнит, а сам болт вкручен в корпус напротив датчика.

    Дальше мастер вырезает из ДСП круг и приклеивает его к кольцу.



    Приклеивает внутренний диск.


    Приклеивает полосу из шпона к корпусу.





    Вырезает и приклеивает шпон к лицевой панели.




    Шлифует корпус с помощью наждачной бумаги 220-600 грит. Покрывает лаком в десять слоев.


    Шаг пятый: электроника
    В нижней части корпуса сверлит отверстие и устанавливает разъем для питания.


    Монтирует шаговые драйверы и часы реального времени на электронную плату.




    Согласно схеме, производит монтаж электроники.







    Шаг шестой: задняя пластина
    Сделайте заднюю пластину, обрезав круг на 2,5 см больше диаметра часов, и кольцо с внутренним диаметром, равным задней части часов. Склейте их.

    После высыхания начертите линию на 3 мм больше внутреннего кольца и обрежьте по размеру ленточной пилой. Вырежьте прорезь для подвеса часов на стену. Покрасьте черной аэрозольной краской заднюю часть и прикрутите пластину к корпусу.






    Шаг седьмой: код Ардуино
    Программа проверяет, соответствует ли текущее время эталонному и производит корректировку один раз в полночь. В полночь шестерни вращаются в положение "полночь", затем ждут, пока время не подойдет к этому значению. В настоящее время часы теряют всего около 5 секунд в течение 24 часов.

    Для установки кода понадобятся библиотеки Stepper и RTClib.
    Мастер не программист и говорить о том, что при желании и достаточном опыте код можно улучшить.
    Скачать код можно ниже.
    #include 
    #include "RTClib.h"
    RTC_DS1307 rtc;
    
    #define oneRotation 2038 // the number of steps in one revolution of 28BYJ-48 stepper motor
    Stepper hourHand(oneRotation, 3, 5, 4, 6);
    Stepper minuteHand(oneRotation, 7, 9, 8, 10);
    #define hourStopSensor 12
    #define minuteStopSensor 11
    int endStep = 0;
    
    // Time dealy for speed of the clock.
    int setDelay1 = 168;
    int setDelay2 = 166;
    int setDelay3 = 5;
    
    // Current time to do math with. 
    float hr = 0;
    float mn = 0;
    float sc = 0;
    
    // Set the time of day to reset clock (24 hour format).
    int resetHour = 0;
    int resetMinute = 0;
    
    // Variables to set correct time at startup and reset.
    float setTimeStepHour = 0;
    float setTimeStepMinute = 0;
    float handDelay = 0;
    float hourTest = 0;
    float minuteTest = 0;
    
    
    void setup() {
      Serial.begin(115200);
    
      // Setup real time clock and reset hall effect sensors.
      pinMode(hourStopSensor, INPUT_PULLUP);
      pinMode(minuteStopSensor, INPUT_PULLUP);
      rtc.begin();
    
      // Uncomment line below to set time.
      //  rtc.adjust(DateTime(2020, 2, 19, 23, 40, 30));
      //  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    
      // Set top speed of stepper motors.
      hourHand.setSpeed(15);
      minuteHand.setSpeed(15);
    
    
      // Loop until minute and hour hand are at noon
      while (digitalRead(hourStopSensor) == LOW ||  digitalRead(minuteStopSensor) == LOW)
      {
    
        if (digitalRead(hourStopSensor) == LOW )
        {
          hourHand.step(2);
        }
        
        else
        {
          delay(3);
        }
        
    
        if (digitalRead(minuteStopSensor) == LOW)
        {
          minuteHand.step(3);
        }
        
        else
        {
          delay(4);
        }
      }
    
      while (digitalRead(hourStopSensor) != LOW || digitalRead(minuteStopSensor) != LOW)
      {
        if (digitalRead(hourStopSensor) != LOW )
        {
          hourHand.step(2);
        }
        
        else
        {
          delay(3);
        }
        
        if (digitalRead(minuteStopSensor) != LOW)
        {
          minuteHand.step(3);
        }
        
        else
        {
          delay(4);
        }  
      }
    
      // Get current time
      DateTime now = rtc.now();
      hr =  now.hour();
      mn = now.minute();
      sc = now.second();
    
      // Change to 12 hour format 
      if (hr >= 12)
      {
        hr = hr - 12;
      }
    
      // See what hand must travel across the face further and use that distance 
      // to adjust set time accordingly. 
      hourTest = hr / 12;
      minuteTest = mn / 60;
    
      if (hourTest > minuteTest)
      {
        handDelay = hourTest;
      }
      else
      {
        handDelay = minuteTest;
      }
    
      // Set current hour
      setTimeStepHour = (hr * 498) + (mn * 8.3) + ((sc + (handDelay * 36)) * .1383);
    
      // Set current minute
      setTimeStepMinute = (mn * 114) + ((sc + (handDelay * 45)) * 1.9);
    
      // Test which hand will need more steps and set that to the longest step count for the for loop. 
      if (setTimeStepHour > setTimeStepMinute)
      {
        endStep = setTimeStepHour;
      }
      else
      {
        endStep = setTimeStepMinute;
      }
    
      for (int i = 0; i <= endStep; i++)
      {
        if (i < setTimeStepHour)
        {
          hourHand.step(2);
        }
        
        else
        {
          delay(3);
        }
    
        if (i < setTimeStepMinute)
        {
          minuteHand.step(3);
        }
    
        else
        {
          delay(4);
        }
      }
    
      // Set clock running RPM
      hourHand.setSpeed(1); 
      minuteHand.setSpeed(1); 
    
    }
    
    void loop() {
      // Start clock running loop.
      for (int i = 0; i < 22; i++)
      {
        minuteHand.step(1);
        delay(setDelay1);
    
        // Test for reset time, if ready to be reset, break.
        if (rtc.now().hour() == resetHour && rtc.now().minute() == resetMinute)
        {
          break;
        }
      }
    
      delay(setDelay3);
    
      for (int i = 0; i < 38; i++)
      {
        hourHand.step(1);
        delay(setDelay1);
    
        // Test for reset time, if ready to be reset, break.
        if (rtc.now().hour() == resetHour && rtc.now().minute() == resetMinute)
        {
          break;
        }
    
        for (int i = 0; i < 20; i++)
        {
          minuteHand.step(1);
          delay(setDelay2);
    
          // Test for reset time, if ready to be reset, break.
          if (rtc.now().hour() == resetHour && rtc.now().minute() == resetMinute)
          {
            break;
          }
        }
      }
    
      // Reset clock at reset time
      if (rtc.now().hour() == resetHour && rtc.now().minute() == resetMinute)
      {
        // Change speed of clock
        hourHand.setSpeed(10);
        minuteHand.setSpeed(10);
    
        // Loop till minute and hour hand reach noon.
         while (digitalRead(hourStopSensor) == LOW ||  digitalRead(minuteStopSensor) == LOW)
      {
    
        if (digitalRead(hourStopSensor) == LOW )
        {
          hourHand.step(2);
        }
        
        else
        {
          delay(3);
        }
        
        if (digitalRead(minuteStopSensor) == LOW)
        {
          minuteHand.step(3);
        }
        
        else
        {
          delay(4);
        }
        
      }
    
      while (digitalRead(hourStopSensor) != LOW || digitalRead(minuteStopSensor) != LOW)
      {
    
        if (digitalRead(hourStopSensor) != LOW )
        {
          hourHand.step(2);
        }
        
        else
        {
          delay(3);
        }
        
        if (digitalRead(minuteStopSensor) != LOW)
        {
          minuteHand.step(3);
        }
        
        else
        {
          delay(4);
        }  
      }
    
        // Wait here until the reset time has passed.
        while (rtc.now().minute() == resetMinute)
        {
          delay(1000);
        }
    
        // Get current time
        DateTime now = rtc.now();
        hr =  now.hour();
        mn = now.minute();
        sc = now.second();
    
        // Change to 12 hour format
        if (hr >= 12)
        {
          hr = hr - 12;
        }
    
        // See what hand must travel across the face further and use that distance 
        // to adjust set time accordingly. 
        hourTest = hr / 12;
        minuteTest = mn / 60;
    
        if (hourTest > minuteTest)
        {
          handDelay = hourTest;
        }
        else
        {
          handDelay = minuteTest;
        }
    
        // Set current hour
        setTimeStepHour = (hr * 498) + (mn * 8.3) + ((sc + (handDelay * 36)) * .1383);
    
        // Set current minute
        setTimeStepMinute = (mn * 114) + ((sc + (handDelay * 45)) * 1.9);
    
        // Test which hand will need more steps and set that to the longest step count for the for loop.
        if (setTimeStepHour > setTimeStepMinute)
        {
          endStep = setTimeStepHour;
        }
        else
        {
          endStep = setTimeStepMinute;
        }
    
    
        for (int i = 0; i <= endStep; i++)
        {
          if (i < setTimeStepHour)
          {
            hourHand.step(2);
          }
          
          else
          {
            delay(3);
          }
      
          if (i < setTimeStepMinute)
          {
            minuteHand.step(3);
          }
      
          else
          {
            delay(4);
          }
        }
    
        hourHand.setSpeed(1); 
        minuteHand.setSpeed(1); 
      }
    }

    От себя: мастер не до конца описал процесс сборки, в частности не понятно установка магнитов. думаю это будет интуитивно понятно в процессе сборке.

    Источник (Source)
    Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.
    Подборки: 3D принтер

    Изготовление большой полки со встроенными часами и подсветкой

    9.5
    Идея
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    7.5
    Описание
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    7.5
    Исполнение
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    Итоговая оценка: 8.17 из 10 (голосов: 2 / История оценок)

    Добавить комментарий

      • smilesmilesxaxaokdontknowyahoonea
        bossscratchfoolyesyes-yesaggressivesecret
        sorrydancedance2dance3pardonhelpdrinks
        stopfriendsgoodgoodgoodwhistleswoontongue
        smokeclappingcraydeclarederisivedon-t_mentiondownload
        heatirefullaugh1mdameetingmoskingnegative
        not_ipopcornpunishreadscarescaressearch
        tauntthank_youthisto_clueumnikacuteagree
        badbeeeblack_eyeblum3blushboastboredom
        censoredpleasantrysecret2threatenvictoryyusun_bespectacled
        shokrespektlolprevedwelcomekrutoyya_za
        ya_dobryihelperne_huliganne_othodifludbanclose
    2 комментария
    Валерий
    Korolev,
    Хорошо бы шесть датчиков поставить... Ещё по одному секундному и одному секундному.)))))
    Але нови ностра алис!
    Korolev
    Вырежьте во внутреннем кольце прорезь для датчика Холла минутного и для датчика Холла минутного
    А для часового и для часового? smile

    Привет, Гость!


    Зарегистрируйтесь

    Или войдите на сайт, если уже зарегистрированы...

    Войти

    Добавьте самоделку

    Добавьте тему

    Онлайн чат

    Опрос
    А Вы уже рассказали на сайте о своей самоделке?

    Последние комментарии

    Все комментарии