Boa tarde, meu nome é Paulo, estou com uma certa urgência para fazer um equipamento funcionar queria saber se vcs podem me dizer se vai funcionar. Eu trabalho com automação e controle de acesso em condomínios, comprei um dispensador de cartão e ele funciona através da porta rs232 e um software no computador. eu precisava colocar um botão para que quando acionado ele dispensasse o cartão sem usar o software, queria saber se consigo programar ele com um modulo de rele e modulo rs232, para que sempre que eu acionar o relé ele execute o comando para ejetar o cartão no dispensador pelo modulo rs232. Se puderem me ajudar agradeço, de qualquer maneira obrigado.
Isso só vendo como é o hardware do seu dispensador . Veja com o fabricante e o manual se há como acionar sem ser por sw. E tambem qual e o comando e o protocolo usado para dispensar o cartão. Se souber isso deve ser facil um Arduino emular esse comando quando um botão for acionado
Ele me enviou esse manual, com o protocolo de comunicação.
MT166-Communication Protocol.pdf (1.55 MB)
Alguma ajuda?
Boas, Entao o datasheet que colocaste do dispositivo tem bem detalhado o protocolo de comunicação que é implementado.Basicamente terás de ligar esse botão a uma entrada digital do arduino e programares uma interrupção para quando este for pressionado enviar para o modulo via porta serie essa instrução para largar o cartão. No datasheet tens isto:
4.4Dispensingcardtotheoutsideofcarddispense Hostsend: 0x02 0x00 0x02 0x31 0x32 0x03
Reader return: 0x02 0x00 0x03 0x31 0x3 2O
Parece relativamente fácil. Tens o modulo dos cartões contigo?
Opa, Tenho sim estou com o dispensador e com o arduíno Uno. Vc poderia me ajudar com o código é que é a primeira vez que mexo com arduíno e estou apanhando um pouco pra fazer isso funcionar. Obrigado.
?
Já tens alguma coisa feita?Tenho andado sem tempo estes dias, mostra ai o que ja tens e assim que possa envio-te algo rápido para testares.
//0x02 0x00 0x02 0x31 0x32 0x03
void setup() {
Serial.begin(9600);
/* 4.4Dispensingcardtotheoutsideofcarddispense
Hostsend:
0x02 0x00 0x02 0x31 0x32 0x03
*/
Serial.print(0x02,HEX);
Serial.print(0x00,HEX);
Serial.print(0x02,HEX);
Serial.print(0x31,HEX);
Serial.print(0x32,HEX);
Serial.print(0x33,HEX);
}
void loop() {
}
Tenta assim e ve se ele mexe ...
Boa Tarde eu tenho isso que vi em um video no youtube , só dei uma ajustada pra o que eu preciso e com o que vc me passou agora
void setup() {
// put your setup code here, to run once:
pinMode(8, INPUT_PULLUP);
Serial.begin(9600);
Serial.available();
Serial.write ("tudo OK");
}
void loop() {
// put your main code here, to run repeatedly:
Serial.available();
while (digitalRead(8) == LOW) {
Serial.print(0x02, HEX);
Serial.print(0x00, HEX);
Serial.print(0x02, HEX);
Serial.print(0x31, HEX);
Serial.print(0x32, HEX);
Serial.print(0x33, HEX);
break;
}
}
Serial.write ("tudo OK");
Isto não está correcto, uma vez que irás enviar isto ao modulo também.Nota que a porta serie não pode ser partilhada.Não podes escrever dados para humanos e ao mesmo tempo estares a escrever para o módulo! Ele não vai saber o que é "tudo OK" ... Eventualmente usa um led para marcares algo ... O modulo usa TTL na porta serie ou é RS232?
Ao executar o meu código o que aconteceu?
quando enviei seu codigo pro arduino ele nao fez nada, e agora quando tento enviar outro codigo ele da erro no envio. Mas ja consegui resolver
quando enviei seu código pro arduino ele nao fez nada, e agora quando tento enviar outro codigo ele da erro no envio.
Não entendi bem agora, dá erro ao subir novo código para o arduino ou o modulo sinaliza erro?
ele dava erro ao subir um novo codigo
Nota que como te disse a porta serie nao pode ser partilhada.Se tens o modulo ligado na serie quando estas a enviar o codigo vai falhar! Tens de desligar do modulo, faz upload, desliga o arduino, faz as ligações, coloca energia primeiro no modulo para dar tempo para ele inicializar e so depois liga o arduino.
?
Deixa eu te explicar mas desde o começo pq oque eu achei que entendia de programação, vi que não entendo nada. :D
Eu tenho o expedidor, dele sai um cabo db9 ligado a um modulo db9 para arduino, no modulo esta ligado vcc no 5v do arduino, gnd no gnd do arduino, txd no borne 0 Rx do arduino, o rxd do modulo ligado no borne 1 TX do arduino. Na protoboard tem um botão ligado no gnd do arduino e no canal 8 do arduino. o que eu precise não o conseguindo de jeito nenhum fazer é que quando eu aperte esse botão ele envie o sinal pro modulo e do modulo para o expedidor para poder sair o cartão.
esse é um log do software que vem junto com o expedidor,
14:39:58 Prepare to open COM5... 14:39:58 ==========COM5 open successed========== 14:39:58 ----------> 02 00 02 32 30 03 01 14:39:58 <<<<<< 02 00 03 32 30 10 03 10 14:39:59 ----------> 02 00 02 31 31 03 03 (CÓDIGO DE QUANDO SAIU O CARTÃO) 14:40:00 <<<<<< 02 00 03 31 31 59 03 5B
Ok entao estas a dizer que se do pc enviares isso ele dá um cartao para fora? Se olhares para o meu codigo o comando enviado é defacto diferente.
02 00 02 32 30 03 01 ->indicado por ti
0x02 0x00 0x02 0x31 0x32 0x03 ->o que eu vi no datasheet
Se assim for bastara alterar o codigo que eu te enviei para:
void setup() {
Serial.begin(9600);
/* 4.4Dispensingcardtotheoutsideofcarddispense
Hostsend:
0x02 0x00 0x02 0x31 0x32 0x03
*/
Serial.print(0x02,HEX);
Serial.print(0x00,HEX);
Serial.print(0x02,HEX);
Serial.print(0x32,HEX);
Serial.print(0x30,HEX);
Serial.print(0x03,HEX);
Serial.print(0x01,HEX);
}
void loop() {
}