Show Posts
|
|
Pages: [1] 2 3 ... 26
|
|
2
|
International / Portugues / Re: Ajuda de Arduino e GSM
|
on: March 10, 2013, 02:19:23 pm
|
Eu uso este, funciona muito bem! // André M. Schimohigashi // 18/06/2012 // // This code will make the Arduino sending an SMS every time it finds a GPS coordinate. // coordinates can be programmed to be searched at any given time. // # Product name: GPS/GPRS/GSM Module V2.0 // # Product SKU : TEL0051 // # Version : 0.1
// # Steps: // # 1. Turn the S1 switch to the EN(right side) // # 2. Upload the sketch to the Arduino board // # 3. Turn the S1 switch to the communication mode(left side) // # 4. Turn the S2 switch to the Arduino side(right side) // # 5. Turn the S3 switch to the ON side(right side)
String number = "????????"; // number of cellphone
String tmp; double utc, lat, lon, alt; char la_d, lo_d;
bool dadosOk = false, enviado = false; byte gsmDriverPin[3] = {3,4,5};
void setup() {
}
void loop() { Serial.end(); InitGpsMode(); while(!dadosOk) { enviado = false; //Serial.println("GPS"); gpsfuncao(); delay(100); } if(dadosOk){ Serial.end(); InitGsmMode(); while(!enviado) { dadosOk = false; //Serial.println("GSM"); gsmfuncao(); delay(100); } } }
void InitGpsMode(){ //ShutDown the GSM. digitalWrite(5, HIGH); delay(500); digitalWrite(5, LOW); for(int i=0; i <= 7; i++){ delay(1000); //wait 8 seconds to shutdown gsm connections } //Init the driver pins for GSM function for(int i = 0 ; i < 3; i++){ pinMode(gsmDriverPin[i],OUTPUT); } Serial.begin(4800); digitalWrite(3,HIGH);//Disable the GSM mode digitalWrite(4,LOW);//Enable the GPS mode }
void InitGsmMode(){ //Init the driver pins for GSM function for(int i = 0 ; i < 3; i++){ pinMode(gsmDriverPin[i],OUTPUT); } Serial.begin(115200); digitalWrite(3,LOW);//Enable the GSM mode digitalWrite(4,HIGH);//Disable the GPS mode //Output GSM Timing digitalWrite(5,HIGH); delay(1500); digitalWrite(5,LOW); for(int i=0; i <= 7; i++){ delay(1000); } }
void gsmfuncao() { Serial.println("AT"); for(int i=0; i <= 5; i++){ delay(1000); } Serial.println("AT+CMGF=1"); for(int i=0; i <= 5; i++){ delay(1000); } Serial.println("AT+CMGS=\"" + number + "\""); for(int i=0; i <= 5; i++){ delay(1000); } Serial.print("UTC:"); Serial.println(utc, 0); Serial.print("Lat:"); Serial.println(lat, 4); Serial.print("Lon:"); Serial.println(lon, 4); Serial.print("Lon_D:"); Serial.println(lo_d); Serial.print("Lat_D:"); Serial.println(la_d); Serial.print("Alt:"); Serial.println(alt, 2); delay(1000); Serial.println((char)26); delay(1000); Serial.println(); enviado = true; }
void gpsfuncao() { utc = UTC(); lat = latitude(); la_d = lat_dir(); lon = longitude(); lo_d = lon_dir(); alt = altitude(); dadosOk = true; }
double Datatransfer(char *data_buf,char num)//convert the data to the float type { //*data_buf:the data array //the number of the right of a decimal point double temp=0.0; unsigned char i,j;
if(data_buf[0]=='-')// { i=1; //process the data array while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); //convert the int type to the float type for(j=0;j<num;j++) temp=temp/10; //convert to the negative number temp=0-temp; } else//for the positive number { i=0; while(data_buf[i]!='.') temp=temp*10+(data_buf[i++]-0x30); for(j=0;j<num;j++) temp=temp*10+(data_buf[++i]-0x30); for(j=0;j<num;j++) temp=temp/10 ; } return temp; }
char ID()//Match the ID commands { char i=0; char value[6]={ '$','G','P','G','G','A' };//match the gps protocol char val[6]={ '0','0','0','0','0','0' };
while(1) { if(Serial.available()) { val[i] = Serial.read();//get the data from the serial interface if(val[i]==value[i]) //Match the protocol { i++; if(i==6) { i=0; return 1;//break out after get the command } } else i=0; } } }
void comma(char num)//get ',' { char val; char count=0;//count the number of ','
while(1) { if(Serial.available()) { val = Serial.read(); if(val==',') count++; } if(count==num)//if the command is right, run return return; } }
double UTC()//get the UTC data -- the time { char i; char time[9]={ '0','0','0','0','0','0','0','0','0' }; double t=0.0; String te; if(ID())//check ID { comma(1);//remove 1 ',' //get the datas after headers while(1) { if(Serial.available()) { time[i] = Serial.read(); i++; } if(i==9) { i=0; t=Datatransfer(time,2);//convert data if(t > 0 && t < 30000){ t = t + 240000; } t=t-30000.00;//convert GMT-3 Time zone //Serial.println(t);//Print data return t; } } } } double latitude()//get latitude { double lt; char i; char lat[10]={ '0','0','0','0','0','0','0','0','0','0' };
if( ID()) { comma(2); while(1) { if(Serial.available()) { lat[i] = Serial.read(); i++; } if(i==10) { i=0; lt = Datatransfer(lat,4);//print latitude return lt; } } } } char lat_dir()//get dimensions { char i=0,val;
if( ID()) { comma(3); while(1) { if(Serial.available()) { val = Serial.read(); //Serial.println(val);//print dimensions i++; return val; } if(i==1) { i=0; return val; } } } } double longitude()//get longitude { double ln; char i; char lon[11]={ '0','0','0','0','0','0','0','0','0','0','0' };
if(ID()) { comma(4); while(1) { if(Serial.available()) { lon[i] = Serial.read(); i++; } if(i==11) { i=0; ln = Datatransfer(lon,4);//print longitude return ln; } } } }
char lon_dir()// { char i=0,val;
if(ID()) { comma(5); while(1) { if(Serial.available()) { val = Serial.read(); //Serial.println(val); i++; return val; } if(i==1) { i=0; return val; } } } }
double altitude()//get altitude data { char i,flag=0; double at; char alt[8]={ '0','0','0','0','0','0','0','0' };
if( ID()) { comma(9); while(1) { if(Serial.available()) { alt[i] = Serial.read(); if(alt[i]==',') flag=1; else i++; } if(flag) { i=0; at = Datatransfer(alt,1);//print altitude data return at; } } } }
|
|
|
|
|
3
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 10, 2013, 02:04:58 pm
|
ok... imaginemos 700 ms.
500 * 700ms = 350 segundos... 350/60 ~= 6 minutos. Achas que 3 minutos é aceitável para o sítio onde isto vai ser implementado?
Testaste com vários ficheiros? Eu diria que a prova de fogo para esta aplicacão seria fazeres um programinha simples para pesquisar e fazer as operacões que normalmente fará em todos os ficheiros do cartão (os tais 500) e guardar os tempos para cada um deles. Isto pode ser um pouco problemático em termos de memória talvez, então talvez consigas fazer uma média para garantir que o tempo médio de acesso seria mais ou menos 1 segundo.
Nao entendi esta sua conta, mas tudo bem. Sim fiz um programa pra fazer buscas no diretorio do cartao em 600 files , procurar, abrir, escrever e fechar e o tempo medio pa qualquer acesso foi em torno de quase um segundo.  E é pra acesso mesmo a aplicação, não pode falhar, 
|
|
|
|
|
4
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 09, 2013, 01:03:10 pm
|
100 diretório com 5 arquivos em cada diretório= 500 arquivos 110 arquivos no diretório raiz total 610 arquivos
tempo médio para pesquisar um file, abrir, gravar um dado e fechar = +- 1 segundo
Isto mostrando o inicio da operação e fim, na porta serial (DEBUG), isto será inibido pois não preciso desta informação aí o tempo será menor. 
|
|
|
|
|
5
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 09, 2013, 12:59:52 pm
|
Putz estou quase desistindo do MALDITO SD Card, funcionou por apenas meia duzias de vezes, nao consigo mais ler o conteúdo do cartao. eu já tinha testado esta lib SD.h a uns anos atrás e funcionava bem. Já testei em 5 placas diferentes de Arduino, o card funciona direto no computador, portanto nao é nele o problema retirei o shield e montei direto no protoboard, mesmo assim nao consegue inicializar o cartao!  Pronto, voltou a funcionar, a bagaça! 100 diretório com 5 arquivos em cada diretório= 500 arquivos 110 arquivos no diretório raiz total 610 arquivos tempo médio para pesquisar um file, abrir, gravar um dado e fechar = +- 1 segundo Tá bom não Bubulindo? 
|
|
|
|
|
6
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 09, 2013, 09:41:01 am
|
O que eu referia era ficheiros em vez de directórios. O problema em usar apenas os últimos 5 digitos ´€ que podes ter vários (imensos...) cartões com os mesmos últimos digitos. :\ Se calhar terás de ter uma funcão que ao registar um cartão novo veja se esse número já existe. :\
OK! Putz estou quase desistindo do MALDITO SD Card, funcionou por apenas meia duzias de vezes, nao consigo mais ler o conteúdo do cartao. eu já tinha testado esta lib SD.h a uns anos atrás e funcionava bem. Já testei em 5 placas diferentes de Arduino, o card funciona direto no computador, portanto nao é nele o problema retirei o shield e montei direto no protoboard, mesmo assim nao consegue inicializar o cartao! 
|
|
|
|
|
7
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 07, 2013, 06:06:02 pm
|
Hmmm, um ou dois segundos... 500 cartões...
Como disse, o código da RFID quantos caracteres tem?
Existe a possibilidade das RFID serem programadas para um numero série em especifico? Isso reduziria a complexidade do projecto para um nível incrívelmente simples uma vez que apenas terias de verificar se os digitos superiores conformavam com o que tinhas definido e ver se existia um registo com o numero dos restantes digitos.
os que tenho já são definidos pelo fabricante e tem um formato assim e não são sequencia0000145934 002, 14862a ideia seria usar apenas os ultimos 5 ou seja ( 14862) estou fazendo testes com o tempo de pesquisa, vou criar uns 100 diretorios e mandar pesquisar por um deles. o tamanho máximo do nome dos diretório é 8 digitos (string), eu acho que vai "dar" bem legal ! 
|
|
|
|
|
8
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 07, 2013, 04:34:48 pm
|
A SD.h, na realidade implementa um sistema FAT...
Uma maneira que talvez seja "rápida" (é algo a testar) seria criar um ficheiro para cada cartão em que o nome do ficheiro seria o código RFID... o problema aí será talvez que a biblioteca SDFat apenas aceita nomes com 8 bytes...
Hummm, interessante, gostei desta ideia! O ficheiro seria o número do cartão e os arquivos dentro dos ficheiros seriam os nomes das variaveis e o conteúdo dos arquivos seriam o conteúdo das variaveis, aí fica facil pra incluir ou excluir variaveis, basta apagar arquivos, muito bom; só tem que testar o acesso se seria rápido tipo pra 500 rfid, se perder um ou dois segundos pra mim está ótimo! Obrigado pela luz no fim do túnel, quando terminar posto aqui o resultado!
|
|
|
|
|
10
|
International / Portugues / Re: BANCO DE DADOS sd card!
|
on: March 06, 2013, 07:30:23 pm
|
Opzzz, obrigado pelo interesse! Preciso ler um cartao RFID e associar ao número deste cartão, algumas variaveis; algumas númericas outras strings e talvez lógicas pensei em usar um array, mas deveria ser um array multidimensional e como são muitos cartões, 500 ou mais, talvez uma eeprom externa, uma flash memory, sei lá! As vezes após a leitura do rfid apenas devo ler o conteúdo referente ao cartão, outras vez preciso alterar uma ou mais variaveis! Olhei "rapidamente" a SD.h parece ser prática, não testei nada ainda! Alguma ideia? 
|
|
|
|
|
11
|
International / Portugues / BANCO DE DADOS sd card!
|
on: March 06, 2013, 05:32:54 pm
|
To querendo fazer um banco de dados em arquivo texto num sd card, Alguém ja fez um? Alguém teria um exemplo? Ideias são bem-vindas! Obrigado! 
|
|
|
|
|
13
|
International / Portugues / Re: Automação Residencial
|
on: February 28, 2013, 06:31:23 am
|
Não é ser partidário... é a solucão óbvia para quem quer automatizar algumas coisas dentro de casa.
Na minha opinião, o motivo pelo qual os entusiastas do Arduino acham que os módulos são caros é por verem que um Arduino (clone) custa cerca de um terco dum módulo X10 e julgarem que adaptar o Arduino para a funcão do módulo X10 se faz por outro terco do preco. Se é possível, sim... mas não é testado para os níveis de qualidade dos módulos X10 e teria de ser feito em quantidades bem maiores do que alguém usaria numa casa para justificar o preco. E mesmo assim ainda teria de adaptar a instalacão da casa já que não conseguiria meter os módulos dentro de caixas de derivacão normais.
O X10 resolve isso tudo e ainda permite a ligacão com um módulo central de controlo de toda a rede. Tenho um amigo meu com uma casa automatizada com X10 que tem um computador com uma folha Excel e um software freeware a gerir a activacão dos módulos.
Eu próprio estou a pensar fazer algo semelhante (provavelmente com um Arduino) para automatizar certas tomadas da casa (a tomada com a televisão e carregadores, por exemplo) e luzes... Eventualmente aquecimento... mas ainda tenho de esperar um pouco por isso.
É isto, tambem tenho a iluminação e algumas tomadas com x10, funcionam muito bem! O maior problema é o custo dos módulos, ainda !
|
|
|
|
|
14
|
International / Portugues / Re: Automação Residencial
|
on: February 27, 2013, 06:10:12 pm
|
Procura por dispositivos X10 que usam a corrente eléctrica para ligar/desligar lâmpadas e tomadas.
Muito bem Bubulindo, mais um partidário do X10! 
|
|
|
|
|