NXT rileva ostacolo

Avanza con una velocità proporzionale alla distanza dell’ostacolo che ha di fronte; se la distanza è grande, massima velocità; se la distanza è piccola, minima velocità; se la distanza è inferiore a 10 cm, si ferma, altrimenti riparte.

import lejos.nxt.Button;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.nxt.UltrasonicSensor;
import lejos.robotics.navigation.DifferentialPilot;
import lejos.util.Delay;

public class Ostacoli {

	public static void main(String[] args) {
		DifferentialPilot dp = new DifferentialPilot(5.5f, 11.5f, Motor.A, Motor.C);
		UltrasonicSensor us = new UltrasonicSensor(SensorPort.S1);

		dp.forward();
		do {
			int d = us.getDistance();
			if (d < 10)
				dp.stop();
			else {
				dp.setTravelSpeed(d);
				dp.forward();
			}
			Delay.msDelay(100);
		} while (!Button.ESCAPE.isDown());
	}

}

NXT sensore US

Esegue una sequenza di beep-beep con periodo proporzionale alla distanza dell’ostacolo; se l’ostacolo è superiore a 50 cm, nessun beep-beep; a distanza inferiore il beep-beep diventa più veloce, quanto più l’ostacolo è vicino.

public class SensoreUS {

	public static void main(String[] args) {
		UltrasonicSensor us = new UltrasonicSensor(SensorPort.S1);
		do {	
			int d = us.getDistance();
			if (d<50) {
				Sound.beep();
				Delay.msDelay(d*10);
			}
		} while (!Button.ESCAPE.isDown());
	}

}

NXT segue linea

import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.LightSensor;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.robotics.navigation.DifferentialPilot;
import lejos.util.Delay;

public class SeguiLinea {

	public static void main(String[] args) {
		LightSensor ls = new LightSensor(SensorPort.S1, true); // led acceso
		DifferentialPilot dp = new DifferentialPilot(5.5, 11.5, Motor.A, Motor.C);

		int valS = 0, valC = 0, valM = 0;

		LCD.drawString("Misura scuro", 0, 0);
		Delay.msDelay(2000);
		valS = ls.getLightValue();

		LCD.drawString("Misura chiaro", 0, 0);
		Delay.msDelay(2000);
		valC = ls.getLightValue();

		valM = (valC + valS) / 2;
		do {
			int val = ls.getLightValue();
			LCD.drawInt(val, 0, 0);
			dp.steer((val - valM) * 10);
		} while (!Button.ESCAPE.isDown());
	}

}

Osservazione di onde gravitazionali prodotte dalla fusione di un buco nero binario

Da GiovedìScienza del 18 febbraio 2016: intervista di Piero Bianucci a Vincenzo Barone (Università del Piemonte Orientale e INFN-Torino) e ad Andrea Chincarini (fisico sperimentale, ricercatore della collaborazione europea VIRGO-EGO, INFN di Genova).

NXT ricerca e insegue luce

import javax.microedition.lcdui.Graphics;

import lejos.nxt.Button;
import lejos.nxt.LightSensor;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.robotics.navigation.DifferentialPilot;
import lejos.util.Delay;

public class Segui_luce {

	public static void main(String[] args) {
		Graphics g = new Graphics();
		DifferentialPilot df = new DifferentialPilot(5.5, 11.5, Motor.A, Motor.C);
		LightSensor ls = new LightSensor(SensorPort.S1, false);
		do {
			int val = 0, valMax = 0, a = 0, aMax = 0;
			for (int x = 0; x < 36; x++) {
                                val = ls.getLightValue();
                                g.drawLine(x, 0, x, val / 2);
                                if (val > valMax) {
					valMax = val;
					aMax = a;
				}
				df.rotate(10);
				a += 10;
			}
			df.rotate(aMax);
			df.forward();
			Delay.msDelay(2000);
			g.clear();
		} while (!Button.ESCAPE.isDown());
	}

}

Sensore di luce

import javax.microedition.lcdui.Graphics;

import lejos.nxt.Button;
import lejos.nxt.LCD;
import lejos.nxt.LightSensor;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.robotics.navigation.DifferentialPilot;
import lejos.util.Delay;

public class IstogrammaLuce {
	// realizzare un programma che visualizzi l'intensità di luce letta al
	// sensore di luce come valore testuale nella posizione 0, 0 sia come
	// istogramma rettangolare da sinistra verso destra con un'altezza
	// proporzionale all'intensità con refresh ogni 1/10 di secondo
	public static void main(String[] args) {
		LightSensor ls = new LightSensor(SensorPort.S1, false);
		DifferentialPilot dp = new DifferentialPilot(5.5, 11.5, Motor.A,
				Motor.C);
		Graphics g = new Graphics();
		dp.forward();
		do {
			g.clear();
			int val = ls.readValue();
			LCD.drawInt(val, 0, 0);
			g.fillRect(0, 40, val / 2, 50);
			Delay.msDelay(100);
			if (val > 50) {
				dp.rotate(-90);
				dp.forward();
			}
		} while (!Button.ESCAPE.isDown());
	}
}

Sensore di suono con grafico

import javax.microedition.lcdui.Graphics;

import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.SoundSensor;
import lejos.util.Delay;

public class Suono {

	public static void main(String[] args)
	{
		SoundSensor ss = new SoundSensor(SensorPort.S1);
		Graphics g = new Graphics();
		
		int valore = 0, x = 0;
		
		do {
			valore = ss.readValue();
			g.setColor(1);
			g.drawLine(x, 0, x,63);
			g.setColor(0);
			g.drawLine(x, 0, x, valore/2);
			if (x==99)				
				x = 0;
			Delay.msDelay(100);
		} while(!Button.ESCAPE.isDown());
	}
}

Cubica

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cubica</title>
    </head>
    <body>
        <h1>Cubica</h1>
        <p>y = a x³ + b x² + c x + d</p>
        <form action="index.jsp" method="get">
            a = <input type="text" name="a"/><br/>
            b = <input type="text" name="b"/><br/>
            c = <input type="text" name="c"/><br/>
            d = <input type="text" name="d"/><br/>
            <input type="submit" value="Disegna" />
        </form>
        <p><img width="400" height="400" src="grafico?a=<%=request.getParameter("a")%>&b=<%=request.getParameter("b")%>&c=<%=request.getParameter("c")%>&d=<%=request.getParameter("d")%>" /></p>
    </body>
</html>

grafico.java

double a = 0.0, b = 0.0, c = 0.0, d = 0.0;

private double f(double x) {
    return a * x * x * x + b * x * x + c * x + d;
}

private int xg(double x) {
    return 200 + (int) Math.round(x * 40.0);
}

private int yg(double y) {
    return 200 - (int) Math.round(y * 40.0);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("image/png");
    try (OutputStream os = response.getOutputStream()) {
        // crea l'immagine
        BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
        Graphics g = img.createGraphics();
        // cancella lo sfondo
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 400, 400);
        // disegna gli assi cartesiani
        g.setColor(Color.BLACK);
        g.drawLine(0, 200, 400, 200);
        g.drawString("X", 390, 190);
        g.drawLine(200, 0, 200, 400);
        g.drawString("Y", 210, 10);
        try {
            // legge i parametri
            a = Double.parseDouble(request.getParameter("a"));
            b = Double.parseDouble(request.getParameter("b"));
            c = Double.parseDouble(request.getParameter("c"));
            d = Double.parseDouble(request.getParameter("d"));
            // visualizza i parametri
            g.drawString("a = " + a, 0, 20);
            g.drawString("b = " + b, 0, 40);
            g.drawString("c = " + c, 0, 60);
            g.drawString("d = " + d, 0, 80);
            // disegna il grafico
            g.setColor(Color.BLUE);
            for (double x = -10.0; x < 10.0; x += 0.001) {
                double y = f(x);
                g.drawLine(xg(x), yg(y), xg(x), yg(y));
            }
        } catch (Exception e) {
            g.drawString("Alcuni parametri mancanti", 0, 20);
            g.drawString("o non inseriti correttamente", 0, 40);
        }
        // invia l'immagine in output
        ImageIO.write(img, "png", os);
        os.close();
    }
}

Grafico e audio del TouchSensor premuto

import javax.microedition.lcdui.Graphics;

import lejos.nxt.Button;
import lejos.nxt.SensorPort;
import lejos.nxt.Sound;
import lejos.nxt.TouchSensor;
import lejos.util.Delay;

public class Line {

	public static void main(String[] args) {

		Graphics g = new Graphics();
		TouchSensor ts = new TouchSensor(SensorPort.S1);
		int x = 0;
		int y1 = 32, y2 = 32;

		do {
			g.setColor(1);
			g.drawLine(x, 0, x, 63);

			g.setColor(0);
			if (ts.isPressed()) {
				y2 = 22;
				Sound.beep();
			} else
				y2 = 32;

			g.drawLine(x, y1, x, y2);
			y1 = y2;
			x++;

			if (x == 100)
				x = 0;

			Delay.msDelay(100);
		} while (!Button.ESCAPE.isDown());

	}
}

Uso del touch-sensor sull’NXT

import lejos.nxt.Button;
import lejos.nxt.Motor;
import lejos.nxt.SensorPort;
import lejos.nxt.TouchSensor;
import lejos.robotics.navigation.DifferentialPilot;
import lejos.util.Delay;

public class ProvaTouch {

	public static void main(String[] args) {
		TouchSensor ts = new TouchSensor(SensorPort.S4);

		DifferentialPilot dp = new DifferentialPilot(5.5, 11.5, Motor.A, Motor.C);
		dp.forward();

		do {
			if (ts.isPressed()) {
				dp.backward();
				Delay.msDelay(500);
				dp.rotate(180);
				dp.forward();
			}
		} while (!Button.ESCAPE.isDown());

		dp.stop();
	}
}