Perguntas de iniciante

Alguém poderia me ajudar?
Estou fazendo um projeto de reaproveitamento da água da máquina de lavar, porém esta máquina esta sendo simulada com um motor de uma máquina antiga.O motor no começo dos testes funcionou normal, porém agora não quis mais funcionar, e a bomba de água funciona, porém não esta puxando a água. Vou mandar o código, se alguém puder me ajuda. Muito obrigado.
const int SNA = 7; // SENSOR DE NIVEL ALTO
const int SNB = 6; // SENSOR DE NIVEL BAIXO
const int releBomba = 2; // RELE QUE LIGA A BOMBA
int estadoSNA = 0; //VARIÁVEL QUE ARMAZENA O VALOR LIDO NA PORTA DIGITAL ( 0 = desligado 1 = ligado)
int estadoSNB = 0; //VARIÁVEL QUE ARMAZENA O VALOR LIDO NA PORTA DIGITAL
int estadoRele = 0; //VARIÁVEL QUE ARMAZENA O VALOR LIDO NA PORTA DIGITAL
// OBS: ( 0 = desligado 1 = ligado) Sensor Alto = 0 e baixo = 1;
void setup()
{
pinMode(SNA, INPUT); //DEFINE A PORTA COMO ENTRADA
pinMode(SNB, INPUT); //DEFINE A PORTA COMO ENTRADA
pinMode(releBomba, OUTPUT); //DEFINE A PORTA COMO SAÍDA
}
void loop(){
estadoSNA = digitalRead(SNA); // LÊ O VALOR NA PORTA DIGITAL
estadoSNB = digitalRead(SNB);
if((estadoSNA == 1) && (estadoSNB == 1) && (estadoRele == 0)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, LOW); // liga a bomba (está invertido o estado)
estadoRele = 1; // relé ligado
}
if ((estadoSNA == 1) && (estadoSNB == 0) && (estadoRele == 1)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, LOW); // liga a bomba (está invertido o estado)
estadoRele = 1; // relé ligado

}
if((estadoSNA == 0) && (estadoSNB == 0) && (estadoRele == 1)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, HIGH); // desliga a bomba (está invertido o estado)
estadoRele = 0; // relé desligado
}
if((estadoSNA == 1) && (estadoSNB == 0) && (estadoRele == 0)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, HIGH); // desliga a bomba (está invertido o estado)
estadoRele = 0; // relé desligado
}
if((estadoSNA == 0) && (estadoSNB == 1) && (estadoRele == 0 || estadoRele == 1)){ //SE O VALOR LIDO FOR IGUAL A 0, FAZ
digitalWrite(releBomba, HIGH); // desliga a bomba (está invertido o estado)
estadoRele = 0; // relé desligado
}
}

Caro amigo, você diz que a bomba liga mas não puxa a água, isso pode ser problema na bomba.
Outra coisa, você já fez o teste em uma protoboard? um teste das condições de acionamento? verificar se o programa está agindo conforme o esperado?
Depois posta a resposta aqui!

POR FAVOR UM HELP......

Sou iniciante e estou tentando controlar 300 leds RGB WS2812B em uma das saídas digitais do arduino nano, até 120 leds vai bem depois não controla mais , será que está faltando corrente na saída digital, estou usando uma fonte externa de 5 Volts 60 Amperes para ligar os leds, teoricamente a saída do arduino é só um sinal de comando.

Abraço Galera......

Será que o protocolo que estás a usar não consegue controlar mais de 120 LED's devido às temporizações?

como fazer para uma porta do arduino responder sempre que uma determinada porta estiver alta?

Hi, I am a beginner in the arduino area, I wanted a help in my code and do an aquarium monitoring, I want to put 7 temperature sensors, 7 relays, separately, 5 ph, 5 water sensor, 5 oxygen sensor . the relays and to activate when the temperature drops, low by 28 degrees, and I want to put an LCD (16.2), to monitor the temperature, ph, water oxygen, and also either via bluetooth to see the dandos and can shoot the bombs manually by a cell phone, I started to do some things, but with difficulty in this project, I thank you already any possible help......... :frowning:

#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 6 on the Arduino
#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 9

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device addresses
DeviceAddress insideThermometer; //outsideThermometer;

int relay =7;

void setup(void)

{
pinMode(relay,OUTPUT);

lcd.begin(16, 2);

// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");

// Start up the library
sensors.begin();

// locate devices on the bus
Serial.print("Locating devices...");
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");

// report parasite power requirements
Serial.print("Parasite power is: ");
if (sensors.isParasitePowerMode()) Serial.println("ON");
else Serial.println("OFF");

// assign address manually. the addresses below will beed to be changed
// to valid device addresses on your bus. device address can be retrieved
// by using either oneWire.search(deviceAddress) or individually via
// sensors.getAddress(deviceAddress, index)
//insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 };
//outsideThermometer = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 };

// search for devices on the bus and assign based on an index. ideally,
// you would do this to initially discover addresses on the bus and then
// use those addresses and manually assign them (see above) once you know
// the devices on your bus (and assuming they don't change).
//
// method 1: by index
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
//if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");

// method 2: search()
// search() looks for the next device. Returns 1 if a new address has been
// returned. A zero might mean that the bus is shorted, there are no devices,
// or you have already retrieved all of them. It might be a good idea to
// check the CRC to make sure you didn't get garbage. The order is
// deterministic. You will always get the same devices in the same order
//
// Must be called before search()
//oneWire.reset_search();
// assigns the first address found to insideThermometer
//if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer");
// assigns the seconds address found to outsideThermometer
//if (!oneWire.search(outsideThermometer)) Serial.println("Unable to find address for outsideThermometer");

// show the addresses we found on the bus
Serial.print("Device 0 Address: ");
printAddress(insideThermometer);
Serial.println();

// Serial.print("Device 1 Address: ");
// printAddress(outsideThermometer);
// Serial.println();

// set the resolution to 9 bit
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
// sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);

Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();

// Serial.print("Device 1 Resolution: ");
// Serial.print(sensors.getResolution(outsideThermometer), DEC);
// Serial.println();

// set up the LCD's number of columns and rows:

}

// function to print a device address
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 7; i++)
{
// zero pad the address if necessary
if (deviceAddress < 16) Serial.print("0");
_ Serial.print(deviceAddress*, HEX);_
_
}_
_
}_
_
// function to print the temperature for a device*_
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Temp C: ");
Serial.print(tempC);

Serial.print(" Temp F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
delay(2000);

}
// function to print a device's resolution
void printResolution(DeviceAddress deviceAddress)
{
Serial.print("Resolution: ");
Serial.print(sensors.getResolution(deviceAddress));
*Serial.println(); *
}
// main function to print information about a device
void printData(DeviceAddress deviceAddress)
{
Serial.print("Device Address: ");
printAddress(deviceAddress);
Serial.print(" ");
printTemperature(deviceAddress);
Serial.println();
}
void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
//Serial.print("Requesting temperatures...");
sensors.requestTemperatures();
//Serial.println("DONE");
// print the device information
//printData(insideThermometer);
//printData(outsideThermometer);

* Serial.println(sensors.getTempC(insideThermometer));*
//Serial.println(sensors.getTempC(outsideThermometer));
Serial.println(" ");

lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 2);
lcd.print("celsius: ");
lcd.print(sensors.getTempC(insideThermometer));
lcd.print(" C");

int setpoint = 29;
int swing = 1;
if ( sensors.getTempC(insideThermometer) >=setpoint + swing) //&& sensors.getTempC(insideThermometer) >sensors.getTempC(outsideThermometer) )
{
digitalWrite(7,HIGH);
* Serial.println("ON ");*
}
else if ( sensors.getTempC(insideThermometer) <setpoint - swing)
{
digitalWrite(7,LOW);
Serial.println("OFF ");
}
delay(500);
}

Sou iniciante ..
Por favor alguém ajude =D
Queria apenas que quando executasse o "case" novamente ele fizesse o reverso, (desligasse o led).

const int Led1 = 7;

void setup() {
Serial.begin(9600);
pinMode(Led1, OUTPUT);
}
void loop() {
if (Serial.available()) {
char geral = Serial.read();
switch (geral) {
case '1':
digitalWrite(sala, HIGH);
break;
default:
Serial.print("Valor ");
Serial.print(casa);
Serial.println(" incorreto.");
digitalWrite(sala, LOW);

}
}
}

FelipeQ:
Sou iniciante ..
Por favor alguém ajude =D
Queria apenas que quando executasse o "case" novamente ele fizesse o reverso, (desligasse o led).

Pode armazenar o estado do led em uma variavel

const int sala = 7;
int EstadoSala=LOW; // ou HIGH

void setup() {
 Serial.begin(9600);
 pinMode(sala, OUTPUT);
}

void loop() {
   if (Serial.available()) {
   char geral = Serial.read();
   switch (geral) {
     case '1':
      if (EstadoSala = HIGH ) {
         EstadoSala=LOW;
      } else {
         EstadoSala=HIGH;
      };
      digitalWrite(sala, EstadoSala);
      break;
     default:
      Serial.print("Valor ");
      //Serial.print(casa);
      //Serial.println(" incorreto.");
      digitalWrite(sala, LOW);
     
     };
   };
}

Ou assim:

const int sala = 7;
int EstadoSala=LOW; // ou HIGH

void setup() {
 Serial.begin(9600);
 pinMode(sala, OUTPUT);
 digitalWrite(sala, EstadoSala); // estado inicial 
}

void loop() {
   if (Serial.available()) {
   char geral = Serial.read();
   switch (geral) {
     case '1':    
      digitalWrite(sala, !EstadoSala); // Operação de Negação.
      break;
     default:
      Serial.print("Valor ");
      //Serial.print(casa);
      //Serial.println(" incorreto.");
      digitalWrite(sala, LOW);
     
     };
   };
}

Ou ainda, sem usar nenhuma variável.

const int sala = 7;

void setup() {
 Serial.begin(9600);
 pinMode(sala, OUTPUT);
 digitalWrite(sala, LOW); // estado inicial
}

void loop() {
   if (Serial.available()) {
   char geral = Serial.read();
   switch (geral) {
     case '1':    
      digitalWrite(sala, !digitalRead(sala)); // Operação de Negação.
      break;
     default:
      Serial.print("Valor ");
      //Serial.print(casa);
      //Serial.println(" incorreto.");
      digitalWrite(sala, LOW);
     
     };
   };
}

O código original contem vários erros, corrigi-os de modo a validar os meus exemplos.

REGRA: Ao postar o código neste forum, use o marcado de código (code).

Dica: Sempre declare as variáveis, constantes, strucs no inicio da função, nunca no meio do código.

Olá!

Gostaria de ajuda em um projeto, estou tentando há um bom tempo. Preciso controlar uma válvula pneumática via monitor serial.

A válvula está ligada em uma saída PWM e vai ser controlada pelo comando analogWrite().

A proporção da pressão com a voltagem é de 1 para 1, ou seja, se houver 1 V, a válvula retornará 1 Bar, com 2 V, será 2 Bar, e assim segue até a voltagem máxima do Uno (5 V), assim, consequentemente a válvula opera de 0 a 5 Bar.

Gostaria de digitar no serial monitor, por exemplo, o número 4, seriam enviados 4 V e a válvula me retornaria 4 Bar, não consegui fazer isso.

Além disso, também conheço a limitação do Arduino quanto a interpretar um número de cada vez, não é possível digitar diretamente 2.2 Bar, ele lerá cada um dos caracteres separadamente. Se alguém puder me ajudar nestes dois problemas de uma vez, ficaria muito grato!

Abraços!

Rogetheo:
POR FAVOR UM HELP......

Sou iniciante e estou tentando controlar 300 leds RGB WS2812B em uma das saídas digitais do arduino nano, até 120 leds vai bem depois não controla mais , será que está faltando corrente na saída digital, estou usando uma fonte externa de 5 Volts 60 Amperes para ligar os leds, teoricamente a saída do arduino é só um sinal de comando.

Abraço Galera......

Não me parece muito boa politica colocar uma questão da maneira que o fez. A sua questão não tem nada a ver como o tema do tópico onde postou e isso para além de ser mau para si (que pode não obter respostas), também é mau para quem procura resolver um problema e encontra o tópico original, com questões que não têm nada a ver misturadas na discussão.
Terá mais sucesso se usar o fórum da forma correcta!

PS.: Afinal li o post na página errada, mas também se aplica a este:

vahs:
Olá!

Gostaria de ajuda em um projeto, estou tentando há um bom tempo. Preciso controlar uma válvula pneumática via monitor serial.

A válvula está ligada em uma saída PWM e vai ser controlada pelo comando analogWrite().

A proporção da pressão com a voltagem é de 1 para 1, ou seja, se houver 1 V, a válvula retornará 1 Bar, com 2 V, será 2 Bar, e assim segue até a voltagem máxima do Uno (5 V), assim, consequentemente a válvula opera de 0 a 5 Bar.

Gostaria de digitar no serial monitor, por exemplo, o número 4, seriam enviados 4 V e a válvula me retornaria 4 Bar, não consegui fazer isso.

Além disso, também conheço a limitação do Arduino quanto a interpretar um número de cada vez, não é possível digitar diretamente 2.2 Bar, ele lerá cada um dos caracteres separadamente. Se alguém puder me ajudar nestes dois problemas de uma vez, ficaria muito grato!

Abraços!

Leia as regras e utilize o fórum da maneira correcta. Vai ter mais sucesso!

Estou adquerido um motor de passo 23HS5628. Eu tenho uma PONTE H L298N. Qual vai ser a maior dificuldade de controlar motor com ponte h com arduino, e não com driver TB6600 por exemplo.

bom dia!!!! sou nova mais nova mesmo nesse mundo do arduino,eu quero colocar uma fechadura elétrica aqui em casa,tenho o arduino uno,a protoboord o rele e o rfidrc522 e peguei o exemplo do manoal do mundo,quando fui cadastrar os cartoes deu um erro que nao sei qual que rfid nao reconhece mais os cartoes e agora ja procurei na internet e nao acho solução,creio que apaguei os dados dos catoes tem como recuperar(reseta talvel se tiver como eu faço isso)como eu disse no começo eu sou nova nesse mundo entao se poder desenhar eu agradeço kkk a e quando eu copio um codigo eu tenho que fazer algumas modificaçoes.quais.obrigado e descupa alguma coisa vlw

Olá pessoal! Tenho um certo Módulo de Aquisição de Dados (ADAMS 6017) em que os dados de saída dele é apenas através de rede ethernet RJ45 e quero fazer leitura desses dados no Arduino MEGA e transmitir para um supervisório (o Elipse SCADA) visto que não consigo comunicação direta entre o Módulo e o Elipse, mas consigo entre o Arduino e o Elipse, ou seja, usar o Arduino como intermediário. Penso em utilizar um Ethernet shield ENC28J60 para captar esses dados, mas não sei como programar. Alguém sabe ou já fez algo parecido?

Antes de mais, este não é o lugar correcto para colocar esta questão porque não tem nada a ver com o que estava aqui anteriormente...

Nalber:
visto que não consigo comunicação direta entre o Módulo e o Elipse,

Pelo que vejo online... isto é perfeitamente possível. Queres explicar porque é que não consegues?

bubulindo:
Antes de mais, este não é o lugar correcto para colocar esta questão porque não tem nada a ver com o que estava aqui anteriormente...

Pelo que vejo online... isto é perfeitamente possível. Queres explicar porque é que não consegues?

Obrigado por responderem. Conforme o manual do dispositivo diz que é possível a comunicação, mas acredito que preciso de um programa não sei se em C# ou C++. Baixei o Visual Studio 2013 e estou tentando fazer tomando como referência o manual do dispositivo. Acredito que seja mais fácil por esse caminho direto do que utilizando o Arduino.

Tu precisas do protocolo Modbus... Podes experimentar com este programa para aceder aos registos Modbus do aparelho.

http://www.tuomio.fi/ananas/

Existem bastantes bibliotecas que implementam Modbus e o Eclipse SCADA, segundo a documentação disponível, funciona com comunicação Modbus também. Daí não perceber a dificuldade.

Ok Pessoal! Comunicação efetuada. Estava faltando um parâmetro chamado N4, o qual verifiquei com a ajuda do pessoal da Elipse. De qualquer forma agradeço a atenção e respostas à questão.

fiz uma programação , mas o motor gira quando detecta o sensor, porem ele fica devagar mesmo aumentando a velocidade ou a aceleração do motor na programação , alguem sabe como modifica isso ?

#include <AccelStepper.h>
#define pinSensor 6
int passos = 400;
int velocidade_motor = 100;
int aceleracao_motor = 000;
int sentido_horario = 0;
int sentido_antihorario = 0;
int numero = 0;

// Definicao pino ENABLE
int pino_enable = 10;

// Definicao pinos STEP e DIR
AccelStepper motor1(1,7,4 );

void setup()
{
pinMode(pinSensor, INPUT);
Serial.begin(9600);
pinMode(pino_enable, OUTPUT);
// Configuracoes iniciais motor de passo
motor1.setMaxSpeed(velocidade_motor);
motor1.setSpeed(velocidade_motor);
motor1.setAcceleration(aceleracao_motor);

Serial.println("detectado ou não detectado");
}

void loop()
{
bool sensor = digitalRead(pinSensor);

if (!sensor) {
Serial.println("detectado - Girando motor sentido horario.");
digitalWrite(pino_enable, LOW);
velocidade_motor = 500;
aceleracao_motor = 500;
sentido_horario = 1;
sentido_antihorario = 0;
}else {
Serial.println("não detectado - Parando motor...");
sentido_horario = 0;
sentido_antihorario = 0;
motor1.moveTo(0);
digitalWrite(pino_enable, HIGH);

}
// Move o motor no sentido horario
if (sentido_horario == 1)
{
motor1.moveTo(10000);
}
// Move o motor no sentido anti-horario

// Comando para acionar o motor no sentido especificado
motor1.run();
}

Olá comunidade! Sou inciante no arduino, e estou com dificuldades em programar um código para a seguinte situação:

a)Elabore um programa que, de acordo com o valor de tensão lido em um potenciômetro, envie valores específicos de tensão para um LED utilizando PWM Isso deve ser feito de acordo com a tabela a seguir:

Intervalo de V de entrada (potenciômetro): | Valor de V de saída (led):
|
0V a 1V (inclusive) | 0V
1V a 2V (inclusive) | 1.3V
2V a 3V (inclusive) | 1.9V
3V a 4V (inclusive) | 2.5V
4V a 4.5V (inclusive) | 3.9V

b)Caso a entrada seja superior a 4 5 V, o LED deverá ser apagado e um buzzer acionado O sistema deverá travar (isso significa que mesmo que a tensão do potenciômetro volte para um valor abaixo de 4 5 V, o Buzzer deverá continuar ligado e o LED desligado).

O buzzer só será desligado caso o Arduino receba o caracter 0 pela Serial Nesse caso, o sistema é destravado e volta a funcionar normalmente.

OBS: Os valores de tensão de entrada e saída deve ser constantemente mostrados no Serial Monitor enquanto o sistema não estiver travado.

Alguém poderia me ajudar por favor?!!