Operácie

Steering wheel cleaner: Rozdiel medzi revíziami

Z SensorWiki

(Výsledok)
(Algoritmus a program)
Riadok 106: Riadok 106:
 
=== Algoritmus a program ===
 
=== Algoritmus a program ===
  
Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.
+
V nasledujúcej časti vidíme zdrojový kód čistiaceho systému volantu. Volant sa môže nachádzať v dvoch stavoch:
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.
 
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
 
  
Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
+
# Keď je čistí, teda čistiaci bežec je v pohybe.
 +
# Keď je v stave šoférovania, teda bežec je v pokoji
 +
 
 +
Prechody medzi stavmi sú sprevádzané blikaním RGB ledky.
  
 
<source lang="c">
 
<source lang="c">
/* A nezabudnite zdroják hojne komentovať  */
 
  
int main(void) {
+
/******* definovanie pinov *******/
 +
 
 +
const int motorPin=2;
 +
const int greenPin=6;
 +
const int bluePin=7;
 +
const int redPin=8;
 +
const int eventPin=10;  /* pin sledujúci udalosť pri ktorej sa spustí čistenie */
 +
const int polohaPin=9;  /* pin sledujúci polohu čistiaceho bežca, keď je v pôvodnej polohe zastaví sa motor */
 +
 
 +
 
 +
/******* pomocná premenná definujúca stav volantu *******/
 +
bool motorIsRunning=false;
 +
 
 +
void setup() {
 +
 
 +
  Serial.begin(9600);
 +
 
 +
  pinMode(motorPin, OUTPUT);
 +
  pinMode(greenPin, OUTPUT);
 +
  pinMode(bluePin,  OUTPUT);
 +
  pinMode(redPin,  OUTPUT);
 +
  pinMode(sedloPin,  INPUT);
 +
  pinMode(polohaPin, INPUT);
 +
 
 +
  digitalWrite(greenPin,HIGH); 
 +
 
 +
}
 +
 
 +
void loop() {
 +
 
 +
  if(!motorIsRunning){
 +
    if(digitalRead(sedloPin)){
 +
      startCleaning();
 +
      motorIsRunning=true;   
 +
      }
 
      
 
      
     printf("Hello, World!\n");   
+
  }
    return(0);   
+
  if(motorIsRunning){
 +
  // Serial.println(digitalRead(polohaPin));
 +
    if(digitalRead(polohaPin)){
 +
      stopCleaning();
 +
      motorIsRunning=false;   
 +
    }
 +
  }
 +
 
 +
 
 +
}
 +
 
 +
/******** Funkcia sa zavolá v stave ked je vypnutý motor a rozbehne ho **********/
 +
void startCleaning(){
 +
  for(int i=1;i<5;i++){
 +
    blinkYellow();
 +
    }
 +
    digitalWrite(redPin,HIGH);
 +
    delay(1000);
 +
    digitalWrite(motorPin,HIGH);
 +
    delay(1000);
 +
   
 +
  }
 +
/******** Funkcia sa zavolá v stave ked motor beží a vypne ho **********/
 +
void stopCleaning(){
 +
  digitalWrite(motorPin,LOW);
 +
    for(int i=1;i<5;i++){
 +
    blinkRed();
 +
     }
 +
  digitalWrite(redPin,  LOW);
 +
  delay(500);
 +
  digitalWrite(greenPin,HIGH); 
 +
  }
 +
/***** Funkcia pre blikanie žltou farbou **********/
 +
void blinkYellow(){
 +
  digitalWrite(greenPin,HIGH);
 +
  digitalWrite(redPin,  HIGH);
 +
  delay(400);
 +
  digitalWrite(greenPin,LOW);
 +
  digitalWrite(redPin,  LOW);
 +
  delay(400); 
 +
  }
 +
/***** Funkcia pre blikanie červenou farbou **********/
 +
void blinkRed(){
 +
  digitalWrite(redPin, LOW);
 +
  delay(400);
 +
  digitalWrite(redPin, HIGH);
 +
  delay(400);   
 +
 
 
}
 
}
 
</source>
 
</source>
  
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
 
 
Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]
 
 
[[Médiá:MojProgram.c|program.c]]
 
  
 +
Zdrojový kód: [[Médiá:SteeringWheelCleaner.ino|SteeringWheelCleaner.ino]]
  
 
=== Výsledok ===
 
=== Výsledok ===

Verzia zo dňa a času 19:47, 4. jún 2019

Autor: Marek Trebuľa
Študijný odbor: Robotika a kybernetika 3. Bc. (2019)

Opis projektu

Cieľom projektu je navrhnúť mechanický a elektronický systém pre pohon čistiaceho mechanizmu automobilového volantu.

Vizualizácia volantu s automatickým čistením

Prečo?

Budúcnosť automobilizmu o 20 - 30 rokov predpokladá, že autá budú zdieľané, bude fungovať tzv. "carsharing". Tu nastáva otázka čo s hygienou týchto vozidiel. Hygiena volantu je dôležitá, keďže s ním budú prichádzať ľudia do kontaku pri každej jazde.

Potrebný materiál

Na zostrojenie prototypu pohonného systému pre čistič volantu budete potrebovať:

Reťazová zostava
  1. Arduino Nano
  2. Kontaktné pole
  3. 2x spínač
  4. RGB diódu
  5. Guličkové ložiská 4x12x4mm
  6. Valčekovú reťaz 04A-1 H
  7. 2x reťazová spojka
  8. Reťazové koleso
  9. Motor s prevodovkou
  10. Napájací zdroj 12V
  11. Rezistory
  12. Tranzistor
  13. Prepojovacie vodiče
  14. Tyč s priemerom 4mm
  15. Skrutky a matice

Návod na výrobu

Príprava materálu

Prototyp sa skladá z niekoľkých väčších celkov, ktoré bolo potrebné vyrobiť pred kompletizáciou.

  • 2x maketa volantu vyfrézovaná CNC frézou z MDF dosky hrubej 8mm. Do tejto makety sa budú neskôr osádzať vodiace valčeky a tiež bude o nu priprevnený hnací motor na španovacom mechanizme.
  • Na lasery bolo vyzrezané uchytenie motora z preglejky 5mm hrubej.
Lasercut.PNG
  • Vodiace valčeky boli vytlačené 3D tlačou.
Valcek.PNG
  • Reťazové koleso prenášajúce moment motora na reťaz bolo vytlačené 3D tlačou.
Kolečko.PNG
  • Z mosadznej tyčky o priemere 4mm boli vyrobené osky pre vodiace valčeky, ktoré spolu s oskami budú osadené v ložiskách. Dĺžka osky je 22mm.

Postup

  1. Do oboch makiet boli vhodne zavŕtané osadenia pre ložiská. Vonkajší priemer ložiska je 12mm preto aj tieto zapustenia boli vŕtané vrtákom hrúbky 12mm. Ďalej boli vyvŕtané otvory pre uchytenie španovacieho systému reťaze, ktorého súčasťou je aj motor s prevodovkou.
Zapustenie.png
  1. Na mosadzné osky boli osadené vodiace valčeky spolu s ložiskami.
Loziskoplusvalcek.png
  1. Motor s prevodovkou bol uchytený do španovacieho úchytu.
Spanovak.png
  1. Na výstupný hriadeľ prevodovky bolo nasadené reťazové koleso.(Pozn.: ak kúpite reťazové koleso bez závitu na zaisťovací šrób je potrebné navŕtať a vyrezať závit do náboja reťazového kolesa)
  2. Následne motor + prevodovka + španovací úchyt + reťazové koleso bolo primontované na maketu. Španovací systém bol nastavený tak, aby pri zakladaní reťaze bol čo najvolnejší.
  3. Do makety boli vložené ložiská spolu s vodiacimi valčekmi.
  4. Bola zmeraná potrebná dĺžka valčekovej reťaze a tá bola následne upravená na požadovanú dĺžku.
Mechanizmuskomplet.png
  1. Po založení reťaze je možné priložiť k valčekom z druhej strany druhý kus makety a celý volant spojiť dokopy šróbami.
Set.png
  1. Posledný krok čo sa mechanickej časti týka je došpanovanie reťaze.
  2. Na záver urobiť elektrické zapojenie podľa schémy.
Electric.jpg

Analýza

V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje, ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:

  • popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
  • obrázok zapojenia vývodov použitej súčiastky
  • odkaz na katalógový list
  • priebehy dôležitých signálov
  • este jedna polozka


Popis riešenia

Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru (nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.

Schéma zapojenia snímača Zapojenie.png

Súbor:Example.jpg

Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo nahrať už aspoň 10 študentov.

MojObrazok.jpg

Algoritmus a program

V nasledujúcej časti vidíme zdrojový kód čistiaceho systému volantu. Volant sa môže nachádzať v dvoch stavoch:

  1. Keď je čistí, teda čistiaci bežec je v pohybe.
  2. Keď je v stave šoférovania, teda bežec je v pokoji

Prechody medzi stavmi sú sprevádzané blikaním RGB ledky.

/******* definovanie pinov *******/

const int motorPin=2;
const int greenPin=6;
const int bluePin=7;
const int redPin=8;
const int eventPin=10;   /* pin sledujúci udalosť pri ktorej sa spustí čistenie */
const int polohaPin=9;   /* pin sledujúci polohu čistiaceho bežca, keď je v pôvodnej polohe zastaví sa motor */


/******* pomocná premenná definujúca stav volantu *******/
bool motorIsRunning=false;

void setup() {
  
  Serial.begin(9600);
  
  pinMode(motorPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin,  OUTPUT);
  pinMode(redPin,   OUTPUT);
  pinMode(sedloPin,  INPUT);
  pinMode(polohaPin, INPUT);
  
  digitalWrite(greenPin,HIGH);  

}

void loop() {

  if(!motorIsRunning){
     if(digitalRead(sedloPin)){
       startCleaning();
       motorIsRunning=true;    
      }
    
  }
  if(motorIsRunning){
   // Serial.println(digitalRead(polohaPin));
    if(digitalRead(polohaPin)){
      stopCleaning();
      motorIsRunning=false;    
    }
  }
  

}

/******** Funkcia sa zavolá v stave ked je vypnutý motor a rozbehne ho **********/
void startCleaning(){
  for(int i=1;i<5;i++){
    blinkYellow();
    }
    digitalWrite(redPin,HIGH);
    delay(1000);
    digitalWrite(motorPin,HIGH);
    delay(1000); 
    
  }
/******** Funkcia sa zavolá v stave ked motor beží a vypne ho **********/
void stopCleaning(){
  digitalWrite(motorPin,LOW);
    for(int i=1;i<5;i++){
    blinkRed();
    }
  digitalWrite(redPin,  LOW);
  delay(500);
  digitalWrite(greenPin,HIGH);  
  }
/***** Funkcia pre blikanie žltou farbou **********/
void blinkYellow(){
  digitalWrite(greenPin,HIGH);
  digitalWrite(redPin,  HIGH);
  delay(400);
  digitalWrite(greenPin,LOW);
  digitalWrite(redPin,  LOW);
  delay(400);  
  }
/***** Funkcia pre blikanie červenou farbou **********/
void blinkRed(){
  digitalWrite(redPin,  LOW);
  delay(400);
  digitalWrite(redPin,  HIGH);
  delay(400);  
  
}


Zdrojový kód: SteeringWheelCleaner.ino

Výsledok

Výsledný mechanizmus, ktorý bol vytvorený v tomto projekte bude v ďalšej fáze implementovaný do reálneho volantu, ktorý by sa mal podobať volantu na animácii. Pred tým však, bude znížená hlučnosť mechanizmu, použitím vodiacich ozubených koliesok namiesto valčekov. Tie budú podobne ako valčeky vytlačené na 3D tlači. K reťazi bude čistiaci bežec pripojený pružinovým systémom, ktorý doposiaľ nebol otestovaný.

Mechanizmuskomplet.png
Cast1.gif
Cast2.gif
Gifvol.gif