Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Universidade de Brasilia - FGA
- Projeto Integrador 02 - RoBoat - 1/2017
- Data:25/05/2017
- email:unbricardo@gmail.com
- */
- /*
- Este algoritmo esta embarcado em um microcontrolador que recebe
- dados via wi-fi de uma XBee mestre. Nosso objetivo e indicar 3
- coordenadas e automaticamente nosso RoBoat percorrer os três
- pontos indicados na interface com usuário e coletar dados como:
- pH, condutividade eletrica, turbidez,temperatura e coletar
- amostra de agua em cada um dos pontos para possiveis analises
- laboratoriais.
- */
- /*
- ---PINOS---
- ** Temperatura - pino 2
- **Bombas - pinos 3,4,5.
- **Turbidez - pino 6
- **pH - pino 7
- * *GPS - pinos 8,9
- ** SD PINOS:
- ** CS - pino 10
- ** MOSI - pino 11
- ** MISO - pino 12
- ** SCK - pino 13
- **Motores - pinos 14,15.
- **Condutividade - pino 16
- */
- #include<OneWire.h>
- #include<DallasTemperature.h>//Biblioteca temperatura DS18B20
- #include<SPI.h>//Interface de controle de periferico via serial para sincronizar o modulo de cartao SD
- #include <SD.h>//Biblioteca cartao SD
- #include<SoftwareSerial.h>//incluimos SoftwareSerial
- #include<TinyGPS.h>//incluimos TinyGPS
- //Declaracao de variaveis GPS
- TinyGPS gps;//Declaramos o objeto gps
- SoftwareSerial serialgps(9, 8);// GPS na porta 8,9
- int c;
- String gpsdata;//Para juntar latitude e longitude
- float longitude,latitude;
- // cartao SD na porta 10
- const int chipSelect = 10;
- // Sensor de temperatura na porta 2
- #define ONE_WIRE_BUS 2
- //Bombas para coleta de agua
- int bombaA = 3; //pino 3
- int bombaB = 4; //pino 4
- int bombaC = 5; //pino 5
- int incomingByte = false;//zerado
- //criando um objeto em um bus para coletar os dados da temperatura por referencia
- OneWire oneWire(ONE_WIRE_BUS);
- //Passando a referencia de um fio onewire para coletar os dados de temperatura.
- DallasTemperature sensors(&oneWire);
- String estado;
- //Contador para mudar ponto A,B e C.
- int count = 0; //Pontos A, B e C.
- //valores do sensor de pH
- float val;
- float y;
- void setup(void)
- {
- // start da comunicacao serial no baund rate 9600
- Serial.begin(9600);
- //Serial.println("Dallas Temperature IC Control Library Demo");
- pinMode(bombaA, OUTPUT);
- digitalWrite(bombaA, HIGH);
- pinMode(bombaB, OUTPUT);
- digitalWrite(bombaB, HIGH);
- pinMode(bombaC, OUTPUT);
- digitalWrite(bombaC, HIGH);
- // Start da biblioteca
- sensors.begin();
- //Se nao achar o cartao mostrar essa msg de erro
- if (!SD.begin(chipSelect)) {
- Serial.println("ERROR - Card SD falhou!");
- //Nao faca mais nada
- return;
- }
- //MSG funcionamento OK
- Serial.println("Card SD inicializado.");
- serialgps.begin(9600);
- }
- void loop(void)
- {
- //Loop aquisicao dados GPS
- while (serialgps.available())
- {
- int c = serialgps.read();
- }
- //Se a comunicacao serial estiver disponivel
- if (Serial.available() > 0)
- {
- //Entao leia o byte que chegou
- incomingByte = Serial.read();
- //MSG para debug do sistema
- Serial.print("Eu recebi: ");
- Serial.println(incomingByte);
- //Enviando 1 pelo monitor serial ele e corventido pela tabela ascii para o numero 49
- if (incomingByte == 49)
- {
- //Logia para simular pontos A,B e C
- count = count + 1;
- //Coletando temperatura
- sensors.requestTemperatures();
- Serial.println(sensors.getTempCByIndex(0));
- // //Loop aquisicao dados GPS
- // while (serialgps.available())
- // {
- // int c = serialgps.read();
- float latitude, longitude;
- if (gps.encode(c))
- {
- gpsdata = "";
- gps.f_get_position(&latitude, &longitude);
- gpsdata += String(latitude, 5);
- gpsdata += String(longitude, 5);
- Serial.println(gpsdata);
- }
- }
- //Criando uma string vazia para concatenar todos os dados adquiridos
- String dataString = "";
- long int id = 1000;
- if (count == 1)
- {
- dataString += "{";
- dataString += "\"id\":";//A
- dataString += (id);
- //Logica para abrir e fechar rele que controla as bombas
- digitalWrite(bombaA, LOW);
- //Tempo para coletar 100ml de agua
- delay(2000);
- digitalWrite(bombaA, HIGH);
- id = id + 1;
- }
- else if (count == 2)
- {
- dataString += "{";
- dataString += "\"id\":";//B
- dataString += (id);
- //Logica para abrir e fechar rele que controla as bombas
- digitalWrite(bombaB, LOW);
- //Tempo para coletar 100ml de agua
- delay(2000);
- digitalWrite(bombaB, HIGH);
- id = id + 1;
- }
- else if (count == 3)
- {
- dataString += "{";
- dataString += "\"id\":";//C
- dataString += (id);
- //Logica para abrir e fechar rele que controla as bombas
- digitalWrite(bombaC, LOW);
- //Tempo para coletar 100ml de agua
- delay(2000);
- digitalWrite(bombaC, HIGH);
- id = id + 1;
- }
- // le quinze valores e concatena em uma string
- for (int Pin = 2; Pin < 17; Pin++)
- {
- //int sensor = digitalRead(digitalPin);
- if (Pin == 2)
- {
- dataString += "\"temperature\":";
- dataString += String(sensors.getTempCByIndex(0));
- dataString += ",";
- }
- else if ((Pin == 3) && (count == 1))
- {
- dataString += "\"Amostra\":OK";
- dataString += ",";
- }
- else if ((Pin == 4) && (count == 2))
- {
- dataString += "\"Amostra\":OK";
- dataString += ",";
- }
- else if ((Pin == 5) && (count == 3))
- {
- dataString += "\"Amostra\":OK";
- dataString += ",";
- count = 0;
- }
- else if (Pin == 6)
- {
- dataString += "\"turbidity\":";
- dataString += ",";
- }
- else if (Pin == 7)
- {
- for (int i = 0; i < 1000; i++)
- val = analogRead(3);
- y = -0.033 * val + 31.61;
- dataString += "\"ph\":";
- dataString += String(y);
- dataString += ",";
- }
- else if (Pin == 8) //GPS
- {
- dataString += "\"condutivity:\":";
- dataString += ",";
- }
- else if (Pin == 9)
- {
- dataString += "\"gps\":";
- dataString += String(gpsdata);
- dataString += ",";
- dataString += "}";
- }
- }
- File dataFile = SD.open("datalog.txt", FILE_WRITE);
- // Se o arquivo estiver disponivel escreva nele
- if (dataFile) {
- dataFile.println(dataString);
- dataFile.close();
- // escreva na porta serial
- Serial.println(dataString);
- dataString = "";
- }
- // Se o arquivo nao abrir
- else {
- Serial.println("Erro ao abrir o datalog.txt");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement