Operácie

Elektronická škrtiaca klapka: Rozdiel medzi revíziami

Z SensorWiki

(Algoritmus a program)
(46 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 9: Riadok 9:
  
  
[[Obrázok: UNO_schema_na_zaciatok_stranky.jpg|700px|thumb|center|Vývojová doska Arduino UNO R3]]
+
[[Obrázok: UNO_schema_na_zaciatok_stranky.jpg|400px|thumb|center|Vývojová doska Arduino UNO R3]]
  
 
'''Literatúra:'''  
 
'''Literatúra:'''  
 
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
 
* [http://ap.urpi.fei.stuba.sk/sensorwiki/index.php/Acrob_technical_description Dokumentácia k doske Acrob]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať reakciu on-line]
+
 
  
  
Riadok 20: Riadok 20:
 
== Analýza  a opis riešenia ==
 
== Analýza  a opis riešenia ==
  
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
+
Mojou témou semestrálnej práce je ovládanie škrtiacej klapky pomocou plynového pedálu. Zapojenie a vypracovanie projektu je inšpirované cvičením 8: (http://senzor.robotika.sk/sensorwiki/index.php/A/D_prevodn%C3%ADk).<p>
 +
<br>
 +
Súčiastky a diely ktoré boli použité na zostrojenie projektu:<br>
 +
<br>
 +
• elektronický plynový pedál (1K2 721 503 AJ) <br>
 +
• elektronická škrtiaca klapka (047 133 062) <br>
 +
• sacie potrubie (047 129 743 G) <br>
 +
• arduino r3 doska (Microchip ATmega328P) <br>
 +
• adaptér 230V/9V (ASSA107E-090100) <br>
 +
• napatovy stabilizator (7805) <br>
 +
• mosfet transistor (IRF540N) <br>
 +
• rezistory 1kΩ, 220Ω <br>
 +
• breadboard (MB-102 830/400) <br>
 +
• duPont káble M-M - 40x, 40 cm <br>
 +
<br>
 +
Presný opis fungovania elektrického obvodu: <br>
  
[[Súbor:ledRGB.jpg|400px|thumb|center|RGB LED.]]
+
<br>
  
Nezabudnite doplniť schému zapojenia!
+
V akej pozícií je pedál toľko energie sa vysiela na pohon škrtiacej klapky, v našom prípade s aktuálnym zapojením sa klapka začne hýbať až po prekročení 40% zatlačenia pedálu, aby sme predišli tomuto neefektívnemu ovládaniu a chceliť docieliť identický pohyb klapky a pedálu tak som pre budúce vylepšovanie do projektu zakomponoval aj predprípravu (arduino výstup A3, A1 a A2) na spätnoväzobný regulátor aby  klapka presne kopírovala polohu pedálu.
 +
[[Súbor:schemap.jpg|500px|thumb|center|ELEKTRONICKÁ SCHÉMA]]
  
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
+
Vizuálna reprezentácia PWM (Pulse width modulation), šírka impulzu sa mení podľa závislosti zatlačenia pedálu.
 +
[[Súbor:Osciloskopp.jpg|800px|thumb|center|ZÁZNAM Z OSCILOSKOPU]]
  
  
 
=== Algoritmus a program ===
 
=== Algoritmus a program ===
  
Algoritmus programu je....
+
Celý kód som použil z 8 cvičenia, kde sme sa mohli naučiť ovládať ledku pomocou PWM, kód je napísaný v jednom .c súbore – na spustenie treba 4 knižnice.
 
 
  
 
<tabs>
 
<tabs>
<tab name="AVR C-code"><source lang="c++" style="background: LightYellow;">
+
<tab name="main.c"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
#include <avr/io.h>
 
#include "uart.h"
 
#include "uart.h"
Riadok 48: Riadok 64:
 
   hw_init();
 
   hw_init();
 
   uart_init();
 
   uart_init();
   stdout = &mystdout;           // printf() works from now
+
   stdout = &mystdout;        
 
   unsigned int measuredValue;
 
   unsigned int measuredValue;
  
   DDRD|=(1<<PD6);       // Init PD5 and PD6 pins as output
+
   DDRD|=(1<<PD6);      
  
 +
  TCNT0=0;                       
  
  //Initialize Timer0
+
   OCR0A=0;                    
 
+
                             
  TCNT0=0;                        // Set Initial Timer value
 
 
 
   OCR0A=0;                       // Set Initial Pulse width
 
 
 
 
 
                                //Set fast PWM mode + clear OC0A and set OC0B on compare match
 
 
 
 
   TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
 
   TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  
   TCCR0B|=(1<<CS02)|(1<<CS00);      // Set prescaller 1024 and start timer
+
   TCCR0B|=(1<<CS02)|(1<<CS00);       
 
    
 
    
 
   while(1)
 
   while(1)
Riadok 80: Riadok 90:
  
 
</source></tab>
 
</source></tab>
<tab name="filename.h"><source lang="c++" style="background: LightYellow;">
+
<tab name="adc.h"><source lang="c++" style="background: LightYellow;">
 
#include <avr/io.h>
 
#include <avr/io.h>
  
void adc_init(void);                                   // A/D converter initialization
+
void adc_init(void);                                
  
 
unsigned int adc_read(char a_pin);
 
unsigned int adc_read(char a_pin);
 
</source></tab>
 
</source></tab>
</tabs>
+
<tab name="adc.c"><source lang="c++" style="background: LightYellow;">
 +
#include <stdio.h>
 +
#include "adc.h"
 +
 
 +
void adc_init(void){
 +
ADMUX=(1<<REFS0);
 +
ADCSRA=(1<<ADEN)
 +
|(1<<ADPS2)|(1<<ADPS2)|(1<<ADPS0);
 +
}
 +
 
 +
unsigned int adc_read(char a_pin){
 +
a_pin &=0x07;
 +
ADMUX =(ADMUX & 0xF8)|a_pin;
 +
ADCSRA |=(1<<ADSC);
 +
while(ADCSRA & (1<<ADSC));
 +
return (ADC);
 +
}
  
Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x ''zdrojaky.zip'':
 
  
 +
</source></tab>
 +
</tabs>
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
 
Zdrojový kód: [[Médiá:projektMenoPriezvisko.zip|zdrojaky.zip]]
  
 
=== Overenie ===
 
=== Overenie ===
  
Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia.  
+
Video reprezentácia funkčného zaraidenia.
Na konci uvádzame fotku záverečnej obrazovky pred resetom. Vypísaný je tu priemerný čas a najlepší čas.
+
[[Súbor:sklapka.jpg|550px|thumb|center|Aplikácia.]]
 
 
[[Súbor:sklapka.jpg|400px|thumb|center|Aplikácia.]]
 
  
 
'''Video:'''
 
'''Video:'''
 
<center><youtube>_bB7sJQAfE8</youtube></center>
 
<center><youtube>_bB7sJQAfE8</youtube></center>
  
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
+
 
  
 
[[Category:AVR]] [[Category:MIPS]]
 
[[Category:AVR]] [[Category:MIPS]]

Verzia zo dňa a času 18:02, 26. máj 2024

Záverečný projekt predmetu MIPS / LS2024 - Peter Szovics


Zadanie

Zostrojte a naprogramujte ovladanie škrtiacej klapky pomocou plynového pedálu.



Vývojová doska Arduino UNO R3

Literatúra:


Analýza a opis riešenia

Mojou témou semestrálnej práce je ovládanie škrtiacej klapky pomocou plynového pedálu. Zapojenie a vypracovanie projektu je inšpirované cvičením 8: (http://senzor.robotika.sk/sensorwiki/index.php/A/D_prevodn%C3%ADk).


Súčiastky a diely ktoré boli použité na zostrojenie projektu:

• elektronický plynový pedál (1K2 721 503 AJ)
• elektronická škrtiaca klapka (047 133 062)
• sacie potrubie (047 129 743 G)
• arduino r3 doska (Microchip ATmega328P)
• adaptér 230V/9V (ASSA107E-090100)
• napatovy stabilizator (7805)
• mosfet transistor (IRF540N)
• rezistory 1kΩ, 220Ω
• breadboard (MB-102 830/400)
• duPont káble M-M - 40x, 40 cm

Presný opis fungovania elektrického obvodu:

V akej pozícií je pedál toľko energie sa vysiela na pohon škrtiacej klapky, v našom prípade s aktuálnym zapojením sa klapka začne hýbať až po prekročení 40% zatlačenia pedálu, aby sme predišli tomuto neefektívnemu ovládaniu a chceliť docieliť identický pohyb klapky a pedálu tak som pre budúce vylepšovanie do projektu zakomponoval aj predprípravu (arduino výstup A3, A1 a A2) na spätnoväzobný regulátor aby klapka presne kopírovala polohu pedálu.

ELEKTRONICKÁ SCHÉMA

Vizuálna reprezentácia PWM (Pulse width modulation), šírka impulzu sa mení podľa závislosti zatlačenia pedálu.

ZÁZNAM Z OSCILOSKOPU


Algoritmus a program

Celý kód som použil z 8 cvičenia, kde sme sa mohli naučiť ovládať ledku pomocou PWM, kód je napísaný v jednom .c súbore – na spustenie treba 4 knižnice.

#include <avr/io.h>
#include "uart.h"
#define F_CPU 16000000UL
#define BAUDRATE       9600
#include <stdio.h>
FILE mystdout = FDEV_SETUP_STREAM(uart_putc, NULL, _FDEV_SETUP_WRITE);
                              
int main(void)
{
  adc_init();
  hw_init();
  uart_init();
  stdout = &mystdout;          
  unsigned int measuredValue;

  DDRD|=(1<<PD6);       

  TCNT0=0;                        

  OCR0A=0;                      
                              
  TCCR0A|=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);

  TCCR0B|=(1<<CS02)|(1<<CS00);      
  
  while(1)
  {
	measuredValue = adc_read(4);
	printf("hodnota: %04d \r",measuredValue);
	
	OCR0A=measuredValue/4;
  }
  
  return(0);
}
#include <avr/io.h>

void adc_init(void);                                  

unsigned int adc_read(char a_pin);
#include <stdio.h>
#include "adc.h"

void adc_init(void){
	ADMUX=(1<<REFS0);
	ADCSRA=(1<<ADEN)
		|(1<<ADPS2)|(1<<ADPS2)|(1<<ADPS0);		
}

unsigned int adc_read(char a_pin){
	a_pin &=0x07;
	ADMUX =(ADMUX & 0xF8)|a_pin;
	ADCSRA |=(1<<ADSC);
	while(ADCSRA & (1<<ADSC));
	return (ADC);
}

Zdrojový kód: zdrojaky.zip

Overenie

Video reprezentácia funkčného zaraidenia.

Aplikácia.

Video: