🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Ultrasonic unit reads erroneous distance

    Units
    1
    3
    3.6k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      aafortinet
      last edited by

      Hello, I have a M5 CoreInk onto which I have plugged a Ultrasonic sensor. I am getting a buggy distance read all the time.

      [-] bad distance: 4294967.500000
      [-] bad distance: 4294967.500000
      [-] bad distance: 4294967.500000
      

      My code is very much taken from this example.

      This is how I initialized Wire. I am not sure about this Wire.begin(21,22). It is taken from this code, but this other code uses other values...

      void setup() {
      
          M5.begin(); //Init CoreInk.  
          if( !M5.M5Ink.isInit()) //Init CoreInk screen.
          {
              Serial.printf("[-] M5Ink init failed");  
              while (1) delay(100);
          }
      
          Wire.begin(21,22);
          Serial.printf("[+] Wire begin done\n");
          
          M5.M5Ink.clear();   //Clear screen.  
          ...
      

      And this is how I read distance. This looks good to me...

      #define M5_I2C_ADDR_ULTRASONIC 0x57
      float readDistance() {
        uint32_t data;
        Wire.beginTransmission(M5_I2C_ADDR_ULTRASONIC); 
        Wire.write(0x01);
        Wire.endTransmission(); 
        delay(120);
        Wire.requestFrom(M5_I2C_ADDR_ULTRASONIC,3); 
        data  = Wire.read();data <<= 8;
        data |= Wire.read();data <<= 8;
        data |= Wire.read();
        return float(data) / 1000; // distance in mm
      }
      

      and then the loop - can't see anything wrong either...

      void loop() {
        static float newvalue = 0;
        newvalue = readDistance();
        if ((newvalue < 1500) && (newvalue > 0)) {
          Serial.printf("Distance: ",newvalue);
        } else {
          Serial.printf("[-] bad distance: %f\n",newvalue);
        
        }
        delay(100);
      
      }
      

      Can you help me spot the error? Or is my sensor faulty? or is something different with CoreInk?

      Thanks

      A 1 Reply Last reply Reply Quote 0
      • A
        aafortinet @aafortinet
        last edited by

        I fixed my problem using

        Wire.begin(32,33);
        

        The distance now makes sense. I don't know what these values are for, though...

        Also, my distance is not precise. I'll investigate and post again if the problem persists.

        1 Reply Last reply Reply Quote 0
        • A
          aafortinet
          last edited by

          The distances I get are really strange:

          • The values are well below or well above the expected ones. For example, for a distance of ~95cm the sensor answers 4.5cm. For a distance of ~110cm, 4.9cm. For ~35cm, 3.7cm etc.
          • The values change for the same distance. So different measures of ~200cm gives 13.7cm or 79.6cm the next time...

          The command Wire.begin(32,33) seems correct as I realize those are the ports for the sensor on the CoreInk.

          So, what am I doing wrong?

          1 Reply Last reply Reply Quote 0
          • First post
            Last post