Ir ao conteúdo
  • Cadastre-se

solanocaiano

Membro Pleno
  • Posts

    28
  • Cadastrado em

  • Última visita

Reputação

1
  1. Olá a todos do clube, quero iniciar um servidor de Tibia 8.6 e já tenho o jogo e site funcionando. Porém existe um detalhe que me impede, que são as portas bloqueadas no modem da claro. Eu desativei o firewall, adicionei as portas como regras de permissões no mesmo. Abri as portas no modem pelo acesso que eu tenho Porém quando eu realizo o teste de portas está como fechada. Eu liguei na claro e me falaram que o melhor procedimento era para eles desabilitarem o ipv 4 e para eu contratar um técnico para abrir as portas. Pedi para desabilitarem o ipv 4 E estou procurando ajuda para desbloquear sem precisar chama-lo As portas são 7171, 7172, 80, 8080 e 8090 MODELO HG825W5-6T-V2
  2. Amigo, já consegui solucionar o problema.. Muito obrigado pelas dicas, foi de grande ajuda! Grande abraço
  3. Eu não entendi muito bem amigo, você consegue me explicar melhor como funcionariam essas conexões?
  4. @aphawk Entendido, muito obrigado.. Sobre R1 e C1, realmente eu estou tendo bastante problemas com o ruído, era para funcionar nessa configuração sem o amplificador, porém apenas amplificando o sinal que estamos conseguindo enxergar os pulsos. Como demonstrado pela imagem, podemos variar os valores de C1 e R1. Nessa configuração, qual os melhores valores destes componentes para melhorar o filtro de ruído? Atualmente estou utilizando R1 - 100k, C1 - 220nF e R2 - 1k.. Atenciosamente
  5. Olá a todos, desde já muito obrigado! Estou fazendo um mestrado e preciso entender um circuito simples, eu já entendo ele um pouco mas tenho que ser bem preciso enquanto à isso. Alguém sabe me explicar exatamente a função de cada componente? Esse circuito é para uma SIPM - fotomultiplicadora de silício (representada por um diodo), que tem a função de captar sinais luminosos e converter em sina elétrico. O output é para osciloscópio!
  6. Ele está funcionando normal agora galera, ta mais ajeitado também
  7. Ah vou largar mão desse processo de choca, tenho nem ideia de como vou fazer isso e vai me dar mt trabalho... Vou deixar só os displays mesmo e talvez fazer uns modos de temperatura a partir de buttons, por exemplo.. Modo 1 set point com 37.5, modo 2 com set point para do dia 15-17 e modo 3 para temperatua pro final da eclosão.. Um problema que eu to tendo, é que com o arduino conectado ao computador via USB, quando eu carrego o código ele funciona normalmente.. Pelo ambiente de visualização o processing ele funciona normalmente quando eu inicio por ele. Porém já com o código já carregado no arduino, quando eu conecto e desconecto o cabo usb a programação não funciona corretamente, nem o PID acontece nem o Display liga! Alguem sabe porque isso pode ta acontecendo?
  8. Olá amigos, estou desenvolvendo uma chocadeira com PID via DIMMER PWM.. Eu estou conseguindo bons resultados. Mas meu nível de programação não permite eu desenvolver apenas uma parte do MENU.. Que seria criar um processo de choca, com o RTC contar os dias a partir do momento que a pessoa inicia o processo.. Um jeito de cancelar o processo atual para iniciar um novo! Eu fiz um menu com 4 buttons, um UP e DOWN responsável por navegar pelos menus, e dois que estão sem uso ainda, para o processo de choca. Menus: Mostrar data e hora (RTC), Temperatura (ds18b20), Umidade (DHT11) e "processo de choca" (não está pronto ainda), estão funcionando normalmente junto ao PID. Porque depois do décimo quinto dia de incubação, o ovo começa a produzir seu próprio calor, e eu gostaria de ir diminuindo o SET point de temperatura gradualmente ao longo de cada dia depois desse período. Ou seja, tem que ter uma lógica com os dias! // --- Bibliotecas Auxiliares --- #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Time.h> #include <DS3232RTC.h> #include <DHT.h> // --- Definições e Objetos --- #define butUp 12 //Botão para selecionar tela acima no digital 12 #define butDown 11 //Botão para selecionar tela abaixo no digital 11 #define butP 10 //Botão de ajuste mais no digital 10 #define butM 9 //Botão de ajuste menos no digital 9 #define DHTPIN A1 // pino que estamos conectado #define DHTTYPE DHT11 // DHT 11 #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); //objeto para o OLED #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); // ======================================================================================================== DHT dht(DHTPIN, DHTTYPE); // --- Protótipo das Funções Auxiliares --- void changeMenu(); //Função para modificar o menu atual void dispMenu(); //Função para mostrar o menu atual void data_hora(); //Função do menu1, data e hora void temperatura(); //Função do menu2, temperatura void lights(); //Função do menu3, acionamento de lampadas void menu4(); //Função do menu4 // --- Variáveis Globais --- int temp; float hum; char menu = 0x01; //Variável para selecionar o menu char set1 = 0x00, set2 = 0x00; //Controle das lâmpadas boolean t_butUp, t_butDown, t_butP, t_butM; //Flags para armazenar o estado dos botões // ======================================================================================================== void setup () // --- Função setup --- { Serial.begin(9600); //serial em 9600 baud rate setSyncProvider(RTC.get); // the function to get the time from the RTC for(char i=9; i<13; i++) pinMode(i, INPUT_PULLUP); //Entrada para os botões (digitais 9 a 12) com pull-ups internos t_butUp = 0x00; //limpa flag do botão Up t_butDown = 0x00; //limpa flag do botão Down t_butP = 0x00; //limpa flag do botão P t_butM = 0x00; //limpa flag do botão M display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Inicializa OLED com endereço I2C 0x3C (para 128x64) display.clearDisplay(); display.display(); } // ======================================================================================================== // --- Função Loop --- void loop () { temp = sensors.getTempCByIndex(0); hum = dht.readHumidity(); sensors.requestTemperatures(); changeMenu(); dispMenu(); } // ======================================================================================================== // --- Desenvolvimento das Funções --- void changeMenu() //Modifica o menu atual { if(!digitalRead(butUp)) t_butUp = 0x01; //Botão Up pressionado? Seta flag if(!digitalRead(butDown)) t_butDown = 0x01; //Botão Down pressionado? Seta flag if(digitalRead(butUp) && t_butUp) //Botão Up solto e flag setada? { //Sim... t_butUp = 0x00; //Limpa flag display.clearDisplay(); //limpa o display OLED //Limpa display menu++; //Incrementa menu if(menu > 0x04) menu = 0x01; //Se menu maior que 4, volta a ser 1 } //end butUp if(digitalRead(butDown) && t_butDown) //Botão Down solto e flag setada? { //Sim... t_butDown = 0x00; //Limpa flag display.clearDisplay(); //limpa o display OLED //Limpa display menu--; //Decrementa menu if(menu < 0x01) menu = 0x04; //Se menu menor que 1, volta a ser 4 } //end butDown } //end changeMenu void dispMenu() //Mostra o menu atual { switch(menu) //Controle da variável menu { case 0x01: //Caso 1 disp_data(); //Chama a função de relógio break; //break case 0x02: //Caso 2 disp_temp(); //Chama a função do termômetro break; //break case 0x03: //Caso 3 disp_umid(); ; //Chama função para acionamento de lâmpadas break; //break case 0x04: //Caso 4 choca(); //Chama função para o menu4 break; //break } //end switch menu } //end dispMenu void disp_temp() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Temp."); display.setTextSize(2); display.setCursor(3, 12); display.setTextColor(WHITE); display.print(temp); display.print(" C"); display.display(); display.clearDisplay(); } //end disp_temp void disp_umid() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(40, 0); display.print("Umid."); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(40, 12); display.print(hum); display.print(" %"); display.display(); display.clearDisplay(); } void disp_data() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Hora"); display.setTextSize(1.75); display.setTextColor(WHITE); display.setCursor(3, 15); display.print(hour()); display.print(":"); display.print(minute()); display.print(":"); display.print(second()); display.setTextSize(1.5); display.setTextColor(WHITE); display.setCursor(65, 0); display.print("Data"); display.setTextSize(1.75); display.setTextColor(WHITE); display.setCursor(65, 15); display.print(day()); display.print("-"); display.print(month()); display.print("-"); display.print(year()); display.display(); display.clearDisplay(); } void choca() { } // ========================================================================================================
  9. Olá amigos, estou desenvolvendo uma chocadeira de TCC e preciso de um MENU legal pra ela, sou fraco de programação mas ja fiz algo.. Tem um código PID que vou implementar o menu depois, então provavelmente eu vou ter que mexer com os Delays.. Porque da forma que tá ele não vai funcionar com o PID, fiz um post anteriormente falando sobre isso, mas de toda forma o que eu preciso é: Um iniciador de processo de incubação via buttons.. Pois pretendo diminuir o set point gradativamente depois do decimo quinto dia o valor de temperatura, pois depois, o embrião ja produz seu próprio calor. Eu ja tenho um mostrador da umidade, temperatura e data e hora! Utilizando display OLED I2C, ds18b20 para temperatura e htud21 para umidade // --- Bibliotecas Auxiliares --- #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Time.h> #include <DS3232RTC.h> #include "cactus_io_HTU21D.h" // --- Definições e Objetos --- #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); //objeto para o OLED #define ONE_WIRE_BUS 2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); HTU21D htu; //objeto para o htu21d // ======================================================================================================== // --- Variáveis Globais --- int temp; int hum; // ======================================================================================================== // --- Função setup --- void setup () { Serial.begin(9600); //serial em 9600 baud rate setSyncProvider(RTC.get); // the function to get the time from the RTC display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Inicializa OLED com endereço I2C 0x3C (para 128x64) display.clearDisplay(); display.display(); } // ======================================================================================================== // --- Função Loop --- void loop () { temp = sensors.getTempCByIndex(0); hum = htu.getHumidity(); sensors.requestTemperatures(); htu.readSensor(); disp_temp(); delay (4000); display.clearDisplay(); //limpa o display OLED disp_umid(); delay (4000); display.clearDisplay(); //limpa o display OLED disp_data(); delay (4000); display.clearDisplay(); //limpa o display OLED } // ======================================================================================================== // --- Desenvolvimento das Funções --- void disp_temp() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Temp."); display.setTextSize(2); display.setCursor(3, 12); display.setTextColor(WHITE); display.print(temp); display.print(" C"); display.display(); delay (2000); } //end disp_temp void disp_umid() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(40, 0); display.print("Umid."); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(40, 12); display.print(hum); display.print(" %"); display.display(); } void disp_data() { display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0, 0); display.print("Hora"); display.setTextSize(1.75); display.setTextColor(WHITE); display.setCursor(3, 15); display.print(hour()); display.print(":"); display.print(minute()); display.print(":"); display.print(second()); display.setTextSize(1.5); display.setTextColor(WHITE); display.setCursor(70, 0); display.print("Data"); display.setTextSize(1.75); display.setTextColor(WHITE); display.setCursor(70, 15); display.print(day()); display.print("-"); display.print(month()); display.print("-"); display.print(year()); display.display(); } // ======================================================================================================== adicionado 3 minutos depois #include <PID_v1.h> #include <OneWire.h> #include <DallasTemperature.h> // Temp. sensor on PIN 2 on the Arduino #define ONE_WIRE_BUS 2 //Define Variables we'll be connecting to double Setpoint, Input, Output; int inputPin=0, outputPin=3; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); //Specify the links and initial tuning parameters PID myPID(&Input, &Output, &Setpoint,2,5,0, DIRECT); unsigned long serialTime; //this will help us know when to talk with processing void setup() { //initialize the serial link with processing Serial.begin(9600); //initialize the variables we're linked to // Input = analogRead(inputPin); Setpoint = 144; //turn the PID on myPID.SetMode(AUTOMATIC); } void loop() { //pid-related code sensors.requestTemperatures(); float ftemp= sensors.getTempCByIndex(0); Input = (double)ftemp; delay (500); myPID.Compute(); analogWrite(outputPin,Output); //send-receive with processing if it's time if(millis()>serialTime) { SerialReceive(); SerialSend(); serialTime+=500; } } /******************************************** * Serial Communication functions / helpers ********************************************/ union { // This Data structure lets byte asBytes[24]; // us take the byte array float asFloat[6]; // sent from processing and } // easily convert it to a foo; // float array // getting float values from processing into the arduino // was no small task. the way this program does it is // as follows: // * a float takes up 4 bytes. in processing, convert // the array of floats we want to send, into an array // of bytes. // * send the bytes to the arduino // * use a data structure known as a union to convert // the array of bytes back into an array of floats // the bytes coming from the arduino follow the following // format: // 0: 0=Manual, 1=Auto, else = ? error ? // 1: 0=Direct, 1=Reverse, else = ? error ? // 2-5: float setpoint // 6-9: float input // 10-13: float output // 14-17: float P_Param // 18-21: float I_Param // 22-245: float D_Param void SerialReceive() { // read the bytes sent from Processing int index=0; byte Auto_Man = -1; byte Direct_Reverse = -1; while(Serial.available()&&index<26) { if(index==0) Auto_Man = Serial.read(); else if(index==1) Direct_Reverse = Serial.read(); else foo.asBytes[index-2] = Serial.read(); index++; } // if the information we got was in the correct format, // read it into the system if(index==26 && (Auto_Man==0 || Auto_Man==1)&& (Direct_Reverse==0 || Direct_Reverse==1)) { Setpoint=double(foo.asFloat[0]); //Input=double(foo.asFloat[1]); // * the user has the ability to send the // value of "Input" in most cases (as // in this one) this is not needed. if(Auto_Man==0) // * only change the output if we are in { // manual mode. otherwise we'll get an Output=double(foo.asFloat[2]); // output blip, then the controller will } // overwrite. double p, i, d; // * read in and set the controller tunings p = double(foo.asFloat[3]); // i = double(foo.asFloat[4]); // d = double(foo.asFloat[5]); // myPID.SetTunings(p, i, d); // if(Auto_Man==0) myPID.SetMode(MANUAL);// * set the controller mode else myPID.SetMode(AUTOMATIC); // if(Direct_Reverse==0) myPID.SetControllerDirection(DIRECT);// * set the controller Direction else myPID.SetControllerDirection(REVERSE); // } Serial.flush(); // * clear any random data from the serial buffer } // unlike our tiny microprocessor, the processing ap // has no problem converting strings into floats, so // we can just send strings. much easier than getting // floats from processing to here no? void SerialSend() { Serial.print("PID "); Serial.print(Setpoint); Serial.print(" "); Serial.print(Input); Serial.print(" "); Serial.print(Output); Serial.print(" "); Serial.print(myPID.GetKp()); Serial.print(" "); Serial.print(myPID.GetKi()); Serial.print(" "); Serial.print(myPID.GetKd()); Serial.print(" "); if(myPID.GetMode()==AUTOMATIC) Serial.print("Automatic"); else Serial.print("Manual"); Serial.print(" "); if(myPID.GetDirection()==DIRECT) Serial.println("Direct"); else Serial.println("Reverse"); } Esse é o código do PID que eu fiz para o d218b20.. Obtive boas respostas, mas preciso implementar o MENU LCD nele, com sistema de rolamento de ovo feito por relé ponte H e motor de microondas, sistema de umidificação feito por cooler 12v em relé e sistema de exaustão..
  10. Entendi, obrigado pessoal. Tem coisas que eu tenho que terminar no meu MENU antes de tentar adapta-lo ao PID. Quando eu melhorara ele eu já posto aqui pra vocês derem uma olhada no código do menu e no PID para juntarmos os 2.
  11. Boa noite! Estou desenvolvendo uma chocadeira controlada por PID, ela funciona da seguinte maneira: Desenvolvi um Dimmer PWM que controla a luminosidade da lâmpada incandescente, implementei em um código que utilizava entrada analógia (tipo lm35) porém não consegui boas respostas com esse sensor, modifiquei para digital e implementei o DS18b20 na programação, tive ótimasrespostas. Problemas: Rodar o menu e o controle PID em um microcontrolador. Eu estou rodando separado, em dois arduinos, um para controle e o outro para menu. Eu tentei implementar em um arduino só e não tive boas respostas por causa dos Delays do menu. Tem como o arduino rodar as duas funções juntas? Controle e o menu? Ou devemos adapta-la para ajustar os Delays? Lembrando que as funções do menu são: Mostrar temperatura, mostrar umidade, controlar relay de motor para rolagem dos ovos, controlar relay de coolers para exaustão e manter a umidade com um umidificador caseiro, iniciar processo de incubação, contando os dias.. Após 18 dias devo mudar o set point pra diminuir a temperatura, já que depois desse tempo o ovo consegue produzir seu próprio calor.. O que eu tenho feito do menu é o RTC mostrando data e hora, mostra temperatura e umidade.. Mas preciso implementar essas outras funções ao mesmo.
  12. Gente vou desistir do LM35 e vou partir pro DS18b20 Com ele eu acho que consigo as medidas.. Eu tentei fazer o que o amigo test man falou e não deu certo. double Temperatura; (tentei com double, tentei com int, float) void loop() { Temperatura = (5.0 * analogRead(tempPin) * 100.0) / 1024; Input = Temperatura; myPID.Compute(); analogWrite(outputPin,Output); if(millis()>serialTime) { SerialReceive(); SerialSend(); serialTime+=500; } }
  13. Então amigo, boa ideia em.. É exatamente o que eu vou fazer! Eu comecei assim, LDR e LED.. Depois parti pro dimmer, quebrei a cabeça com dimmer feito com disparador triac e moc4021, foi um fracasso no PID também porque ele controlava o tempo de disparo e não era PWM. Achei outro dimmer, um PWM deu muito certo. Dai do LDR foi pro LM35 e to me ferrando. Achei que era só implementar o LM35 q era analógico e GGWP.. Mas ta ai uma boa ideia para tentar solucionar o problema =>1° passo: Apenas ler o LM35; 2° passo: Converter a leitura para temperatura; 3° passo: Fazer o PWM controlar o brilho do LED; 4° passo: Controlar o aquecimento do resistor com o PWM (esses passos ja estão executados e funcionando perfeito).
  14. Amigo, na verdade sou eu o culpado. Eu não consegui orientador pro meu projeto, consegui de ultima hora e um orientador que ja estava com muito trabalho.. Então não culpo ele, apesar de ele poder se preocupar um pouco mais só. Porém não é esse meu problema, é de obter sinais de temperatura pro PID. Eu consegui outro lm35 para teste e deu a mesma *****. Para testes eu acrescentei um delay de 50ms no loop. Olha o que o sinal virou!

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...