Tenho um código de arduino pronto, e uma página html também. Basicamente tenho um modulo relé serial com 4 reles,e minha página tem 4 botões, quando acesasse essa página, tanto pelo pc tanto quanto pelo celular, estaria ativando/desativando os reles. O problema é que o código que tenho seria pra 40 reles.. Se alguém puder me ajudar com um código fico muito grato, pois até correria atrás de ver como fazer passo a passo pesquisando de diversas fontes, mas tenho que entregar esse trabalho até amanhã, terca feira já perco -1 ponto. 

Exibições: 397

As respostas para este tópico estão encerradas.

Respostas a este tópico

Você pode usar circuitos integrados, coloque no Google a palavra chave:

como expandir portas Arduíno, e veja e estude os resultados.

Bos sorte.

Abs.

Não estaria precisando expandir portas.. Creio que esse código seja simples, mas como não tenho os conhecimentos nece'ssários, não estou conseguindo fazer. Tenho um modulo rele, com 4 reles, e uma página HTML com 4 botões. Precisava somente do código para quando acionar esses botões na página, acionassem o rele.. A comunicacao é feita através de um ethernet shield v2

Entendi que queria expandir para 40 reles, mas o que quer é usar somente para quatro e seu código é para 40, é isso?

Exato

Bem, anexo um code muito simples mas ao mesmo tempo muito didático, agora se quiser modificar o seu, envie anexo como TXT como estou fazendo aqui que trato de modificar pra você;

Abs.

Desculpe, na pressa enviei um TXT com erro, segue o corrigido.

Abs.

Anexos

Dei uma olhada, mas não to com muito tempo agora.. Se você pudesse alterar pra mim agradeceria muito, se necessário até te pagaria pelo código. Tô correndo contra o tempo hahaha. Segue abaixo o código, e mais abaixo o codigo html da minha página.

//É necessário instalar as seguintes bibliotecas:
//Serial Relay:
//https://github.com/RoboCore/SerialRelay
//Para instalar a bliblioteca basta acessar o menu "Sketch > Include Library > Add .ZIP Library" na IDE do Arduino e selecionar o Arquivo SerialRelay.zip contido no mesmo ZIP deste arquivo.
//Ethernet_v2
//https://github.com/RoboCore/Ethernet
//Para instalar a bliblioteca basta acessar o menu "Sketch > Include Library > Add .ZIP Library" na IDE do Arduino e selecionar o Arquivo Ethernet_v2_1.6.5.zip contido no mesmo ZIP deste arquivo.

//Salve o arquivo index.htm (que veio junto com esse arquivo) em um cartão micro SD e o coloque no shield Ethernet.

#include <SPI.h>
#include <SD.h>
#include <Ethernet_v2.h>
#include <SerialRelay.h>

//Define o Mac Address da placa de rede. Essa informação pode ser encontrada em uma etiqueta colada embaixo da mesma.
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x02, 0x85 };
//Define o IP da placa. Caso necessário altere o mesmo para se adequar a sua rede.
IPAddress ip(192, 168, 1, 12);

EthernetServer server(80);
File webFile;

//na linha de baixo está sendo definido as portas em que o módulo relé serial está conectado.
SerialRelay relays(8, 9, 10); // (pino de data, pino de clock, quantidade de módulos)

#define REQ_BUF_SZ 60
char HTTP_req[REQ_BUF_SZ] = {0};
char req_index = 0;

int estado_botao[41];

char * pch;

void setup()
{
//ESTADO INICIAL DOS BOTOES 0 -> desligado, 1 -> ligado:
estado_botao[1] = 0;
estado_botao[2] = 0;
estado_botao[3] = 0;
estado_botao[4] = 0;

Serial.begin(9600);

void loop()
{
EthernetClient client = server.available(); //verifica se existe alguém querendo se conectar

if (client) { // existe cliente?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // Existe informacao vinda do cliente
char c = client.read(); // Le cada byte enviado pelo cliente, ou seja, cada caracter.
// Por padrao, o ultimo caracter enviado pelo cliente (nosso navegador) é em branco e termina com \n
// Dessa forma conseguimos saber se o cliente acabou de enviar informacoes para o servidor (Arduino)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // salva os caracteres das solicitacoes do browser
req_index++;
}
if (c == '\n' && currentLineIsBlank) {
// envia para o cliente o protocolo padrao de sucesso HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();

//caso a request seja pela ação de um botão:
if (StrContains(HTTP_req, "ajax_botao")) {
for (int i = 1 ; i <= 40 ; i++) {
//Serial.println(HTTP_req);
char botao[] = "botaoxx";
if (i < 10) {
botao[5] = '0';
botao[6] = '0' + i;
} else {
botao[5] = '0' + (i / 10);
botao[6] = '0' + (i % 10);
}

//Serial.println(botao);
if (StrContains(HTTP_req, botao)) {
SetBotao(i, client);
}
}
}
else {
// grava no arquivo webFile a página que temos no microSD
webFile = SD.open("index.htm");
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // envia para o cliente a página - nessa linha de fato o Arduino imprime no browser a página
}
webFile.close();
}
}
Serial.println(HTTP_req); //para debug, verifica no monitor serial a requisição
req_index = 0; //reseta o index do buffer e a variável que armazena as requisições
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// toda linha de texto recebida do cliente termina com \r\n
if (c == '\n') {
//verifica se acabou a linha, já que \n é o ultimo caracter
currentLineIsBlank = true;
}
else if (c != '\r') {
// o cliente ainda está enviando informações
currentLineIsBlank = false;
}
}
}
delay(1); // dá um tempo para o browser receber os dados
client.stop(); // fecha a conexão
}
}

void SetBotao(int botao, EthernetClient client) {

int modulo = (botao - 1) / 4 + 1;
int rele = botao % 4;
if (rele == 0) {
rele = 4;
}

Serial.print("modulo:");
Serial.print(modulo);
Serial.print(" rele:");
Serial.print(rele);
Serial.print(" - ");

if (estado_botao[botao] == 0) {
relays.SetRelay(rele, SERIAL_RELAY_ON, modulo);
estado_botao[botao] = 1;
//client.print("1");
Serial.println("1");
}
else {
relays.SetRelay(rele, SERIAL_RELAY_OFF, modulo);
estado_botao[botao] = 0;
//client.print("0");
Serial.println("0");
}
client.print("0|");
for (int i = 1 ; i <= 40 ; i++) {
client.print(estado_botao[i]);
client.print("|");
}

}

// funcao para limpar arrays (no nosso caso, as variaveis que armazenam requests)
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}

// funcao que procura pela string SFIND em STR
// retorna 1 se a string for encontrada
// retorna 0 se a setring não for encontrada
char StrContains(char *str, char* sfind)
{
char found = 0;
char index = 0;
char len;

len = strlen(str);

if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}

Página hmtl

<DOCTYPE html>
<html>
<head>
<tittle>AutResidencial</tittle>
<meta>
<style>

div> h2 {
color: blue
}
body{
font-family: Arial
}

.header{
width: 100px;
height: : 110px;
border: 10px;
background-color: #F6F9F9;
margin-top: 0px;
}
#quadrado{
border-style: solid;
border-color: #00979C;
background-color: #F6F9F9;
width: 800px;
height:150px;
text-align: center;
display: inline-block;
margin-bottom: 1000px;
}
#quadrado{
font-size: 30px

}
#quadrado{
cursor: pointer;
}
</style>
</head>


<body>


<center>
<div class"header">
</br>
<div>
<h2>Quarto</h2>
</div>
</br>
</div>


<div id="quadrado">
<h5>Rele 1</h5>
<p class="carga">Ligar/desligar</p>
<div>

<div id="quadrado">
<h5>Rele 2</h5>
<p class="carga">Ligar/desligar</p>
<div>


<div id="quadrado">
<h5>Rele 3</h5>
<p class="carga">Ligar/desligar</p>
<div>

<div id="quadrado">
<h5>Rele 4</h5>
<p class="carga">Ligar/desligar</p>
<div>

</center>

</body>


<html>

Breno,

Infelizmente não tenho tempo suficiente, baixar bibliotecas etc. estou em Angra dos Reis até amanha a noite, e deveria ter hardware para testar antes de modificar, por isso não quero me comprometer em algo tão importante para você, mas muitos colegas aqui vão te ajudar tenha certeza.

Abs.

Tudo bem, compreendo. Muito obrigado pela ajuda, de qualquer forma. Boa noite e boa viajem.

Abs!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço