Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.39 KB | None | 0 0
  1. /*
  2. Universidade de Brasilia - FGA
  3. Projeto Integrador 02 - RoBoat - 1/2017
  4. Data:25/05/2017
  5. email:unbricardo@gmail.com
  6. */
  7.  
  8. /*
  9. Este algoritmo esta embarcado em um microcontrolador que recebe
  10. dados via wi-fi de uma XBee mestre. Nosso objetivo e indicar 3
  11. coordenadas e automaticamente nosso RoBoat percorrer os três
  12. pontos indicados na interface com usuário e coletar dados como:
  13. pH, condutividade eletrica, turbidez,temperatura e coletar
  14. amostra de agua em cada um dos pontos para possiveis analises
  15. laboratoriais.
  16. */
  17.  
  18.  
  19.  
  20. /*
  21. ---PINOS---
  22.  
  23. ** Temperatura - pino 2
  24.  
  25. **Bombas - pinos 3,4,5.
  26.  
  27. **Turbidez - pino 6
  28.  
  29. **pH - pino 7
  30.  
  31. * *GPS - pinos 8,9
  32.  
  33. ** SD PINOS:
  34.  
  35. ** CS - pino 10
  36. ** MOSI - pino 11
  37. ** MISO - pino 12
  38. ** SCK - pino 13
  39.  
  40. **Motores - pinos 14,15.
  41.  
  42. **Condutividade - pino 16
  43.  
  44. */
  45.  
  46. #include<OneWire.h>
  47. #include<DallasTemperature.h>//Biblioteca temperatura DS18B20
  48. #include<SPI.h>//Interface de controle de periferico via serial para sincronizar o modulo de cartao SD
  49. #include <SD.h>//Biblioteca cartao SD
  50. #include<SoftwareSerial.h>//incluimos SoftwareSerial
  51. #include<TinyGPS.h>//incluimos TinyGPS
  52.  
  53. //Declaracao de variaveis GPS
  54. TinyGPS gps;//Declaramos o objeto gps
  55. SoftwareSerial serialgps(9, 8);// GPS na porta 8,9
  56. int c;
  57. String gpsdata;//Para juntar latitude e longitude
  58. float longitude,latitude;
  59.  
  60. // cartao SD na porta 10
  61. const int chipSelect = 10;
  62.  
  63. // Sensor de temperatura na porta 2
  64. #define ONE_WIRE_BUS 2
  65.  
  66. //Bombas para coleta de agua
  67. int bombaA = 3; //pino 3
  68. int bombaB = 4; //pino 4
  69. int bombaC = 5; //pino 5
  70. int incomingByte = false;//zerado
  71.  
  72. //criando um objeto em um bus para coletar os dados da temperatura por referencia
  73. OneWire oneWire(ONE_WIRE_BUS);
  74.  
  75. //Passando a referencia de um fio onewire para coletar os dados de temperatura.
  76. DallasTemperature sensors(&oneWire);
  77. String estado;
  78.  
  79. //Contador para mudar ponto A,B e C.
  80. int count = 0; //Pontos A, B e C.
  81.  
  82.  
  83. //valores do sensor de pH
  84. float val;
  85. float y;
  86.  
  87.  
  88. void setup(void)
  89. {
  90.  
  91. // start da comunicacao serial no baund rate 9600
  92. Serial.begin(9600);
  93. //Serial.println("Dallas Temperature IC Control Library Demo");
  94. pinMode(bombaA, OUTPUT);
  95. digitalWrite(bombaA, HIGH);
  96. pinMode(bombaB, OUTPUT);
  97. digitalWrite(bombaB, HIGH);
  98. pinMode(bombaC, OUTPUT);
  99. digitalWrite(bombaC, HIGH);
  100. // Start da biblioteca
  101. sensors.begin();
  102.  
  103. //Se nao achar o cartao mostrar essa msg de erro
  104. if (!SD.begin(chipSelect)) {
  105. Serial.println("ERROR - Card SD falhou!");
  106. //Nao faca mais nada
  107. return;
  108. }
  109. //MSG funcionamento OK
  110. Serial.println("Card SD inicializado.");
  111.  
  112. serialgps.begin(9600);
  113.  
  114. }
  115.  
  116. void loop(void)
  117. {
  118. //Loop aquisicao dados GPS
  119. while (serialgps.available())
  120. {
  121. int c = serialgps.read();
  122. }
  123.  
  124.  
  125. //Se a comunicacao serial estiver disponivel
  126. if (Serial.available() > 0)
  127. {
  128. //Entao leia o byte que chegou
  129. incomingByte = Serial.read();
  130. //MSG para debug do sistema
  131. Serial.print("Eu recebi: ");
  132. Serial.println(incomingByte);
  133. //Enviando 1 pelo monitor serial ele e corventido pela tabela ascii para o numero 49
  134.  
  135.  
  136.  
  137.  
  138. if (incomingByte == 49)
  139. {
  140. //Logia para simular pontos A,B e C
  141. count = count + 1;
  142. //Coletando temperatura
  143. sensors.requestTemperatures();
  144. Serial.println(sensors.getTempCByIndex(0));
  145.  
  146. // //Loop aquisicao dados GPS
  147. // while (serialgps.available())
  148. // {
  149. // int c = serialgps.read();
  150. float latitude, longitude;
  151. if (gps.encode(c))
  152. {
  153.  
  154. gpsdata = "";
  155. gps.f_get_position(&latitude, &longitude);
  156. gpsdata += String(latitude, 5);
  157. gpsdata += String(longitude, 5);
  158. Serial.println(gpsdata);
  159.  
  160. }
  161. }
  162.  
  163. //Criando uma string vazia para concatenar todos os dados adquiridos
  164. String dataString = "";
  165. long int id = 1000;
  166. if (count == 1)
  167. {
  168. dataString += "{";
  169. dataString += "\"id\":";//A
  170. dataString += (id);
  171. //Logica para abrir e fechar rele que controla as bombas
  172. digitalWrite(bombaA, LOW);
  173. //Tempo para coletar 100ml de agua
  174. delay(2000);
  175. digitalWrite(bombaA, HIGH);
  176. id = id + 1;
  177. }
  178. else if (count == 2)
  179. {
  180. dataString += "{";
  181. dataString += "\"id\":";//B
  182. dataString += (id);
  183. //Logica para abrir e fechar rele que controla as bombas
  184. digitalWrite(bombaB, LOW);
  185. //Tempo para coletar 100ml de agua
  186. delay(2000);
  187. digitalWrite(bombaB, HIGH);
  188. id = id + 1;
  189. }
  190. else if (count == 3)
  191. {
  192. dataString += "{";
  193. dataString += "\"id\":";//C
  194. dataString += (id);
  195. //Logica para abrir e fechar rele que controla as bombas
  196. digitalWrite(bombaC, LOW);
  197. //Tempo para coletar 100ml de agua
  198. delay(2000);
  199. digitalWrite(bombaC, HIGH);
  200. id = id + 1;
  201. }
  202. // le quinze valores e concatena em uma string
  203. for (int Pin = 2; Pin < 17; Pin++)
  204. {
  205.  
  206. //int sensor = digitalRead(digitalPin);
  207. if (Pin == 2)
  208. {
  209. dataString += "\"temperature\":";
  210. dataString += String(sensors.getTempCByIndex(0));
  211. dataString += ",";
  212. }
  213. else if ((Pin == 3) && (count == 1))
  214. {
  215. dataString += "\"Amostra\":OK";
  216. dataString += ",";
  217.  
  218. }
  219. else if ((Pin == 4) && (count == 2))
  220. {
  221. dataString += "\"Amostra\":OK";
  222. dataString += ",";
  223.  
  224. }
  225. else if ((Pin == 5) && (count == 3))
  226. {
  227. dataString += "\"Amostra\":OK";
  228. dataString += ",";
  229. count = 0;
  230. }
  231. else if (Pin == 6)
  232. {
  233. dataString += "\"turbidity\":";
  234. dataString += ",";
  235.  
  236. }
  237. else if (Pin == 7)
  238. {
  239. for (int i = 0; i < 1000; i++)
  240. val = analogRead(3);
  241. y = -0.033 * val + 31.61;
  242. dataString += "\"ph\":";
  243. dataString += String(y);
  244. dataString += ",";
  245.  
  246. }
  247. else if (Pin == 8) //GPS
  248. {
  249. dataString += "\"condutivity:\":";
  250. dataString += ",";
  251.  
  252. }
  253. else if (Pin == 9)
  254. {
  255. dataString += "\"gps\":";
  256. dataString += String(gpsdata);
  257. dataString += ",";
  258. dataString += "}";
  259.  
  260. }
  261. }
  262. File dataFile = SD.open("datalog.txt", FILE_WRITE);
  263.  
  264. // Se o arquivo estiver disponivel escreva nele
  265. if (dataFile) {
  266. dataFile.println(dataString);
  267. dataFile.close();
  268. // escreva na porta serial
  269. Serial.println(dataString);
  270. dataString = "";
  271. }
  272. // Se o arquivo nao abrir
  273. else {
  274. Serial.println("Erro ao abrir o datalog.txt");
  275. }
  276. }
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement