CapacitiveSensor.h

3ona
Offline
Зарегистрирован: 25.04.2016

Я в этом деле новичек, но у меня получилось сделать рабочий сенсор.

мне надо теперь понять как использовать его в программе.

#include <CapacitiveSensor.h>

int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int koncevik1 = 6; // входящий сигнал
int koncevik2 = 7; // входящий сигнал
int signal1 = 8; // входящий сигнал

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // сенсор подключен к пинам 2 и 4

void setup()                    
{
   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);
   pinMode(Reley1, OUTPUT); 
   pinMode(Reley2, OUTPUT); 
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(signal1, INPUT);
   
}

void loop()                    
{
    long start = millis();
    long total1 =  cs_4_2.capacitiveSensor(30);


    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing

    Serial.print(total1);                  // print sensor output 1
    Serial.print("\t");


    delay(1000);                             // arbitrary delay to limit data to serial port 

}

мне надо чтоб когда на 8 пин приходит сигнал, включалось реле1 и ждало сигнал с концевика1,

а потом когда на емкостном датчике появится рука, подождать 5 секунд и включить реле 2, отключить когда появится сигнал на концевике2.

 

циферки которые выдает сомпорт с датчика когда руки нет:

1	0	1	3	2	0	2	0	2	6	1	5	1	7	2	6	2	8	1	16	1	25	2	24	2	0	1	30	2	28	2	0	2	0	2	1	1	20	1	42	2	44	2	46	1	38	2	37	2	35	2	33	1	34	1	33	2	34	2	37	1	35	1	38	2	44	2	47	1	54	1	57	2	60	2	60	1	63	2	60	2	60	

когда рука есть:

14859	32	11597	33	11913	39	14694	40	14719	40	14703	30	11322	33	11874	40	14708	40	14879	40	14779	40	14725	41	14713	41	14810	31	11344	32	11791	40	14733

 

3ona
Offline
Зарегистрирован: 25.04.2016
#include <CapacitiveSensor.h>

int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int koncevik1 = 6; // входящий сигнал
int koncevik2 = 7; // входящий сигнал
int signal1 = 8; // входящий сигнал

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // сенсор подключен к пинам 2 и 4

void setup()                    
{
   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);
   pinMode(Reley1, OUTPUT); 
   pinMode(Reley2, OUTPUT); 
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(signal1, INPUT);
   
}

void loop()                    
{
    digitalWrite(Reley1,HIGH);

    digitalWrite(Reley2,HIGH);

    long start = millis();
    long total1 =  cs_4_2.capacitiveSensor(30);


    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing

    Serial.print(total1);                  // print sensor output 1
    Serial.print("\t");


    delay(1000);                             // arbitrary delay to limit data to serial port 

  if (total1 >500)
  {
    Reley1 = LOW;
    delay(1000);
  }




}

почему не щелкает реле когда прикладываю палец, в консоле тотал стабильно >500

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013
#include <CapacitiveSensor.h>

const byte Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
const byte Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
const byte koncevik1 = 6; // входящий сигнал --> с подтяжкой резистором 10k к +5В
const byte koncevik2 = 7; // входящий сигнал --> с подтяжкой резистором 10k к +5В
const byte signal1 = 8;   // входящий сигнал --> с подтяжкой резистором 10k к +5В
const unsigned int tresholdValue = 400;   // пороговое значение сенсора, выше которого включаем реле

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);       // сенсор подключен к пинам 2 и 4

void setup()
{
  cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
  Serial.begin(9600);
  pinMode(Reley1, OUTPUT);
  pinMode(Reley2, OUTPUT);
  pinMode(koncevik1, INPUT);
  pinMode(koncevik2, INPUT);
  pinMode(signal1, INPUT);

}

void loop()
{
  static unsigned int phase;
  unsigned long total1;
  if (digitalRead(signal1 == HIGH))         // приходит сигнал
  {
        Serial.println("Signal detected!");
        Serial.print("Phase #");
        Serial.print(phase);
        Serial.println("starting.");
    digitalWrite(Reley1, LOW);             // включается реле1
        Serial.println("Relay #1: ON");    
        Serial.print("Waiting for switch #1...");
    while (digitalRead(koncevik1 != HIGH)); // тупим, пока не сработает концевик1
        Serial.println("Bingo!");
    digitalWrite(Reley1, HIGH);              // отключается реле1
        Serial.println("Relay #1: OFF");
    do
    {
      total1 =  cs_4_2.capacitiveSensor(30);
          Serial.print("Sensor value: ");
          Serial.println(total1);                  // print sensor output 1
      delay(100);                           // arbitrary delay to limit data to serial port
    }
    while (total1 < tresholdValue);         // ждем руку
       Serial.print("Waiting 5 sec...");
    delay(5000);                            // тупим 5 сек
       Serial.println("Done.");
    digitalWrite(Reley2, LOW);             // включается реле2
       Serial.println("Relay #2: ON");
       Serial.print("Waiting for switch #2...");
    while (digitalRead(koncevik2 != HIGH)); // тупим, пока не сработает концевик2
       Serial.println("Bingo!");
    digitalWrite(Reley2, HIGH);              // отключается реле2
        Serial.println("Relay #2: OFF");
        Serial.print("Phase #");
        Serial.print(phase);
        Serial.println("finished.");
  }
}

быдлокод, конечно, но какое ТЗ, такой и результат :)

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

3ona пишет:
почему не щелкает реле когда прикладываю палец, в консоле тотал стабильно >500

потому что ты не включаешь реле, а присваиваешь переменной Reley1 значение LOW

3ona
Offline
Зарегистрирован: 25.04.2016

спасибо огромное)))

3ona
Offline
Зарегистрирован: 25.04.2016

 что-то не так, резисторы переткнул на + , реле моментально выключаются

3ona
Offline
Зарегистрирован: 25.04.2016


#include <CapacitiveSensor.h>

int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int koncevik1 = 6; // входящий сигнал
int koncevik2 = 7; // входящий сигнал
int signal1 = 8; // входящий сигнал

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // сенсор подключен к пинам 2 и 4

void setup()                    
{
   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);
   pinMode(Reley1, OUTPUT); 
   pinMode(Reley2, OUTPUT); 
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(signal1, INPUT);
   
}

void loop()                    
{
    digitalWrite(Reley1,HIGH);

    digitalWrite(Reley2,HIGH);

   /* long start = millis();*/
    long total1 =  cs_4_2.capacitiveSensor(30);

/*
    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing*/

    Serial.print(total1);                  // print sensor output 1
    Serial.print("\t");


                                // arbitrary delay to limit data to serial port 

 
  
 

    
  if (digitalRead(signal1 == HIGH))
  {
    digitalWrite(Reley1, LOW);
     
   while (digitalRead(koncevik1 == HIGH));

    digitalWrite(Reley1, HIGH); 

  }
  
  

   if (total1 >5000)
  {
    digitalWrite(Reley2, LOW);
     
   while (digitalRead(koncevik2 == HIGH));
    digitalWrite(Reley1, HIGH);
  }
 
  
}

на сигнал 1 всегда приходит сигнал, даже когда его туда не посылали, всегда, а концевики не когда не срабатывают, я пробовал стовать и ==LOW, и !=LOW, и ==HIGH, и !=HIGH, 

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

нарисуйте как подключены signal1 и koncevik1

3ona
Offline
Зарегистрирован: 25.04.2016

но я пробовал и с резисторами на +.

 

 

3ona
Offline
Зарегистрирован: 25.04.2016

 


#include <CapacitiveSensor.h>

int Reley1 = 10; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int Reley2 = 12; // порт к которму подключен пин IN реле. (порт D7, пин IN1)
int koncevik1 = 6; // входящий сигнал
int koncevik2 = 7; // входящий сигнал
int signal1 = 8; // входящий сигнал

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // сенсор подключен к пинам 2 и 4

void setup()                    
{
   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);
   pinMode(Reley1, OUTPUT); 
   pinMode(Reley2, OUTPUT); 
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(signal1, INPUT);
   
}

void loop()                    
{
    
    
    digitalWrite(Reley1,HIGH);

    digitalWrite(Reley2,HIGH);

   /* long start = millis();*/
    long total1 =  cs_4_2.capacitiveSensor(30);

/*
    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing*/

    Serial.print(total1);                  // print sensor output 1
 /*   Serial.print("\t"); */


   delay(100);                             // arbitrary delay to limit data to serial port 

 
  


    
  if (digitalRead(signal1 == HIGH))
  {
    digitalWrite(Reley1, LOW);
     
   while (digitalRead(koncevik1 != HIGH));

    digitalWrite(Reley1, HIGH); 

  }
  


   if (total1 >500)
  {
    digitalWrite(Reley2, LOW);
     
   while (digitalRead(koncevik2 != HIGH));
    digitalWrite(Reley1, HIGH);
  }
 
  
}

помогите понять почему не работает, сенсор работает включает реле, а сигналы(концевик 1 и 2, и сигнал 1) не работают.

3ona
Offline
Зарегистрирован: 25.04.2016

Вроде заработало, сделал так, проверте пожалусто ктонибудь, там задача еще немного изменилась, теперь двумя реле управляют сигналы и концевики, а третье реле включается с датчика и больше не выключается до перезагрузки.



#include <CapacitiveSensor.h>

int  Reley1 = 10; // порт к которму подключен пин IN реле
int  Reley3 = 11;
int  Reley2 = 12; // порт к которму подключен пин IN реле
int  koncevik1 = 6; // входящий сигнал
int  koncevik2 = 7; // входящий сигнал
int  signal1 = 8; // входящий сигнал
int  signal2 = 9;

boolean val1 = 0;
boolean val4 = 0;
boolean val3 = 0;
boolean val2 = 0;

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);        // сенсор подключен к пинам 2 и 4

void setup()                    
{
   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);
   pinMode(Reley1, OUTPUT); 
   pinMode(Reley2, OUTPUT); 
   pinMode(Reley3, OUTPUT); 
   pinMode(koncevik1, INPUT);
   pinMode(koncevik2, INPUT);
   pinMode(signal1, INPUT);
   pinMode(signal1, INPUT);
   
}

void loop()                    
{
    
    
    digitalWrite(Reley1,HIGH);

    digitalWrite(Reley2,HIGH);

   /* long start = millis();*/
    long total1 =  cs_4_2.capacitiveSensor(30);

/*
    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing*/

    Serial.print(total1);                  // print sensor output 1
    Serial.print("\t"); 


   delay(100);                             // arbitrary delay to limit data to serial port 


  
 
  
   val1 = digitalRead(signal1);
   val3 = digitalRead(signal2);

    
  if (digitalRead(val1 == 1))
  {
       
    digitalWrite(Reley1, LOW);

   do
    {
      
      val2 = digitalRead(koncevik1);


    } while (val2 == 1); 
    
    digitalWrite(Reley1,HIGH);

    

  }


  if (digitalRead(val3 == 1))
  {
       
    digitalWrite(Reley2, LOW);

   do
    {
      
      val2 = digitalRead(koncevik1);


    } while (val2 == 1); 

    digitalWrite(Reley2,HIGH);

    

  }


   if (total1 >500)
  {
    digitalWrite(Reley3, LOW);
  

  }
 
  
}

UPD, не не работает,почимуто одно из реле включается с с 6 пина, хотя вроде не должно