Integration of multiple sensors with ROS Serial

Dependencies:   mbed HCSR04 VEML7700

Committer:
zillkhan
Date:
Sat Oct 23 07:49:00 2021 +0000
Revision:
4:69cd9240fd74
Parent:
3:c23614e6262f
Adding BME680 driver

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zillkhan 0:d409714cebbf 1 #include <ros.h>
zillkhan 0:d409714cebbf 2 #include <std_msgs/Float32.h>
zillkhan 0:d409714cebbf 3 #include <std_msgs/String.h>
zillkhan 3:c23614e6262f 4 #include <std_msgs/Int16.h>
zillkhan 0:d409714cebbf 5 #include "SHARPIR.h"
zillkhan 2:b847309a754d 6 #include "hcsr04.h"
zillkhan 3:c23614e6262f 7 #include "VEML7700.h"
zillkhan 4:69cd9240fd74 8 #include "mbed_bme680.h"
zillkhan 0:d409714cebbf 9
zillkhan 3:c23614e6262f 10 #ifndef MSU_VEML7700_I2C_ADDRESS
zillkhan 3:c23614e6262f 11 #define MSU_VEML7700_I2C_ADDRESS 0x10
zillkhan 3:c23614e6262f 12 #endif
zillkhan 3:c23614e6262f 13
zillkhan 3:c23614e6262f 14 #define PIN_SCL D15
zillkhan 3:c23614e6262f 15 #define PIN_SDA D14
zillkhan 0:d409714cebbf 16
zillkhan 1:3a7e10c8a325 17 //Sharp IR sensor analog pin defination
zillkhan 1:3a7e10c8a325 18 SHARPIR Sensor(A0);
zillkhan 1:3a7e10c8a325 19
zillkhan 2:b847309a754d 20 //Ultrasonic sensor pin defination
zillkhan 2:b847309a754d 21 //D8 TRIGGER D9 ECHO
zillkhan 2:b847309a754d 22 HCSR04 sensor(D8, D9);
zillkhan 2:b847309a754d 23
zillkhan 4:69cd9240fd74 24 // BME680 pin defination
zillkhan 4:69cd9240fd74 25 I2C i2c(PIN_SDA, PIN_SCL);
zillkhan 4:69cd9240fd74 26 BME680 bme680(0xEE); //I2C address for BME680
zillkhan 4:69cd9240fd74 27
zillkhan 0:d409714cebbf 28 ros::NodeHandle nh;
zillkhan 0:d409714cebbf 29
zillkhan 1:3a7e10c8a325 30 //SharpIR publisher initialization
zillkhan 2:b847309a754d 31 std_msgs::Float32 data_ir;
zillkhan 2:b847309a754d 32 ros::Publisher sharpir("sharpir", &data_ir);
zillkhan 0:d409714cebbf 33
zillkhan 2:b847309a754d 34 //Ultrasonic sensor publisher initialization
zillkhan 2:b847309a754d 35 std_msgs::String data_ul;
zillkhan 2:b847309a754d 36 ros::Publisher ultrasonic("ultrasonic", &data_ul);
zillkhan 0:d409714cebbf 37
zillkhan 3:c23614e6262f 38 //Ambient Light sensor publisher initialization
zillkhan 3:c23614e6262f 39 std_msgs::Int16 data_als;
zillkhan 3:c23614e6262f 40 ros::Publisher ALS("ALS", &data_als);
zillkhan 3:c23614e6262f 41
zillkhan 4:69cd9240fd74 42 //BME680 publisher initialization
zillkhan 4:69cd9240fd74 43 std_msgs::String msg;
zillkhan 4:69cd9240fd74 44 ros::Publisher sensor_bme("sensor_bme", &msg);
zillkhan 4:69cd9240fd74 45
zillkhan 3:c23614e6262f 46 VEML7700 *veml7700 = 0 ;
zillkhan 3:c23614e6262f 47
zillkhan 0:d409714cebbf 48 int main() {
zillkhan 1:3a7e10c8a325 49 float DistanceCM; //Variable to store distance in CM from SharpIR sensor
zillkhan 2:b847309a754d 50 char buffer[50]; // buffer for Ultrasonic sensor values
zillkhan 4:69cd9240fd74 51 char buff_bme[50]; // buffer for bme690 sensor values
zillkhan 0:d409714cebbf 52
zillkhan 3:c23614e6262f 53 //Initialization of Ambient light sensor
zillkhan 3:c23614e6262f 54 uint16_t als ;
zillkhan 3:c23614e6262f 55 veml7700 = new VEML7700(PIN_SDA, PIN_SCL, MSU_VEML7700_I2C_ADDRESS) ;
zillkhan 3:c23614e6262f 56 veml7700->setALSConf(0x0000) ;
zillkhan 3:c23614e6262f 57 veml7700->setPowerSaving(0x0000) ;
zillkhan 3:c23614e6262f 58
zillkhan 4:69cd9240fd74 59 //Initalization of BME680
zillkhan 4:69cd9240fd74 60 if (!bme680.begin()) {
zillkhan 4:69cd9240fd74 61 printf("BME680 Begin failed \r\n");
zillkhan 4:69cd9240fd74 62 return 1;
zillkhan 4:69cd9240fd74 63 }
zillkhan 4:69cd9240fd74 64
zillkhan 1:3a7e10c8a325 65 //Initalizing and advertising topics
zillkhan 0:d409714cebbf 66 nh.initNode();
zillkhan 2:b847309a754d 67 nh.advertise(sharpir); //SharpIR sensor
zillkhan 2:b847309a754d 68 nh.advertise(ultrasonic); //Ultrasonic Sensor
zillkhan 3:c23614e6262f 69 nh.advertise(ALS); //Ambient Light Sensor
zillkhan 4:69cd9240fd74 70 nh.advertise(sensor_bme); //bme680 sensor
zillkhan 0:d409714cebbf 71
zillkhan 0:d409714cebbf 72 while (1) { //creates an eternal loop
zillkhan 0:d409714cebbf 73
zillkhan 2:b847309a754d 74 DistanceCM=Sensor.cm(); //Reading SharpIR sensor value from analog pin
zillkhan 4:69cd9240fd74 75 wait_ms(500);
zillkhan 3:c23614e6262f 76
zillkhan 2:b847309a754d 77 long distance = sensor.distance(); //Reading ultrasonic sensor value
zillkhan 2:b847309a754d 78 sprintf (buffer, "%d", distance); //converting value into string
zillkhan 4:69cd9240fd74 79 wait_ms(500);
zillkhan 0:d409714cebbf 80
zillkhan 3:c23614e6262f 81 als = veml7700->getALS(); //Readinng ALS sensor value
zillkhan 4:69cd9240fd74 82 wait_ms(500);
zillkhan 4:69cd9240fd74 83
zillkhan 4:69cd9240fd74 84 bme680.performReading(); //Reading bme680 value
zillkhan 4:69cd9240fd74 85 sprintf (buff_bme, "Temp: %0.2f degC,Humi: %0.2f %%,Pres: %0.2f hPa,VOC: %0.2f KOhms", bme680.getTemperature(),bme680.getHumidity(),(bme680.getPressure() / 100.0),(bme680.getGasResistance() / 1000.0));
zillkhan 4:69cd9240fd74 86 wait_ms(500);
zillkhan 3:c23614e6262f 87
zillkhan 2:b847309a754d 88 data_ir.data = DistanceCM;
zillkhan 2:b847309a754d 89 sharpir.publish( &data_ir );
zillkhan 2:b847309a754d 90
zillkhan 2:b847309a754d 91 data_ul.data = buffer;
zillkhan 2:b847309a754d 92 ultrasonic.publish( &data_ul );
zillkhan 0:d409714cebbf 93
zillkhan 3:c23614e6262f 94 data_als.data = als;
zillkhan 3:c23614e6262f 95 ALS.publish( &data_als );
zillkhan 3:c23614e6262f 96
zillkhan 4:69cd9240fd74 97 msg.data = buffer;
zillkhan 4:69cd9240fd74 98 sensor_bme.publish(&msg);
zillkhan 4:69cd9240fd74 99
zillkhan 0:d409714cebbf 100 nh.spinOnce();
zillkhan 0:d409714cebbf 101 wait_ms(1000);
zillkhan 0:d409714cebbf 102 }
zillkhan 0:d409714cebbf 103 }