NewPing Library: HC-SR04, SRF05, SRF06, DYP-ME007, Parallax PING))) - v1.7

RobotXor:
Hello,

I would like to use 12 x HC-SR04 with an I/O multiplexer MCP23017 (or other) and NewPing library.
Is it possible ?
If yes, how do we configure the newping trigger et echo of the library?
If not, what solution to use knowing that I do not have enough I/O port?

Thank you in advance for your information

First, you only need 12 pins to control 12 HC-SR04 sensors using NewPing. So, using an I/O multiplexer may not even be required. Secondly, you can't use NewPing with an I/O multiplexer as it uses direct port register calls. If you don't have 12 available pins to control 12 sensors, you'll either need to use a Adruino Mega or develop your own custom sensor library or sketch to interface with your I/O multiplexer.

Tim

In the multiple sensor examples, how do I actually call up the data for the individual sensors to use that data? For instance, I might want to compare the first sensor to the second, or the first to the third, or figure out which sensor has the highest or lowest reading.

Northof49:
In the multiple sensor examples, how do I actually call up the data for the individual sensors to use that data? For instance, I might want to compare the first sensor to the second, or the first to the third, or figure out which sensor has the highest or lowest reading.

Please see the 15 Sensors Example Sketch Help. Everything is detailed in that post. Basically, everything is stored in an array so you can easily extract the information you want. The above linked help message will explain everything and gives alternative code to accomplish different tasks.

Tim

Got it working on my obstacle avoidance robot with three SR04 sensors up front and it is working very well. Great improvement.

My apologies for an unnecessary question. I needed to brush up on arrays.

Northof49:
Got it working on my obstacle avoidance robot with three SR04 sensors up front and it is working very well. Great improvement.

The "multi-tasking" or maybe I should correctly stay "event-driven" or "task-switching" method of pinging even one sensor that NewPing uses is a vast improvement over other methods. Using multiple sensors multiplies this improvement. Glad it's working for you!

Tim

@Teckel thank you for this library contribution. Is it possible to use this with an ultrasonic sensor like the Hagisonic HG-M40DAI? Its signal output timing is from rising edge of input pulse (trigger) to rising edge of output pulse (echo). In other words, almost the reverse of sensors like Ping.

Datasheet: http://www.robotshop.com/media/files/pdf/hagisonic-anibat-data-sheet.pdf.

If you're curious why the Hagisonic sensor, this "AniBat" model has the unique advantage (AFAIK) of an extremely wide field of view - 180°.

Thanks,

Eric

eforman:
@Teckel thank you for this library contribution. Is it possible to use this with an ultrasonic sensor like the Hagisonic HG-M40DAI? Its signal output timing is from rising edge of input pulse (trigger) to rising edge of output pulse (echo). In other words, almost the reverse of sensors like Ping.

Datasheet: http://www.robotshop.com/media/files/pdf/hagisonic-anibat-data-sheet.pdf.

If you're curious why the Hagisonic sensor, this "AniBat" model has the unique advantage (AFAIK) of an extremely wide field of view - 180°.

Thanks,

Eric

It sounds like it's similar to the URM37 sensor (hi/low switched). I'm sending you a private message that may help.

Tim

Hi,

I am using 3 HC-SR04 sensors. I tried the sketch but it doesnt even print out anything. What should I do

pei0807:
Hi,

I am using 3 HC-SR04 sensors. I tried the sketch but it doesnt even print out anything. What should I do

Check your settings and sketch, as I'm 101% sure it works. Thousands have used it. Maybe you don't have the serial baud rate set correctly to match the sketch?

Tim

little confused on the "code.google" site changes. are the "issues" you marked as done going to have the changes in the next version? also, why remove that issues list? it seems a very effective way to track features and bugs. the forum thread is kind of overwhelming, and very difficult to track any issues on.

chrwei:
little confused on the "code.google" site changes. are the "issues" you marked as done going to have the changes in the next version? also, why remove that issues list? it seems a very effective way to track features and bugs. the forum thread is kind of overwhelming, and very difficult to track any issues on.

I'm not notified when issues are created or when people make comments to sketches. Also, there isn't a good way of communicating about an issue. On this forum, I get notifications and others or myself can answer. No issues were looked at on the code.google site. If you have an issue or a suggestion, just post to this thread.

Thanks!

Tim

I just need to modify the number of sensors being used and the pin number right?

teckel:

pei0807:
Hi,

I am using 3 HC-SR04 sensors. I tried the sketch but it doesnt even print out anything. What should I do

Check your settings and sketch, as I'm 101% sure it works. Thousands have used it. Maybe you don't have the serial baud rate set correctly to match the sketch?

Tim

Hi I'm trying to use your library with arduino due and the 1.5 version direct seem to have support. I noticed on the Google code page a note said that 1.6 will have support but it's not released yet. I tried to find the source on the Google code page but u don't seem to host the source code on it. Is there due support available?

eggie5:
Hi I'm trying to use your library with arduino due and the 1.5 version direct seem to have support. I noticed on the Google code page a note said that 1.6 will have support but it's not released yet. I tried to find the source on the Google code page but u don't seem to host the source code on it. Is there due support available?

Version 1.6 does support the Due. Well, I believe it does. I don't have a Due to verify this.

Tim

Hi Tim,

I was wondering if you could advise me on how to connect a HC-SR04 to the official arduino robot, I am stumped and have promised some kids a model of R2-D2 for a music event on Sunday using the robot as it's base but only realised afterwards that it doesn't support digital sensors out of the box, please help!

Thanks,
Jay.

jaylfc:
Hi Tim,

I was wondering if you could advise me on how to connect a HC-SR04 to the official arduino robot, I am stumped and have promised some kids a model of R2-D2 for a music event on Sunday using the robot as it's base but only realised afterwards that it doesn't support digital sensors out of the box, please help!

Thanks,
Jay.

I don't know what you mean buy it doesn't support digital sensors. The Arduino Robot's control board has 5 digital I/O ports and the motor board has 4 I/O ports. It looks like the control board has 8 multiplexed pins labeled TK0-TK7 that can't be used with NewPing. But, the specs say there's 5 digital I/O pins, so the interfaces to these pins are in other locations. The motor board's 4 I/O pins TK1-TK4 do have connection ports right on the board that are not multiplexed so they can go straight to the ultrasonic sensor. NewPing can interface with a HC-SR04 using only one pin, so you can wire both the trigger and echo pins on the sensor to the same I/O pin on the Arduino Robot. While TK1 and TK2 are analog pins, they will work just fine as digital pins as well. Remember, analog pins are also always digital pins (but not vice versa).

Since it seems that the motor board is the easier to connect an ultrasonic sensor via NewPing, here's some code that should work (keep in mind that I don't have an Arduino Robot so this is just a shot in the dark, anyone willing to donate one?):

#include <NewPing.h>

NewPing sonar(TK3, TK4, 200);

void setup() {}

void loop() {
  delay(50);
  unsigned int cm = sonar.ping_cm();
  // Do something with the results
}

To conserve available pins, you could also use the same pin for trigger and echo. Also, remember that you could just as well use TK1 and TK2 even though they're analog pins, they will work as digital.

Hope this helps!

Tim

Do you just name the same digital pin twice when you want to use the same pin for trigger and echo? That simple?

Northof49:
Do you just name the same digital pin twice when you want to use the same pin for trigger and echo? That simple?

Yup, that simple.

Tim

Thank you so much Tim, I will try it and let you know how I get on!

Regards,
Jay.

Thanks for your help Tim, I have now attached the sensor to D3 and I am able to get readings via serial. Could you or anybody else help me change this code to work with your library:

#include <ArduinoRobot.h>
#include <Wire.h>
#include <SPI.h>

int sensorPin = M1;  // pin is used by the sensor

void setup() {
  // initialize the Robot, SD card, and display
  Serial.begin(9600);
  Robot.begin();
  Robot.beginTFT();
  Robot.beginSD();
  Robot.displayLogos();

  // draw a face on the LCD screen
  setFace(true);
}

void loop() {
  // If the robot is blocked, turn until free
  while (getDistance() < 40) { // If an obstacle is less than 20cm away
    setFace(false); //shows an unhappy face
    Robot.motorsStop(); // stop the motors
    delay(1000); // wait for a moment
    Robot.turn(90); // turn to the right and try again
    setFace(true); // happy face
  }
  // if there are no objects in the way, keep moving
  Robot.motorsWrite(255, 255);
  delay(100);
}

// return the distance in cm
float getDistance() {
  // read the value from the sensor
  int sensorValue = Robot.analogRead(sensorPin);
  //Convert the sensor input to cm.
  float distance_cm = sensorValue * 1.27;
  return distance_cm;
}

// make a happy or sad face
void setFace(boolean onOff) {
  if (onOff) {
    // if true show a happy face
    Robot.background(0, 0, 255);
    Robot.setCursor(44, 60);
    Robot.stroke(0, 255, 0);
    Robot.setTextSize(4);
    Robot.print(":)");
  } else {
    // if false show an upset face
    Robot.background(255, 0, 0);
    Robot.setCursor(44, 60);
    Robot.stroke(0, 255, 0);
    Robot.setTextSize(4);
    Robot.print("X(");
  }
}

This is meant to be used with an analog sensor like a Maxbotix EZ10.

Thanks for your help so far!
Jay.

P.S. All of the LCD stuff isn't important, it is just the sensor working with the motors I need working. Thanks again!