safwan092

Project - 3152

Oct 8th, 2020
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.86 KB | None | 0 0
  1. /*This is a project by Vrishak and Krishna Vemuri. This takes the temperature from the AMG8833 sensor and distance from HC-SR04. This corrects the temperature with the distance. Then, the pixels are shown on the SD card. The temperature is reported to NodeMcu, LCD, and SD card  
  2. **************************************************************************
  3.   This is a library for the AMG88xx GridEYE 8x8 IR camera
  4.  
  5.   This sketch makes a 64 pixel thermal camera with the GridEYE sensor
  6.   and a 128x128 tft screen https://www.adafruit.com/product/2088
  7.  
  8.   Designed specifically to work with the Adafruit AMG88 breakout
  9.   ----> http://www.adafruit.com/products/3538
  10.  
  11.   These sensors use I2C to communicate. The device's I2C address is 0x69
  12.  
  13.   Adafruit invests time and resources providing this open source code,
  14.   please support Adafruit andopen-source hardware by purchasing products
  15.   from Adafruit!
  16.  
  17.   Written by Dean Miller for Adafruit Industries.
  18.   BSD license, all text above must be included in any redistribution
  19.  ***************************************************************************/
  20.  
  21. #include <Adafruit_GFX.h>    // Core graphics library
  22. #include <Adafruit_ST7735.h> // Hardware-specific library
  23. #include <SPI.h>
  24.  
  25. #include <Wire.h>
  26. #include <Adafruit_AMG88xx.h>
  27. #include <SR04.h>
  28. #include <LiquidCrystal.h>
  29. #include <SD.h>
  30. #define TFT_CS     53 //chip select pin for the TFT screen
  31. #define TFT_RST    9  // you can also connect this to the Arduino reset
  32.                       // in which case, set this #define pin to 0!
  33. #define TFT_DC     8
  34.  
  35. //low range of the sensor (this will be blue on the screen)
  36. #define MINTEMP 22
  37.  
  38. //high range of the sensor (this will be red on the screen)
  39. #define MAXTEMP 34
  40. #define trig 12
  41. #define echo 11
  42. SR04 sr04 = SR04(echo,trig);
  43. LiquidCrystal lcd(27, 28, 29, 30, 31, 32);
  44. File file;
  45. int cardpin = 4;
  46. long dist;
  47. //the colors we will be using
  48. const uint16_t camColors[] = {0x480F,
  49. 0x400F,0x400F,0x400F,0x4010,0x3810,0x3810,0x3810,0x3810,0x3010,0x3010,
  50. 0x3010,0x2810,0x2810,0x2810,0x2810,0x2010,0x2010,0x2010,0x1810,0x1810,
  51. 0x1811,0x1811,0x1011,0x1011,0x1011,0x0811,0x0811,0x0811,0x0011,0x0011,
  52. 0x0011,0x0011,0x0011,0x0031,0x0031,0x0051,0x0072,0x0072,0x0092,0x00B2,
  53. 0x00B2,0x00D2,0x00F2,0x00F2,0x0112,0x0132,0x0152,0x0152,0x0172,0x0192,
  54. 0x0192,0x01B2,0x01D2,0x01F3,0x01F3,0x0213,0x0233,0x0253,0x0253,0x0273,
  55. 0x0293,0x02B3,0x02D3,0x02D3,0x02F3,0x0313,0x0333,0x0333,0x0353,0x0373,
  56. 0x0394,0x03B4,0x03D4,0x03D4,0x03F4,0x0414,0x0434,0x0454,0x0474,0x0474,
  57. 0x0494,0x04B4,0x04D4,0x04F4,0x0514,0x0534,0x0534,0x0554,0x0554,0x0574,
  58. 0x0574,0x0573,0x0573,0x0573,0x0572,0x0572,0x0572,0x0571,0x0591,0x0591,
  59. 0x0590,0x0590,0x058F,0x058F,0x058F,0x058E,0x05AE,0x05AE,0x05AD,0x05AD,
  60. 0x05AD,0x05AC,0x05AC,0x05AB,0x05CB,0x05CB,0x05CA,0x05CA,0x05CA,0x05C9,
  61. 0x05C9,0x05C8,0x05E8,0x05E8,0x05E7,0x05E7,0x05E6,0x05E6,0x05E6,0x05E5,
  62. 0x05E5,0x0604,0x0604,0x0604,0x0603,0x0603,0x0602,0x0602,0x0601,0x0621,
  63. 0x0621,0x0620,0x0620,0x0620,0x0620,0x0E20,0x0E20,0x0E40,0x1640,0x1640,
  64. 0x1E40,0x1E40,0x2640,0x2640,0x2E40,0x2E60,0x3660,0x3660,0x3E60,0x3E60,
  65. 0x3E60,0x4660,0x4660,0x4E60,0x4E80,0x5680,0x5680,0x5E80,0x5E80,0x6680,
  66. 0x6680,0x6E80,0x6EA0,0x76A0,0x76A0,0x7EA0,0x7EA0,0x86A0,0x86A0,0x8EA0,
  67. 0x8EC0,0x96C0,0x96C0,0x9EC0,0x9EC0,0xA6C0,0xAEC0,0xAEC0,0xB6E0,0xB6E0,
  68. 0xBEE0,0xBEE0,0xC6E0,0xC6E0,0xCEE0,0xCEE0,0xD6E0,0xD700,0xDF00,0xDEE0,
  69. 0xDEC0,0xDEA0,0xDE80,0xDE80,0xE660,0xE640,0xE620,0xE600,0xE5E0,0xE5C0,
  70. 0xE5A0,0xE580,0xE560,0xE540,0xE520,0xE500,0xE4E0,0xE4C0,0xE4A0,0xE480,
  71. 0xE460,0xEC40,0xEC20,0xEC00,0xEBE0,0xEBC0,0xEBA0,0xEB80,0xEB60,0xEB40,
  72. 0xEB20,0xEB00,0xEAE0,0xEAC0,0xEAA0,0xEA80,0xEA60,0xEA40,0xF220,0xF200,
  73. 0xF1E0,0xF1C0,0xF1A0,0xF180,0xF160,0xF140,0xF100,0xF0E0,0xF0C0,0xF0A0,
  74. 0xF080,0xF060,0xF040,0xF020,0xF800,};
  75.  
  76. Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
  77.  
  78. Adafruit_AMG88xx amg;
  79. unsigned long delayTime;
  80. float pixels[AMG88xx_PIXEL_ARRAY_SIZE];
  81. uint16_t displayPixelWidth, displayPixelHeight;
  82.  
  83. void setup() {
  84.   Serial.begin(9600);
  85.   Serial1.begin(9600);
  86.     Serial.println(F("AMG88xx thermal camera!"));
  87.  
  88.     tft.initR(INITR_144GREENTAB);   // initialize a ST7735S chip, black tab
  89.     tft.fillScreen(ST7735_BLACK);
  90.  
  91.     displayPixelWidth = tft.width() / 8;
  92.     displayPixelHeight = tft.height() / 8;
  93.  
  94.     //tft.setRotation(3);
  95.    
  96.     bool status;
  97.    
  98.     // default settings
  99.     status = amg.begin();
  100.     if (!status) {
  101.         Serial.println("Could not find a valid AMG88xx sensor, check wiring!");
  102.         while (1);
  103.     }
  104.    
  105.     Serial.println("-- Thermal Camera Test --");
  106.     lcd.begin(16, 2);
  107.     delay(100); // let sensor boot up
  108.     pinMode(cardpin, OUTPUT);
  109.     if (!SD.begin(cardpin)) {
  110.       Serial.println("SD card initialization failed");
  111.     }
  112.  
  113.     if (SD.exists("data.txt")) {
  114.       Serial.println("data.txt exists.");
  115.       if (SD.remove("data.txt")) {
  116.         Serial.println("Successfully removed file.");
  117.       } else {
  118.         Serial.println("Could not remove data file.");
  119.       }
  120.     }
  121.    
  122.  
  123. }  
  124.  
  125. void loop() {
  126.   //read all the pixels
  127.   amg.readPixels(pixels);
  128.   float maxx = -99.9;
  129.   for(int i=0; i<AMG88xx_PIXEL_ARRAY_SIZE; i++){
  130.     uint8_t colorIndex = map(pixels[i], MINTEMP, MAXTEMP, 0, 255);
  131.     colorIndex = constrain(colorIndex, 0, 255);
  132.  
  133.     //draw the pixels!
  134.     tft.fillRect(displayPixelHeight * floor(i / 8), displayPixelWidth * (i % 8),
  135.         displayPixelHeight, displayPixelWidth, camColors[colorIndex]);
  136.     if(pixels[i]>maxx){
  137.       maxx = pixels[i];
  138.     }
  139.   }
  140.   dist=sr04.Distance();
  141.   if(dist>40){
  142.     Serial.println("Come closer");
  143.     lcd.print("Come closer");
  144.   }
  145.   else{
  146.     if(dist<6){
  147.       Serial.println("Go farther");
  148.       lcd.print("Go farther");
  149.     }
  150.     else{
  151.       Serial.print(dist);
  152.       Serial.println(" cm");
  153.       float newmax = round((maxx+5.25+(dist/9))*100);
  154.       float new2 = newmax/100;
  155.       float degreesF = (new2);//(1.8*new2+32)*100;
  156.       int intF = (int) degreesF;
  157.       Serial.println(degreesF);
  158.       Serial.println(intF);
  159.      
  160.       lcd.setCursor(0, 0);
  161.       //lcd.print("Temp: "+String(degreesF/100));
  162.       lcd.print("Temp: "+String(degreesF));
  163.       Serial1.println(intF);
  164.       lcd.setCursor(0,1);
  165.       //Degrees F is the degree measure without the decimal point.
  166.       if(degreesF < 10040){
  167.         lcd.print("Person is safe");
  168.        
  169.       }
  170.       else{
  171.         if(degreesF <= 10220){
  172.           lcd.print("Send person home");
  173.          
  174.         }
  175.         else{
  176.           lcd.print("Person go to ER");
  177.          
  178.         }
  179.       }
  180.       file = SD.open("data.txt", FILE_WRITE);
  181.       if (file) {
  182.         String fulldata = "Temp: "+String(degreesF);
  183.         file.println(fulldata);
  184.         file.close();
  185.       }
  186.       else {
  187.         Serial.println("Error in writing data file");
  188.        
  189.       }
  190.      
  191.      
  192.      
  193.      
  194.    
  195.      
  196.     }
  197.   }
  198.   delay(200);
  199.   lcd.clear();
  200.  
  201. }
  202.  
Add Comment
Please, Sign In to add comment