Operácie

Ovladanie krokoveho motora joystickom + uvod displej: Rozdiel medzi revíziami

Z SensorWiki

(Vytvorená stránka „Záverečný projekt predmetu MIPS / LS2023 - '''Matej Ledecky''' == Zadanie == Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie …“)
 
(Zadanie)
 
(17 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 2: Riadok 2:
  
 
== Zadanie ==
 
== Zadanie ==
Sem príde text zadania, ak bolo len voľne formulované, rozpíšte ho podrobnejšie
+
*1. Prestudovanie datasheetov k danym komponentom (joystick,Lcd/i2c, stepmotor+driver).
 +
*2. Navrh zapojenia a funkcnosti komponentov.
 +
*3. Zapojenie.
 +
*4. Navrh programoveho riesenia
 +
  a, Citanie hodnot s joysticku a vhodna interpretacia pre dalsie pouzitie
 +
  b, 1. Pohyb krokoveho motora v oboch smeroch
 +
  b, 2. Rychlost krokoveho motora
 +
  c, Prepojenie joystick - Motor (ovladanie joystickom smer/rychlost otocenia)
 +
  d, 1. Uvodna obrazovka (vypis privitania a co robi dany projekt na LCD)
 +
  d, 2. Vypis smeru otacania na LCD
 +
*5. Odskusanie funkcnosti (videodokumentacia)
 +
 
 +
'''Hardware:'''
 +
 
 
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
 
[[Obrázok:ard.jpg|400px|thumb|center|Vývojová doska ACROB.]]
 +
 
'''Literatúra:'''
 
'''Literatúra:'''
 
* [http://senzor.robotika.sk/Acrob.pdf Dokumentácia k doske Acrob]
 
* [http://senzor.robotika.sk/Acrob.pdf Dokumentácia k doske Acrob]
* [http://www.humanbenchmark.com/tests/reactiontime/index.php Vyskúšajte si zmerať
+
*pin AD
reakciu on-line]
+
* joy datashet
 +
* step+ D datasheet
 +
*LCD
 +
 
  
 
__TOC__
 
__TOC__
 +
 +
== Analýza a opis riešenia ==
 +
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
 +
 +
=== Algoritmus a program ===
 +
Algoritmus programu je....
 +
 +
<tabs>
 +
<tab name="AVR C-code"><source lang="c++">
 +
#include "main.h" // vlozenie potrebnych includeov prepojeni
 +
 +
#define X_PIN 0 //definovanie pinov joysticku
 +
#define Y_PIN 1
 +
 +
void delay(int delay) // klasicky delay
 +
{
 +
for (int i=1; i<=delay; i++)
 +
_delay_ms(1);
 +
}
 +
 +
void delayus(int delay) //us delay pre pozitie v rotacii ako regulacia rychlosti
 +
{
 +
for (int i=1; i<=delay; i++)
 +
_delay_us(1);
 +
}
 +
 +
void left(char Pole[],int Speed){ //tocenie doprava
 +
for (int L=0;L<10;L++)
 +
for(int i = 0; i < 4; i++){
 +
PORTD = Pole[i];
 +
delayus(4250 - Speed*20);
 +
}
 +
PORTD = 0b00000000;
 +
 +
}
 +
 +
void right(char Pole[], int Speed){ // tocenie dolava
 +
for (int L=0;L<10;L++)
 +
for(int i = 3; i >= 0; i--){
 +
PORTD = Pole[i];
 +
delayus(4000 - Speed*20);
 +
}
 +
PORTD = 0b00000000;
 +
 +
}
 +
 +
 +
int main(void)
 +
{
 +
 +
MCUCR &= ~(1<<PUD);
 +
 +
DDRD |= 0b00111100; //paramatre pre otacanie
 +
char Pole[] = {0b00100000, 0b00010000, 0b00001000, 0b00000100};
 +
 +
int Speed = 0;
 +
 +
unsigned int Valuex; // premenne pre nacitanie s AD prevodnika
 +
unsigned int Valuey;
 +
unsigned int Value;
 +
 +
int x = 0b00001110; // premenna pre mod LCD cursor on/OFF
 +
int y = 0b00001100;
 +
 +
 +
char *num;
 +
 +
TWI_Init(); //inicializacie TWI LCD ADC + uvodne texty
 +
delay(500);
 +
 +
LCD_Init(y);
 +
delay(500);
 +
LCD_clear();
 +
delay(500);
 +
LCD_sendString("Vitajte");
 +
delay(2000);
 +
LCD_clear();
 +
delay(500);
 +
 +
LCD_sendString("Riadenie Motora ");
 +
LCD_setPosition(0,1);
 +
LCD_sendString("Joystickom");
 +
delay(2000);
 +
LCD_clear();
 +
delay(500);
 +
 +
LCD_sendString("Smer otacania");
 +
LCD_setPosition(0,1);
 +
delay(500);
 +
 +
adc_init();
 +
delay(500);
 +
 +
while(1){
 +
 +
Valuex = adc_read(X_PIN)/4; //Citanie s AD do valuex
 +
if(Valuex > 125){ //pobyb packy po osi x dolava
 +
Speed=Valuex-123; //vypocet konstatny rychlosti
 +
left(Pole,Speed); // rotacia dolava
 +
LCD_setPosition(0,1); // pozicia kurzora LCD
 +
LCD_sendString("<--"); // vypis na LCD
 +
 +
}
 +
else if(Valuex < 124){ //to iste len do druhej strany s mensimi upravami kvoli rozdielnym hodnotam s AD
 +
Speed=127-Valuex;
 +
right(Pole, Speed);
 +
LCD_setPosition(0,1);
 +
LCD_sendString("-->");
 +
}
 +
else{
 +
LCD_setPosition(0,1); // KED nic
 +
    LCD_sendString("<->");
 +
}
 +
/* num = (char *)malloc(snprintf(NULL, 0, "%d", o) + 1);
 +
LCD_sendString(num);
 +
free(num); */
 +
 +
 +
}
 +
return(0);
 +
 +
}
 +
 +
</source></tab>
 +
<tab name="main.h"><source lang="c++">
 +
 +
#ifndef MAIN_H_
 +
#define MAIN_H_
 +
 +
#define BAUD 9600
 +
#define F_CPU 16000000UL
 +
 +
#include <avr/io.h>
 +
#include <avr/interrupt.h>
 +
#include <stdio.h>
 +
#include <util/delay.h>
 +
 +
#include "adc.h"
 +
#include "twi.h"
 +
#include "lcd.h"
 +
 +
#endif /* MAIN_H_ */
 +
</source></tab>
 +
</tabs>
 +
 +
== Analýza a opis riešenia ==
 +
1.
 +
2.
 +
3.
 +
 +
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...
 +
[[Súbor:ledRGB.jpg]]
 +
Nezabudnite doplniť schému zapojenia!
 +
[[Súbor:schd.png|400px|thumb|center|Schéma zapojenia LCD displeja.]]
  
 
== 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...
 
Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...

Aktuálna revízia z 20:07, 18. máj 2024

Záverečný projekt predmetu MIPS / LS2023 - Matej Ledecky

Zadanie

  • 1. Prestudovanie datasheetov k danym komponentom (joystick,Lcd/i2c, stepmotor+driver).
  • 2. Navrh zapojenia a funkcnosti komponentov.
  • 3. Zapojenie.
  • 4. Navrh programoveho riesenia
  a, Citanie hodnot s joysticku a vhodna interpretacia pre dalsie pouzitie
  b, 1. Pohyb krokoveho motora v oboch smeroch
  b, 2. Rychlost krokoveho motora
  c, Prepojenie joystick - Motor (ovladanie joystickom smer/rychlost otocenia)
  d, 1. Uvodna obrazovka (vypis privitania a co robi dany projekt na LCD)
  d, 2. Vypis smeru otacania na LCD
  • 5. Odskusanie funkcnosti (videodokumentacia)

Hardware:

Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...

Algoritmus a program

Algoritmus programu je....

#include "main.h"		// vlozenie potrebnych includeov prepojeni	

#define X_PIN 0			//definovanie pinov joysticku
#define Y_PIN 1

void delay(int delay)		// klasicky delay
{
	for (int i=1; i<=delay; i++)
	_delay_ms(1);
}

void delayus(int delay)			//us delay pre pozitie v rotacii ako regulacia rychlosti
{
	for (int i=1; i<=delay; i++)
	_delay_us(1);
}

void left(char Pole[],int Speed){		//tocenie doprava
	 for (int L=0;L<10;L++)
	for(int i = 0; i < 4; i++){
		PORTD = Pole[i];
		delayus(4250 - Speed*20);
	}
		PORTD = 0b00000000;
	 
}

void right(char Pole[], int Speed){		// tocenie dolava
	 for (int L=0;L<10;L++)
	for(int i = 3; i >= 0; i--){
		PORTD = Pole[i];
		delayus(4000 - Speed*20);
	}
		PORTD = 0b00000000;
	 
}


int main(void)
{
	
	MCUCR &= ~(1<<PUD);

	DDRD |= 0b00111100;		//paramatre pre otacanie
	char Pole[] = {0b00100000, 0b00010000, 0b00001000, 0b00000100};
 
	int Speed = 0;

	unsigned int Valuex;	// premenne pre nacitanie s AD prevodnika
	unsigned int Valuey;
	unsigned int Value;
	
	int x = 0b00001110; // premenna pre mod LCD cursor on/OFF
	int y = 0b00001100;
	
	
	char *num;

	TWI_Init();			//inicializacie TWI LCD ADC + uvodne texty
	delay(500);
	
	LCD_Init(y);
	delay(500);
	LCD_clear();
	delay(500);
	LCD_sendString("Vitajte");		
	delay(2000);
	LCD_clear();
	delay(500);
	
	LCD_sendString("Riadenie Motora ");
	LCD_setPosition(0,1);
	LCD_sendString("Joystickom");
	delay(2000);
	LCD_clear();
	delay(500);

	LCD_sendString("Smer otacania");
	LCD_setPosition(0,1);
	delay(500);
	
	adc_init();
	delay(500);
	
	while(1){

		Valuex = adc_read(X_PIN)/4;		//Citanie s AD do valuex
		if(Valuex > 125){				//pobyb packy po osi x dolava
			Speed=Valuex-123;			//vypocet konstatny rychlosti
			left(Pole,Speed);			// rotacia dolava
			LCD_setPosition(0,1);		// pozicia kurzora LCD
			LCD_sendString("<--");		// vypis na LCD
			
		}
		else if(Valuex < 124){			//to iste len do druhej strany s mensimi upravami kvoli rozdielnym hodnotam s AD
			Speed=127-Valuex;
			right(Pole, Speed);
			LCD_setPosition(0,1);
			LCD_sendString("-->");
		}
		else{
			LCD_setPosition(0,1);		// KED nic
		    LCD_sendString("<->");
		} 
	/*	num = (char *)malloc(snprintf(NULL, 0, "%d", o) + 1);
		LCD_sendString(num);
		free(num); */
	

	}
	return(0);
	
}
#ifndef MAIN_H_
#define MAIN_H_

#define BAUD 9600
#define F_CPU 16000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <util/delay.h>

#include "adc.h"
#include "twi.h"
#include "lcd.h"

#endif /* MAIN_H_ */

Analýza a opis riešenia

1. 2. 3.

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... LedRGB.jpg Nezabudnite doplniť schému zapojenia!

Schéma zapojenia LCD displeja.

Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami...