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.
Tags:
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.
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?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por