
The purpose of this code is to rotate an HC-SR04 and measure the perimeter of a room. The measurements will then be sent to ThingSpeak to record the data.
Dependencies: mbed mbed-http TextLCD ESP8266 ULN2003_StepperDriver
main.cpp
- Committer:
- 27e08e1e-4785-4bb4-b751-624c9c99ee9f
- Date:
- 2021-12-13
- Revision:
- 12:701ea1b1d513
- Parent:
- 11:756321f0b0cd
File content as of revision 12:701ea1b1d513:
/* Perimeter detection John Emberson/Tercio Junker The purpose of this code is to rotate an HC-SR04 and measure the perimeter of a room. The measurements will then be sent to ThingSpeak to record the data. */ #include "mbed.h" #include "hcsr04.h" #include "ESP8266.h" #include "ULN2003.h" #include "TextLCD.h" #define IP "184.106.153.149" #define spr 4096 #define SSID "IU PublicNet" #define PW "" Serial pc(USBTX,USBRX); //Serial Communication with PC ESP8266 wifi(PTC17, PTC16, 115200); //Tx Pin:PTC17; Rx Pin:PTC17; Baud rate:115200 ULN2003 sm(D13,D12,D11,D10,spr); //SM motor (In1,In2,In3,In4,StepsPerRotation=4096) HCSR04 us(D7,D6); //Trig:D7 Echo:D6 TextLCD lcd(D9,D8,D2,D3,D4,D5); //Rs,E,D4,D5,D6,D7 char snd[255]; //snd: send command to ESP8266 char resp[1000]; //resp: receive response from ESP8266 int dist[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; char* API = "Q34TJD14E68FMA7A"; //API key char comm[300]; //WIFI command int timeout = 8000; //timeout for wifi commands int mp=16; //The amount of measurements per rotation int hmp=mp/2; //Half a rotation int delta=spr/mp; //setting up 16 points to take a measurment This is the amount of steps per measurement int speed=500; //speed in steps per second int delay=(delta/speed)/1000; //(steps % (steps per second))/1000 = milliseconds void MotorFront(){ //Move motor forward half a rotation for (int i=1;i<(hmp+1);i++){ sm.moveForward(delta,speed); wait_ms(delay); us.start(); wait_ms(500); dist[i]=us.get_dist_cm(); pc.printf("dist%d=%d\r\n",i,dist[i]); } } void MotorBack(){ //Move motor reverse half a rotations for (int i=mp;i>(hmp);i--){ sm.moveForward(delta,speed); wait_ms(delay); us.start(); wait_ms(500); dist[i]=us.get_dist_cm(); pc.printf("dist%d=%d\r\n",i,dist[i]); } } void ConnWIFI(){ //Connect to wifi wifi.SetMode(1); wifi.SendCMD(snd); wifi.RcvReply(resp, 5000); wait(1); pc.printf("%s\r", resp); wifi.Join(SSID,PW); wifi.RcvReply(resp, 5000); wait(1); pc.printf("%s\r\n", resp); pc.printf("Connecting to WIFI..."); lcd.cls(); lcd.printf("Connecting to WIFI"); wifi.setTransparent(); wait(1); pc.printf("..."); lcd.printf("..."); wifi.SetSingle(); wifi.RcvReply(resp, timeout); wait(1); } void ConnTS1(){ //Connect to ThingSpeak pc.printf("\r\nConnecting to ThingSpeak\r\n"); lcd.cls(); lcd.printf("Connecting to ThingSpreak"); wifi.startTCPConn(IP,80); //cipstart wifi.RcvReply(resp, timeout); wait(1); sprintf(snd,"https://api.thingspeak.com/update?api_key=%s&field1=%d&field2=%d&field3=%d&field4=%d&field5=%d&field6=%d&field7=%d&field8=%d\r\n",API,dist[1],dist[2],dist[3],dist[4],dist[5],dist[6],dist[7],dist[8]); pc.printf("Sending data to ThingSpeak\r\n"); lcd.cls(); lcd.printf("Sending data to ThingSpeak"); wifi.sendURL(snd, comm); //cipsend and get command if (wifi.RcvReply(resp, timeout)) pc.printf("%s",resp); else pc.printf("No response while sending URL \r\n"); wait_ms(5000); } void ConnTS2(){ //Connect to ThingSpeak for second back of data pc.printf("\r\nSending second batch of data..."); lcd.cls(); lcd.printf("Sending second batch of data"); wifi.startTCPConn(IP,80); //cipstart wifi.RcvReply(resp, timeout); wait(1); sprintf(snd,"https://api.thingspeak.com/update?api_key=%s&field1=%d&field2=%d&field3=%d&field4=%d&field5=%d&field6=%d&field7=%d&field8=%d\r\n",API,dist[9],dist[10],dist[11],dist[12],dist[13],dist[14],dist[15],dist[16]); pc.printf("...\r\n"); lcd.printf("..."); wifi.sendURL(snd, comm); //cipsend and get command if (wifi.RcvReply(resp, timeout)) pc.printf("%s",resp); else pc.printf("No response while sending URL \r\n"); } int main() { pc.baud(115200); //Baud Rate of 115200 for Tera Term pc.printf("Scanning measurments of room"); lcd.cls(); //Clear LCD Screen lcd.printf("Scanning measurments of room"); wait_ms(2000); MotorFront(); //Scan first 8 steps sm.moveReverse(spr,600); //Rotates camera opposite to prevent wire tangle wait_ms(250); MotorBack(); //Scan last 8 steps ConnWIFI(); //Connecting to WIFI ConnTS1(); //Sending first 8 steps to ThingSpeak ConnTS2(); //Sending last 8 steps to ThingSpeak pc.printf("Done"); lcd.cls(); lcd.printf("Done"); }