Kategoriarkiv Arduino UNO – Atmega328p

AvcodedByMadi.NET

Bilens några funktioner med Arduino UNO | MCU Atmega168

Bakgrund:

Bilar är typiska exempel på system som innefattar många mindre system som pratar med varandra. Exempelvis så kan lås, larm och lampor aktiveras/avaktiveras med ett enda knapptryck från fjärrkontrollen och inställningar för motor, antisladd system och så vidare kan reglera sig själva utifrån mätvärden från olika sensorer. 

I bilar pratar man om flera olika ECUs – Electronic Control Units, som har hand om dessa delsystem och som inte är helt olika vår microcontroller. Dessa ECU:er kommunicerar med varandra och interagerar med varandra. Ett vanligt protokoll för kommunikation är CAN BUS.

Det här gör bilar till bra exempel på komplicerade system där många delsystem faktiskt inte har någonting alls att göra med själva körandet av bilen.

Uppgiften:

Tanken med den här uppgiften är att fokusera på kringliggande system i en bil, eller ska vi säga konceptet för kringliggande system i en bil och att bygga ett system med vår microcontroller som hanterar flera mindre bitar i en tänkt bil. 

Det här kommer ske med vad vi har i kit:et och kopplas på vår breadboard, så lite fantasi kommer man ju få använda också. Vi har ju inga hjul t ex, men vi har en motor och en fläkt och den kan visa oss vilket håll motorn snurrar så vi kan avgöra om vi åker framåt eller bakåt. Detsamma gäller för att svänga på hjulen, som får symboliseras av ett servo. Se detta som ett proof-of-concept, som ni får förklara också i samband med redovisningen av projektet. 

Uppgiften består av några obligatoriska delar som SKA vara med i projektet:

  • Bilen ska kunna svänga(med hjälp av servot)
  • Bilen ska kunna köra framåt och bakåt (med hjälp av IC-krets motordrivare och motor)
  • Bilen ska kunna tuta (med hjälp av buzzer)
  • Man ska kunna styra bilen (Styrspaken sköter framåt/bakåt samt svänga höger/vänster + tuta när styrspak trycks ned)

För er som siktar på högre betyg finns det också möjlighet att bygga på med ytterligare system. 

Dessa väljer ni själva, kombinerar eller hittar på, men exempelvis:

  • Backvarnare: (Med hjälp av LEDs, Buzzer och avståndsmätare HC-SR04)
  • Dörrlås: (Med hjälp av fjärrkontroll, IR-mottagare, buzzer och LEDS)
  • Frostvarnare: (Med hjälp av Termometer och LCD)
  • Automatiskt Helljus: (Med hjälp av Fotoresistor och LED)
  • Kupé-dimmer:(Ljuset dimmar ned 5 sekunder efter att dörren stängts; dörr symboliseras av en knapp och belysning av en LED)
  • Heads-up-display: (Visa bensinförbrukning, hastighet osv mha LCD, växla info mha knapp eller potentiometer)
  • Växelindikator: (med 7-segmentsdisplay)
  • Hastighetsmätare: (med 4-siffrig 7-segmentsdisplay)
  • Ytterbelysning (blinkers, bromsljus, backljus, helljus): (Med hjälp av LEDs och knappar

AvcodedByMadi.NET

Hemautomationscentral med Atmega168

Menysystem med LCD

Funktionerna kommer att symboliseras av en LED (för varje funktion) och de funktioner som ska finnas i systemet är:

Belysning:

  • Vardagsrum
  • Kök

Värme:

  • Golvvärme

Vitvaror:

  • Kaffebryggare

BelysningVärme och Vitvaror blir alltså egna kategorier som kommer ha underkategorier under sig. 

Det ska gå att läsa av i menysystemet huruvida ett system är aktivt och dessutom ska respektive LED vara tänd om systemet är aktivt. 

Inlämning:

Det är ok att använda valfria bibliotek i denna uppgift (inklusive Arduino.h ,Liquid Crystal.h eller ert egna LCD-bibliotek)

AvcodedByMadi.NET

Knight Rider med Atmega168

Manipulation av I/O pinnar på MCU Atmega 168 – Lågnivå programmeringsspråk C / C++

I den gamla hederliga serien Knight Rider från 80-talet så kör huvudpersonen runt i en bil med en lysramp i fronten, där ljuset sveper fram och tillbaka från sida till sida.

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

void portON(){
  DDRB = 255;
  DDRD = 255;
}

void ledToLeft(){
// LED1  ON
    PORTB |= 1 << PB3;

    _delay_ms(100);

    // LED1  OFF
    PORTB &= ~(1 << PB3);

    // LED2  ON
    PORTB |= 1 << PB2;
    _delay_ms(100);
    // LED2  OFF
    PORTB &= ~(1 << PB2);

    // LED3  ON
    PORTB |= 1 << PB1;
    _delay_ms(100);

    // LED3  OFF
    PORTB &= ~(1 << PB1);

    // LED4  ON
    PORTD |= 1 << PD6;

    _delay_ms(100);

    // LED4  OFF
    PORTD &= ~(1 << PD6);

    // LED5  ON
    PORTD |= 1 << PD5;
    _delay_ms(100);
    // LED5  OFF
    PORTD &= ~(1 << PD5);

    // LED6  ON
    PORTD |= 1 << PD3;
    _delay_ms(100);

    // LED6  OFF
    PORTD &= ~(1 << PD3);
}

void ledToRight(){
    // LED5  ON
    PORTD |= 1 << PD5;
    _delay_ms(100);
    // LED5  OFF
    PORTD &= ~(1 << PD5);

    // LED4  ON
    PORTD |= 1 << PD6;

    _delay_ms(100);

    // LED4  OFF
    PORTD &= ~(1 << PD6);

    // LED3  ON
    PORTB |= 1 << PB1;
    _delay_ms(100);

    // LED3  OFF
    PORTB &= ~(1 << PB1);

    // LED2  ON
    PORTB |= 1 << PB2;
    _delay_ms(100);
    // LED2  OFF
    PORTB &= ~(1 << PB2);
}

int main()
{
  portON();

  while (1)
  {
    ledToLeft();
    ledToRight();
  }
  
}
AvcodedByMadi.NET

Trafikljus med Atmega168

Manipulation av I/O pinnar på MCU Atmega 168 – Lågnivå programmeringsspråk C / C++

Uppgiftsbeskrivning:

1) När din microcontroller startar ska endast röd lysdiod tändas. 

2) Efter 3 sekunder ska röd lysdiod släckas och gul tändas.

3) När endast gul lysdiod varit tänd i 2 sekunder, ska den slockna och grön diod tändas.

4) Endast den gröna lysdioden lyser i 5 sekunder, sen slocknar den

5) Då tänds gul OCH röd lysdiod i två sekunder och sen slocknar den gula

6) Vi är nu tillbaka i ursprungsläget och endast röd lysdiod lyser. 

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

int main()
{

  DDRB = 255;

  while (1)
  {
    // LED RED ON
    PORTB |= 1 << PB5;

    // Delay 2sec
    _delay_ms(3000);

    // LED Red OFF
    PORTB &= ~(1 << PB5);

    // LED Yellow ON
    PORTB |= 1 << PB4;

    // Delay 2sec
    _delay_ms(2000);

    // LED Yellow OFF
    PORTB &= ~(1 << PB4);

    // LED Green ON
    PORTB |= 1 << PB0;

    // Delay 5sec
    _delay_ms(5000);

    // LED Green OFF
    PORTB &= ~(1 << PB0);

    // RED & Yellow ON
    PORTB |= 1 << PB5;
    PORTB |= 1 << PB4;

    // Delay 2sec
    _delay_ms(2000);

    // All B ports OFF
    PORTB = 0;
  }
}