Не работает код с сервоприводом и уз датчиком

Тема в разделе "Arduino & Shields", создана пользователем Joker707, 27 дек 2022.

  1. Joker707

    Joker707 Нуб

    Сначала создал код для управления сервоприводами через потанциометр всё работало нормально но после добавления уз датчика с экраном сервопривод стал двигаться от изменения дистанции. вот код:
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>
    #include "Ultrasonic.h"
    #include <Servo.h>

    LiquidCrystal_I2C lcd(0x27,16,2); // Задаем адрес и размерность дисплея
    Ultrasonic ultrasonic(9,8); //trigPin - 12; echoPin - 11;
    const int ledPin = 10; // 13 – если будете использовать встроенный в Arduino светодиод\

    Servo servo1; // create servo object to control a servo
    Servo servo2;
    Servo servo3;
    Servo servo4;
    Servo servo5;
    int potpin1 = A10; // analog pin used to connect the potentiometer
    int val1; // variable to read the value from the analog pin

    int potpin2 = A11; // analog pin used to connect the potentiometer
    int val2; // variable to read the value from the analog pin

    int potpin3 = A12; // analog pin used to connect the potentiometer
    int val3; // variable to read the value from the analog pin

    int potpin4 = A13; // analog pin used to connect the potentiometer
    int val4; // variable to read the value from the analog pin

    int potpin5 = A14; // analog pin used to connect the potentiometer
    int val5; // variable to read the value from the analog pin

    void setup() {
    servo1.attach(0); // attaches the servo on pin 9 to the servo objec
    servo2.attach(1);
    servo3.attach(2);
    servo4.attach(3);
    servo5.attach(4);
    pinMode(ledPin, OUTPUT); // задаем светодиод - выходной пин
    Serial.begin(9600); // инициализация послед. порта
    Wire.begin();
    lcd.init(); // Инициализация lcd
    lcd.backlight(); // Включаем подсветку
    lcd.print("Distance:"); //печатаем текст
    }

    void loop() {
    val1 = analogRead(potpin1); // reads the value of the potentiometer (value between 0 and 1023)
    val1 = map(val1, 0, 1023, 0, 180); // scale it for use with the servo (value between 0 and 180)
    servo1.write(val1); // sets the servo position according to the scaled value
    delay(15); // waits for the servo to get there

    val2 = analogRead(potpin2); // reads the value of the potentiometer (value between 0 and 1023)
    val2 = map(val2, 0, 1023, 5, 180); // scale it for use with the servo (value between 0 and 180)
    servo2.write(val2); // sets the servo position according to the scaled value
    delay(15);

    val3 = analogRead(potpin3); // reads the value of the potentiometer (value between 0 and 1023)
    val3 = map(val3, 0, 1023, 0, 180); // scale it for use with the servo (value between 0 and 180)
    servo3.write(val3); // sets the servo position according to the scaled value
    delay(15);

    val4 = analogRead(potpin4); // reads the value of the potentiometer (value between 0 and 1023)
    val4 = map(val4, 0, 1023, 0, 180); // scale it for use with the servo (value between 0 and 180)
    servo4.write(val4); // sets the servo position according to the scaled value
    delay(15);

    val5 = analogRead(potpin5); // reads the value of the potentiometer (value between 0 and 1023)
    val5 = map(val5, 0, 1023, 0, 180); // scale it for use with the servo (value between 0 and 180)
    servo5.write(val5); // sets the servo position according to the scaled value
    delay(15);

    Serial.println(ultrasonic.Ranging(CM)); // выводим в последовательный порт
    lcd.setCursor(10,0); //устанавливаем курсор
    lcd.print(ultrasonic.Ranging(CM)); //выводим на lcd
    lcd.print("cm"); //печатаем текст cm
    lcd.print(" "); //печатаем пробелы для стирания лишних символов при увеличении разрядности значений

    if (ultrasonic.Ranging(CM)<20) // задаем нужную дистанцию, например менее 20 сантиметров
    {
    digitalWrite(ledPin, 1); // включаем светодиод
    lcd.setCursor(0,1); //устанавливаем курсор в начало первой строчки
    lcd.print("Attention"); //печатаем Внимание
    }
    else
    {
    digitalWrite(ledPin, 0); // иначе выключаем
    lcd.setCursor(0,1); //устанавливаем курсор в начало второй строчки
    lcd.print("Normal "); //печатаем Норма
    }
    delay(100);
    }
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Щас придут гуру и начнут орать, что код надо загонять под значек (похожий на симку и цифру 1)

    1. Что за Ардуина ? Нет ли путаницы с пинами 11 и А11, 12 и А12, 13 и А13
    2. Там где аналоговый сигнал - надо вводить строчку про референс
    analogReference( nnnn ) - неизвестно что там записалось.
    3. Возможно появилось влияние на питание потенциометров от появления дополнительных нагрузок по питанию. (хотя если потенциометры и референс АЦП запитаны с одной цепи, то влияния не должно быть по теории)
    4. Желательно видеть схему, чтоб было над чем думать.
     
  3. Joker707

    Joker707 Нуб

    плата кастомная от компании Aplied Robotics с распаяными на ней же потанциометрами
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Что значит кастомная ? Сделанная по вашему заказу ?
     
  5. parovoZZ

    parovoZZ Гуру

    кастомная - это сделанная с
     
  6. Joker707

    Joker707 Нуб

    до ограниченная серия с встроенными потанциометрами увеличеным количеством портов и отдельной линией 6 вольт для сервоприводов