Arduino lessen/les 5

Uit Lab
< Arduino lessen
Versie door Eelco (overleg | bijdragen) op 7 okt 2013 om 09:34 (→‎Opdracht 1)
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Naar navigatie springen Naar zoeken springen
Arduino lessen
  1. Blink - digitale uitvoer
  2. Button - digitale invoer
  3. Dimmer - PWM
  4. Dimmer - analoge invoer
  5. Seriële uitvoer naar host
  6. Analoge sensoren
  7. Beweging: servo
  8. Button - event
  9. Tijd - timers
  10. Blink - met timer

Les 5: Seriële communicatie naar de computer

Een computer kan in een apparaat zelfstandig en in isolatie werken. Maar de meeste computers communiceren met andere computers, bijvoorbeeld via het internet. De eenvoudigste vorm van communicatie is de communicatie via een directe seriële verbinding. Een voorbeeld hiervan is de USB-verbinding, die we gebruiken om het programma in de Arduino te laden. Deze zelfde verbinding kunnen we ook gebruiken om tekst te communiceren tussen het programma op de Arduino en een programma op de host computer.

Door middel van Serial.print() kunnen we tekst van de Arduino naar de host computer sturen. Er moet dan op de host computer een programma draaien dat iets met deze tekst doet. Een voorbeeld hiervan is het Seriële Monitor-venster van de Arduino IDE: daarin kun je de tekst zien die de host computer van de Arduino ontvangt. Dit venster kunnen we ook gebruiken om tekst naar de Arduino te sturen: dat zullen we in een latere les behandelen.

Bij de programma's die we tot nu toe gezien hebben weten we niet wat het programma precies doet. We zien alleen het resultaat via de analoge en digitale uitvoer. In sommige gevallen We kunnen alleen zien wat het invoer/uitvoer-gedrag is, via de analoge en di

Opdracht 1

Gebruik de hardware-opstelling van de vorige les, opdracht 1: de LED aangesloten op pin 9, en de loper van de potmeter aangesloten op pin A0.

  • gebruik het programma Bestand->Voorbeelden->0.3 Analog->AnalogInOutSerial
  • om de uitvoer van het programma op de host-computer te kunnen zien, gebruik je het Seriële Monitor venster van de Arduino IDE (menu Extra->Seriële-Monitor).
  • de communicatie werkt alleen als de snelheid van de communicatie (bitsnelheid) van de Arduino en van de host-aansluiting gelijk zijn.
    • voor de Arduino stel je dit door een opdracht in de setup-functie. Voorbeeld: Serial.begin(9600) (9600 bit/s of ook bps).
    • voor de host-computer stel je dit in door de selectieknop (rechts onder) in het Seriële Monitor venster.
  • verander de bitsnelheid voor beide naar 119.000 bit/s. Zie je een verschil?
    • je moet hiervoor de gewijzigde versie van het programma op de Arduino laden.
  • hoe kun je bij deze bitsnelheid ervoor zorgen dat de getallen niet over het scherm vliegen?
    • hint: hoe kun je de snelheid waarmee op de Arduino de loop herhaald wordt vertragen?

De tekst van AnalogInOutSerial:

const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600); 
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);            
  // map it to the range of the analog out:
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
  // change the analog out value:
  analogWrite(analogOutPin, outputValue);           

  // print the results to the serial monitor:
  Serial.print("sensor = " );                       
  Serial.print(sensorValue);      
  Serial.print("\t output = ");      
  Serial.println(outputValue);   

  // wait 2 milliseconds before the next loop
  // for the analog-to-digital converter to settle
  // after the last reading:
  delay(2);                     
}

Opmerkingen:

  • Serial.print(x) stuurt x als tekst naar de hostcomputer. Als x een getal is, dat wordt dit eerst in tekst-vorm omgezet. je kunt er daarbij voor kiezen of je een decimale vorm wilt hebben, of een vorm met een ander grondgetal. Bijvoorbeeld: hexadecimaal, via Serial.print(x, HEX);.