вопрос по подключению датчиков

Тема в разделе "Arduino & Shields", создана пользователем Koteishna, 24 фев 2012.

  1. Koteishna

    Koteishna Нуб

    Всем доброго вечера! Подскажите, пожалуйста, в чем причина: подключаю к Arduino Mega через IO Shild датчики SHARP GP2Y0A02YK0F (датчик расстояния) и ИК детектор SEN0018. Оба они выдают какие-то странные данные при запуске программы. Цифры, совершенно не зависящие друг от друга, не имеющие периодичности или цикличности. Правда, дальномер выдает через каждые 2 цифры 0. Это закодированные сигналы? Или неисправные датчики? И Что делать? их 4 штуки таких!​
     
  2. dmitri

    dmitri Нерд

    скетч подобный?
    Код (Text):

    //
    // SHARP IR sensor testing
    //

    int IRpin = 0;                                    // аналоговый пин для подключения выхода Vo сенсора

    void setup() {
      Serial.begin(9600);                             // старт последовательного порта
    }

    void loop() {
      // 5V/1024 = 0.0048828125
      float volts = analogRead(IRpin)*0.0048828125;   // считываем значение сенсора и переводим в напряжение
      float distance = 65*pow(volts, -1.10);          // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk
      Serial.println(distance);                       // выдаём в порт
      delay(100);                                     // ждём
    }
    датчик аналоговый, то возможно причина случайных чисел в этом
     
  3. Koteishna

    Koteishna Нуб

    код сначала был такой:

    ​
    #include​
    <Servo.h>​
    ​
    ​
    //Define Pins​
    ​
    int servoPin = 9;​
    ​
    int distPin = 0;​
    ​
    ​
    //Create Servo Object​
    ​
    Servo jeremysServo;​
    ​
    ​
    void setup()​
    ​
    {​
    ​
    ​
    //Attaches the Servo to our object​
    ​
    jeremysServo.attach(servoPin);​
    ​
    }​
    ​
    ​
    void loop()​
    ​
    {​
    ​
    //Read the Distance Sensor and adjust values​
    ​
    int dist = analogRead(distPin);​
    ​
    int pos = map(dist, 0, 1023, 0, 180);​
    ​
    ​
    //Turn the servo​
    ​
    jeremysServo.write(pos);​
    ​
    ​
    }​

    - выдает беспорядочно числа -​
    ​
    0​
    75​
    ​
    162​
    ​
    84​
    ​
    0​
    ​
    0​
    ​
    61​
    ​
    162​
    ​
    98​
    ​
    0​
    ​
    0​
    ​
    48​
    ​
    162​
    ​
    111​
    ​
    0​
    ​
    0​


    ​
    потом пробовала:

    int _measure()
    {
    int val=0, tmp;
    for (byte i = 0 ; i < 5 ; ++i) {
    val += analogRead(sensorPin);
    delay(24);
    }
    return val/1024.0;
    }

    void loop() {
    float val =_measure();
    }

    - при этом варианте выдает нули просто
     
  4. если вам нужен сонар,то вот пример,но он на пинге!

    #include <Servo.h>

    //--------------------------------------

    int minSweep = 45;
    int maxSweep = 135;

    int pingPin = 7; // ping
    int servoPin = 9; // servo

    //--------------------------------------
    // System globals:
    Servo myservo;
    int pos = minSweep;
    int dir = 1;

    //--------------------------------------
    void setup()
    {
    myservo.attach(servoPin);
    Serial.begin(9600);
    }

    //--------------------------------------
    void loop(){
    long cm, duration;

    myservo.write(pos);

    if (dir == 1){
    if(pos < maxSweep){
    pos += 1;
    }
    else{
    dir = -1;
    }
    }
    else if(dir == -1){
    if(pos > minSweep){
    pos -= 1;
    }
    else{
    dir = 1;
    }
    }

    pinMode(pingPin, OUTPUT);
    digitalWrite(pingPin, LOW);
    delayMicroseconds(2);
    digitalWrite(pingPin, HIGH);
    delayMicroseconds(5);
    digitalWrite(pingPin, LOW);

    pinMode(pingPin, INPUT);
    duration = pulseIn(pingPin, HIGH);

    cm = microsecondsToCentimeters(duration);

    Serial.print(pos);
    Serial.print(" ");
    Serial.print(cm);
    Serial.println();

    delay(15);
    }

    //--------------------------------------
    long microsecondsToCentimeters(long microseconds)
    {

    return microseconds / 58;
    }
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    Попробуйте код от @dmitri — он дело говорит. Не очень понятно, что означает «код выдаёт» в ваших примерах, если там вообще не фигурирует передача данных по Serial.