Вверх
ПОДАТЬ ОБЪЯВЛЕНИЕ

Полезные файлы/Очумелые ручки/Электронная зимняя удочка
[Зимняя удочка с реле]

Зимняя электронная удочка на Arduino Nano, 

кивок на реле 3В.

Ловись рыбка - большая и маленькая.

Видео этой электронной зимней удочки на Ютубе.

В видео показана зимняя электронная удочка, основой, которой является Arduino Nano. А "дёргалка" изготовлена из СТАНДАРТНОЙ трёх вольтовой релюшки.

Не надо, ничего НАМАТЫВАТЬ!!! Практически, подавляющее большинство радиолюбителей, даже не начинают делать схему, если что-то надо намотать.. . Поэтому считаю, что главное достижение этой самоделки, это применение в качестве исполнительного элемента готового изделия -- трёхвольтового реле, которое достаточно просто найти. (На Алиэкспрес, точно есть!!!). К дергающемуся лепестку реле, припаивается коротенькая трубочка в которую потом вставляется кивок... Длина импульса, пауза между импульсами, количество импульсов в пачке, пауза между пачками, всё это регулируется в достаточно широких пределах (на столько, на сколько способно это выполнить реле). Все регулировки производятся с помощью энкодера. Есть режим постоянной работы, когда заданный режим КИВКОВ - работает постоянно. И режим, когда КИВКИ или пачки кивков по нажатию кнопочки. Конструкция включает в себя: трех позиционный маленький Тумблер (автоматич. раб. -- ВЫКЛЮЧЕНО -- Работа по нажатию кнопочки), Кнопочка, Энкодер, три Светодиода (индикация реж. , что регулирует энкодер), платка Arduino Nano, платка зарядки аккумулятора, маленькая платка повышения напряжения до 5-7 Вольт (Ардуино в 5 вольтовый вход 7 держит, аккуратно), Транзистор включения реле, четыре малюсеньких резистора, два маленьких конденсатора и РЕЛЕ (в качестве "дёргалки"). Всё это, вполне поместилось, как видно на видео в корпус старенькой зимней удочки.

Схема принципиальная электронной зимней удочки

(извините, уж какая есть).

Внизу статьи можно скачать более увеличенную схему.

А также скетч для ардуинки нано.

Электронная зимняя удочка.    СКАЧАТЬ.

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

Если с программой (представленной ниже), включить питание удочки с нажатой кнопкой энкодера! Программа загрузится с парраметрами по умолчанию (с  гарантированными условиями "дёргания реле")!!!

Ниже приведён скетч для электронной зимней удочки

на ARDUINO NANO !

 

 #include
    #define CLK 0
    #define DT 1
    #define SW 2
    #include "GyverEncoder.h"
    Encoder enc1(CLK, DT, SW);
    #include  
    // #include // Подключение библиотеки
    #include // Подключение альтернативной библиотеки
 
    // LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой 
    LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574 
    int show;
  
    int value1 = 10;
    int value2 = 20;
    int value3 = 100;
    int value4 = 100;
    int sensorPin1 = A0;
    // int sensorPin2 = A1; // Подготовлено для второго резистора
    int Pin1 = 3;
    int Pin2 = 4;
    int Pin3 = 5;
    int Pin4 = 6;
    int Pin5 = 7;
    int Pin6 = 8;
    int Pin7 = 9;
    int Pin8 = 10;
    int Pin9 = 11;
    int Pin10 = 12;
  
    int LedPin = 13;
    int PinV_A0 = 14;
    int PinV_A1 = 15;
    int PinV_A2 = 16;
    int PinV_A3 = 17;
    // int sensorValue1 = 30;
    // int sensorValue2 = 31;
    int State1 = HIGH; 
    int State11 = HIGH;   
    int State2 = LOW;
    int State22 = LOW;   
    int State3 = HIGH;       
    int State33 = LOW;
    int State4 = LOW;
    int State5 = HIGH;     
    int State6 = LOW;
    int State7 = HIGH;
    int State8 = LOW;
    int State9 = HIGH;
    int State10 = LOW;
   
    // int State9 = 1;
    int knopka=3;
    unsigned long previousMillis1, previousMillis2, previousMillis3, previousMillis4 = 0;   
    unsigned long previousMillis5, previousMillis6, previousMillis7, previousMillis8, previousMillis9, previousMillis10 = 0;   
    unsigned long previousMillis18 = 0;
    int Pachka = LOW;
    byte ReadSW = LOW;
    byte Run;
    
    void setup() {
        if (digitalRead(SW) == LOW ) { 
      EEPROM.write(1, 10);
      EEPROM.write(2, 10);
      EEPROM.write(3, 50);
      EEPROM.write(4, 50);
        }  
    digitalWrite(Pin4, HIGH);
    
     value1 = EEPROM.read(1);
     value2 = EEPROM.read(2);
     value3 = EEPROM.read(3);
     value4 = EEPROM.read(4);
 
    int error;
 
    Serial.begin(115200);
    Serial.println("LCD...");
 
    while (! Serial);
 
    Serial.println("Dose: check for LCD");
 
    // See http://playground.arduino.cc/Main/I2cScanner
    Wire.begin();
    Wire.beginTransmission(0x27);
    error = Wire.endTransmission();
    Serial.print("Error: ");
    Serial.print(error);
 
    if (error == 0) {
    Serial.println(": LCD found.");
 
   } else {
    Serial.println(": LCD not found.");
   } // if
 
   lcd.begin(16, 2); // initialize the lcd
   show = 0;
   // setup()
 
 
 
    
    /*
   lcd.init();                      // Инициализация дисплея  
   lcd.backlight();                 // Подключение подсветки
   lcd.setCursor(0,0);              // Установка курсора в начало первой строки
   lcd.print("Hello");       // Набор текста на первой строке
   lcd.setCursor(0,1);              // Установка курсора в начало второй строки
   lcd.print("ArduinoMaster");       // Набор текста на второй строке
 
   */
    
    //  Serial.begin(9600);
    enc1.setType(1);    // тип энкодера TYPE1 одношаговый, TYPE2 двухшаговый. Если ваш энкодер работает странно, смените тип
    pinMode(Pin1, OUTPUT);
    pinMode(Pin2, OUTPUT);
    pinMode(Pin3, OUTPUT);
    pinMode(Pin4, OUTPUT);
    pinMode(Pin5, OUTPUT);
    pinMode(Pin6, OUTPUT);
      pinMode(Pin7, OUTPUT);
      pinMode(Pin8, OUTPUT);
      pinMode(Pin9, OUTPUT);
      pinMode(Pin10, OUTPUT);
  
      pinMode(PinV_A0, INPUT);  
      pinMode(PinV_A1, INPUT);    
    //  pinMode(PinV_A2, INPUT);
    // pinMode(PinV_A3, INPUT);
 
      digitalWrite(Pin1,HIGH);
       digitalWrite(Pin2,HIGH);
    }
 
    void loop() {
      
    unsigned long currentMillis1 = millis();
     ReadSW = digitalRead(SW);
     Run = digitalRead(PinV_A0) || digitalRead(PinV_A1);     // Для меня...
    //   Run = digitalRead(PinV_A1);    //   Для Игоря!!
      //=========================================
  if (ReadSW == HIGH) {    
    previousMillis18 = currentMillis1; 
  }
    if (ReadSW == LOW ) { 
   if (currentMillis1 - previousMillis18 >= 3000) { 
      EEPROM.write(1, value1);
      EEPROM.write(2, value2);
      EEPROM.write(3, value3);
      EEPROM.write(4, value4);
      
      digitalWrite(LedPin,HIGH);
      
      delay(3333);
      }
    }
      //============================================
 
    // const long interval1 = 5000;
    const long interval1 = value1*5;    //  Переменная умножена на 
    const long interval2 = value2*5; 
    const long interval3 = value3*40;
    const long interval4 = value4*40;
 
 
    int ReadPin9 = digitalRead(Pin1);
    int ReadPin10 = digitalRead(Pin2);
 
    enc1.tick();
    if(digitalRead(Pin1)==LOW && ReadPin10==LOW){
    if (enc1.isRight()) value1++;      // если был поворот направо, увеличиваем на 1
    if (enc1.isLeft()) value1--;     // если был поворот налево, уменьшаем на 1   
    value1 = constrain(value1, 1, 60);
    digitalWrite(LedPin, State5 );
    // digitalWrite(Pin5, State5 );
    
    if(interval1 != value1*5){
 
    if (show == 0) {
    lcd.setBacklight(55);
    lcd.home(); lcd.clear();
    lcd.print(interval1);
    // lcd.print("Hello LCD");
    lcd.print("   ");
    lcd.print(interval2);
    lcd.setCursor(0, 1); 
    lcd.print(interval3);  
    lcd.print("   ");  
    lcd.print(interval4); 
    }
    }
    }
 
    if(digitalRead(Pin1)==HIGH && ReadPin10==LOW){
    if (enc1.isRight()) value2++;      // если был поворот направо, увеличиваем на 1
    if (enc1.isLeft()) value2--;     // если был поворот налево, уменьшаем на 1
    value2 = constrain(value2, 1, 70);
    digitalWrite(LedPin,State7);
    // digitalWrite(Pin5, State7 );
    
    if(interval2 != value2*5){
 
    if (show == 0) {
    lcd.setBacklight(55);
    lcd.home(); lcd.clear();
    lcd.print(interval1);
    // lcd.print("Hello LCD");
    lcd.print("   ");
    lcd.print(interval2);
    lcd.setCursor(0, 1);
    lcd.print(interval3);  
    lcd.print("   ");  
    lcd.print(interval4); 
    }
    }
    }
    if(digitalRead(Pin1)==LOW && ReadPin10==HIGH){
    if (enc1.isRight()) value3++;      // если был поворот направо, увеличиваем на 1
    if (enc1.isLeft()) value3--;     // если был поворот налево, уменьшаем на 1
    value3 = constrain(value3, 1, 120);
    digitalWrite(LedPin,State9);
    // digitalWrite(Pin5, State9);
 
    if(interval3 != value3*40){
 
    if (show == 0) {
    lcd.setBacklight(55);
    lcd.home(); lcd.clear();
    lcd.print(interval1);
    // lcd.print("Hello LCD");
    lcd.print("   ");
    lcd.print(interval2);
    lcd.setCursor(0, 1);
    lcd.print(interval3);  
    lcd.print("   ");  
    lcd.print(interval4); 
 
    }
    }
    }
    if(digitalRead(Pin1)==HIGH && ReadPin10==HIGH){
    if (enc1.isRight()) value4++;      // если был поворот направо, увеличиваем на 1
    if (enc1.isLeft()) value4--;     // если был поворот налево, уменьшаем на 1
    value4 = constrain(value4, 1, 170);
    digitalWrite(LedPin, digitalRead(Pin3)); 
    // digitalWrite(Pin5, digitalRead(Pin3));
    
    if(interval4 != value4*40){
 
    if (show == 0) {
    lcd.setBacklight(55);
    lcd.home(); lcd.clear();
    lcd.print(interval1);
   // lcd.print("Hello LCD");
    lcd.print("   ");
    lcd.print(interval2);
    lcd.setCursor(0, 1);
    lcd.print(interval3);
    lcd.print("   ");  
    lcd.print(interval4);   
    }
    }
    }
 
  // unsigned long currentMillis1 = millis();
 
 if (Run==LOW) {
 
    previousMillis3 = currentMillis1;
    previousMillis4 = currentMillis1; 
    previousMillis1 = currentMillis1;
    previousMillis2 = currentMillis1;
  
  State1 = LOW; 
  State2 = LOW; 
  State3 = LOW;
  State4 = LOW;
   }
  
   if (Run==HIGH && State2 == LOW) {
    State1=HIGH;
   }
   if (State1==HIGH) {
   if (currentMillis1 - previousMillis1 >= interval1) {  
   State1 = LOW; 
   State2 = HIGH; 
   previousMillis2 = currentMillis1;    
   }
   }
 
   if (State2==HIGH) {
   if (currentMillis1 - previousMillis2 >= interval2) {
   State2 = LOW;
   State1 = HIGH; 
   previousMillis1 = currentMillis1;
   }
   }
   
  digitalWrite(Pin4, State1); 
 
   if (Run==HIGH && State4 == LOW) {
    State3 = HIGH;
   }
 
   if (State3 == HIGH) { 
   if (State1 == LOW) {  
   Pachka = HIGH;
   }
   if (currentMillis1 - previousMillis3  >= interval3) {
   State3 = LOW; 
   State4 = HIGH;
   previousMillis4 = currentMillis1;   
   }
   }
   if (State4 == HIGH) {
   if (State1 == LOW) {  
   Pachka = LOW;
   }   
   if (currentMillis1 - previousMillis4 >= interval4) {
   State4 = LOW;
   State3 = HIGH;  
   previousMillis3 = currentMillis1;
   }
   }
   
 
// =======================================
 if (State5==HIGH) {
   if (currentMillis1 - previousMillis5 >= 50) {  
   State5 = LOW; 
   State6 = HIGH; 
   previousMillis6 = currentMillis1;    
   }
   }
 
   if (State6==HIGH) {
   if (currentMillis1 - previousMillis6 >= 150) {
   State6 = LOW;
   State5 = HIGH; 
   previousMillis5 = currentMillis1;
   }
   }
// --------------------------------------------------
 if (State7==HIGH) {
   if (currentMillis1 - previousMillis7 >= 50) {  
   State7 = LOW; 
   State8 = HIGH; 
   previousMillis8 = currentMillis1;    
   }
   }
 
   if (State8==HIGH) {
   if (currentMillis1 - previousMillis8 >= 950) {
   State8 = LOW;
   State7 = HIGH; 
   previousMillis7 = currentMillis1;
   }
   }
 
  
// ----------------------------------------------
 if (State9==HIGH) {
   if (currentMillis1 - previousMillis9 >= 3000) {  
   State9 = LOW; 
   State10 = HIGH; 
   previousMillis10 = currentMillis1;    
   }
   }
 
   if (State10==HIGH) {
   if (currentMillis1 - previousMillis10 >= 2000) {
   State10 = LOW;
   State9 = HIGH; 
   previousMillis9 = currentMillis1;
   }
   }
 
// ====================================
 
   
 //  digitalWrite(Pin5, State3); 
 //  digitalWrite(Pin6, State4); 
 
  
  if(digitalRead(SW)==LOW && knopka==0)//если кнопка нажата
  // и перемення "knopka" равна 0 , то ...
  {
  delay(50);//защита от дребезга
  knopka++;//пишем 1 в переменную кнопка
  // digitalWrite(Pin9, !digitalRead(Pin9));//меняем значение порта на противоположное
 digitalWrite(Pin1, HIGH);
  delay(333);
  }
 
  if(digitalRead(SW)==LOW&&knopka==1)
  {
  delay(50);//защита от дребезга
  knopka++;
  digitalWrite(Pin1, LOW);
  digitalWrite(Pin2, HIGH);
  delay(333);
  }
 
  if(digitalRead(SW)==LOW && knopka==2)//если кнопка нажата
  {
  delay(50);//защита от дребезга
  knopka++;//пишем 1 в переменную кнопкa
  digitalWrite(Pin1, HIGH);
 // digitalWrite(Pin9, HIGH);
 // digitalWrite(Pin7, digitalRead(Pin9)); 
  delay(333);
  }
 
  if(digitalRead(SW)==LOW&&knopka==3)//если кнопка НЕ нажата
  {
  delay(50);//защита от дребезга
  knopka=0;//обнуляем переменную "knopka"
  digitalWrite(Pin1, LOW); 
  digitalWrite(Pin2, LOW); 
 
  delay(333);
  }  
  
  digitalWrite(Pin3, Pachka && State1);
  
  //      // "||" <->  "ИЛИ", "&&" <->  "И",
  //  int ReadsPin4 = digitalRead(Pin4);
  //  digitalWrite(Pin1, State1 && (!readsKn || reads2 || reads5)); 
  //  digitalWrite(Pin3, (State3 || reads3) && State1);    // "||" <->  "ИЛИ", "&&" <->  "И",
  //  digitalWrite(Pin3, State3 && ReadsPin4);
  //  digitalWrite(Pin2, LOW);
  //  digitalWrite(Pin4, HIGH); 
  }

 

  Внизу стать в файле  RAR  "Электронная зимняя удочка программа.rar" ?
можно скачать программу и некоторые библиотеки для ARDUINO

Электронная зимняя удочка программа для ARDUINO   скачать бесплатно  скачать

Под видео в ютубе в качестве комментария, можете задать вопрос!

Постораюсь ответить!

Файлы:
Суммарное количество:12,Суммарный размер:50(Mb).