Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Аналоговые панельные измерительные часы Arduino

Компоненты и расходные материалы

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ± 5ppm, часы реального времени I2C
× 1
амперметр 1 мА
× 3
резистор 5 кОм
× 3
Резистор 10 кОм
× 2
Кнопочный переключатель SparkFun, 12 мм
× 2

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Я построил эти красивые деревянные аналоговые часы с Arduino Nano и амперметром 1 мА. У меня появилась идея отсюда. Для отображения секунд добавлена ​​часть кода. Также добавлена ​​деталь, которая при работе проходит через всю шкалу от нуля до максимума. значение для калибровки. В зависимости от того, какие амперметры мы используем, номинал резисторов 5k может быть разным. Поскольку все измерители немного отличаются, значения ШИМ необходимо отрегулировать в соответствии с вашим дизайном. Вам придется изменить некоторые значения, потому что он настроен специально для работы с моими измерителями.

Код

  • код
код Arduino
 / * Аналоговый панельный измеритель - режим ТОЛЬКО часы Instructables Ссылка:http://www.instructables.com/id/Analog-VU-meter-and-Clock-Arduino-Powered/ Кредиты:bildr - Код DS1307 RTC http://bildr.org/2011/03/ds1307-arduino/ _____________________ Проводка выполняется следующим образом:- красный провод USB (5 В) к VCC - черный провод USB к GND - Кнопки - Влево / Вниз к Digital 2 (следуйте инструкциям по Arduino:http ://arduino.cc/en/uploads/Tutorial/button.png) - Правый / до цифрового 3 - DS1307 RTC - SDA на аналоговый 4 - SCL на аналоговый 5 - Левый аналоговый измеритель на цифровой 5 (PWM) - Правый аналоговый Измеритель в цифровой 6 (ШИМ) _- Секунды Аналоговый измеритель в цифровой 9_ (ШИМ) _____________________ Примечание. Поскольку все измерители немного отличаются, значения ШИМ необходимо отрегулировать в зависимости от вашего дизайна. Не стесняйтесь использовать мой код, но вам придется изменить некоторые значения, потому что он настроен специально для работы с моими измерителями. * / # include "Wire.h" #define DS1307_ADDRESS 0x68byte zero =0x00; // способ решения проблемы # 527int downButton =2; // кнопка вниз для настройки времени (вывод 2) int upButton =3; // кнопка вверх для настройки времени (вывод 3) int hours =0; int minutes =0; int seconds =0; int lastMinute =0; int lastSecond =0; int leftMeter =5; // левый счетчик (часы) привязан к выводу 5int rightMeter =6; // правый счетчик (мин) прикреплен к выводу 6int secMeter =9; // счетчик секунд (sec) прикреплен к выводу 9void setup () {Wire.begin (); Serial.begin (9600); // просмотр времени в последовательном мониторе pinMode (leftMeter, OUTPUT); // Инициализируем выходы и входы pinMode (rightMeter, OUTPUT); pinMode (secMeter, ВЫХОД); digitalWrite (leftMeter, HIGH); // Тестирование счетчиков при запуске digitalWrite (rightMeter, HIGH); digitalWrite (secMeter, HIGH); digitalWrite (13, ВЫСОКИЙ); задержка (1000); digitalWrite (leftMeter, LOW); digitalWrite (rightMeter, LOW); digitalWrite (secMeter, LOW); digitalWrite (13, LOW); задержка (1000);} недействительный цикл () {printDate (); задержка (75); // Изменение времени кнопками if (digitalRead (downButton) ==HIGH) {byte second =seconds; // Не запутайтесь:секунда - это не то же самое, что секунды byte minute =minutes; // Не запутайтесь:минута - это не то же самое, что минуты byte hour =hours; // Не запутайтесь:час - это не то же самое, что и hoursif (minutes> 0) {--minute; } else {минута =59; если (часы> 0) {- час; } else {hour =23;}} Wire.beginTransmission (DS1307_ADDRESS); Wire.write (ноль); // останавливаем осциллятор Wire.write (decToBcd (second)); Wire.write (decToBcd (минута)); Wire.write (decToBcd (час)); Wire.write (ноль); // запускаем Wire.endTransmission ();} if (digitalRead (upButton) ==HIGH) {byte second =0; байт минута =минуты; // Не запутайтесь:минута - это не то же самое, что минуты byte hour =hours; // Не запутайтесь:час - это не одно и то же, если (минут <59) {++ минута; } еще {минута =0; если (часы <23) {++ час; } else {hour =0;}} Wire.beginTransmission (DS1307_ADDRESS); Wire.write (ноль); // останавливаем осциллятор Wire.write (decToBcd (second)); Wire.write (decToBcd (минута)); Wire.write (decToBcd (час)); Wire.write (ноль); // запускаем Wire.endTransmission ();}} byte decToBcd (byte val) {// Преобразуем обычные десятичные числа в двоично-десятичные return ((val / 10 * 16) + (val% 10));} byte bcdToDec (byte val) {// Преобразование двоично-десятичного числа в обычное десятичное return ((val / 16 * 10) + (val% 16));} void printDate () {// Сбрасываем указатель регистра Wire.beginTransmission (DS1307_ADDRESS); Wire.write (ноль); Wire.endTransmission (); Wire.requestFrom (DS1307_ADDRESS, 7); секунды =bcdToDec (Wire.read ()); минут =bcdToDec (Wire.read ()); часы =bcdToDec (Wire.read () &0b111111); // 24-часовое время // вывод даты Serial.print (hours); // Снимите комментарий для просмотра времени в последовательном мониторе Serial.print (":"); // Serial.println (минуты); // Не забудьте не комментировать 'Serial.begin' в 'void setup' выше // Определенные уровни счетчика для каждого часа // Вам, вероятно, придется отрегулировать эти значения. // Поиграйте со значениями, пока не получите что вы хотите. если (lastMinute! =минуты) {если (часы ==1 || часы ==13) {analogWrite (leftMeter, 0); // настраиваем уровень левого (часового) счетчика} if (hours ==2 || hours ==14) {analogWrite (leftMeter, 29); // настраиваем левый (часовой) уровень счетчика} if (hours ==3 || hours ==15) {analogWrite (leftMeter, 52); // настраиваем уровень левого (часового) счетчика} if (hours ==4 || hours ==16) {analogWrite (leftMeter, 75); // настраиваем левый (часовой) уровень счетчика} if (hours ==5 || hours ==17) {analogWrite (leftMeter, 98); // настраиваем уровень левого (часового) счетчика} if (hours ==6 || hours ==18) {analogWrite (leftMeter, 130); // настраиваем левый (часовой) уровень счетчика} if (hours ==7 || hours ==19) {analogWrite (leftMeter, 152); // настраиваем уровень левого (часового) счетчика} if (hours ==8 || hours ==20) {analogWrite (leftMeter, 172); // настраиваем левый (часовой) уровень счетчика} if (hours ==9 || hours ==21) {analogWrite (leftMeter, 192); // настраиваем уровень левого (часового) счетчика} if (hours ==10 || hours ==22) {analogWrite (leftMeter, 213); // настраиваем уровень левого (часового) счетчика} if (hours ==11 || hours ==23) {analogWrite (leftMeter, 234); // настраиваем уровень левого (часового) счетчика} if (hours ==0 || hours ==12) {analogWrite (leftMeter, 255); // настраиваем левый (часовой) уровень счетчика} if (minutes * 4.75 <255) {// увеличиваем значение PWM на 4,75 каждую минуту analogWrite (rightMeter, minutes * 4.75); // Мне пришлось использовать 4,75 на моем измерителе, чтобы получить 30 минут для точной точки} else {// идеально было бы 4,25, потому что 4,25 * 60 =255 analogWrite (rightMeter, 255); } lastMinute =минуты; если (секунды * 4,25 <255) {analogWrite (secMeter, секунды * 4,25); } else {analogWrite (secMeter, 255); } lastSecond =секунды; }} 

Схема


Производственный процесс

  1. Часы видения Arduino pov
  2. Простые часы со словами (Arduino)
  3. Часы Arduino с исламским временем молитв
  4. Основные часы
  5. Цветы - Arduino Nano, CrazyCircuits, DFRobot
  6. Светодиодные часы POV в аналоговом стиле
  7. Колесо вкладки аналогового триммирования FlightGear
  8. Панельные счетчики упрощают проектирование
  9. Выбор цифровых и аналоговых панелей
  10. Что такое панельный измеритель?