Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.

Pesquisar na Comunidade

Mostrando resultados para as tags ''Arduino''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Categorias

  • Armazenamento
  • Áudio
  • Energia
  • Entrada
  • Feiras e Eventos
  • Gabinetes
  • Memória
  • Museu
  • Placas-mãe
  • Portáteis
  • Processadores
  • Programas
  • Rádio CdH
  • Redes
  • Refrigeração
  • Smartphones
  • Tablets
  • Vídeo
  • Outros

Categorias

  • Blog

Categorias

  • Armazenamento
  • Áudio
  • Câmeras
  • Computadores
  • Consoles
  • Eletrônicos
  • Energia
  • Entrada
  • Gabinetes
  • Impressão
  • Jogos
  • Memória
  • Placas-mãe
  • Portáteis
  • Processadores
  • Programas
  • Redes
  • Refrigeração
  • Smartphones
  • Tablets
  • Vídeo
  • Outros

Categorias

  • Livros disponíveis
  • Livros esgotados

Categorias

  • Cursos

Fóruns

  • Mensagens do Clube do Hardware
    • Regras gerais
    • Boletins do Clube do Hardware
    • Notícias da administração
  • Hardware
    • Recomendações de computadores
    • Placas de vídeo
    • Placas-mãe e chipsets
    • Processadores
    • Problemas de gargalo e desempenho
    • Memórias
    • Armazenamento
    • Refrigeração e superaquecimento
    • Fontes e energia
    • Gabinetes e casemods
    • Placas de som e áudio on-board
    • Periféricos
    • Mac
    • Overclock
    • Hardware - outros
  • Computação móvel
    • Notebooks
    • Tablets
    • Smartphones e apps
  • Redes e Internet
    • Redes e Internet
    • Hospedagem de sites e registro de domínios
  • Segurança da informação
    • Remoção de malware
    • Dúvidas sobre invasões e infecções
    • Programas de proteção
  • Programação e desenvolvimento
    • Java
    • C/C#/C++
    • Pascal/Delphi
    • .NET
    • Bancos de dados
    • Programação web
    • Programação - iniciantes
    • Programação de microcontroladores
    • Programação - outros
  • Software
    • Jogos
    • Pacotes de escritório
    • Computação distribuída (Folding@Home, Bitcoin etc.)
    • Virtualização
    • Design, animação e tratamento de imagens
    • Edição de áudio e vídeo
    • Programas
  • Sistemas Operacionais
    • Recomendação de sistemas operacionais
    • Windows
    • GNU/Linux, BSD, Unix-like e software livre
    • Mac OS
  • Eletrônicos
    • Equipamentos de som, home theaters e gravadores de mesa
    • Televisores e projetores
    • Câmeras e filmadoras
    • Players portáteis
    • Consoles (videogames)
    • GPS
    • Telefonia fixa
    • Eletrônica
    • Retrocomputação
  • Outros
    • Recomendações de serviços e lojas
    • Preços e promoções
    • Notícias
    • Bolsa de empregos, certificações e mercado de trabalho
    • "Causos"
    • Encontros de usuários
    • Feira do Rolo
  • Clube do Hardware
    • Comentários, elogios, críticas e sugestões sobre o Clube do Hardware
    • Comentários de artigos
    • Fórum para testes de funcionalidades

Categorias

  • Hardware
  • Redes
  • Eletrônica
  • Sistemas operacionais

Encontrado 26 registros

  1. Olá, bom dia. Gostaria de saber se teria como eu gravar o bootloader no ATMEGA328P direto na PCI de um projeto que estou desenvolvendo, ou seja, sem utilizar, por exemplo, o arduino uno ou duemilanove. Alguém poderia me ajudar? O projeto terá duas vertentes, sendo que uma utilizará um cristal de 16Mhz e alimentada com 5VDC, e outra utilizará o clock interno de 8Mhz do próprio ATMEGA e alimentada com 3,3VDC . Grato da atenção de todos.
  2. Opa galera! Estou participando de um projeto de um irrigador automático utilizando o arduino, só que queria que além de irrigar que fosse enviado uma notificação para o celular assim que fosse ser irrigada a planta. Vi alguns casos onde foi usado o arduino + ethernet shield, só que vai ser inteiramente programado com scratch e o arduíno não armazena o programa ao retirar o usb do computador quando se programa com scratch, então nesse caso penso que seria dispensável o uso do shield. Não consigo imaginar como fazer com que a notificação chegue no celular.
  3. 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() { } // ========================================================================================================
  4. tenho que montar um controle de temperatura para faculdade, mas comprei um lcd GDM1602B . ja coloquei mil skets, e spre a mesma coisa, acende, aparece a linha de baixo, so os quadradinhos, mas nao aparece texto, se ligar direto so fica aceso, se ligar com potenciometro de 10k, na regulagem, ele so aparece os tais quadradinhos, Ja pesquisei mil vezes na net, ja fiz de tudo que tem postado, ja inverti pinos, ja chekei toda ligaçao, ja troquei muitas vezes a sket, enfim, na net, tudo que falaram nada resolveu, fiquei sabendo por um colega que tem que aumentar o valor do potenciometro para 50 ou 100k, ja li que colocaram de 5 k e resolveu, Alguem teve o mesmo problema? e por favor nao falem sobre checar pinagem, porque ja fiz e mudei mil vezes, nao e isso.
  5. Boa tarde! estou com um problema numa programação que estou desenvolvendo com uma comunicação via serial tenho que atribuir um angulo para dois servos motores só que os servos estão de lados opostos como esta mostrando na figura os servos vão servi como ombro de um braço robótico. estou usando o arduino nano para fazer a programação mas não estou com ideia para fazer essa conversão um exemplo do que estou querendo e: inserir um angulo 30 graus na variavel e para um servo ele colocar 30 e outro converter para um angulo equivalente 150 fazendo isso os servos vão se movimentar para a mesma direção. quem poder me ajudar agradeço
  6. Bom, galera, sou muito iniciante na área de programação, pra falar a verdade sei menos do que o básico, então quero a ajuda de vocês que tem mais experiência. Estou tentando fazer uma Mini CNC via Arduino como projeto para faculdade. Estou me baseando nesse projeto: https://arduinobymyself.blogspot.com.br/2016/01/mini-cnc-arduino-plotter.html Porém, estou usando um Shield L293D, onde irei ligar os dois motores de passo (driver de DVD) e o servo motor. Para isso funcionar, preciso fazer alterações nos códigos e incluir a biblioteca AFMotor: https://github.com/adafruit/Adafruit-Motor-Shield-library Inicialmente, eu precisaria alterar a seguinte linha: Stepper myStepperX(stepsPerRevolution, 2,3,4,5); Stepper myStepperY(stepsPerRevolution, 8,9,10,11); Para: AF_Stepper myStepperX(stepsPerRevolution, 1); AF_Stepper myStepperY(stepsPerRevolution, 2); Até aí tudo legal. Ao fazer somente essas alterações obtive um erro na compilação, e descobri que estava aqui: long dx = abs(x1-x0); long dy = abs(y1-y0); int sx = x0<x1 ? StepInc : -StepInc; int sy = y0<y1 ? StepInc : -StepInc; long i; long over = 0; if (dx > dy) { for (i=0; i<dx; ++i) { myStepperX.step(sx); over+=dy; if (over>=dx) { over-=dx; myStepperY.step(sy); } delay(StepDelay); } } else { for (i=0; i<dy; ++i) { myStepperY.step(sy); over+=dx; if (over>=dy) { over-=dy; myStepperX.step(sx); } delay(StepDelay); } } A biblioteca AFMotor exige que a função step tenha 3 parâmetros para funcionar, o primeiro no caso seria a quantidade de passos, o segundo a direção (FORWARD, BACKWARD) e o terceiro o tipo de passo (SINGLE, DOUBLE, MICROSTEP, INTERLEAVE), por exemplo: motor1.step(passos, FORWARD, DOUBLE) Eu não sei bem o que eu devo fazer aí, consegui passar pela compilação adicionando apenas o tipo de passo, no caso usei o DOUBLE que usa as duas bobinas dando mais torque, mas na hora de mandar algum arquivo GCODE para ela desenhar, chega a uma certa parte (logo no começo) em que um dos motores fica funcionando infinitamente, o restante dos comandos não é executado. Tentei fazer o teste sem alterar nada (somente o pino onde o servo motor estava conectado), só pra ver se o procedimento de desenho executaria corretamente, e sim, tudo funcionou bem, o servo motor fez todas as funções, e o log mostrada que os comandos estavam sendo executados até o fim, mas os motores do eixo X e Y não funcionaram. Eu percebi também que os motores rodam apenas para um lado ao fazer as alterações, talvez seja necessário definir manualmente quando ele deve girar para trás e para frente com os parâmetros FORWARD e BACKWARD, mas eu sou inexperiente com programação e não sei como proceder. Alguma luz?
  7. Opa amigos, tudo bem ? Bom, meu nome é Lucas e sou estudante de mecatrônica, Estou fazendo um projeto com Arduíno, o problema é que sei muito pouco, o projeto é um controle térmico de um ambiente isolado, uma caixa de acrílico com paredes de isopor. Qual a ideia ? Eu já tenho pronto, funcionando bem, uma célula de Peltier, ligada em um relé que está em uma saída do arduíno, quando a temperatura passa do setpoint detectado pelo LM35, o arduíno comuta o relé e aciona o Peltier e um cooler, maravilha até aí. Agora o que eu não sei como fazer, tenho um LCD 16X2 I2C e um teclado matricial 3x4. Quero colocar na programação que vou anexar aqui o seguinte: Preciso que o LCD indique tanto a temperatura que o sensor está lendo como o Setpoint. E segundo, preciso que o valor que eu digite através do teclado mude essa variável Setpoint. Como sou novo com isso estou estudando muito, procurando muito, mas não sei como fazer isso, peço muito a ajuda de vocês pessoal!! Segue o programa // ======================================================================================================== // --- Mapeamento de Hardware --- #define peltier 13 //controle do relé de acionamento da pastilha Peltier #define temp A0 //temperatura (LM35, sensor analógico linear) // ======================================================================================================== // --- Variáveis Globais --- void temperatura(); //função para medida e cálculo de temperatura // ======================================================================================================== // --- Variáveis Globais --- float tempC; //armazena temperatura em Graus Celsius // ======================================================================================================== // --- Configurações Iniciais --- void setup() { Serial.begin(9600); //inicializa serial pinMode(peltier, OUTPUT); //saída para controle da pastilha pinMode(temp, INPUT); //entrada para sensor de temperatura digitalWrite(peltier, LOW); //desliga relé de controle da pastilha } //end setup // ======================================================================================================== // --- Configurações Iniciais --- void loop() { temperatura(); if(tempC > 30.0) digitalWrite(peltier, HIGH); else digitalWrite(peltier, LOW); delay(100); } //end loop void temperatura() { tempC = analogRead(temp); tempC = (tempC*5.0)/1024.0; tempC = tempC*100.0; Serial.print("Temperatura = "); Serial.print(tempC); Serial.println(" C"); } //end temperatura
  8. Gente, eu to com um prazo de 30 dias pra descobrir sensores que identifiquem uma letra, essa letra pode ser "S", "H", ou "U" e ficaria a uns 5-10 cm de distancia do sensor que conseguir identificar tal letra, vocês podem por favor me indicar o que usar e como programar alguns sensores pra resolver esse problema?
  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. Fala galera!! Vou deixar de forma bem esquemática a minha situação para facilitar: O que preciso?? Fiz um código no arduino para enviar dados de 2 sensores ultrasom via serial. Preciso de um código no Matlab para receber os valores dos dois sensores e plotar um ou dois (só um de preferência) gráficos com os resultados pelo tempo. O que tenho?? Como falei, já fiz o código no arduino. Também tenho um código no Matlab onde só consigo receber 1 valor, ou seja, o código é útil quando envio apenas 1 dado pelo serial (seria de 1 sensor). Detalhe: o código do Matlab também salva os dados em um arquivo .txt . Código no arduino (apenas o trecho com o envio dos dados via serial): void setup() { Serial.begin(9600); } void loop() { Serial.println(sensor1); Serial.println(sensor2); } Código no Matlab: delete(instrfindall); %limpa todos os instrumentos anterioarmente abertos na serial clear all; close all; clc; s = serial('COM5'); % atribui o objeto à porta serial set(s, 'InputBufferSize', 16); % Número de bytes no buffer de entrada set(s, 'FlowControl', 'hardware'); set(s, 'BaudRate', 9600); set(s, 'Parity', 'none'); %s.ReadAsyncMode = 'continuous'; set(s, 'DataBits', 8); % Procura por "Serial Configurada" no help set(s, 'StopBit', 1); set(s, 'Timeout', 1000); % Tempo em segundos que o matlab aguarda por novos dados. disp(get(s, 'Name')); % Mostra o nome "Serial - COM5" prop(1) = (get(s, 'BaudRate')); % Prop é apenas um vetor de strings que nesse caso tem 4 posições prop(2) = (get(s, 'DataBits')); prop(3) = (get(s, 'StopBit')); prop(4) = (get(s, 'InputBufferSize')); disp(['Port Setup Done!!', num2str(prop)]); % help num2str: converte numeros para uma string fopen(s); % Abre a porta serial. t=1; disp('Running'); while(t <= 5) % Executa 100 ciclos - se você não consegue ver o símbolo, isto é sinal de "menos de" a = fgetl(s); % fread(a, 4, 'single');% ('SIZE', 16.000, 'PRECISION','%f');%Reads the data from fprintf('%s', a); x(t) = t*0.100; % Multiplicando pela taxa de amostragem % x(t) e y(t) são para construir um y(t) = str2double(a); % a é uma string, srt2num converte uma string para um número t = t+1; a = 0; % Limpa o buffer end time = clock; adress = 'D:\Matlab\Dados_'; dia = num2str(time(3)); mes = num2str(time(2)); ano = num2str(time(1)); horas = num2str(time(4)); minutos = num2str(time(5)); nome_do_arquivo = strcat(adress,dia,'-',mes,'-', ano,'-',horas,'-',minutos,'.txt.'); id_do_arquivo = fopen(nome_do_arquivo,'wt'); % wt=write, refere-se à ação que se deseja fazer t=1; while(t <= 5) fprintf(id_do_arquivo,'\t%5.2f\t%8.2f\n',x(t),y(t)); t = t+1; end fclose(id_do_arquivo); fclose(s); plot(x,y) Agradeço muito se alguém puder ajudar!!
  11. Boa noite ! Gostaria a de saber se é possível ler um arquivo wav gravado em um sd com arduino, filtrá-lo e gravar novamente no cartão. Obrigado!
  12. eu peguei um código que trabalha com um sensor, porém quando eu copio e colo de forma a trabalhar com dois sensor, o arduino só lê o valor de um deles, alguem poderia me ajuda código: volatile int pulsos; volatile int pulsos2; #define sensordefluxo 2 #define sensordefluxo2 3 void fluxo () { pulsos++; } void fluxo2() { pulsos2++; } void setup() { pinMode(sensordefluxo, INPUT); pinMode(sensordefluxo2, INPUT); Serial.begin(9600); attachInterrupt(0, fluxo, RISING); delay(5); attachInterrupt(0, fluxo2, RISING); } void loop () { Serial.print("Pulsos: "); Serial.println(pulsos); Serial.print("pulsos2: "); Serial.println(pulsos2); delay(500); }
  13. Olá sou novo em programação de arduino e eu estava querendo testar meu modulo sensor de som arduíno ky-038, por isso fui na internet e peguei o desenho de ligação e um código pronto do mesmo desenho porém ele não esta funcionando ele nem se quer esta ligando o led do modulo de som e eu estou achando que ele está esquentando muito rápido alguém tem alguma sugestão do que pode ser? acho que não errei no esquema de ligação do modulo
  14. Fala galera do CdH. To precisando duma baita ajuda. Estou com um projeto de faculdade bem simples, que muita gente já deve ter feito na verdade, caso você seja um viciado em Arduino. Seguinte: comprei os módulos HC 05 e HC 06, módulos de conexão Bluetooth, um Master/Slave e o outro apenas Slave, respectivamente. Tenho revirado a net em busca de suporte sobre configuração AT do dispositivo; nada mais que um menu onde posso testar a comunicação, alterar nome mostrado vai BT, a senha para parear, etc. O principal comando, conhecido como "AT" apenas faz com que, através do Monitor Serial do Arduino, você possa confirmar se o módulo esta corretamente configurado e respondendo (RX e TX funcionais). O que rola é que, NÃO ACHO EM CANTO ALGUM ALGUMA SOLUÇÃO. A princípio, ao digitar o código "AT", o Monitor Serial "printa" a mensagem "OK", confirmando que esta funcionando. Já tentei utilizar resistores, pino KEY em HIGH e o caramba a 4... Push button pressionado quando ligar o VCC (que muda a frequência do LED, mas o "AT" continua sem resposta)... Nada funcionou. Quero saber se alguém já passou por essa experiência TERRÍVEL e sabe de algum modo para corrigir o problema. Em resumo, estou projetando um esquema com Arduino Uno, HC 05 (ou HC 06) e uma placa com 4 Relés, e utilizando um App de voz, acionar os relés via Bluetooth. Simplesmente isso - uma mini automação residencial. Existe "n" projetos na internet, mas nenhum até então me auxiliou. O problema é que, não consigo comunicar da maneira correta com o módulo BT. Alguma boa alma consegue me ajudar?
  15. Boa nite pessoal, estou programando um arduino junto com um teclado matricial 4x4, um display 16x2 e um modulo MFRC522 para funcionar como uma ttranca por rfid e senha. Tudo até o rfid funciona perfeitamente mas apos implementar a senha com a biblioteca keypad e Password, obtenho o erro supracitado em vários pontos do programa, se não me engano 4, e não tenho ideia de como resolver pois olhando com meus olhos iniciantes não existe erro de lógica nem de sintaxe, todos os formatos corretos. //Bibliotecas #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal_I2C.h> #include <Password.h> #include <Keypad.h> //Pinos #define LED_VERDE 53 #define LED_VERMELHO 52 #define BUZZER 50 #define SS_PIN 53 #define RST_PIN 10 void initkey() { const byte rows = 4; const byte cols = 4; char keys[rows][cols]= { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'#','0','*','D'} }; byte rowPins[rows] = {}; byte colPins[cols] = {}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); } void initpass() { Password password = Password("123456"); } String IDtag = ""; //Variável que armazenará o ID da Tag bool Permitido = false; //Variável que verifica a permissão //Vetor responsável por armazenar os ID's das Tag's cadastradas String TagsCadastradas[] = {"6516922641", "ID_2", "ID_3", "ID_4"}; MFRC522 LeitorRFID(SS_PIN, RST_PIN); // Cria uma nova instância para o leitor e passa os pinos como parâmetro LiquidCrystal_I2C lcd(0x27, 16,2); // Cria uma nova instancia para o LCD void setup() { lcd.init(); //Inicia a leitura do LCD lcd.backlight(); //Liga o LCD lcd.clear(); //Limpa o Display delay(100); //Espera 100 milisegundos Serial.begin(9600); // Inicializa a comunicação Serial SPI.begin(); // Inicializa comunicacao SPI LeitorRFID.PCD_Init(); // Inicializa o leitor RFID pinMode(LED_VERDE, OUTPUT); // Declara o pino do led verde como saída pinMode(LED_VERMELHO, OUTPUT); // Declara o pino do led vermelho como saída pinMode(BUZZER, OUTPUT); // Declara o pino do buzzer como saída } void loop() { Leitura(); //Chama a função responsável por fazer a leitura das Tag's lcd.setCursor(0,0); //Linha em que sera printado senha(); } void Leitura(){ lcd.print ("Apresente a TAG:"); //Texto do print IDtag = ""; //Inicialmente IDtag deve estar vazia. // Verifica se existe uma Tag presente if ( !LeitorRFID.PICC_IsNewCardPresent() || !LeitorRFID.PICC_ReadCardSerial() ) { delay(50); return; } // Pega o ID da Tag através da função LeitorRFID.uid e Armazena o ID na variável IDtag for (byte i = 0; i < LeitorRFID.uid.size; i++) { IDtag.concat(String(LeitorRFID.uid.uidByte[i], DEC)); } //Compara o valor do ID lido com os IDs armazenados no vetor TagsCadastradas[] for (int i = 0; i < (sizeof(TagsCadastradas)/sizeof(String)); i++) { if( IDtag.equalsIgnoreCase(TagsCadastradas[i]) ){ Permitido = true; //Variável Permitido assume valor verdadeiro caso o ID Lido esteja cadastrado } } if(Permitido == true) acessoLiberado(); //Se a variável Permitido for verdadeira será chamada a função acessoLiberado() else acessoNegado(); //Se não será chamada a função acessoNegado() delay(2000); //aguarda 2 segundos para efetuar uma nova leitura } void acessoLiberado(){ Serial.println("Tag Cadastrada: " + IDtag); //Exibe a mensagem "Tag Cadastrada" e o ID da tag não cadastrada efeitoPermitido(); //Chama a função efeitoPermitido() Permitido = false; //Seta a variável Permitido como false novamente lcd.setCursor(0,1); lcd.print ("ACESSO LIBERADO"); delay(1500); lcd.setCursor(0,1); lcd.clear(); lcd.print ("Apresente a TAG:"); } void acessoNegado(){ Serial.println("Tag NAO Cadastrada: " + IDtag); //Exibe a mensagem "Tag NAO Cadastrada" e o ID da tag cadastrada efeitoNegado(); //Chama a função efeitoNegado() lcd.setCursor(1,1); lcd.print ("ACESSO NEGADO"); delay(1500); lcd.setCursor(0,1); lcd.clear(); lcd.print ("Apresente a TAG:"); } void efeitoPermitido(){ Password reset(); int qtd_bips = 2; //definindo a quantidade de bips for(int j=0; j<qtd_bips; j++){ //Ligando o buzzer com uma frequência de 1500 hz e ligando o led verde. tone(BUZZER,1500); digitalWrite(LED_VERDE, HIGH); delay(100); //Desligando o buzzer e led verde. noTone(BUZZER); digitalWrite(LED_VERDE, LOW); delay(100); } } void efeitoNegado(){ Password reset(); int qtd_bips = 1; //definindo a quantidade de bips for(int j=0; j<qtd_bips; j++){ //Ligando o buzzer com uma frequência de 500 hz e ligando o led vermelho. tone(BUZZER,500); digitalWrite(LED_VERMELHO, HIGH); delay(500); //Desligando o buzzer e o led vermelho. noTone(BUZZER); digitalWrite(LED_VERMELHO, LOW); delay(500); } } void senha() { char chave; int cont; bool permissao; chave = Keypad.getKey(); if(chave != NO_KEY && chave == '#') { for(cont = 0; cont<6; cont++) { chave = Keypad waitForKey(); Password append(chave); } permissao = Password evaluate(); if(permissao == true) efeitoPermitido(); else efeitoNegado(); chave = 0; } } Rfid_controle_de_acesso.rar
  16. Olá, comprei um atmega328 porém o mesmo veio com bootloader do arduino. Quero remover o bootloader do arduino para utilizá-lo com bascom avr. Agradeço desde já.
  17. Boa tarde pessoal, estou com um problema para utilizar o motor de passo modelo 57HJA451-21 e o driver A4988 e o Arduino Mega. Montei o circuito do tutorial desse link http://www.arduinoecia.com.br/2015/03/controle-motor-de-passo-bipolar-driver-A4988.html Depois de passar o programa o motor gira de forma descoordenada, se movimenta só uns 30 graus no máximo, travando e voltando também de forma travada. tentei um outro tutorial e ele nem gira, fica travado na mesma posição, já tentei inverter uma bobina, achando que era uma invertida mas não funcionou. O que vocês acham que pode ser?
  18. Bom gente peço a ajuda de vocês para entender como funciona ponteiros no arduino. Vou postar um código aqui e queria que me dissessem a respeito de algumas linhas dele se o meu raciocínio está correto ou não. na parte de declaração de variáveis foi declarado um ponteiro do tipo char que aponta para o endereço no qual "123" está guardado certo? assim o ponteiro irá referenciar o endereço e não o valor "123"?. E na parte de verificação da senha, se a primeira letra digitada do teclado for igual a primeira posição do endereço que o ponteiro está referenciando pula para aproxima posição e faz a verificação novamente. Bom foi isso que eu entendi, que puder me explicar direitinho agradeço. #include <Keypad.h> #include <Servo.h> Servo servo_Motor; char* password = "123"; int position = 0; const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = { 8, 7, 6, 9 }; byte colPins[COLS] = { 5, 4, 3, 2 }; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); const int ledVermelho = 12; const int ledVerde = 13; void setup(){ pinMode(ledVermelho, OUTPUT); pinMode(ledVerde, OUTPUT); servo_Motor.attach(11); setLocked(true); } void loop(){ char key = keypad.getKey(); if (key == '*' || key == '#') { position = 0; setLocked(true); } if (key == password[position]){ position ++; } if (position == 3){ setLocked(false); } delay(100); } void setLocked(int locked){ if (locked){ digitalWrite(ledVermelho, HIGH); digitalWrite(ledVerde, LOW); servo_Motor.write(0); } else{ digitalWrite(ledVerde, HIGH); digitalWrite(ledVermelho, LOW); servo_Motor.write(82); } }
  19. olá galera. estou escrevendo um código com menu no arduino para o acionamento de 3 leds, com 3 opções de funcionamento diferentes, com 2 botões de seleção e 1 botão de confirma a opção desejada, e se pressionado de novo o botão de confirma tem que para a sequencia dos leds, porém não consigo fazer as trocas do menu, ele fica travado na primeira opção. Segue o código abaixo, se alguém puder dar uma olhada e me dar uma dica de como resolver.obrigado. const int b1 = 2; const int b2 = 3; const int b3 = 4; const int led1 = 6; const int led2 = 7; const int led3 = 8; int statusb1 = 0; int statusb2 = 0; int statusb3 = 0; int x = 0; int retencao=0; int contador = 0; void setup() { pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(b1, INPUT); pinMode(b2, INPUT); pinMode(b3, INPUT); Serial.begin(9600); Serial.println("Bem vindo ao nosso programa Menu"); Serial.println("Pressione para baixo ou para cima para escolher uma opcao"); Serial.println(" Pisca-pisca"); Serial.println("Par e impar"); Serial.println("Liga desliga"); Serial.println("Girar"); } void loop() { statusb1 = digitalRead(b1); statusb2 = digitalRead(b2); statusb3 = digitalRead(b3); if (statusb1 == HIGH) { x++; } if (statusb3 == HIGH) { x--; } if (statusb2 == HIGH) { retencao=1; } if (x == 0 && retencao==1) { Serial.println("pisca pisca"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); delay(500); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); delay(500); statusb2 = digitalRead(b2); while (statusb2 == HIGH) { statusb2 = digitalRead(b2); retencao = 0; } } if (retencao == 1 ) { // serve para todos os menus digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); retencao = 0; } if (x==1 && retencao==1 ) { Serial.println(" par e impar"); digitalWrite(led1, HIGH); digitalWrite(led3, HIGH); delay(1000); digitalWrite(led2, HIGH); delay(1000); } if(x==2&& retencao==1) { Serial.println("liga e desliga"); while(x==2 && retencao==3); digitalWrite(led1, HIGH); digitalWrite(led2,HIGH); digitalWrite(led3, HIGH); delay(500); digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW); delay(500); } if(x==3&&retencao==1){ Serial.println("giro"); while(x==3 && retencao==4); digitalWrite(led1, HIGH); delay(500); digitalWrite(led1,LOW); digitalWrite(led2,HIGH); delay(500); digitalWrite(led2,LOW); digitalWrite(led3, HIGH); delay(500); digitalWrite(led3,LOW); } if(x>3) { x=0;} if(x<0) { x=3;} }
  20. olá pessoal sou novo aqui, sou renato. Seguinte gostaria de montar uma luminária com 6 power leds de 10w 12v 900mA. ligar eles é fácil, mas gostaria de incluir um arduino para fazer o efeito amanhecer e entardecer. e também ligar uma ventoinha para ajudar a dissipar calor da placa. como saber se meu led pode aceita efeito acender lentamente, e apagar lentamente? Gostaria de ajuda. qual melhor e mais fácil caminho? alguém já fez o uso de algo assim?
  21. Arduino problema com ponte h l298n

    tenho um circuito com arduino mega que controla dois cooler, lendo um sensor de temperatura conforme aumenta a temperatura aumenta a velocidade do cooler. o sinal pwm está estável porém a cada 25 segundos mais ou menos o sinal cai e volta muito rápido, porém mesmo antes dessa queda de tensão a saida da ponte h l298n fica variando a tensão. uso alimentação 12v na ponte e gnd ligado ao gnd do arduino. a ponte h é a Shield.
  22. Então... Vi na internet um pessoal que projetou um display que mostra o uso da RAM, VRAM, temperaturas e etc usando Arduino. Queria uma base pra poder iniciar esse projeto também, pois isso seria muito útil pra mim. Nesse link tem um tutorial de como fazer, mas só mostra as temperaturas. Eu não tenho muito conhecimento de programação em C#, muito menos no Visual Studio, queria algo que mostrasse exatamente: - O uso da memória RAM e VRAM - Porcentagem de uso da CPU e da GPU - Temperatura da CPU e GPU No total dariam 6 linhas de info. É isso... Se puderem me dar uma base ia ser de grande ajuda, valeu
  23. E ai galera, to bolando as ideias pra desenvolver uma especie de sintetizador de audio que funcionaria da seguinte maneira: Vou colocar varios botões e potenciometros, ia conectar a um arduino provavelmente, mas aceito sugestões, e a intenção é gravar um som em cada botão e nos potenciometros controlar volume, equalização e alguns efeitos. Quero que o projeto tenha um sistema de Loop onde eu definiria um tempo, com os botões mesmo, e iria gravando varias batidas em cima( as batidas seriam geradas com o som dos botões). E o projeto tem que ter tambem uma saida do som p2 ou p10. Acho que ficou meio confuso, mas seria tipo um Launchpad ou MIDI, so que sem o controle de um computador. Eu queria sugestões, será que da pra fazer com arduino mesmo? como seria o processamento do som nele? Pensei em usar um modulo de SD pra armazenar as batidas, dai eu programava uma batida pra cada botão, so que não sei como faria o sistema de loop, pra deixar dois sons rodando repetidamente, um em cima do outro... Se alguem souber um jeito diferente tambem aceito sugestões, e tenho outra duvida, tem algum equipamento ja feito que realize essas funções que eu falei sem o auxilio de um pc?
  24. Arduino Placar em Arduino

    Olá, estou desenvolvendo um placar eletrônico em Arduino, a ideia nasceu em PIC, porém após analisar melhor, se tornou mais atraente no Arduino. Segue o tópico em que discuti toda parte eletrônica: Marcador de Pontos em PIC Aqui o Projeto no Fritzing: Os leds estão na seguinte sequência: ABCDEFG Só coloquei lado a lado para simular. Como podem ver os leds estão multiplexados na sequência DEZENA-UNIDADE, por faltar entradas no arduino eu utilizo um multiplexador D74HC4067. Os botões estão ligados de uma forma para utilizar apenas uma entrada analógica. Segue o projeto no Proteus: Como podem ver está um pouco diferente, o D74HC4067 no Proteus não tem as entradas SIG, VCC e GND (O arduino não tem as última duas), apresenta uma entrada X (Que eu acredito a corresponder a SIG, porém me corrijam caso eu esteja errado) Um amigo iria me ajudar com o código, porém ele está sem tempo então vou tentar desenvolver o mesmo. Como sou novato em tudo isso, estou em dúvida de como fazer, comecei a escrever porém travei. //Mutiplexador 16 canais //Pinos controladores do multiplexador int s0 = 10; int s1 = 11; int s2 = 12; int s3 = 13; //Pino SIG do multiplexador int SIG_pin = 9; void setup(){ pinMode(s0, OUTPUT); pinMode(s1, OUTPUT); pinMode(s2, OUTPUT); pinMode(s3, OUTPUT); digitalWrite(s0, LOW); digitalWrite(s1, LOW); digitalWrite(s2, LOW); digitalWrite(s3, LOW); Serial.begin(9600); } Se alguém puder me ajudar a escrever o código, já deixo meus agradecimentos. Atenciosamente, João Pedro.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×