Resultados da busca - %E3%80%90%E2%94%83%E6%80%BB%E4%BB%A32%E2%92%8F7%E2%92%8F01705%5B%EF%BC%B1%5D%E3%80%91%E3%80%91%E6%81%92%E8%BE%BE%E5%A8%B1%E4%B9%902%E6%8F%90%E7%8E%B0%E5%A5%BD%E4%B9%85%E5%88%B0
ada digital que não esteja sendo usado pelo Ethernet Shield, senão conflitos irão ocorrer. Há no mercado uma variedade de implementações do Ethernet Shield, e embora praticamente todas usem o W5100 e tenham um receptáculo para Cartão SD, há quase sempre ligeiras diferenças entre estas implementações. O ideal é que vc tivesse o esquemático do exato modelo do Shield que está usando, para poder conferir quais "pinos" estão livres. Outra possibilidade, é você analisar o código da Lib específica, e por lá descobrir quais pinos são usados.
No entanto, como a maioria delas usa a interface SPI do Arduino, tanto para se comunicar com o W5100 quanto Cartão SD, podemos considerar que há vários sinais digitais do Arduino que estão livres. Eu analisei dois esquemáticos (os quais são sempre desenhados de forma péssima), e pude verificar que certamente o pino digital "7" do Arduino está livre nestes esquemáticos. Então acho que ele poderia ser um boa opção para você usar.
Observe que os "pinos" A0 até A5 do Arduino são originalmente pinos digitais da CPU Atmega328. No entanto evita-se usar estes pinos, porque eles são os únicos pinos que podem ser entradas Analógicas, e caso vc precise dessas entradas, elas estarão disponíveis. Mas são 6 entradas, e mesmo que vc venha a precisar de uma entrada Analógica posteriormente, ainda assim haverá uma ou outra disponível, caso você precise usar uma ou mais delas como pinos digitais.
Na figura a seguir, você pode ver a conexão do seu sensor magnético ao Arduino UNO (no caso ao pino "7"):
Observe que não há resistor externo ligado entre o pino "7" e o 5V do Arduino. Isto significa que você deverá obrigatoriamente configurar a entrada digital "7", como sendo do tipo "INPUT_PULLUP". A linha de código para isso seria:
pinMode ( 7, INPUT_PULLUP );
Mas caso você queira colocar um resistor externo, então a entrada deve ser configurada apenas como "INPUT", e o valor do resistor pode ser de 10k.
Outro ponto importante, é o capacitor de 100 kpF ligado entre o pino "7" e o GND do Arduino. Este capacitor evita que ruídos espúrios possam "enganar" seu alarme. Se vc não tiver um de 100 kpF, pode usar um valor maior, como 220, 330, 470 kpF, e até mesmo 1uF. Use capacitores de cerâmica. Eletrolítico de Alumínio, nem pensar!!!). Não deixe de incluir o capacitor, principalmente se o cabo do seu sensor for relativamente longo. O capacitor deve estar fisicamente o mais próximo possível do Arduino (e não do sensor!!!), preferencialmente quase junto da placa do UNO.
Veja que o que seu programa precisa, é apenas detectar quando a entrada "7" do Arduino, está em "HIGH". Isto porque quando o outro lado do sensor (a parte do imã) está encostada no sensor ligado ao pino "7", a chave está fechada, e portanto o valor lido será "LOW". Ao se afastar o imã, a chave abre, e o valor lido passa a ser "HIGH", indicando que a janela foi aberta.
Como seu perfil indica que vc é da área de Eletrônica, acredito que não será um problema para vc implementar isso, além do próprio programa no Arduino para detectar o acionamento do sensor (que é uma chave simples, apenas magnética), e a sinalização correspondente. Caso tenha, avise aqui que ajudamos você.
Informação final: caso vc precise instalar vários sensores, monitorados pelo mesmo Arduino, mesmo que não existam pinos suficientes sobrando no Arduino, há diversas formas de se fazer isso. Se precisar, também avise aqui que vamos te auxiliar.
Sucesso com sua implementação.
Abrçs,
Elcids
…
Adicionado por Elcids Chagas ao 18:11 em 20 maio 2018
verter a direção do desvio, mandando virar para o mesmo lado da chave acionada.
O Sketch ficou assim:
//--------------- Programa JABUTINO sketch 201405129 -----------#include <Servo.h>#include <AFMotor.h>
//Instancia o objeto referente aos motores DCAF_DCMotor motorEsquerdo(1); //Motor esquerdo na conexão "M1"AF_DCMotor motorDireito(2); //Motor direito na conexão "M2"
//Definições de velocidade em PWM de 0 a 255const char VEL_MAX = 255;const char VEL_MIN = 0;const char VEL_MED = 150;
//Pinos para controle do Ultrassom HC-SR04//usar as portas analógicas A0 e A1 como digitaisconst int pinoTrigger = 18; // A0 = 14const int pinoEcho = 19; // A1 = 15
//Servo MotorServo meuServo;const int pinoServo = 10; //o pino 10 é o pino de sinal da conexão "SERVO_2"
//Define as posições de calibragem do servo//Valores para conseguir um melhor alinhamento do servo, cada motor responde de forma diferente.//Os valores devem variar de 0 a 180 graus, ajuste de acordo com seu motor na tentativa e erro.
const int OLHA_ESQ = 180;const int OLHA_DIR = 10;const int OLHA_FRT = 85;
const int pinoBuzzer = 9;
const int pinoChaveEsq = 14;const int pinoChaveDir = 15;
/*Método obrigatório: Define tipos dos pinos e inicializa a biblioteca de servo.*/
void setup(void){ // Inicializa os motores com velocidade máximamotorEsquerdo.setSpeed(VEL_MAX);motorDireito.setSpeed(VEL_MAX); //atribui os pinos do ultrassompinMode(pinoTrigger, OUTPUT);pinMode(pinoEcho, INPUT);
Serial.begin(9600); /* função provisória, para controle da rotina das chaves.*/ /* define os pinos como entrada ligando um resistor pullup a eles */pinMode(pinoChaveEsq, INPUT_PULLUP); // MUITO IMPORTANTEpinMode(pinoChaveDir, INPUT_PULLUP);
//inicia o ServomeuServo.attach(pinoServo); //Coloca o servo virado para posicao frontal:meuServo.write(OLHA_FRT);} // fim do setup//================================================//Corpo principal do programa, repete infinitamentevoid loop(){// Inicia andando para frenteandarpFrente(VEL_MAX);
//Enquanto não encontrar um obstáculo a menos de 10cm: while (medeDistancia()>10) { // Lê a Chave Esquerda: if (digitalRead(pinoChaveEsq) == HIGH) { // Serial.println("Esquerda"); //tone(pinoBuzzer, 740); //envia 740Hz para o pino 9 //delay(100); //aguarda 0,1 segundo //noTone(pinoBuzzer); //interrompe o som. girarpEsquerda(VEL_MED); delay(800); //aguarda 0,5 segundoandarpFrente(VEL_MAX); } else // Lê chave Direita: if (digitalRead(pinoChaveDir)== HIGH) { //Serial.println("Direita"); //tone(pinoBuzzer, 840); //envia 840Hz para o pino 9 //delay(100); //aguarda 0,1 segundo //noTone(pinoBuzzer); //interrompe o som. girarpDireita(VEL_MED); delay(800); //aguarda 0,5 segundo p/ virarandarpFrente(VEL_MAX); } else delay(100); //Faz uma leitura da distância a cada 0,1 segundo } // aguarda minimamente para eliminar ruidos das chaves: delay(5); //Se encontrou um obstáculo recua por 1 segundo e pára: andarpTras(VEL_MED); delay(1000); pararMotores();
//Verifica qual lado tem maior distância até um obstáculo: int esquerda = 0, direita = 0; meuServo.write(OLHA_ESQ); //vira o servo para a esquerda delay(500); //aguarda o servo completar o movimento
esquerda = medeDistancia(); //mede a distância na esquerda meuServo.write(OLHA_DIR); //vira o servo para a direita delay(500); //aguarda o servo completar o movimento
direita = medeDistancia(); //mede a distância na direita meuServo.write(OLHA_FRT); //olha pra frente novamente delay(500); //aguarda o servo completar o movimento
if(esquerda > direita) /*se a distancia do obstáculo na esquerda for maior que na direita vira para esquerda */ { girarpEsquerda(VEL_MAX); } else /* se a distância do obstáculo na direita for maior ou igual que na esquerda vira para a direita */ { girarpDireita(VEL_MAX); } //Aguarda alguns instantes para o robô virar delay(500); //<< modifique esse tempo se desejar que ele vire por mais ou menos tempo
// Fim da rotina de obstáculos} // Fim do LOOP
//Utiliza o sensor de Ultrassom HC-SR04 para medir a distância em centímetrosint medeDistancia() { digitalWrite(pinoTrigger, LOW); //Garante que o pino de Trigger está LOW. delayMicroseconds(2); //cria um pulso de 5 microssegundos no Trigger: digitalWrite(pinoTrigger, HIGH); delayMicroseconds(5); digitalWrite(pinoTrigger, LOW);
//aguarda o echo: long microssegundos = pulseIn(pinoEcho, HIGH);/* A velocidade do som é 340 m/s ou aproximadamente 29 microssegundos por centimetro. O pulso faz uma viagem de ida e volta do sensor até o obstáculo. assim, para calcular a distância temos que dividir esse tempo pela metade. Então...*/ return int(microssegundos/29/2); } // Fim do medeDistancia
// ======== void's dos motores: =============
/*Gira as duas rodas para frente. Como os motores estão virados para lados opostos eles devemgirar em sentidos opostos para que as rodas girem na mesma direção.*/void andarpFrente(char velocidade) { motorEsquerdo.setSpeed(velocidade); motorDireito.setSpeed(velocidade); motorEsquerdo.run(FORWARD); motorDireito.run(BACKWARD); }
/*Gira as duas rodas para trás. Como os motores estão virados para lados opostos eles devemgirar em sentidos opostos para que as rodas girem na mesma direção.*/void andarpTras(char velocidade) { motorEsquerdo.setSpeed(velocidade); motorDireito.setSpeed(velocidade); motorEsquerdo.run(BACKWARD); motorDireito.run(FORWARD); }
//Gira as duas rodas em sentido inverso, girando no próprio eixo.void girarpEsquerda (char velocidade) { motorEsquerdo.setSpeed(velocidade); motorDireito.setSpeed(velocidade); motorEsquerdo.run(BACKWARD); motorDireito.run(BACKWARD); }
//Gira as duas rodas em sentido inverso, girando no próprio eixo.void girarpDireita(char velocidade) { motorEsquerdo.setSpeed(velocidade); motorDireito.setSpeed(velocidade); motorEsquerdo.run(FORWARD); motorDireito.run(FORWARD); }
//Pára os motores definindo os dois pinos Enable em estado LOW.void pararMotores() { motorEsquerdo.run(RELEASE); motorDireito.run(RELEASE); }…
ndo pulso para o relé ligar,mesmo sem eu ter conectado o módulo Bluetooth,alguém pode me informar o que devo trocar na programação para que o pulso só seja enviado quando eu mandar a informação através do celular?
Na imagem mostra que não conectei o módulo Bluetooth e mesmo assim o relé já está ligado e isso acontece independe da porta que eu conecte
char buffer[67];
byte Pino02 = 2;byte Pino03 = 3;byte Pino04 = 4;byte Pino05 = 5;byte Pino06 = 6;byte Pino07 = 7;byte Pino08 = 8;byte Pino09 = 9;byte Pino10 = 10;byte Pino11 = 11;byte Pino12 = 12;byte Pino13 = 13;byte PinoA0 = A0;byte PinoA1 = A1;byte PinoA2 = A2;byte PinoA3 = A3;byte PinoA4 = A4;byte PinoA5 = A5;
void setup(){ Serial.begin(9600); Serial.flush(); pinMode(Pino02, OUTPUT); pinMode(Pino03, OUTPUT); pinMode(Pino04, OUTPUT); pinMode(Pino05, OUTPUT); pinMode(Pino06, OUTPUT); pinMode(Pino07, OUTPUT); pinMode(Pino08, OUTPUT); pinMode(Pino09, OUTPUT); pinMode(Pino10, OUTPUT); pinMode(Pino11, OUTPUT); pinMode(Pino12, OUTPUT); pinMode(Pino13, OUTPUT); pinMode(PinoA0, OUTPUT); pinMode(PinoA1, OUTPUT); pinMode(PinoA2, OUTPUT); pinMode(PinoA3, OUTPUT); pinMode(PinoA4, OUTPUT); pinMode(PinoA5, OUTPUT);}void loop(){ if (Serial.available()>0){ int index=0; delay(100);//deixe o buffer encher int numChar = Serial.available(); if(numChar>65){ numChar=65; } while(numChar--){ buffer[index++] = Serial.read(); } splitString(buffer); }}void splitString(char* data){ Serial.print("Dados inseridos: "); Serial.println(data); char* parameter; parameter= strtok (data, " ,"); while(parameter != NULL){ setLED(parameter); parameter = strtok (NULL, " ,"); } //Limpa o texto e os buffers seriais for (int x=0; x<66; x++){ buffer[x]='\0'; } Serial.flush();}void setLED(char* data){ if ((data[0] =='a') || (data[0] == 'A')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(Pino02, Ans); Serial.print("Pino02 esta em: "); Serial.println(Ans); } if ((data[0] =='b') || (data[0] == 'B')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(Pino03, Ans); Serial.print("Pino03 esta em: "); Serial.println(Ans); } if ((data[0] =='c') || (data[0] == 'C')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(Pino04, Ans); Serial.print("Pino04 esta em: "); Serial.println(Ans); } if ((data[0] =='d') || (data[0] == 'D')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(Pino05, Ans); Serial.print("Pino05 esta em: "); Serial.println(Ans); } if ((data[0] =='e') || (data[0] == 'E')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(Pino06, Ans); Serial.print("Pino06 esta em: "); Serial.println(Ans); } if ((data[0] =='f') || (data[0] == 'F')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(Pino07, Ans); Serial.print("Pino07 esta em: "); Serial.println(Ans); } if ((data[0] =='g') || (data[0] == 'G')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(Pino08, Ans); Serial.print("Pino08 esta em: "); Serial.println(Ans); } if ((data[0] =='h') || (data[0] == 'H')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(Pino09, Ans); Serial.print("Pino09 esta em: "); Serial.println(Ans); } if ((data[0] =='i') || (data[0] == 'I')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(Pino10, Ans); Serial.print("Pino10 esta em: "); Serial.println(Ans); } if ((data[0] =='j') || (data[0] == 'J')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,255); analogWrite(Pino11, Ans); Serial.print("Pino11 esta em: "); Serial.println(Ans); } if ((data[0] =='k') || (data[0] == 'K')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(Pino12, Ans); Serial.print("Pino12 esta em: "); Serial.println(Ans); } if ((data[0] =='l') || (data[0] == 'L')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(Pino13, Ans); Serial.print("Pino13 esta em: "); Serial.println(Ans); } if ((data[0] =='m') || (data[0] == 'M')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(PinoA0, Ans); Serial.print("PinoA0 esta em: "); Serial.println(Ans); } if ((data[0] =='n') || (data[0] == 'N')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(PinoA1, Ans); Serial.print("PinoA1 esta em: "); Serial.println(Ans); } if ((data[0] =='o') || (data[0] == 'O')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(PinoA2, Ans); Serial.print("PinoA2 esta em: "); Serial.println(Ans); } if ((data[0] =='p') || (data[0] == 'P')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(PinoA3, Ans); Serial.print("PinoA3 esta em: "); Serial.println(Ans); } if ((data[0] =='q') || (data[0] == 'Q')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(PinoA4, Ans); Serial.print("PinoA4 esta em: "); Serial.println(Ans); } if ((data[0] =='r') || (data[0] == 'R')){ int Ans = strtol(data+1, NULL, 10); Ans = constrain(Ans,0,1); digitalWrite(PinoA5, Ans); Serial.print("PinoA5 esta em: "); Serial.println(Ans); } }…
squisas na internet procurando encontrar uma luz para este problema mas nada encontrei, ai tive que por a mão na massa.
Funcionamento:
O usuário aproxima o cartão do leitor RFID, a tag lida do cartão é comparado com as tags cadastradas no cartão SD, e retorna informando se o cartão esta cadastrado ou não.
Caso o cartão esteja cadastrado ele também informa o nome do usuário que esta ligado a aquele cartão.
Decidi divulgar pois tudo que aprendi em Arduíno foi através de tutoriais da internet.
Obs. O código pode e deve ser melhorado, não fiz comentários nas linhas por falta de tempo e paciência!
\\------------------------------------------------------------------------------------------------------------#include <SD.h>
File myFile;
#include <SPI.h>
#include <MFRC522.h>
MFRC522 mfrc522(10, 9);
int x = 0;
byte sel = 0;
byte c1 = 0;
byte c2 = 0;
byte c3 = 0;
String status = "";
String cconteudo = "";
String usuario = "";
String nome = "";
char caractere;
char carac;
void setup() {
Serial.begin(9600);
SPI.begin();
if (SD.begin(4)) {
myFile = SD.open("rfid.txt");
if (myFile) {
while (myFile.available()) {
for (x; myFile.read() == 13; x++) {
delay(10);
}
}
}
else {
Serial.println("Falha ao abrir banco de dados");
}
Serial.print(x);
Serial.println(" usuarios cadastrados: ");
myFile.close();
!SD.begin(4);
}
}
void loop() {
mfrc522.PCD_Init();
while (sel == 0) {
Serial.println("Aproxime o seu cartao do leitor...");
cconteudo = "";
while ( ! mfrc522.PICC_IsNewCardPresent()) {
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
for (byte i = 0; i < mfrc522.uid.size; i++) {
cconteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
cconteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
}
cconteudo.toUpperCase();
cconteudo.trim();
mfrc522.PICC_HaltA();
myFile = SD.open("rfid.txt");
if (myFile) {
while (myFile.available() && (c2 == 0)) {
caractere = 0;
while (myFile.available() && (caractere != ';') && (caractere != 13) && (c1 == 0)) {
caractere = myFile.read();
if ((caractere != ';') && (caractere != 13)) {
usuario.concat(caractere);
}
}
usuario.trim();
if ((cconteudo == usuario ) && (c1 == 0) ) {
status = "Usuario encontrado";
Serial.println(status);
c1 = 1;
c3 = 1;
}
else {
usuario = "";
status = "Usuario nao encontrado ";
}
if (c3 == 1) {
carac = 0;
while (myFile.available() && (carac != 13) && (c3 == 1)) {
carac = myFile.read();
if ((carac != 13) && (carac != ';')) {
nome.concat(carac);
}
delay(10);
}
nome.trim();
if (c3 == 1) {
c3 = 0;
c2 = 1;
sel = 1;
}
}
}
}
else {
Serial.println("Falha ao abrir banco de dados");
}
if (status != "Usuario encontrado") {
Serial.println(status);
}
}
myFile.close();
Serial.print("Bem vindo ");
Serial.println(nome);
delay(2000);
}
\\-------------------------------------------------------------------------------------------------------------------------------------------- -
Arquivo rfid.txt contido no cartão de memoria (primeiro vai as tag dos cartões e após o nome do usuário do cartão.
11 22 33 44;nome1 22 22 33 44;nome2 31 11 22 33;nome3 22 33 54 22;nome4 12 22 33 33;nome5 32 44 12 99;nome6 32 68 11 12;nome7 88 99 11 74;nome8 51 88 99 33;nome9 33 F2 0D 01 ;Daniel Baltazar Schneider 12 P2 00 33;nome11 12 33 55 I7;nome12 88 99 33 55;nome13
\\----------------------------------------------------------------------------------------------------------------------------------------------
Alguma duvida ou sugestão? comente.
…