Fórum | MyPower.CZ | Obnovitelné zdroje energie - energetická soběstačnost | Poslední návštěva: pát zář 20, 2019 8:22 am


Arduino 3 podlahový výtah

Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.

Arduino 3 podlahový výtah

Příspěvekod Marty+- » stř led 02, 2019 12:04 pm

Dobrý den,Mám z ůkol udělat 3 podlahový výtah. Mám kod, který je ve fázi vývoje. Momentálně jsem zaměřen na podmínky ketré jsou nejdůležitější. Musím udělat podmínku aby výtah jezdil normálně když ho zavolám do každého patra a potom když třeba pojede do 3 patra a po cestě ve druhém ho někdo zavolá tak zastaví nabere a jede dál. S touto podmínkou si nevím rady.
Kód: Vybrat vše
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define PINsensPatroprvni 1
#define PINsensPatrodruhy 2
#define PINsensPatrotreti 3
#define PINbtnVytahprvni  4
#define PINbtnVytahdruhy  5
#define PINbtnVytahtreti  6
#define PINbtnPatroprvni  7
#define PINbtnPatrodruhy  8
#define PINbtnPatrotreti  9
#define motorPin1     10
#define motorPin2     11
#define motorPin3     12
#define motorPin4     13
int krokMotoru = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);

bool sensPatro1, sensPatro2, sensPatro3;  //snimace pater
bool btnVytah1, btnVytah2, btnVytah3; //tlacitka ve vytahu
bool btnPatro1, btnPatro2, btnPatro3; //tlacitka v patrech
byte stavVytahu;  //musis vedet, co vytah dela, abys podle toho mohl resit nejakou logiku. Tezko muzes privolat vytah dolu, když jede nahoru
      //0 - vytah stoji, 1 - vytah jede dolu, 2 - vytah jede nahoru, atd. Pripadne to řesit pomoci bool proměnnych
bool aktualniPatro;
bool vytahStoji=0;
bool stisknutoPrivolavaciTlacitko;
bool pozadovanePatro;
bool jedNahoru;
bool jedDolu;
bool vytahStop;


void setup() {
  // put your setup code here, to run once:
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
pinMode(PINbtnVytahprvni, INPUT);
pinMode(PINbtnVytahdruhy, INPUT);
pinMode(PINbtnVytahtreti, INPUT);
pinMode(PINbtnPatroprvni, INPUT);
pinMode(PINbtnPatrodruhy, INPUT);
pinMode(PINbtnPatrotreti, INPUT);
pinMode(PINsensPatroprvni,INPUT);
pinMode(PINsensPatrodruhy,INPUT);
pinMode(PINsensPatrotreti,INPUT);
lcd.begin();
}

void loop(){    //zde přidělit proměnným hodnoty z digitálních vstupů
 
  if(sensPatro1){
    aktualniPatro = 1;}
   
  if(sensPatro2){
    aktualniPatro = 2;}
   
  if(sensPatro3){
    aktualniPatro = 3;}
   
  if(vytahStoji && stisknutoPrivolavaciTlacitko)
  {
    if(aktualniPatro < pozadovanePatro){
      jedNahoru = true;
    }
   
    if(aktualniPatro > pozadovanePatro){
      jedDolu = true;}
     
    if(aktualniPatro == pozadovanePatro){
      jedNahoru = false;
      jedDolu = false;}         
  }


 
  if(jedNahoru && stisknutoPrivolavaciTlacitko){
   
    if(aktualniPatro<pozadovanePatro){
      vytahStop==pozadovanePatro && jedNahoru;}

    if(aktualniPatro>pozadovanePatro){
      jedNahoru = true;}
  }
   if(jedDolu && stisknutoPrivolavaciTlacitko){
   
     if(aktualniPatro<pozadovanePatro){
      jedDolu = true;}
     
     if(aktualniPatro>pozadovanePatro){
       vytahStop==pozadovanePatro && jedDolu;}
   }
}
void VypisPatra(){
 lcd.setCursor(0,0);
 lcd.print("Patro:");
 lcd.print(digitalRead(aktualniPatro));
  }
  void JedNahoru(){
  krokMotoru++;
  if(krokMotoru > 3){
    krokMotoru = 0;
  }
  RizeniMotoru(krokMotoru);
}

void JedDolu(){
  krokMotoru--;
  if(krokMotoru < 0){
    krokMotoru = 3;
  }
  RizeniMotoru(krokMotoru);
}

void RizeniMotoru(int step){
if(step < 0 || step > 3){
  //jenom takovej sichr.
  //Pokud je proměnná step menší než 0, nebo větší než 3, tak se do proměnné přiřadí 0, tedy první krok
  step = 0;
}

switch(step){
  case 0:
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  break;
  case 1:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  break;
  case 2:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  break;
  case 3:
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  break;   
}

delay(3);

Marty+-
 
Příspěvky: 1
Registrován: úte led 01, 2019 6:45 pm

Re: Arduino 3 podlahový výtah

Příspěvekod dub042 » stř led 02, 2019 12:32 pm

A jak to souvisi s fotovoltaikou??? Doporucoval bych dat dotaz na arduino forum
dub042
 
Příspěvky: 208
Registrován: pát kvě 09, 2014 7:11 pm

Re: Arduino 3 podlahový výtah

Příspěvekod rottenkiwi » stř led 02, 2019 12:37 pm

Radšej by som vytvoril polia a tam dal nejaké AND a OR podmienky.

Ak to bude treba rozšíriť na 5 či 10 poschodí, tak to nepojde morom ifov a elsov.

https://www.youtube.com/watch?v=v3j8XftvjXo

https://www.quora.com/How-are-elevators ... programmed
Dělej vše, jak nejlépe dovedeš. Ale ne lépe. 4. dohoda.
Si anode Spectrum BMS SEI formation Float Ochrana High SOC deg. MPPT Post Bud Bindi 1993
Uživatelský avatar
rottenkiwi
 
Příspěvky: 2798
Registrován: pát úno 13, 2015 2:24 pm
Bydliště: SO, SK

Re: Arduino 3 podlahový výtah

Příspěvekod willcz » stř led 02, 2019 12:46 pm

dub042 píše:A jak to souvisi s fotovoltaikou??? Doporucoval bych dat dotaz na arduino forum


Asi skolni uloha ... predpokladam ze podobna otazka bude na x dalsich forech.
google proste nasel i mypower
6.8kWp poly + 2x XTM 4000-48 + 330Ah LiFe + Batrium s CAN
willcz
 
Příspěvky: 432
Registrován: úte zář 06, 2016 1:52 pm
Bydliště: Brno


Zpět na Arduino

Kdo je online

Uživatelé procházející toto fórum: CC [Bot] a 0 návštevníků

Reputation System ©'