Resultados da busca - %E3%80%90%E2%94%8B%E5%A5%BD%E8%AE%A1%E5%88%922%E2%92%8F7%E2%92%8F01705%7B%E6%89%A3%E3%80%93%E3%80%91%E5%8D%8E%E5%AE%87%E5%A8%B1%E4%B9%90%E5%A5%96%E9%87%91%E6%98%AF%E5%A4%9A%E5%B0%91
tes, produtos muito específicos que as grandes industrias não se interessam em fabricar.Produtos assim, para o mundo em geral, não dentro do universo maker, vc pode vender no ebay.com
Nunca vendi nada, mas já comprei coisas de todo mundo... Portugal, Canadá e especialmente Japão. Tem coisas mto interessantes de lá.Cada país tem seu "mercadolivre".Destaco:EUA e internacional: ebay.comChina e internacional: alibaba.comChina: www.taobao.com/ e www.jd.com <- Só por curiosidade. Japão: https://auctions.yahoo.co.jp/ <- Comprei um amplificador compacto 5.1 e cartuchos de MSX, mto bom e barato. Pra quem coleciona por ex relógios Casio antigos é o melhor lugar. Japoneses compram de anuncios de brasileiros nesse site coisas que não tem lá como Geodes (pedras), artesanato e comida... Tinha um conhecido japones que tinha bomboniere e anunciava lá, vendia caixas daquela paçoquinha "Amor" e "Dadinho", tudo a 5x o preço que se vende aqui. Eh questão de se adaptar a língua e aproveitar oportunidades. Sem conhecimento da lingua vc pode ser vitima de erros e preconceito.
Para envio o correios é bem tranquilo. Permite normalmente enviar coisas pessoa física/pessoa fisica. Só complica se vc quiser mandar como ou pra uma empresa. Para receber basta ter uma conta no paypal.com ou similar.
Mercadolivre pelo mundo:
Data
País
Site
Agosto de 1999
Argentina
www.mercadolibre.com.ar/
Outubro de 1999
Brasil
www.mercadolivre.com.br/
Novembro de 1999
México
www.mercadolibre.com.mx/
Dezembro de 1999
Uruguai
www.mercadolibre.com.uy/
Fevereiro de 2000
Colômbia
www.mercadolibre.com.co/
Março de 2000
Venezuela
www.mercadolibre.com.ve/
Março de 2000
Chile
www.mercadolibre.cl/
Dezembro de 2000
Equador
www.mercadolibre.com.ec/
Dezembro de 2004
Peru
www.mercadolibre.com.pe/
Novembro de 2006
Costa Rica
www.mercadolibre.co.cr/
Dezembro de 2006
República Dominicana
www.mercadolibre.com.do/
Dezembro de 2006
Panamá
www.mercadolibre.com.pa/
Enfim, crie o produto e ofereça. O mundo responderá se quer ele ou não. Qualquer venda vale. A moeda lá favorece mas nos dias de hj qualquer moeda já é lucro, não estamos em condições de escolher.
Fonte:https://pt.wikipedia.org/wiki/MercadoLivre…
através de um módulo SD Card em intervalos regulares de tempo, juntamente com a hora em que o dado foi aquisitado, através de um módulo RTC DS1307 que também possui um sensor que irá medir a temperatura. Além disso, nessa mesma periodicidade é printado na tela do módulo LCD duas das temperaturas. O arduíno que utilizo é o Mega 2560. Mas estou com um problema pois não estou conseguindo gravar os dados no arquivo de texto que é iniciado. Na porta serial diz que tudo foi iniciado com sucesso (SD Card, RTC, arquivo aberto com sucesso) porém quando retiro o cartão de memória do módulo, o arquivo de texto está em branco. Além disso, há 20 dias eu fiz vários testes e todos ocorreram com sucesso, ou seja, os dados estavam sendo gravados corretamente. Daí fiquei sem mexer no arduíno durante esse tempo e quando coloquei novamente para funcionar hoje os dados não estavam sendo mais gravados, sendo que o código de programação era o mesmo. Alguém já passou por algo parecido ou tem alguma sugestão para que eu resolva esse problema?
Abaixo segue o código que utilizei:#include <LiquidCrystal.h> #include <Wire.h> #include <OneWire.h> #include <DallasTemperature.h> #include "RTClib.h"
#include <SD.h>#include <SPI.h>#define Entrada A0 #define Saida A1 #define THERMISTORNOMINAL 2252 #define TEMPERATURANOMINAL 25 #define NAMOSTRAS 5 #define BCOEFFICIENT 3700 #define RESISTOR 3300 int led = 13; #define DS18B20_PIN 19
int amostrasentrada[NAMOSTRAS];int amostrassaida[NAMOSTRAS]; LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 RTC;
File myFile;
OneWire oneWire(DS18B20_PIN); DallasTemperature sensors(&oneWire);
void setup(void) {
sensors.begin();
Serial.begin(9600);
pinMode(led, OUTPUT);Serial.println("Inicializando SD card...");pinMode(53, OUTPUT);digitalWrite(53, HIGH);if (!SD.begin(53)) { Serial.println("Inicializacao do SD falhou!");digitalWrite(led, HIGH);return;}
digitalWrite(led, LOW);Serial.println("Inicializacao do SD realizada com sucesso!");
myFile = SD.open("test.txt", FILE_WRITE);
if (!myFile){Serial.println("Erro na abertura de 'test.txt'!");myFile.println("Erro na abertura de 'test.txt'!");}else {Serial.println();myFile.println();Serial.println("Abertura de 'test.txt' realizada com sucesso!");myFile.println("Abertura de 'test.txt' realizada com sucesso!");Serial.println();myFile.println();}
Wire.begin(); RTC.begin(); if (!RTC.isrunning()) { Serial.println("RTC nao esta funcionando!"); myFile.println("RTC nao esta funcionando!");RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
else { Serial.println("RTC iciciado com sucesso!"); myFile.println("RTC iniciado com sucesso!"); Serial.println();myFile.println();
}
analogReference(EXTERNAL); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print("Entrada"); lcd.setCursor(0, 1); lcd.print("Ambiente");
Serial.println("- Iniciando a gravacao do ensaio de TESTE DE RESPOSTA TERMICA -");myFile.println("- Iniciando a gravacao do ensaio de TESTE DE RESPOSTA TERMICA -");Serial.println(" Marina de Souza Ferreira");myFile.println(" Marina de Souza Ferreira");Serial.println();myFile.println();
myFile.print("Data "); Serial.print("Data "); myFile.print("Horario "); Serial.print("Horario "); myFile.print("T.Ent(C) "); Serial.print("T.Ent(C) ");myFile.print("T.S(C) "); Serial.print("T.S(C) "); myFile.println("T.Amb(C) "); Serial.println("T.Amb(C) "); myFile.close();}
void loop(void) {sensors.requestTemperatures(); DateTime now = RTC.now();
myFile = SD.open("test.txt", FILE_WRITE);
uint8_t i;
float mediaentrada, mediasaida;
for (i=0; i< NAMOSTRAS; i++)
{ amostrasentrada[i] = analogRead(Entrada); amostrassaida[i] = analogRead(Saida); delay(5000); }
mediaentrada = 0; for (i=0; i< NAMOSTRAS; i++)
{ mediaentrada += amostrasentrada[i];
} mediaentrada /= NAMOSTRAS;
mediaentrada = 1023 / mediaentrada - 1; mediaentrada = RESISTOR / mediaentrada;
float steinhartentrada, steinhartsaida; steinhartentrada = mediaentrada / THERMISTORNOMINAL; steinhartentrada = log(steinhartentrada); steinhartentrada /= BCOEFFICIENT; steinhartentrada += 1.0 / (TEMPERATURANOMINAL + 273.15);
steinhartentrada = 1.0 / steinhartentrada; steinhartentrada -= 273.15; float temp_Entrada=steinhartentrada;
mediasaida = 0; for (i=0; i< NAMOSTRAS; i++) { mediasaida += amostrassaida[i];
} mediasaida /= NAMOSTRAS; mediasaida = 1023 / mediasaida - 1; mediasaida = RESISTOR / mediasaida;
steinhartsaida = mediasaida / THERMISTORNOMINAL; steinhartsaida = log(steinhartsaida); steinhartsaida /= BCOEFFICIENT; steinhartsaida += 1.0 / (TEMPERATURANOMINAL + 273.15);
steinhartsaida = 1.0 / steinhartsaida; steinhartsaida -= 273.15;
float temp_Saida=steinhartsaida;
lcd.setCursor(10, 0); lcd.print(temp_Entrada); lcd.print("C"); lcd.setCursor(10, 1); lcd.print(sensors.getTempCByIndex(0)); lcd.print("C");
if(temp_Entrada){
myFile.println(); // Dia myFile.print(now.day(), DEC); // DiaSerial.print(now.day(), DEC); // DiamyFile.print('/');Serial.print('/');myFile.print(now.month(), DEC); // MêsSerial.print(now.month(), DEC); // MêsmyFile.print(' ');Serial.print(' ');myFile.print(now.hour(), DEC); // HorasSerial.print(now.hour(), DEC); // HorasmyFile.print(':');Serial.print(':');myFile.print(now.minute(), DEC); // MinutosSerial.print(now.minute(), DEC); // MinutosmyFile.print(':');Serial.print(':');myFile.print(now.second(), DEC); // SegundosSerial.print(now.second(), DEC); // SegundosmyFile.print(' ');Serial.print(' ');myFile.print(temp_Entrada);Serial.print(temp_Entrada);myFile.print(' ');Serial.print(' ');
}
if(temp_Saida){myFile.print(temp_Saida);Serial.print(temp_Saida);myFile.print(' ');Serial.print(' ');
}
myFile.println(sensors.getTempCByIndex(0)); Serial.println(sensors.getTempCByIndex(0));
myFile.close();
delay(4000); }
Observação: já troquei o módulo SD por outro novo e não o erro permaneceu.
Desde já muito obrigada!…
um modulo, que esta ligado ao motor.
O Primeiro código, é apenas um contador, que se der para adaptar esse, eu não precisaria mudar os outros abaixo.
Esse código abaixo, ele apresenta apenas no monitor serial, o numero de pulsos, que no meu caso, ( mas vou modificar para apenas um pulso por volta ) são 4 pulsos, se eu puder modificar esse código, para que o motor pare em 700 voltas, ele teria que parar o motor, 2800 pulsos.( sendo 4 pulsos ) é isso que eu preciso fazer, como faze-lo parar, quando o monitor serial apresentar 2800 pulsos?
CODIGO 1 - contador de pulsos
boolean anterior = 0;
boolean actual = 0;
int contador = 0;
void setup()
{
Serial.begin(9600);
pinMode(2,INPUT);
}
boolean debounce(boolean dato_anterior)
{
boolean dato_actual = digitalRead(2);
if (dato_anterior != dato_actual)
{
delay(10);
dato_actual = digitalRead(2);
}
return dato_actual;
}
void loop()
{
actual = debounce(anterior);
if ( anterior == 0 && actual == 1)
{
contador++;
delay (100);
Serial.println(contador);
}
anterior = actual;
}
Esse código abaixo, é do Rui, daqui do fórum, ele foi muito gentil e o fez para mim, mas tenho que acrescentar o relé. O motor vai diminuindo aos poucos a velocidade ate parar, mas tenho duvidas.
Onde conectar o Relé? e testei o código sem o rele, e era para o motor ir diminuindo a velocidade, mas isso não aconteceu,
CODIGO 2 - do Rui com Relé
//Programa: Sensor de velocidade Arduino LM393
//http://www.arduinoecia.com.br/2016/02/sensor-de-velocidade-lm393-arduino.html
//Autor: Arduino e Cia Modificado por Rui
#define sensor 2 //Pino ligado ao pino D0 do sensor
#define motor 6 //Pino de saída para controle do motor ( nao ligar ditero no motor, use driver)
#define rele 7 //Pino de saída para o rele
volatile byte pulsos = 0;
unsigned int pulsos_por_volta = 63; //Altere o numero abaixo de acordo com o seu disco encoder
unsigned int voltas = 12; //Numero de voltas
unsigned int Fase = 0;
//------------------------------
void contador()
{
pulsos++; //Incrementa contador
}
//------------------------------
void setup()
{
Serial.begin(9600);
pinMode(motor, OUTPUT); //Pino do motor como saida (PWM)
pinMode(rele, OUTPUT); //Pino do rele HIGH desligado LOW ligado
pinMode(sensor, INPUT); //Pino do sensor como entrada
attachInterrupt(0, contador, FALLING); //Interrupcao 0 - pino digital 2 Aciona o contador a cada pulso
}
//------------------------------
void loop()
{
Fase = (pulsos / pulsos_por_volta); //Calculo de voltas
if (Fase >= 6) //Se faltam + q 6 voltas
{
digitalWrite(rele, HIGH); //Libera o motor
analogWrite(motor, 255); //Velocidade máxima
}
if (Fase < 6 & Fase > 3) //Se faltam 6 voltas
{
digitalWrite(rele, HIGH); //Libera o motor
analogWrite(motor, 127); //Reduz Velocidade para 1/2
}
if (Fase < 3) //Se faltam 3 voltas
{
digitalWrite(rele, HIGH); //Libera o motor
analogWrite(motor, 63); //Reduz Velocidade para 1/4
}
if (F
ase = 0) //Se terminaram as voltas
{
digitalWrite(rele, LOW); //Freia o motor
}
}
E Por fim, vem o código 3, que peguei de um tutorial de uma Bobinadora, no tutorial, ele dá poucas explicações,
#include AQUI eu preciso mudar para i2c, isso eu fiz
#include Esse LCDKeypad é um modulo, e eu tenho que trocar por um LCD que ja vem com o i2c, tenho que trocar os nomes? mas esse modulo vem com botões, ai preciso implementar os botões separados, como?
#define MODE_MENU 0 - Aqui o 0 é a porta A0 ? seria um botão?
#define MODE_WIND 1 - Aqui, é mais um botão que eu teria que implementar? como localizar e ele no restante do programa.?
#define PIN_MOTOR 2 - Aqui o A2 é a porta? seria + um botão?
#define PIN_SENSOR 3 - Aqui o A3 + um botão? esse é do ENCODER
#define INTER_SENSOR 1 - E esse, é mais um encoder, pois ele colocou dois, um do lado do outro.
MAS, não adianta aquele amigo daqui, me diga, faça isso ou aquilo, eu preciso que alguem modifique o codigo e me entregue ele pronto, talvez eu saiba modificar, talvez não.
CODIGO 3 - Bobinadora
#include
#include
#define MODE_MENU 0
#define MODE_WIND 1
#define PIN_MOTOR 2
#define PIN_SENSOR 3
#define INTER_SENSOR 1
#define MAX_SPEED 255
#define MIN_SPEED 127
#define SPEED_RANGE (MAX_SPEED - MIN_SPEED)
/** should have been 8 but 3 works ?? **/
#define TICKS_PER_REV 3
LCDKeypad lcd;
int numberOfWindings = 100;
int windingsLeft = 0;
int decimal = 1;
int ticks = 0;
char speed = 125;
int mode = MODE_MENU;
/**
* react on coil revolution
*/
void pinChangeInt() {
if (mode == MODE_WIND) {
ticks++;
if (ticks == TICKS_PER_REV) {
windingsLeft--;
ticks = 0;
if (windingsLeft == 0) {
lcd.clear();
digitalWrite(PIN_MOTOR, LOW);
mode = MODE_MENU;
speed = 0;
}
}
}
}
/**
* wait until button has been pressed
* returns the button number
*/
int waitButton(){
int buttonPressed;
lcd.blink();
while(lcd.button()!=KEYPAD_NONE); // wait for button release
delay(50);
while((buttonPressed=lcd.button())==KEYPAD_NONE); // wait for button hit
delay(50);
lcd.noBlink();
while(lcd.button()!=KEYPAD_NONE); // and wait until released again
return buttonPressed;
}
/**
* make digits from decimal places
*/
void makeDigits(int number, int *m, int *c, int *x, int *i) {
int a = number;
(*m) = a / 1000;
a = a % 1000;
(*c) = a / 100;
a = a % 100;
(*x) = a / 10;
a = a % 10;
(*i) = a;
}
/**
* fazer uma série de quatro casas decimais
*/
void makeNumber(int *number, int m, int c, int x, int i) {
(*number) = 1000 * m + 100 * c + 10 * x + i;
}
/**
* increment a digit until it's zero
*/
void incDigit(int *x, int max) {
int m = *x;
m ++;
if (m > max) {
m = max;
}
(*x) = m;
}
/**
* decrement a digit until it's zero
*/
void decDigit(int *x) {
int m = *x;
m --;
if (m < 0) {
m = 0;
}
(*x) = m;
}
/**
* increment the number at position "decimals"
*/
void incWindings(int decimals) {
int m, c, x, i;
makeDigits(numberOfWindings, &m, &c, &x, &i);
switch (decimals) {
case 3:
incDigit(&m, 9);
break;
case 2:
incDigit(&c, 9);
break;
case 1:
incDigit(&x, 9);
break;
case 0:
incDigit(&i, 9);
break;
default:
break;
}
makeNumber(&numberOfWindings, m, c, x, i);
}
/**
* decrement the number at position "decimals"
*/
void decWindings(int decimals) {
int m, c, x, i;
makeDigits(numberOfWindings, &m, &c, &x, &i);
switch (decimals) {
case 3:
decDigit(&m);
break;
case 2:
decDigit(&c);
break;
case 1:
decDigit(&x);
break;
case 0:
decDigit(&i);
break;
default:
break;
}
makeNumber(&numberOfWindings, m, c, x, i);
}
/*
* setup the system
*/
void setup() {
// show splash
lcd.begin(16,2);
lcd.clear();
lcd.print("TecDroiD's");
lcd.setCursor(0,1);
lcd.print(" Coil Winder");
// setup sensor pin
pinMode(PIN_SENSOR, INPUT);
attachInterrupt(INTER_SENSOR, pinChangeInt, RISING);
// setup motor pin
pinMode(PIN_MOTOR, OUTPUT);
//analogWrite(PIN_MOTOR,0);
digitalWrite(PIN_MOTOR, LOW);
// delay splash and clear
delay(1000);
lcd.clear();
}
void show_number(int number) {
int m,c,x,i;
makeDigits(number, &m, &c, &x, &i);
lcd.print(m,DEC);
lcd.print(c,DEC);
lcd.print(x,DEC);
lcd.print(i,DEC);
}
/**
* menu para selecionar os enrolamentos da bobina
*/
void loop_menu() {
// int m,c,x,i;
int buttonPressed;
/* show text */
lcd.setCursor(0,0);
lcd.print("Windings: ");
/* show number of windings */
lcd.setCursor(0,1);
show_number(numberOfWindings);
lcd.setCursor(3-decimal,1);
lcd.cursor();
buttonPressed = waitButton();
switch(buttonPressed) {
case KEYPAD_SELECT:
windingsLeft = numberOfWindings;
mode = MODE_WIND;
lcd.clear();
break;
case KEYPAD_LEFT:
incDigit(&decimal, 3);
break;
case KEYPAD_RIGHT:
decDigit(&decimal);
break;
case KEYPAD_UP:
/* number increase */
incWindings(decimal);
break;
case KEYPAD_DOWN:
decWindings(decimal);
break;
default:
break;
}
}
/**
* wind the coil - enrolar a bobina
*/
void loop_wind() {
int buttonPressed;
/* set motor speed */
//analogWrite(PIN_MOTOR, speed);
digitalWrite(PIN_MOTOR,HIGH);
lcd.setCursor(0,0);
lcd.print("Windings: ");
lcd.print(numberOfWindings, DEC);
lcd.setCursor(0,1);
lcd.print("To Do: ");
show_number(windingsLeft);
//lcd.print(windingsLeft, DEC);
buttonPressed = lcd.button();
if (buttonPressed == KEYPAD_SELECT) {
lcd.clear();
digitalWrite(PIN_MOTOR, LOW);
mode = MODE_MENU;
}
}
/**
* Select looping mode
*/
void loop() {
switch(mode) {
case MODE_MENU:
loop_menu();
break;
case MODE_WIND:
loop_wind();
break;
default:
lcd.print("Mode ERROR!? ");
lcd.print(mode, DEC);
break;
}
}
enrolador de bobina automática - Abaixo, tem o link dos arquivos. Esse é o de cima.
por tecdroid , publicada 21 de março de 2016
http://www.thingiverse.com/thing:1431330
Muito obrigado…
_recebido_RF = 0;", e do emissor: "itoa(0, Valor_CharMsg, 10);".
No código explicitei a alteração dessa forma: "//----------------------------------- Alteração que fiz"
Segue o código onde fiz uma pequena alteração do que você fez.
//----------------------------------------------------------------------------------------------------------
//Código do Emissor:
#include <VirtualWire.h>
//Define pinos Led e Botaoconst int ledPin = 13;const int pino_botao1 = A0;const int pino_botao2 = A1;
int valor_botao1;int valor_botao2;
char Valor_CharMsg[4];
//Armazena estado led = ligar/desligarint estado1 = 0;int estado2 = 0;
void setup(){ Serial.begin(9600); pinMode(ledPin,OUTPUT); pinMode(pino_botao1,INPUT); pinMode(pino_botao2,INPUT); //Pino ligado ao pino DATA do transmissor RF vw_set_tx_pin(4); //Velocidade de comunicacao (bits por segundo) vw_setup(1200); Serial.println("Trasmissao modulo RF ‐ Acione o botao...");}
void loop(){ //Verifica o estado do push‐button valor_botao1 = digitalRead(pino_botao1); valor_botao2 = digitalRead(pino_botao2); //itoa(valor_botao,Valor_CharMsg,10); //Caso o botao seja pressionado, envia dados if (valor_botao1 == 0) { //Altera o estado do led estado1 = 8; //Converte valor para envio itoa(estado1,Valor_CharMsg,10); //Liga o led da porta 13 para indicar envio dos dados digitalWrite(13, true); //Envio dos dados vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg)); //Aguarda envio dos dados vw_wait_tx(); //Desliga o led da porta 13 ao final da transmissao digitalWrite(13, false); Serial.print("Valor enviado: "); Serial.println(Valor_CharMsg); delay(500); }
if (valor_botao2 == 0) { //Altera o estado do led estado2 = 9; //Converte valor para envio itoa(estado2,Valor_CharMsg,10); //Liga o led da porta 13 para indicar envio dos dados digitalWrite(13, true); //Envio dos dados vw_send((uint8_t *)Valor_CharMsg, strlen(Valor_CharMsg)); //Aguarda envio dos dados vw_wait_tx(); //Desliga o led da porta 13 ao final da transmissao digitalWrite(13, false); Serial.print("Valor enviado: "); Serial.println(Valor_CharMsg); delay(500); }
//------------------------------------------------ Alteração que fiz. //Converte valor da variável Valor_CharMsg para zero itoa(0, Valor_CharMsg, 10); //------------------------------------------------ Alteração que fiz.}
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
//Código Receptor:
#include <VirtualWire.h>
//------------------------------------------------------------------------int valor_recebido_RF; // original intchar recebido_RF_char[4]; char Valor_CharMsg[4];//------------------------------------------------------------------------
//------------------------------------------------------------------------int AC_LOAD = 3;// Dará o pulso no Triac pinint dimming = 0;// Dimming level (0-100) 0 = ON, 100 = OFFint brilho[3];//Recebe os valores da serialint i=0;//Quantidade de caracteres recebida pela serial//------------------------------------------------------------------------
//------------------------------------------------------------------------void setup() { Serial.begin(9600); //pinMode(ledPin, OUTPUT);
//Pino ligado ao pino DATA do receptor RF vw_set_rx_pin(7);
//Velocidade de comunicacao (bits por segundo) vw_setup(1200);
//Inicia a recepcao vw_rx_start();
Serial.println("Recepcao modulo RF - Aguardando...");
pinMode(AC_LOAD, OUTPUT);// Disparo do Triac pino 3
attachInterrupt(0, zero_crosss_int, RISING);// Interrupção detecta a passagem por 0, quando passa de nível baixo para auto}//------------------------------------------------------------------------
//------------------------------------------------------------------------// Função que detecta a passagem por 0//------------------------------------------------------------------------
//------------------------------------------------------------------------void loop(){ //------------------------------------------------------------------------------------------- uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) { int i; for (i = 0; i < buflen; i++) { //Armazena os caracteres recebidos recebido_RF_char[i] = char(buf[i]); }
recebido_RF_char[buflen] = '\0';
//Serial.println("Aguardando valor");
//Converte o valor recebido para inteiro valor_recebido_RF = atoi(recebido_RF_char);
//Serial.print("Recebido: "); //Serial.print(valor_recebido_RF); // realiza as acoes conforme desejado } //Aumenta a intensidade if(valor_recebido_RF == 8 && dimming < 100)// Compara se o botão foi pressionado e se o dimming é maior que 10 seu limite máximo { dimming += 10; //Faz a soma do power anterior com 10 (incremento de 10)
//Serial.println("Resolucao: "); //Serial.print(dimming); //Serial.println("%"); delay(200);// Aguarda um tempo até o próximo acionamento //------------------------------------------------ Alteração que fiz valor_recebido_RF =0; //------------------------------------------------ Alteração que fiz } //Serial.print("Hue"); //------------------------------------------------------------------------------------------- //Diminui a intensidade if(valor_recebido_RF == 9 && dimming > 0) { dimming -= 10; //Faz a soma do power anterior com 10 (incremento de 10)
//Serial.println("Resolucao: "); //Serial.print(dimming); //Serial.println("%"); delay(200);// Aguarda um tempo até o próximo acionamento //------------------------------------------------ Alteração que fiz valor_recebido_RF =0; //------------------------------------------------ Alteração que fiz }}
//----------------------------------------------------------------------------------------------------------------------//Controle do Dimmer Shieldvoid zero_crosss_int() { // Calculo do ângulo de disparo :: 60Hz-> 8.33ms (1/2 Cycle) // (8333us - 8.33us) / 100 = 83 (Approx), o dimming vai variar de 0 a 100
int dimtime = (83*(100-dimming)); //O powertime é o tempo que o TRIAC permanescerá desligado quando é detectado o ponto 0 da senóide //e varia de 0 a 8300 microsegundos
//Se o powertime for menor ou igual a 300 microsegundos, dar o comando de ligar a lâmpada (carga) - potência total fornecida if(dimtime <= 300) { //Liga o pulso do sinal ao TRIAC para que ele passe a conduzir, coloca o pino digital "load" em nível alto digitalWrite(AC_LOAD, HIGH); }
//Se o powertime for menor ou igual a 8000 microsegundos, dar o comando de desligar a lâmpada (carga) - potência zero fornecida else if(dimtime >= 8000) { //Desliga o pulso do sinal ao TRIAC para que ele não conduza, coloca o pino digital "load" em nível baixo digitalWrite(AC_LOAD, LOW); }
//Se o powertime estiver entre 300 microsegundos a 8000 microsegundos else if((dimtime > 300) && (dimtime < 8000)) { //Mantém o circuito desligado por powertime microssegundos (espera powertime microssegundos) delayMicroseconds(dimtime); //Envia sinal ao TRIAC para que ele passe a conduzir, coloca o pino digital "load" em nível alto digitalWrite(AC_LOAD, HIGH); //Espera 8,33 microssegundos para que o TRIAC perceba o pulso delayMicroseconds(8.33); //Desliga o pulso do TRIAC, coloca o pino digital "load" em nível baixo digitalWrite(AC_LOAD, LOW); } }
//-------------------------------------------------------------------------------------------------------------------------------------------
Atenciosamente.
André Kuhn.…
o uso do UNO, para testes não vejo problema. Porém como seu Sistema é relativamente "denso" (tem vários elementos), e provavelmente vc ainda vai "expandí-lo", eu aconselho continuar a usar o Mega, devido à Memória disponível ser bem maior, além da maior quantidade de recursos de I/O via Hardware. Se usar o UNO, a flexibilidade de alterações/melhorias que vc pode futuramente fazer, será menor.
Para verificar o funcionamento, e ver a questão da "Serial" que vc mencionou, além da Simulação que eu já tinha feito anteriormente, também montei o Sistema usando um Mega, Sensor DHT11, e Sensor DS18B20. Nesta montagem, usei um Shield para SD Card do mesmo modelo que o seu, que inclui também o RTC. As únicas coisas que não inseri foram os demais sensores, mas já avaliei e constatei que isso não muda o resultado.
Vc pode ver essa montagem na foto a seguir:
(clique na foto para "zoom")
Observe que está alimentado por Fonte externa. As ligações do Shield são as mesmas que vc fez (mas há duas curiosidades sobre isso que falo mais a frente).
Para esse teste, mudei o Intervalo de Gravação (parâmetro logo no início do código) para 1 minuto, de forma a obter mais gravações num menor tempo. Deixei gravando por pouco mais de uma hora, implicando assim em mais de 60 registros no SD Card, o que seria equivalente a mais de 1 dia de gravação caso o intervalo fosse o original (a cada meia hora).
O resultado completo da gravação está neste arquivo: "METEOR-1.TXT"
e também parcialmente mostrado na figura a seguir:
(clique na figura para "zoom")
A temperatura/humidade do ar e temperatura do solo, são as dos dois Sensores (DHT e DS18B20 respectivamente). A velocidade do vento e acumulado de chuva ficam em zero, uma vez que estes sensores não estavam conectados. Já o CO2 e humidade do solo, são valores aleatórios, uma vez que as entradas "A0" e "A1" do Mega ficaram desconectadas ("flutuantes").
Duas curiosidades sobre a montagem e teste:
1) note que o sinal "CSN" (Chip Select do SD Card, ativo em "0"), não está conectado do Shield para o "53" do Mega. Para o "CSN", usei o "10" do Shield, apenas alterando o número do pino no código, e assim dispensando fazer uma ligação via fio. Observe que isto só pode ser feito para o sinal "CSN", ou seja, não pode fazer para os demais sinais porque estes são do Hardware SPI do Mega.
2) para obter o "Alive", usei um dos dois LEDs existentes no Shield. Vc pode ver isso via fio na cor marrom clara saindo do "5" do Shield e indo para um ponto bem próximo na placa. No código este LED "Alive" além de sinalizar que o Sistema está operando, também indica o status da chave "Debug", que neste caso não estava conectada, e nesta condição o "Debug" fica habilitado (ou seja, o "Alive" pisca rápido, duas vezes por segundo).
Após o teste apenas com a Fonte externa, conectei também ao Computador via USB, com o Terminal do Arduino operando, e deixei gravando por pouco mais de uma hora também. O resultado foi o mesmo, comprovando o funcionamento.
Após confirmar o funcionamento com a montagem, acrescentei alguns "features" no código, que acredito vc irá apreciar. Irei em breve publicar esse "upgrade" aqui no LDG.
Aguardo seu contato para poder ajudar no seu problema de Hardware (embora muita gente aqui ache que minha especialidade é software, eu sou especialista em Hardware e Eletrônica, com mais de 35 anos de experiência).
Abrçs,
Elcids…
Adicionado por Elcids Chagas ao 19:30 em 3 setembro 2020
a atraves de sms.
O modulo gsm que estou utilizando e um SM5100B-D
Segue o codigo arduino que ja realizei. ALGUEM ME PODERIA AJUDAR
#include <SoftwareSerial.h>#include <LiquidCrystal.h>#include <Wire.h>#include "RTClib.h"#include <EEPROMex.h>#include <EEPROMvar.h>
//.....................Variáveis para guardar comandos emitidos pelo modulo...char listacomandos[10][55];int numerocomando = 0;boolean comandoencontrado = false;
//.....................SETUP terminado........................................boolean pronto = false;
//.....................ESTADO FINAL...........................................boolean erro = false;
//.....................Modulo gsm................SoftwareSerial cell(2,3); // - Pino 2 ARDUINO == RX Pino 3 ARDUINO == TX.//............................................................................//.....................Define o RTC_DS1307....................................RTC_DS1307 RTC;//............................................................................//...................Declaração das variáveis.................................const int maxAllowedWrites = 20;const int memBase = 120;int addressFloat;int S=0;int MIN=0;int H=0;int D=0;int Mes=0;int Uaux;int Iaux;int cont=0;byte value;const int AnalogPin = A1;float Umaxarduino = 5;float Uin = 1023;float V_sensor, I_instantaneo, A, Vrms, I_eficaz,Aparente;float Energia, Energial, Potencia, Energia_Total;float Tensao_eficaz = 230.0;int P;int k;//............................................................................
//............................................................................void setup(){ Serial.begin(9600); cell.begin(9600); Wire.begin(); RTC.begin(); Serial.print("A iniciar modulo GSM"); cell.print("AT+CFUN=1,1\r"); // 1º Faz o REBOOT do módulo colheComandos(); // 2º Colhe os comandos emitidos pelo módulo for(int i=0;i<numerocomando;i++) Serial.println(listacomandos[i]);
Serial.print("OK"); delay(1000); analisaComandos(); // 3º Analisa a informação // SMS no modo TEXTO cell.print("AT+CMGF=1\r"); // Telefone do recipiente... cell.print("AT+CMGS=\"+351936015412\"\r"); cell.print("A sua Contagem de Energia via gsm teve inicio agora.\x1A"); cell.print("AT+CMSS=1\r"); Serial.println("Mensagem Enviada"); Serial.println(); delay(1000); //.....................Lê o que esta gravado na EEPROM e ==Energia............double output=0.0;output=EEPROM.readFloat(addressFloat);Energia=output;
//............................................................................//.......................Se o RTC não funciona da erro/atualiza a data e hora. if (! RTC.isrunning()) { Serial.println("RTC deixou de FUNCIONAR!"); // Actualiza a data e hora pelo tempo que foi compilado.............................. RTC.adjust(DateTime(__DATE__, __TIME__)); }//............................................................................}//----------------------------------------------------------------------------// Função: analisaComandos()// Descodifica o eco enviado pelo módulo//----------------------------------------------------------------------------void analisaComandos(){ if(strcmp(listacomandos[0],"+SIND: 0")==0){ Serial.print("Erro no SIM "); for(;;); } else if (strcmp(listacomandos[0],"+SIND: 1")==0){ Serial.print(" Cartao SIM... OK "); } else { Serial.print(" Erro no Modulo "); for(;;); } delay(1000); if (strcmp(listacomandos[numerocomando-1],"+SIND: 4")==0){ Serial.print("- Inicializado - "); } else { Serial.print(" Erro: Reinicie "); for(;;); } delay(1000);}//----------------------------------------------------------------------------// Função: colheComandos()// Guarda em listacomandos[] o conjunto de ecos emitidos pelo modulo//----------------------------------------------------------------------------void colheComandos(){ static unsigned long watchdog = 0; static unsigned long tempoinicial = millis(); while(watchdog < 30000){ // Previne que o sistema fique em ciclo infinito leComando(); watchdog = millis() - tempoinicial; }}
//----------------------------------------------------------------------------//Função: leComando()// Implementa máquina de estados para detectar comando enviado pelo GSM//----------------------------------------------------------------------------void leComando(){ static int i = 0; static byte estado = 0; static char letra; if (cell.available() > 0){ char letra = cell.read();//****************************************************************************// MÁQUINA DE ESTADOS//**************************************************************************** if(estado == 0 && letra == 13) estado = 1; // Aguarda pelo linefeed else if (estado == 1 && letra == 10) estado = 2; // Detecta inicio do comando else if (estado == 2 && letra > 31) estado = 3; // Lê novo comando else if (estado == 3 && letra == 13) estado = 4; // Detecta fim do comando else if (estado == 4 && letra == 10) estado = 0; // Aguarda novo comando//****************************************************************************// LÊ COMANDO//**************************************************************************** if (estado == 3){ comandoencontrado = false; listacomandos[numerocomando][i] = letra; listacomandos[numerocomando][i+1] = '\0'; i++; } else if (estado == 4){ Serial.print("*"); // Apresenta um "progress bar" comandoencontrado = true; numerocomando++; i=0; } }}//----------------------------------------------------------------------------// Fim: leComando()//---------------------------------------------------------------------------- void loop() { if(cell.available() > 0) { Serial.print((char)cell.read()); } if(Serial.available() > 0) { cell.print((char)Serial.read()); }//----------------------------------------------------------------------------// Relógio//----------------------------------------------------------------------------
DateTime now = RTC.now(); Serial.print("Data:"); Serial.print(now.year(),DEC); Serial.print('/'); Serial.print(now.month(),DEC); Serial.print('/'); Serial.print(now.day(),DEC); Serial.print(' '); Serial.print("Hora:"); Serial.print(now.hour(),DEC); Serial.print(':'); Serial.print(now.minute(),DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); delay(3000);//----------------------------------------------------------------------------// Fim de relógio e mostra serial//----------------------------------------------------------------------------
delay(20); leitura(); // Função contabiliza a energia//----------------------------------------------------------------------------// Grava e envia sms//----------------------------------------------------------------------------//.....................Declaração de variáveis para comparação................ S = now.second(), DEC; MIN = now.minute(), DEC; H = now.hour(), DEC; D = now.day(), DEC; Mes = now.month(), DEC;//............................................................................//..................... Gravar na EEPROM ..................................... if(MIN==30 && S==10 ) { if(H==9 || H==13 || H==16 || H==22) { double input =Energia_Total; EEPROM.writeFloat(addressFloat,input); } }//............................................................................//.....................Enviar sms com a contagem.............................. //if(D==1 && H==10 && MIN==28 && S==0) //{
{ // SMS no modo TEXTO cell.print("AT+CMGF=1\r"); // Telemovel receptor... cell.print("AT+CMGS=\"+351936015412\"\r"); cell.print(" A sua Contagem de Energia e a seguinte:\x1A"); seria aqui que teria que inserir o valor da energia total para receber no celular. cell.print("AT+CMSS=1\r"); delay (1000); } //}//............................................................................//----------------------------------------------------------------------------// Fim de Grava e envia sms//----------------------------------------------------------------------------}//----------------------------------------------------------------------------// Função:leitura()// contabilização da energia elétrica e mostra o resultado na serial//---------------------------------------------------------------------------- void leitura(){ A=0; P=0; Iaux=0; for (k=0;k<1000;k++) // definição para o numero de amostras { V_sensor = analogRead(AnalogPin); // leitura da tensao do sensor de corrente I_instantaneo =(V_sensor*Umaxarduino/Uin)-2.5;// conversao dos valores da porta analogica para volts, ajuste da tensao continua para 0 A+=pow(I_instantaneo,2); // soma de todas as amostras. Iaux=Iaux+I_instantaneo; Uaux=230; delay(1); } Vrms=sqrt(A/1000); // calculo valor medio quadratico I_eficaz=Vrms/0.066; // sensibilidade do sensor Aparente=Vrms*I_eficaz;// calculo potencia aparente P=(Uaux*Iaux)/1000;// calculo potencia ativa //Potencia= I_eficaz*Tensao_eficaz;// calculo da potencia em Watt Potencia=1000; Energial+= (Potencia/3600)/1000; // calculo e contabilização da energia em KWh Energia_Total= Energia + Energial; }
…
Adicionado por Fabio queijo ao 10:58 em 4 julho 2015