Ultrasonic sensor to measure the bag in cellophane film

Dependencies:   PCF2119_16X2_LCD SRF02 mbed

Committer:
BPPearson
Date:
Tue Jan 05 16:41:00 2016 +0000
Revision:
0:ad0e2e5cb37b
Ultrasonic bag sensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BPPearson 0:ad0e2e5cb37b 1 #include "mbed.h"
BPPearson 0:ad0e2e5cb37b 2 #include "SRF02.h"
BPPearson 0:ad0e2e5cb37b 3 #include "PC2119_16X2_LCD.h"
BPPearson 0:ad0e2e5cb37b 4
BPPearson 0:ad0e2e5cb37b 5 // ultrasonc sensor has a resolution of 1 cm at best so can only be used for rough positional measurements
BPPearson 0:ad0e2e5cb37b 6
BPPearson 0:ad0e2e5cb37b 7 // Batron LCD - this code is a bit rough and ready and doesn't cope with the second line of the dsiplay very well
BPPearson 0:ad0e2e5cb37b 8
BPPearson 0:ad0e2e5cb37b 9 // Adresse I2C standard des afficheurs LCD
BPPearson 0:ad0e2e5cb37b 10 #define LCDADDR 0x76
BPPearson 0:ad0e2e5cb37b 11
BPPearson 0:ad0e2e5cb37b 12 DigitalOut led1(LED1);
BPPearson 0:ad0e2e5cb37b 13 DigitalOut led2(LED2);
BPPearson 0:ad0e2e5cb37b 14 DigitalOut led3(LED3);
BPPearson 0:ad0e2e5cb37b 15 DigitalOut led4(LED4);
BPPearson 0:ad0e2e5cb37b 16 DigitalIn multiSensor(p20);
BPPearson 0:ad0e2e5cb37b 17 //I2C i2c(p9, p10);
BPPearson 0:ad0e2e5cb37b 18 //DigitalOut resetLCD(p11);
BPPearson 0:ad0e2e5cb37b 19 //I2C ultraS(p28,p27);
BPPearson 0:ad0e2e5cb37b 20 Serial pc(USBTX, USBRX); // tx, rx
BPPearson 0:ad0e2e5cb37b 21 SRF02 srf02c(p28, p27, 0xE0, 0x52);
BPPearson 0:ad0e2e5cb37b 22 SRF02 srf02l(p28, p27, 0xE2, 0x52);
BPPearson 0:ad0e2e5cb37b 23 SRF02 srf02r(p28, p27, 0xE4, 0x52);
BPPearson 0:ad0e2e5cb37b 24 AnalogOut anOut(p18);
BPPearson 0:ad0e2e5cb37b 25 //PC2119_16X2_LCD lcd(p9, p10, p11);
BPPearson 0:ad0e2e5cb37b 26
BPPearson 0:ad0e2e5cb37b 27 float filteredDistance = 1000.0;
BPPearson 0:ad0e2e5cb37b 28 float range = 4000.0;
BPPearson 0:ad0e2e5cb37b 29
BPPearson 0:ad0e2e5cb37b 30 // procedure declarations
BPPearson 0:ad0e2e5cb37b 31
BPPearson 0:ad0e2e5cb37b 32
BPPearson 0:ad0e2e5cb37b 33
BPPearson 0:ad0e2e5cb37b 34
BPPearson 0:ad0e2e5cb37b 35 int main()
BPPearson 0:ad0e2e5cb37b 36 {
BPPearson 0:ad0e2e5cb37b 37 // char str[10];
BPPearson 0:ad0e2e5cb37b 38 // char msb = 0;
BPPearson 0:ad0e2e5cb37b 39 // char lsb = 0;
BPPearson 0:ad0e2e5cb37b 40 float distanceC;
BPPearson 0:ad0e2e5cb37b 41 float distanceL = range;
BPPearson 0:ad0e2e5cb37b 42 float distanceR = range;
BPPearson 0:ad0e2e5cb37b 43 bool validReading;
BPPearson 0:ad0e2e5cb37b 44
BPPearson 0:ad0e2e5cb37b 45 // set i2c frequency to 100KHz
BPPearson 0:ad0e2e5cb37b 46 //i2c.frequency(100000);
BPPearson 0:ad0e2e5cb37b 47
BPPearson 0:ad0e2e5cb37b 48 //pc.printf("clear lcd display\n");
BPPearson 0:ad0e2e5cb37b 49 multiSensor.mode(PullUp);
BPPearson 0:ad0e2e5cb37b 50
BPPearson 0:ad0e2e5cb37b 51 // do forever
BPPearson 0:ad0e2e5cb37b 52 while (1)
BPPearson 0:ad0e2e5cb37b 53 {
BPPearson 0:ad0e2e5cb37b 54 validReading = false;
BPPearson 0:ad0e2e5cb37b 55
BPPearson 0:ad0e2e5cb37b 56 distanceC = srf02c.read();
BPPearson 0:ad0e2e5cb37b 57
BPPearson 0:ad0e2e5cb37b 58 if (multiSensor == true)
BPPearson 0:ad0e2e5cb37b 59 {
BPPearson 0:ad0e2e5cb37b 60 distanceL = srf02l.read();
BPPearson 0:ad0e2e5cb37b 61 distanceR = srf02r.read();
BPPearson 0:ad0e2e5cb37b 62 }
BPPearson 0:ad0e2e5cb37b 63
BPPearson 0:ad0e2e5cb37b 64 if (distanceC < range)
BPPearson 0:ad0e2e5cb37b 65 {
BPPearson 0:ad0e2e5cb37b 66 led1 = 1;
BPPearson 0:ad0e2e5cb37b 67 validReading = true;
BPPearson 0:ad0e2e5cb37b 68 }
BPPearson 0:ad0e2e5cb37b 69 else
BPPearson 0:ad0e2e5cb37b 70 {
BPPearson 0:ad0e2e5cb37b 71 led1 = 0;
BPPearson 0:ad0e2e5cb37b 72 }
BPPearson 0:ad0e2e5cb37b 73
BPPearson 0:ad0e2e5cb37b 74 if (multiSensor == true){
BPPearson 0:ad0e2e5cb37b 75 if (distanceL < range)
BPPearson 0:ad0e2e5cb37b 76 {
BPPearson 0:ad0e2e5cb37b 77 led2 = 1;
BPPearson 0:ad0e2e5cb37b 78 validReading = true;
BPPearson 0:ad0e2e5cb37b 79 }
BPPearson 0:ad0e2e5cb37b 80 else
BPPearson 0:ad0e2e5cb37b 81 {
BPPearson 0:ad0e2e5cb37b 82 led2 = 0;
BPPearson 0:ad0e2e5cb37b 83 }
BPPearson 0:ad0e2e5cb37b 84
BPPearson 0:ad0e2e5cb37b 85 if (distanceR < range)
BPPearson 0:ad0e2e5cb37b 86 {
BPPearson 0:ad0e2e5cb37b 87 led3 = 1;
BPPearson 0:ad0e2e5cb37b 88 validReading = true;
BPPearson 0:ad0e2e5cb37b 89 }
BPPearson 0:ad0e2e5cb37b 90 else
BPPearson 0:ad0e2e5cb37b 91 {
BPPearson 0:ad0e2e5cb37b 92 led3 = 0;
BPPearson 0:ad0e2e5cb37b 93 }
BPPearson 0:ad0e2e5cb37b 94 }
BPPearson 0:ad0e2e5cb37b 95
BPPearson 0:ad0e2e5cb37b 96 //pc.printf("Distances %5.3f, %5.3f, %5.3f\n", distanceC, distanceL, distanceR);
BPPearson 0:ad0e2e5cb37b 97
BPPearson 0:ad0e2e5cb37b 98 if (validReading)
BPPearson 0:ad0e2e5cb37b 99 {
BPPearson 0:ad0e2e5cb37b 100 float shortestDistance = 0.0;
BPPearson 0:ad0e2e5cb37b 101
BPPearson 0:ad0e2e5cb37b 102 if (multiSensor == true){
BPPearson 0:ad0e2e5cb37b 103 if (distanceC < distanceL && distanceC < distanceR)
BPPearson 0:ad0e2e5cb37b 104 shortestDistance = distanceC;
BPPearson 0:ad0e2e5cb37b 105 else
BPPearson 0:ad0e2e5cb37b 106 if (distanceL < distanceR)
BPPearson 0:ad0e2e5cb37b 107 shortestDistance = distanceL;
BPPearson 0:ad0e2e5cb37b 108 else
BPPearson 0:ad0e2e5cb37b 109 shortestDistance = distanceR;
BPPearson 0:ad0e2e5cb37b 110 }
BPPearson 0:ad0e2e5cb37b 111 else
BPPearson 0:ad0e2e5cb37b 112 shortestDistance = distanceC;
BPPearson 0:ad0e2e5cb37b 113
BPPearson 0:ad0e2e5cb37b 114 filteredDistance = (0.7 * filteredDistance) + (0.3 * shortestDistance);
BPPearson 0:ad0e2e5cb37b 115
BPPearson 0:ad0e2e5cb37b 116 pc.printf("Average distance %5.3f\n", filteredDistance);
BPPearson 0:ad0e2e5cb37b 117
BPPearson 0:ad0e2e5cb37b 118 anOut = filteredDistance / range;
BPPearson 0:ad0e2e5cb37b 119 }
BPPearson 0:ad0e2e5cb37b 120 else
BPPearson 0:ad0e2e5cb37b 121 {
BPPearson 0:ad0e2e5cb37b 122 pc.printf("Out of range\n");
BPPearson 0:ad0e2e5cb37b 123
BPPearson 0:ad0e2e5cb37b 124 anOut = 0.0;
BPPearson 0:ad0e2e5cb37b 125 }
BPPearson 0:ad0e2e5cb37b 126
BPPearson 0:ad0e2e5cb37b 127 // wait a while then loop again - was 20 ms
BPPearson 0:ad0e2e5cb37b 128 //wait_ms(100);
BPPearson 0:ad0e2e5cb37b 129 }
BPPearson 0:ad0e2e5cb37b 130 }
BPPearson 0:ad0e2e5cb37b 131