kramann.info
© Guido Kramann

Login: Passwort:










7 Regelungssysteme - Autonomes Vehikel mit Android-Tablet

7 Control Systems - Autonomous Vehicle with Android Tablet (EN google-translate)

7 Systemy sterowania - Autonomiczny pojazd z tabletem z systemem Android (PL google-translate)

Eine einfache Umsetzungsidee zu einem AV mit einem Android-Tablet:

A simple implementation idea for an AV with an Android tablet:

Prosty pomysł na wdrożenie AV z tabletem z Androidem:

  • Das Tablet ist waagerecht.
  • Die Antriebseinheit ist mit 360Grad-Servos realisiert.
  • Die PWM-Signale für die Servos werden über den Audioausgang des Tablets zur Verfügung gestellt.
  • Erster Test: Fahrzeug fährt immer in die gleiche Himmelsrichtung (Sollwert), Sensor ist der Kompass.
Entwicklung in Echtzeitsysteme
Development in real-time systems
Rozwój w systemach czasu rzeczywistego

Ausgehend von einem einfachen Programm und einer einfachen Verstärkerschaltung für den Audioausgang, soll ein Programm entwickelt werden, das es erlaubt direkt zwei Servos über den Auduiausgang angesteuert werden.

Starting with a simple program and a simple amplifier circuit for the audio output, should a program can be developed that allows directly two servos over the Auduiausgang be controlled.

Zaczynając od prostego programu i prostego obwodu wzmacniacza dla wyjścia audio, powinien można opracować program, który pozwala bezpośrednio na dwa serwomys Auduiausgang być kontrolowany.

Teil 1 - Nachvollziehen eines einfachen Tests, um digitale Pulse an einen Mikrocontroller zu schicken

Part 1 - Understand a simple test to send digital pulses to a microcontroller

Część 1 - Zrozumienie prostego testu wysyłania cyfrowych impulsów do mikrokontrolera

package processing.test.avrconnect1;

import processing.core.*; 

import android.media.AudioTrack;
import android.media.AudioFormat;
import android.media.AudioManager;

public class avrconnect1 extends PApplet {


boolean aktiv = false; 

int sr;
int buffsize;

//create an audiotrack object
AudioTrack audioTrack;

public int PULSE = 15;
public int pulse = 0;

short[] samples;
int amp = 10000;
float twopi = 2.0f*PI;
float fr = 440.0f;
float fr2 = 4.4f;
float fr4 = 1.1f;
float fr3 = 220.0f;
float ph = 0.0f;   
float ph2 = 0.0f;   
float ph3 = 0.0f;   
float ph4 = 0.0f;   
float change=0.0f;
float change2=0.0f;

Tonspieler tonspieler;


public void setup()
{
	sr = 44100;

	buffsize = AudioTrack.getMinBufferSize(sr, AudioFormat.CHANNEL_OUT_MONO, 
	        AudioFormat.ENCODING_PCM_16BIT);

	//create an audiotrack object
	audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sr, 
	                                    AudioFormat.CHANNEL_OUT_MONO, 
	                                    AudioFormat.ENCODING_PCM_16BIT, 
	                                    buffsize, 
	                                    AudioTrack.MODE_STREAM);


	samples= new short[buffsize];
   
	tonspieler = new Tonspieler();
	
	Thread t = new Thread(tonspieler);
	t.start();
	audioTrack.play();
}

public void draw()
{
    clear();
    background(0);
    if(aktiv)    
        fill(0,255,0);
    else
        fill(255,0,0);    
    ellipse(width/2,height/2,width/2,height/2);

}

public void mousePressed()
{
    aktiv = !aktiv;
    pulse=0;
}

private class Tonspieler implements Runnable
{
	public void run()
	{
		int zaehler = 0;
		while(true)
		{
			if(aktiv)
			{
				  for(int i=0;i<buffsize;i++)
				  {  
					 if(zaehler<2 && pulse<PULSE)
					 {	 
					     samples[i] = Short.MAX_VALUE;
					     
					 }    
					 else
						 samples[i] = Short.MIN_VALUE;
//    					 samples[i] = (short)0;
				     zaehler++;
				     if(zaehler>=4)
				     {
				         pulse++;
				         zaehler=0;
				     }
				     
				  } 
				  audioTrack.write(samples, 0, buffsize);
				
			}
		}
	}
}


}

Code 7-1: Quelltext - Android-seitig

  • Erläuterung

Das Programm verschickt bei jedem Einschalten ( mousePressed(), aktiv==true ) 15 Rechteckpulse an den verbundenen Mikrocontroller.

The program sends 15 rectangular pulses each time it is switched on (mousePressed (), active == true) to the connected microcontroller.

Program wysyła 15 prostokątnych impulsów za każdym razem, gdy jest włączony (mousePressed (), aktywny == true) do podłączonego mikrokontrolera.

android_eclipse_projekt.zip - Android/ Eclipse-Projekt zu obigem Quelltext.
#include<avr/io.h>

int main()
{
    unsigned char akku;
    unsigned char x;
    unsigned char zahl;
    
    DDRB=0;
	DDRA=0;
//	PORTA=255;
	PORTA=0;
	DDRC=255;

        akku=0;
	zahl=0;
	x=0;
	PORTC=zahl;




        while(1)
	{
	        akku=PINB;
		x=PINA;
	        if((akku & 0b00000001)>0)
		    zahl=0;
                if( (x & 0b00000001)>0)
		{
		    zahl++;
			while( (x & 0b00000001)>0)
			{
			    x=PINA;
			    DDRD=0;
			}
		}
		PORTC=zahl;
	}

}

Code 7-2: Mikrocontroller-Quelltext zum Versuch digitale Pulse über den Audio-Ausgang zu übertragen.

mikrocontroller_projekt.zip - zugehöriges Mikrocontroller-Projekt
Versuchsaufbau - digitale Pulse an Mikrocontroller übertragen.

Bild 7-1: Versuchsaufbau - digitale Pulse an Mikrocontroller übertragen.

Verwendete Verstärkerschaltung.

Bild 7-2: Verwendete Verstärkerschaltung.

Musterlösung
solution
rozwiązanie
Verwendete Verstärkerschaltung zur Erzeugung von Servo-PWM-Signalen.

Bild 7-3: Verwendete Verstärkerschaltung zur Erzeugung von Servo-PWM-Signalen.