Pessoal, estou finalizando um pequeno projetinho na área de máquinas elétricas. Estou com uma dúvida em linguagem. Infelizmente não conheço muito C mas estou tentando estudar.

Estou tentando pegar os dados de um motor de 2KW (correntes e tensões) e disponibilizar para usuários que tenham acesso à internet. Teoricamente é uma coisa simples, mas sem muitos conhecimentos em C fica difícil.

Resumindo: O motor está em funcionamento constante e entro em uma página na internet e acompanho as correntes e tensões via as entradas analógicas (não me interessa atuar). A parte de montagem, tá tranquilo. O que pega mesmo é a lógica. Tenho o arduino UNO + Shield Ethernet. Preciso de mais alguma coisa?

Peguei alguns códigos aqui e estou tentando fazer as adaptações, mas dá erro em certas partes. Se alguém puder dar uma luz, agradeceria.

Exibições: 7736

Responder esta

Respostas a este tópico

Pesquise a função fwrite e fread do php.....  pesquise no google algo como   arduino + php    , penso que vão aparecer dias muito boas

Voce pode utilizar esse codigo para pegar os dados da porta serial

<?php
$Conexao = fopen("COM6", "w+");
sleep(1);
$x = fgets($Conexao);

fclose($Conexao);
?>

Altere COM6 para a porta que voce utiliza

depois basta chamar a variavel $x que ele lhe dara o valor lido

Por exemplo em codigo html junto do codigo php acima

<html>

<head>

<meta http-equiv="refresh" content="1">

</head>

<body>

<label for="lbStatus"><?=$x?></label> 

</body>

</html>

Nesse exemplo alem de mostrar o valor lido, a pagina se recarrega a cada 1 segundo, para auterar esse tempo basta mudar o valor 1 na meta tag para o tempo desejado (em segundos).

Esse codigo eu utilizei para ler os dados de um termometro (feito com arduino) e colocar em uma pagina php, e funcionou bem.

Obrigado João..amanhã vou estudar mais e jogar o código para dentro dele e ver o que ele me retorna. Vejo vocês falando e tudo, mas não tenho conhecimento MESMO em programação. VB até me entendo nas planilhas que faço no excel, mas na área de aplicação de C é complicado. No meu caso, a comunicação é feita pela COM5. Vou jogar os dados de corrente que tenho que gerar do gerador para teste, colocar o resistor em paralelo com a entrada para me dar tensão na entrada e assim vou indo. Acho q este código que me enviaste já me adiantou muito. Acho que era um desse q eu estava precisando. "Acho" que vou conseguir me virar. Vamos ver.

João, esse projeto 46 do livro do arduino serve para mim. Mas está dando um erro que não sei onde arrumar...

Desculpa se esse erro seja algo banal, mas não tenho muito conhecimento.

Segue o projeto:

 

// Projeto 46 – Baseado no exemplo Arduino Webserver, criado por David A. Mellis e Tom Igoe
#include <SPI.h>
#include <EthernetServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Fio de dados é plugado ao pino 3 do Arduino
#define ONE_WIRE_BUS 3
#define TEMPERATURE_PRECISION 12
float tempC, tempF;
// Prepara uma instância de OneWire para se comunicar com qualquer dispositivo 1-Wire (não
// apenas com CIs de temperatura Maxim/Dallas)
OneWire oneWire(ONE_WIRE_BUS);
// Passa o endereço da instância oneWire ao Dallas Temperature.
DallasTemperature sensors(&oneWire);
// arrays para armazenar os endereços dos dispositivos
DeviceAddress insideThermometer = { 0x10, 0x7A, 0x3B, 0xA9, 0x01, 0x08, 0x00, 0xBF };
DeviceAddress outsideThermometer = { 0x10, 0xCD, 0x39, 0xA9, 0x01, 0x08, 0x00, 0xBE};
byte mac[] = { 0x00, 0x1F, 0x3C, 0xA3, 0xED, 0x7C };
byte ip[] = { 192, 168 ,43, 2 };
// Inicia o servidor na porta 80
Server server(80);
void setup() {
// Inicia a ethernet e o servidor
Ethernet.begin(mac, ip);
server.begin();
// Inicaliza a biblioteca sensors
sensors.begin();
// define a resolução
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
}
// função para obter a temperatura de um dispositivo
void getTemperature(DeviceAddress deviceAddress) {
tempC = sensors.getTempC(deviceAddress);
tempF = DallasTemperature::toFahrenheit(tempC);
}
void loop() {
sensors.requestTemperatures();
// escuta a entrada de clientes
Client client = server.available();
if (client) {
// uma solicitação http termina com uma linha em branco
boolean BlankLine = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// Se a linha estiver em branco e o fim da linha for um caractere newline '\n' = fim da
// solicitação HTTP
if (c == '\n' && BlankLine) {
getTemperature(insideThermometer);
client.println("HTTP/1.1 200 OK"); // Resposta HTTP padrão
client.println("Content-Type: text/html\n");
client.println("<html><head><META HTTP-EQUIV=""refresh""CONTENT=""5"">\n");
client.println("<title>Arduino Web Server</title></head>");
client.println("<body>\n");
client.println("<h1>Arduino Web Server</h1>");
client.println("<h3>Internal Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
getTemperature(outsideThermometer);
client.println("<h3>External Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
break;
}
if (c == '\n') {
// Iniciando uma nova linha
BlankLine = true;
}
else if (c != '\r') {
// A linha atual tem um caractere nela
BlankLine = false;
}
}
}
// Permite um intervalo de tempo suficiente para que o navegador receba os dados
delay(10);
// Fecha a conexão
client.stop();
}
}

 

SEGUE O ERRO APRESENTADO:

WebServer:11: error: variable or field 'getTemperature' declared void

WebServer:11: error: 'DeviceAddress' was not declared in this scope

WebServer:12: error: 'OneWire' does not name a type

WebServer:14: error: 'DallasTemperature' does not name a type

WebServer:16: error: 'DeviceAddress' does not name a type

WebServer:17: error: 'DeviceAddress' does not name a type

WebServer:21: error: no matching function for call to 'Server::Server(int)'

As of Arduino 1.0, the Server class in the Ethernet library has been renamed to EthernetServer.

C:\Program Files (x86)\arduino-1.0.3\hardware\arduino\cores\arduino/Server.h:4: note: candidates are: Server::Server()

C:\Program Files (x86)\arduino-1.0.3\hardware\arduino\cores\arduino/Server.h:4: note:                 Server::Server(const Server&) WebServer:21: error: cannot declare variable 'server' to be of abstract type 'Server'

C:\Program Files (x86)\arduino-1.0.3\hardware\arduino\cores\arduino/Server.h:4: note:   because the following virtual functions are pure within 'Server':

C:\Program Files (x86)\arduino-1.0.3\hardware\arduino\cores\arduino/Print.h:48: note:  virtual size_t Print::write(uint8_t)

C:\Program Files (x86)\arduino-1.0.3\hardware\arduino\cores\arduino/Server.h:6: note:  virtual void Server::begin() WebServer.ino: In function 'void setup()':

WebServer:24: error: 'Ethernet' was not declared in this scope

WebServer:27: error: 'sensors' was not declared in this scope

WebServer:29: error: 'insideThermometer' was not declared in this scope

WebServer:30: error: 'outsideThermometer' was not declared in this scope

WebServer.ino: At global scope:

WebServer:33: error: variable or field 'getTemperature' declared void

WebServer:33: error: 'DeviceAddress' was not declared in this scope

WebServer.ino: In function 'void loop()':

WebServer:38: error: 'sensors' was not declared in this scope

WebServer:40: error: 'Client' was not declared in this scope

WebServer:40: error: expected `;' before 'client'

WebServer:41: error: 'client' was not declared in this scope

WebServer:50: error: 'insideThermometer' was not declared in this scope

WebServer:50: error: 'getTemperature' was not declared in this scope

WebServer:64: error: 'outsideThermometer' was not declared in this scope

Estou usando meu cel como roteador para internet....não sei oque pode ser.

Já arrumei meu ip e o endereço MAC, não sei como alterar os endereços:

DeviceAddress insideThermometer = { 0x10, 0x7A, 0x3B, 0xA9, 0x01, 0x08, 0x00, 0xBF };
DeviceAddress outsideThermometer = { 0x10, 0xCD, 0x39, 0xA9, 0x01, 0x08, 0x00, 0xBE};

Não sei se precisa.

Infelizmente eu nao tenho um bom conhecimento do uso de ethernet shield, se voce utilizasse um computador como host eu poderia lhe ajudar melhor.
Mas, me parece problema nas declaraçoes, voce se certificou de que possui todas essas bibliotecas?

Sim...baixei as bibliotecas normais. Mas o fato é que estou tentando fazer ele "plotar" os dados em uma página HTML como rede interna..os dados consigo coletar..o problema é jogar esses dados em um "servidor" local. Que dificuldade que estou tendo rss. Mas estou tentando. Como faço paara conseguir o código MAC do meu arduino? Sabe?

Luiz, te add como amigo. Olha só. Os dados chegam e aparece na serial. A ideia é jogar eles em uma página em http e esta página não precisa ficar disponível na internet, somente em uma rede interna local. Meu notebook ficará como servidor, se assim for mais fácil.

Vou alterar o IP e o MAC desse camarada. Só acho q está faltando algo, pois o código da uns erros qnd tiro os comentários das partes que envolvem o servidor.

Pode dar uma luz?


Segue o código

#include #include

byte mac[] = { 0x00, 0x1F, 0xE2, 0xE0, 0x99, 0x2F }; byte ip[] = { 192, 168, 43, 154 }; byte server[] = { 64, 233, 187, 99 }; // Google Server (80); EthernetClient client; int Ventrada; // Variável para ler o sinal do pino do Arduino float Temperatura; // Variável que recebe o valor convertido para temperatura. float sensor;

void setup() { Ethernet.begin(mac, ip); Serial.begin(9600);

delay(1000);

Serial.println("connecting...");

if (client.connect(server, 80)) { Serial.println("connected"); client.println("GET /search?q=arduino HTTP/1.0"); client.println(); } else { Serial.println("connection failed"); } }

// esse loop é o original do programa void loop() { if (client.available()) { char c = client.read(); Serial.print(c); }

if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); for(;;) ; }



void getTemperature(){ Ventrada = analogRead (sensor); /* Manda o Arduino ler o pino e armazena o valor em “Ventrada”. */ Temperatura=(500*Ventrada)/1023; /* Converte o valor de tensão em temperatura e armazena na variável “Temperatura” */

Serial.print(Temperatura); // Exibe o valor de temperatura no display. Serial.println(" C"); // Escreve “C” para dizer que a escala é Celsius. delay(5000); /* Aguarda 1 segundo para efetuar uma nova leitura de temperatura. */ } void loop() { getTemperature(); // escuta a entrada de clientes Client client = server.available(); // SE ESSA LINHA FICAR SEM COMENTAR DA ERRO

if (client) { // uma solicitação http termina com uma linha em branco boolean BlankLine = true; while (client.connected()) { if (client.available()) { char c = client.read(); // Se a linha estiver em branco e o fim da linha for um caractere newline '\n' = fim da // solicitação HTTP if (c == '\n' && BlankLine) { getTemperature(); client.println("HTTP/1.1 200 OK"); // Resposta HTTP padrão client.println("Content-Type: text/html\n"); client.println("\n"); client.println(""); client.println("\n"); client.println("

Arduino Web Server

"); client.println("

Internal Temperature

"); client.println("Temp C:"); client.println(Temperatura); client.println("
"); break; } if (c == '\n') { // Iniciando uma nova linha BlankLine = true; } else if (c != '\r') { // A linha atual tem um caractere nela BlankLine = false; } } } // Permite um intervalo de tempo suficiente para que o navegador receba os dados delay(10); // Fecha a conexão client.stop(); } }

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço