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

Тема в разделе "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.