Przejdź do głównej zawartości

Paddle update 01.09.2020

Już jest pierwsza wersja PCB :-)





 

Ostatnia wersja kodu:

//ADS1115 - with calibration

#include <tinysnore.h>

#include<ADS1115_WE.h> //liba was edited to give raw data instead of mV

#include<Wire.h>

#include <EEPROM.h>

#define I2C_ADDRESS_1 0x48

#define I2C_ADDRESS_2 0x49

ADS1115_WE adc(I2C_ADDRESS_1);

ADS1115_WE adc2(I2C_ADDRESS_2);


int result = 0;

int result2 = 0;

int led = 1; //1 - Trinket, 13 - Arduino

int sensitivity;

int sensitivityNow;

int leftNow;    

int rightNow;

int leftOn;      //left paddle treshold

int leftOnAbs;   //left paddle absolute value treshold 

int leftOff;     //left paddle off treshold

int rightOn;     //right paddle treshold 

int rightOnAbs;   //right paddle absolute value treshold 

int rightOff;   //right paddle off treshold

int hysteresis = 7; //hysteresis

int configMode = 0;

int time1;  //time for setup mode purpose

int time2;  //time for setup mode purpose


void setup() {


  pinMode(led, OUTPUT); 

  Wire.begin();


  

  while(!adc2.init()){

        blink(20);

        delay(500);

  }


  while(!adc.init()){

        blink(40);

        delay(500);

  }


  EEPROM.get(0,sensitivity);

  EEPROM.get(2,leftOn);  

  EEPROM.get(4,leftOff);  

  EEPROM.get(6,rightOn); 

  EEPROM.get(8,rightOff); 

  


  

  adc.setVoltageRange_mV(ADS1115_RANGE_0256); //amplifier gain

  adc.setCompareChannels(ADS1115_COMP_0_1); //differential measurement

  adc.setConvRate(ADS1115_860_SPS); //samples pre second 

  adc.setMeasureMode(ADS1115_CONTINUOUS); //Continous mode

  adc.setAlertPinMode(ADS1115_ASSERT_AFTER_1); //after how many measurments ALRT output is set

  adc.setAlertModeAndLimit_V(ADS1115_MAX_LIMIT, leftOn, leftOff); //Comparator values Hightreshold then LowTreshold 

  adc.setAlertPol(ADS1115_ACT_HIGH); //ALRT polarity


  adc2.setVoltageRange_mV(ADS1115_RANGE_0256); //amplifier gain

  adc2.setCompareChannels(ADS1115_COMP_0_1); //differential measurement

  adc2.setConvRate(ADS1115_860_SPS); //samples pre second 

  adc2.setMeasureMode(ADS1115_CONTINUOUS); //Continous mode

  adc2.setAlertPinMode(ADS1115_ASSERT_AFTER_1); //after how many measurments ALRT output is set

  adc2.setAlertModeAndLimit_V(ADS1115_MAX_LIMIT, rightOn, rightOff); //Comparator values Hightreshold then LowTreshold 

  adc2.setAlertPol(ADS1115_ACT_HIGH); //ALRT polarity

  

  result = adc.getResult_mV(); 

  result2 = adc2.getResult_mV();

  if ((result > 20) && (result2 > 20)){

    configMode = 1;

    time1 = millis();

    }


}


void loop() {

  if (configMode){

  config_loop();

  }

  else {

  main_loop();

  }

}


void main_loop() {

  //snore lib for ATTINY85 - uC to sleep mode

snore(10000);


}


  


void config_loop(){

  

  

  result = adc.getResult_mV(); 

  result2 = adc2.getResult_mV();

  time2 = millis(); 


//autocalibration

leftOn = result + sensitivity;  //measure free state and do the calibration 

      if (leftOn >= 0){

        leftOff = leftOn - hysteresis;

        }

        else {

          leftOnAbs = abs(leftOn);

          leftOff = -hysteresis - leftOnAbs;

          }

        rightOn = result2 + sensitivity;

       if (rightOn >= 0){

        rightOff = rightOn - hysteresis;

        }

        else {

          rightOnAbs = abs(rightOn);

          rightOff = -hysteresis - rightOnAbs;

          }  


//exit after 10s and write sensitivity

  if ((time2-time1)>10000){

      blink(sensitivity);

 

      EEPROM.put(0,sensitivity);   //store sensitivity permanent when leaving

      EEPROM.put(2,leftOn);  

      EEPROM.put(4,leftOff);  

      EEPROM.put(6,rightOn); 

      EEPROM.put(8,rightOff); 

      

      adc.setAlertModeAndLimit_V(ADS1115_MAX_LIMIT, leftOn, leftOff);

      adc2.setAlertModeAndLimit_V(ADS1115_MAX_LIMIT, rightOn, rightOff);

      configMode = 0;

    }


//set paddle status

  if ((result > 20) && (leftNow == 0)) {

   leftNow = 1;

   sensitivity = sensitivity + 10;

   }

  if (result < 10) {

   leftNow = 0;

  }

  if ((result2 > 20) && (rightNow == 0)) {

   rightNow = 1;

   sensitivity = sensitivity - 10;

   }

   if (result2 < 10) {

   rightNow = 0;

  }

//set sensitivity

if (sensitivity != sensitivityNow)

  switch (sensitivity){

      case 0:

      sensitivity = 10;

      time1 = millis();

      break;

    case 10:

      sensitivityNow = sensitivity;

      blink(sensitivityNow);

      time1 = millis();

      break;

    case 20:

      sensitivityNow = sensitivity;

      blink(sensitivityNow);

      time1 = millis();

      break;

    case 30:

      sensitivityNow = sensitivity;

      blink(sensitivityNow);

      time1 = millis();

      break;

    case 40:

      sensitivityNow = sensitivity;

      blink(sensitivityNow);

      time1 = millis();

      break;

    case 50:

      sensitivityNow = sensitivity;

      blink(sensitivityNow);

      time1 = millis();

      break;

    case 60:

      sensitivityNow = sensitivity;

      blink(sensitivityNow);

      time1 = millis();

      break;

    case 70:

      sensitivity = 60;

      time1 = millis();

      break;

    default:

      sensitivity = 10;

      time1 = millis();

      break;

    }  

}




void blink(int amount){

      for(int x = 0; x < amount; x = x+10){

      digitalWrite(led, HIGH);

      delay(50);

      digitalWrite(led, LOW);

      delay(200);

      }

    

  } 

Komentarze

Popularne posty z tego bloga

Legenda "Klimka"

Legenda o tym jak w trudnych czasach można stworzyć coś niesamowitego.

Arrow antenna by EA4CYQ

Zachęcony sukcesami z poprzednią konstrukcją postanowiłem odwzorować kolejny projekt Juana EA4CYQ. Jest to antena wzorowana an arrowantenna, można ją zakupić pod adresem www.arrowantennas.com, niestety w Europie niedostępna. Z tego też powodu Juan opracował własną wersję. W zasadzie są to dwie anteny Yagi na wspólnym boomie, 3 elemntowa na pasmo 2m i 7 elementowa na pasmo 70cm. Wszystkie wymiary oraz użyte materiały zastosowałem takie jak opisał autor, jedynie w dopasowaniu użyłem przewodu RLF-6, akurat taki był pod ręką. Pierwsze testy zaskoczyły mnie niesamowicie. Sygnał jest zdecydowanie silniejszy niż przy antenie IOio, lecz trzeba zdecydowanie precyzyjniej śledzić satelitę. Antena jest relatywnie lekka, lecz przydałby się statyw, po dłuższym śledzeniu ręce odmawiają posłuszeństwa. Poza tym jest świetną prostą do odwzorowania i przede wszystkim skuteczną anteną. Poleca i do usłyszenia via satellite !! Oryginalny dokument pdf EA4CYQ Arrow Antenna Fotki z pierwszych testów Nagranie z

T2FD

Zmierzyłem się w końcu z demonizowaną przez wszystkich anteną T2FD, ale zacznijmy od początku. Antena ta zostałą opracowana na użytek wojska przez United States Navy pod koniec lat 40-tych. Antena ta charakteryzuje się szerokopasmowością (1:6) oraz dużą odpornością na zakłócenia. Z tego też względu w końcowym efekcie pozostano jedynie przy tej antenie. Pierwszy raz w prasie radioamatorskiej została opisana przez W3HH w QST w 1949 r., przez co często znana jest jako "antena W3HH". Zapomniana na wiele lat, powróciła do łask na początku lat 80-tych . Nie każdy ma możliwość zainstalowania całego pola antenowego, najbardziej odczuwają to krótkofalowcy z dużych miast. Dochodzi do tego także smog elektroniczny jaki nas otacza, co potęguje napływ tanich urządzeń elektronicznych z wytanionymi przetwornicami generującymi śmieci w prawie całym widmie fal krótkich. Ze względu na moją lokalizację która pozwala mi na montaż anteny jedynie w obrębie dachu budynku padło na T2FD. Antena