Вольтметр

Тема в разделе "Arduino & Shields", создана пользователем Motrosoff, 19 июн 2016.

  1. Motrosoff

    Motrosoff Гик

    Код (C++):
    long time4 = 0;

    void setup() {
      pinMode(12, OUTPUT);
      Serial.begin(38400);
    }

    void loop(){

    if (millis() >= (time4+5000)) { // если прошло 5 секунд то проверяем напряжение
      int sensor = analogRead(A4);
      if ((sensor) < 522) digitalWrite(12, HIGH);
      if ((sensor) > 522) digitalWrite(12, LOW);
    Serial.print("voltag-");
    Serial.println(sensor);
      time4=millis();  // засекаем время
       }
    }
    В общем хочу сделать измерение напряжения и при падении напряжения на определённое значение, начнёт мигать светодиод (это в идеале), а он просто загорается, и гаснет после того, как напряжение начинает повышаться от заданного значения (например 2,8 вольт) ВОПРОС как мне сделать так, что бы мигало при падении напряжения и не перестовала мигать после 10 циклов мигания с паузой по 0,5 сек??? А этот код немного не то что я хотел((( :eek:
     
  2. Motrosoff

    Motrosoff Гик

    Пытался всавить туда элементарный блинк, но не мигает!!!(( а просто горит 5 сек((
     
  3. vvr

    vvr Инженерище

    значит вставил не то или не так))))
    сделайте таймер со счётчиком и по значениям делайте свои блинки
     
  4. Vad33

    Vad33 Капитан-оригинал

    Самое простое - поставить мигающий светодиод. ))

    Ну или как то так:
    Код (C++):
    long time4 = 0;
    int led = 12;

    void setup() {
      pinMode(led, OUTPUT);
      Serial.begin(38400);
    }

    void loop(){

    if (millis() >= (time4+5000)) { // если прошло 5 секунд то проверяем напряжение
      int sensor = analogRead(A4);
      Serial.print("voltag-");
      Serial.println(sensor);
      time4=millis();  // засекаем время
      if ((sensor) < 522) Blink();
       }
    }

    void Blink(){
      for(int i=0;i<10;i++){
      digitalWrite(led, HIGH);
      delay(250);
      digitalWrite(led, LOW);
      delay(250);}
      }
     
    Motrosoff нравится это.
  5. Motrosoff

    Motrosoff Гик

    Ничёси..:eek:..)) Лайк ёпти!!!) Спасибо всё как нужно запыхтело!!!)):)
     
    NikitOS нравится это.
  6. Motrosoff

    Motrosoff Гик

    А как ещё сделать так что бы из единиц в вольты переводил..ну например, я знаю, что весь диапазон измерения 0-1024, а 512 соответствует 2,5.....это нужно типа примерчика написать,что бы он сам решал и в мониторе порта сразу вольты показывал..?? Мне в принципе не принципиально что бы вольты показывал, ну вот хочу посмотреть сколько вольт!)
     
  7. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    const byte maxVoltage = 5; // максимально возможное измеряемое напряжение
    float voltage = map(analogRead(A4),0,1024,0,maxVoltage*100)/100.0;
    Serial.println(voltage);
     
    Alex_KAN, Motrosoff и Slaiterx нравится это.
  8. Motrosoff

    Motrosoff Гик

    :eek: !! Класс)
    вот только куда это подставить?!
     
  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    unsigned long time4 = 0;
    const byte ledPin = 12;
    const byte maxVoltage =5;// максимально возможное измеряемое напряжение

    void setup()
    {
      pinMode(ledPin, OUTPUT);
      Serial.begin(38400);
    }

    void loop()
    {
    if(millis()>=(time4+5000)) // если прошло 5 секунд то проверяем напряжение
    {
      float voltage = map(analogRead(A4),0,1024,0,maxVoltage*100)/100.0;
      Serial.print("Voltage:");
      Serial.println(voltage);
      time4=millis();// засекаем время
      if(voltage<2.5) blink();
       }
    }

    void blink()
    {
    for(int i=0;i<10;i++)
    {
      digitalWrite(ledPin, HIGH);
      delay(250);
      digitalWrite(ledPin, LOW);
      delay(250);}
    }
     
    Motrosoff нравится это.
  10. Motrosoff

    Motrosoff Гик

    Усё, разобрался :eek:) Всем спасибо!!!!!!
    Особенно : Vad33
    Tomasina
     
  11. Motrosoff

    Motrosoff Гик

    Ребят, а может погрешность быть в измерении??? А то вольтметр показывает 3,89, а ардуина 4,02 ???
     
  12. Motrosoff

    Motrosoff Гик

    Уже откорректировал)
    Ещё раз всем спасибо!!!
     
  13. Motrosoff

    Motrosoff Гик

    Здравствуй ещё раз!) Помощ нужна твоя!!! Я решил залить этот код на Attiny13 но он туда не помещаетс!!!!((((
    я видел что то делают с кодом и он меньше весит!!! Как мне его уменьшить то:( ??? там что то с #define связано а сам код вот этот
    Код (C++):
    unsigned long time4 = 0;
    const byte ledPin = 0;
    const byte maxVoltage =5;// максимально возможное измеряемое напряжение

    void setup()
    {
      pinMode(ledPin, OUTPUT);
    }

    void loop()
    {
    if(millis()>=(time4+1000)) // если прошло 5 секунд то проверяем напряжение
    {
      float voltage = map(analogRead(A1),0,1060,0,maxVoltage*100)/100.0;
      time4=millis();// засекаем время
      if(voltage<2.8) blink();
       }
    }

    void blink()
    {
    for(int i=0;i<10;i++)
    {
      digitalWrite(ledPin, HIGH);
      delay(250);
      digitalWrite(ledPin, LOW);
      delay(250);}
    }
     
  14. Airbus

    Airbus Радиохулиган Модератор

    в Тини-13 не получиться-там нет АЦП
     
  15. Airbus

    Airbus Радиохулиган Модератор

    А вот эта строка if(millis()>=(time4+5000)) // если прошло 5 секунд то проверяем напряжение зачем?В смысле измерять напряжение только через 5 минут а "по кругу"-непрерывно не?
     
  16. Motrosoff

    Motrosoff Гик

    Можно и по кругу, что бы замерялось напряжение аккумулятора...и если напряжение будет (по задумке) меньше 2,8 вольта то начинается мигалка, простая мигалка, 10 раз помигал и хорошь ) вот это и нужно как то уместить
     
  17. Motrosoff

    Motrosoff Гик

    Нет!!! не на А4.) мне нужно что бы провод батарейки присоединялся к А1, а выход мигалки на D0 ! Может что то подправить нужно в скетче моём??
     
  18. Motrosoff

    Motrosoff Гик

    А ты можешь скетч скинуть, показать, как без неё работает!? Спасибо)
     
  19. Airbus

    Airbus Радиохулиган Модератор

    Нет проблем вход читаем float voltage = map(analogRead(A1),0,1060,0,maxVoltage*100)/100.0;
    В сетапе pinMode(0, OUTPUT);
    А строчку if(millis()>=(time4+1000)) // если прошло 5 секунд то проверяем напряжение тупо закоментируем (или удалим?) вот так //if(millis()>=(time4+1000)) // если прошло 5 секунд то проверяем напряжение
    Код (C++):
    const byte maxVoltage =5;// максимально возможное измеряемое напряжение
    void setup()
    {
      pinMode(0, OUTPUT);// пин0 как выход
    }

    void loop()
    {
      float voltage = map(analogRead(A1),0,1060,0,maxVoltage*100)/100.0; //измерили V
      if(voltage<2.8) blink(); //если напряжение меньше 2.8 вольт то мигаем 10 раз
       }
    void blink()
    {
    for(int i=0;i<10;i++)
    {
      digitalWrite(0, HIGH);// пин 0 вкл
      delay(250);
      digitalWrite(0, LOW);// пин 0 выкл
      delay(250);}
    }
     
    Последнее редактирование: 5 авг 2016
  20. Motrosoff

    Motrosoff Гик

    Чувак!!!! И что работает на Attiny13 ????????