LÆR ARDUINO

INTRODUKSJON TIL LØSNINGSFORSLAG

Introduksjon

Løsningsforslagene er et av mange muligheter til å løse oppgavene på. Forsøk å løse oppgaven på egenhånd, før løsningsforslag benyttes. Ikke alle oppgavene har løsningsforslag tilgjengelig.

LØSNINGSFORSLAG OPPGAVE 1

Dataoverføring

Løsningsforslag dataoverføring

Et eksempel på oppsett med mottakeren og senderen

Sende kode:
/* FILE: MXFS03V_433MHZ_MODULE_HCMODU0007_TRANSMIT_EXAMPLE.pde DATE:
Dette er et eksempel på hvordan du bruker 433MHz trådløs sendermodulen (HCMODU0007)
som er Tx-delen av tranmitter- og mottakermodulparet. Dette eksemplet gjør bruk av
VirtualWire-biblioteket skrevet av Mike McCauley. Skissen vil lese en verdi fra analog inngang
A0 og overføre den som 2 byte til mottakermodulen en gang i sekundet.
Tx MODULE CONNECTIONS:
PIN DESCRIPTION
	1. 1 GND
	2. 2 VCC (3.512V)
	3. 3 TX DATA
ARDUINO PIN GND
VCC
D2
*/

#include  // Inkluder VirtualWire-biblioteket
const int TX_DIO_Pin = 2; // Digital IO-pin som vil bli brukt til å sende data til senderen
void setup() {
pinMode(13, OUTPUT);

// Initialiserer DIO-porten som brukes til å sende data til Tx-modulen
vw_set_tx_pin(TX_DIO_Pin);

// Sett senket logikknivå (LOW = overfør for denne versjon av modulen)
vw_set_ptt_inverted(true);

// Send på 2000 bits per sekund
vw_setup(2000); // Bits per sec }

/* Hoved programmet */
void loop()
{

// Midlertidig lagres verdien fra analog inngang A0
unsigned int Data;

// Overføringsbufferen som vil holde dataene som skal overføres.
byte TxBuffer[2];

// Les analog inngang A0...
Data = analogRead(A0);

// ... og lagre den som høy og lav byte i overføringsbufferen
TxBuffer[0] = Data >> 8; TxBuffer[1] = Data;

// Slå på lysdioden på pin 13 for å indikere at vi skal sende data
digitalWrite(13, HIGH);

// Send dataene (2 byte)
vw_send((byte *)TxBuffer, 2);

// Vent til dataene er sendt
vw_wait_tx();

// Slå av lysdioden på pin 13 for å indikere at vi nå har sendt dataene
digitalWrite(13, LOW);

// Gjør ingenting for et sekund. Senk denne verdien for å sende data raskere
delay(1000);
}

Mottaker kode:
/* FILE: MX05V_433MHZ_MODULE_HCMODU0007_RECEIVE_EXAMPLE.pde DATE: 03/03/13

Rx MODULE CONNECTIONS:
PIN DESCRIPTION
	1. 1 GND
	2. 2 RX DATA
	3. 3 RX DATA
	4. 4 VCC (5V)
ARDUINO PIN GND
D2
N/A
VCC
*/

// Inkluder VirtualWire-biblioteket
#include 

// Digital IO-port som vil bli brukt til mottak av data fra mottakeren
const int RX_DIO_Pin = 2;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);

// Initialiserer DIO-porten som brukes til å motta data fra Rx-modulen
vw_set_rx_pin(RX_DIO_Pin);

// Motta med 2000 bits per sekund
vw_setup(2000);

// Aktiver mottakeren
vw_rx_start(); }

/* Hovedprogram */

void loop()
{

// Still mottakerbufferstørrelsen til 2 byte
uint8_t Buffer_Size = 2;

// Holder de gjenopptatte dataene
unsigned int Data;

// Mottaksbufferen
uint8_t RxBuffer[Buffer_Size];

/* Har en melding blitt mottatt? */
if (vw_get_message(RxBuffer, &Buffer_Size)) // Nonblocking
{

/* I så fall slår du på LED-lampen som er koblet til DIO 13 for å indikere dette */
digitalWrite(13, HIGH);

/* Lagre mottatte høye og lave byte data */
Data = RxBuffer[0] << 8 | RxBuffer[1];

/* Send disse dataene til UART */
Serial.print("Analogue pin A0: ");
Serial.println(Data);

/* Slå av lysdioden på port 13 for å indikere at dataene nå er mottatt */
digitalWrite(13, LOW);
}
}

				

Et enda enklere eksempel på oppsett med mottakeren og senderen

SSketch - Tilkobling av sendermodul til Arduino:

/*
En enkel send sketch
Denne skissen overfører en kort tekstmelding ved hjelp av VirtualWire-biblioteket
Koble transmitterdatapinnen til Arduino pin 12
*/

#include 

void setup()
{
	// Initialiser IO og ISR
	vw_setup(2000); // Bits pr/sek
}

void loop()
{
	send("Hallo! Jeg er elev i 12DLA");
	delay(1000);
}

void send (char *message)
{
	vw_send((uint8_t *)message, strlen(message));
	vw_wait_tx(); // Vent til hele meldingen er borte

}

Sketch - Koble mottakermodul til Arduino:

/*
En enkel mottaks sketch
Denne skissen viser tekststrenger mottatt ved hjelp av VirtualWire Koble mottaker data pin til
Arduino pin 11
*/

#include 

byte message[VW_MAX_MESSAGE_LEN]; // en buffer for å lagre innkommende
meldinger
byte messageLength = VW_MAX_MESSAGE_LEN; // størrelsen på meldingen

void setup()
{
	Serial.begin(9600);
	Serial.println("Mottakeren er klar");
	
	// Initialize the IO and ISR
	vw_setup(2000); // Bits pr/sek
	vw_rx_start(); // Start mottakeren
	}

void loop()
{
if (vw_get_message(message, &messageLength)) // Non-blocking
{
	Serial.print("Received: ");
	for (int i = 0; i < messageLength; i++)
	{
	Serial.write(message[i]);
	}
	Serial.println();
	}
}
				

LØSNINGSFORSLAG OPPGAVE 2

Dataoverføring WiFi

Løsningsforslag dataoverføring WiFi

Et eksempel på oppsett med mottakeren og senderen

Sende kode:
/* FILE: MXFS03V_433MHZ_MODULE_HCMODU0007_TRANSMIT_EXAMPLE.pde DATE:
Dette er et eksempel på hvordan du bruker 433MHz trådløs sendermodulen (HCMODU0007)
som er Tx-delen av tranmitter- og mottakermodulparet. Dette eksemplet gjør bruk av
VirtualWire-biblioteket skrevet av Mike McCauley. Skissen vil lese en verdi fra analog inngang
A0 og overføre den som 2 byte til mottakermodulen en gang i sekundet.

Tx MODULE CONNECTIONS:

PIN DESCRIPTION

	1. 1 GND
	2. 2 VCC (3.512V)
	3. 3 TX DATA

ARDUINO PIN GND
VCC
D2

*/

#include  // Inkluder VirtualWire-biblioteket

const int TX_DIO_Pin = 2; // Digital IO-pin som vil bli brukt til å sende data til senderen

void setup() {

pinMode(13, OUTPUT);

// Initialiserer DIO-porten som brukes til å sende data til Tx-modulen
vw_set_tx_pin(TX_DIO_Pin);

// Sett senket logikknivå (LOW = overfør for denne versjon av modulen)
vw_set_ptt_inverted(true);

// Send på 2000 bits per sekund
vw_setup(2000); // Bits per sec }

/* Hovedprogrammet */
void loop()
{
// Midlertidig lagres verdien fra analog inngang A0
unsigned int Data;

// Overføringsbufferen som vil holde dataene som skal overføres.
byte TxBuffer[2];

// Les analog inngang A0...
Data = analogRead(A0);

// ... og lagre den som høy og lav byte i overføringsbufferen
TxBuffer[0] = Data >> 8; TxBuffer[1] = Data;

// Slå på lysdioden på pin 13 for å indikere at vi skal sende data
digitalWrite(13, HIGH);

// Send dataene (2 byte)
vw_send((byte *)TxBuffer, 2);

// Vent til dataene er sendt
vw_wait_tx();

// Slå av lysdioden på pin 13 for å indikere at vi nå har sendt dataene
digitalWrite(13, LOW);

// Gjør ingenting for et sekund. Senk denne verdien for å sende data raskere
delay(1000);
}


Mottaker kode:
/* FILE: MX05V_433MHZ_MODULE_HCMODU0007_RECEIVE_EXAMPLE.pde DATE: 03/03/13

Rx MODULE CONNECTIONS:

PIN DESCRIPTION

	1. 1 GND
	2. 2 RX DATA
	3. 3 RX DATA
	4. 4 VCC (5V)

ARDUINO PIN GND
D2
N/A
VCC

*/

// Inkluder VirtualWire-biblioteket
#include 

// Digital IO-port som vil bli brukt til mottak av data fra mottakeren
const int RX_DIO_Pin = 2;

void setup() {

pinMode(13, OUTPUT);
Serial.begin(9600);

// Initialiserer DIO-porten som brukes til å motta data fra Rx-modulen
vw_set_rx_pin(RX_DIO_Pin);

// Motta med 2000 bits per sekund
vw_setup(2000);

// Aktiver mottakeren
vw_rx_start(); }

/* Hovedprogram */

void loop()
{
// Still mottakerbufferstørrelsen til 2 byte
uint8_t Buffer_Size = 2;

// Holder de gjenopptatte dataene
unsigned int Data;

// Mottaksbufferen
uint8_t RxBuffer[Buffer_Size];

/* Har en melding blitt mottatt? */
if (vw_get_message(RxBuffer, &Buffer_Size)) // Nonblocking
{

/* I så fall slår du på LED-lampen som er koblet til DIO 13 for å indikere dette */
digitalWrite(13, HIGH);

/* Lagre mottatte høye og lave byte data */
Data = RxBuffer[0] << 8 | RxBuffer[1];

/* Send disse dataene til UART */
Serial.print("Analogue pin A0: ");

Serial.println(Data);

/* Slå av lysdioden på port 13 for å indikere at dataene nå er mottatt */
digitalWrite(13, LOW);

}
}

					

Et enda enklere eksempel på oppsett med mottakeren og senderen

Sketch - Tilkobling av sendermodul til Arduino:

/*
En enkel send sketch
Denne skissen overfører en kort tekstmelding ved hjelp av VirtualWire-biblioteket
Koble transmitterdatapinnen til Arduino pin 12
*/

#include 

void setup()
{
// Initialiser IO og ISR
vw_setup(2000); // Bits pr/sek
}

void loop()
{
send("Hallo! Jeg er elev i 12DLA");
delay(1000);
}

void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Vent til hele meldingen er borte

}			


Sketch - Koble mottakermodul til Arduino:

/*
En enkel mottaks sketch
Denne skissen viser tekststrenger mottatt ved hjelp av VirtualWire Koble mottaker data pin til
Arduino pin 11
*/

#include 

byte message[VW_MAX_MESSAGE_LEN]; // en buffer for å lagre innkommende
meldinger
byte messageLength = VW_MAX_MESSAGE_LEN; // størrelsen på meldingen

void setup()
{
	Serial.begin(9600);
	
	Serial.println("Mottakeren er klar");
	
	// Initialize the IO and ISR
	vw_setup(2000); // Bits pr/sek
	
	vw_rx_start(); // Start mottakeren
}

void loop()
{
	if (vw_get_message(message, &messageLength)) // Non-blocking
	{
		Serial.print("Received: ");
		for (int i = 0; i < messageLength; i++)
		{
		Serial.write(message[i]);
		}
		Serial.println();
	}
}

				

OPPGAVE 3

Dataoverføring GPS

Løsningsforslag dataoverføring GPS

Forklaring til koden skissert i oppgaveteksten

Skissen begynner med å inkludere TinyGPS ++ bibliotek og programvare seriellbibliotek. Deretter definerer vi arduino pins som NEO-6M GPS-modul er koblet til og variabel som lagrer standard GPS baud rate.

Opprettelse av TinyGPSPlus-objektet vil hjelpe til med å få tilgang til spesielle funksjoner knyttet til biblioteket. Deretter oppretter vi en seriell port med programvare som heter gpsSerial, som vi kan snakke med modulen.

#include 
#include 

int RXPin = 2;
int TXPin = 3;
int GPSBaud = 9600;

TinyGPSPlus gps;
SoftwareSerial gpsSerial(RXPin, TXPin);

I oppsettfunksjonen må vi initiere seriell kommunikasjon med PC`en samt GPS-modulen.

void setup()
{
Serial.begin(9600);
gpsSerial.begin(GPSBaud);
}

I loop-funksjonen kaller vi displayInfo () tilpasset funksjon som skriver plasseringsinformasjon
(Latitude, Longitude & Altitude) og UTC (Date & Time) på seriell skjerm, hver gang en ny
NMEA setning er riktig kodet.

Hvis 5000 millisekunder passerer og det ikke kommer noen tegn inn over programvarens
serielle port, viser vi ingen GPS-oppdaget feil.

void loop()
{
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected"));
while(true);
}
}
				

Slik ser oppsettet ut på den seriell skjerm.

Koblingsskjema GPS

OPPGAVE 4

Vis GPS data på Google maps

Løsningsforslag vis GPS data på Google maps

Forklaring til koden skissert i oppgaveteksten

Skissen begynner med å inkludere TinyGPS ++ bibliotek og programvare seriellbibliotek. Deretter definerer vi arduino pins som NEO-6M GPS-modul er koblet til og variabel som lagrer standard GPS baud rate.

Opprettelse av TinyGPSPlus-objektet vil hjelpe til med å få tilgang til spesielle funksjoner knyttet til biblioteket. Deretter oppretter vi en seriell port med programvare som heter gpsSerial, som vi kan snakke med modulen.

#include 
#include 

int RXPin = 2;
int TXPin = 3;
int GPSBaud = 9600;

TinyGPSPlus gps;
SoftwareSerial gpsSerial(RXPin, TXPin);

I oppsettfunksjonen må vi initiere seriell kommunikasjon med PC`en samt GPS-modulen.

void setup()
{
Serial.begin(9600);
gpsSerial.begin(GPSBaud);
}

I loop-funksjonen kaller vi displayInfo () tilpasset funksjon som skriver plasseringsinformasjon
(Latitude, Longitude & Altitude) og UTC (Date & Time) på seriell skjerm, hver gang en ny
NMEA setning er riktig kodet.

Hvis 5000 millisekunder passerer og det ikke kommer noen tegn inn over programvarens
serielle port, viser vi ingen GPS-oppdaget feil.

void loop()
{
while (gpsSerial.available() > 0)
if (gps.encode(gpsSerial.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10)
{
Serial.println(F("No GPS detected"));
while(true);
}
}
				

Slik ser oppsettet ut på den seriell skjerm.

Koblingsskjema GPS

OPPGAVE 5

Wifi-kontrollert bil

Løsningsforslag wifi-kontrollert bil

N/A

OPPGAVE 6

Spenningsdetektor

Løsningsforslag Spenningsdetektor

N/A

OM OSS