2012_332AB_P6

Wiki error: Section name cannot be repeated ' '

Controlul inteligent al iluminarii
[edit]

I. Project Description

Proiectul reprezinta simularea unui sistem de iluminare inteligenta (crepusculara). Acesta controleaza iesirea (intensitatea LED-ului) in functie de intrare (o fotorezistenta). Iesirea este invers proportionala cu intrarea. Placuta este controlata de un microcontroller atmega 328.

II. Project Requirements

 Din motive tehnice, am decis sa folosim:

  • microcontroller atmega 328
  • led 5 v
  • placa EVZ3 transmmite comanda pe serial
  • placa poate functiona automat sau manual, cu ajutorul evz3.
- placa cu MSP430 - 50*100 placa test cu fludor.
- led 3.3V cu posibilitatea setare intensitate variabila.
- placa Z3 ii da prin seriala placii intensitatea curenta
- senszor lumina - detectie intuneric c-> mesaj catre Z3 --- daca utilizatorul a setat in prealabil sa porneasca lumina noaptea placa Z3 va controla intensitatea.
 
Soft: utilizatorul controleaza intensitaea -/+ -- seteaza intensitatea default la intuneric.

 

III. User Flow

Utilizatorul are la disozitie 3 taste pe EVZ3: tasta 1, tasta 2 si tasta 3. Tasta 1 reprezinta modul "auto". Tasta 2 decrementeaza intensitatea LED-ului iar tasta 3 o incrementeaza.

IV. Required components

1 microcontroller atmega 328

1 LED rosu

1 fotorezistenta

1 mufa DB-9 tata

1 mufa USB B mama

1 tranzistor NPN

1 oscilator 16 MHz

2 condensatoare

4 rezistente

1 placa de test

fire de cupru izolate

1 soclu 28 pini

V. Hardware Design

schema proteus

imagine de ansamblu\Ca si nota distinctiva, pentru transmiterea seriala folosim un tranzistor NPN care este saturat cand EVZ3 transmite 12 V si se blocheaza cand EVZ3 transmite -12. pinul de RX al microcontrollerului este legat la colector.

Alimentarea se face printr usb (5 volti, stabilizat).

Fotorezistenta impreuna cu inca o rezistenta functioneaza ca si un divizor de tensiune.

Placa este echipata si cu un circuit de clock pentru microcontroller, format dintr-un oscilator si 2 condensatori.

VI. Software Design

Microcontrollerul citeste o valoare analog cu CAN-ul intern pe 10 biti, o scaleaza la 8 biti si trimite invers comanda PWM de (255-val_citita). In acelasi timp, asculta pe serial daca se transmite ceva. Microcontrollerul stie sa recunoasca, de pe serial cuvintele '1', '2' si '3', fiecare reprezentand modurile descrise mai sus.

La pornire, microcontrollerul este in starea 1.

EVZ3 asteapta citirea tastelor si trimite pe serial, in functie de tasta citita, cuvantul corespunzator.

Soft EVZ3:

 

/****************************************************************************
*
*               Laborator SMP - 80386EX Z3/EV Real Mode
*
*    Portions Copyright (c) 2010 Mihai Matei. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Apache License,
*    Version 2.0 (the "License"). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at http://www.apache.org/licenses/LICENSE-2.0
/>*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  Entry point for SMP Z3/EV Project
*
****************************************************************************/

#include "platform_io.h"

const char *welcome = "   smart light  ";

const char *serialStart = "Please send data";

static SerialConfig serialConf;

int main()
{
    int key = 0;
    char light='1';
    /* display our welcome message */
    kIo.DisplayString(welcome);
    
    /* Serial Initialization */
    serialConf.baudRate   = b9600;
    serialConf.parity     = none;
    serialConf.stopBits   = one;
    serialConf.wordLength = eight;
    /* In order to check what EV/Z3 board is echoing on the serial port
     * open Hyperterminal, create a new connection using the above parameters,
     * Flow control: Hardware and Settings/Emulation: ANSI, connect and type some chars in it */
    
    kIo.SerialInit(&serialConf);

    /* wait for a key to be pressed */
    
    kIo.SerialWrite(COM1, (unsigned char*)&light, 1);//transmite initial light='1', pentru modul auto (desi implicit pe placuta)
    kIo.Wait(200);

    while(1){
        key = kIo.ReadKey();

        switch(key){
            case 10://tasta 1 - auto
                    {
                        light='1';
                        kIo.SerialWrite(COM1, (unsigned char*)&light, 1);
                        kIo.Wait(200);
                    }
                    break;
            case 1://tasta 2 - decrementare
                    {
                        light='2';
                        kIo.SerialWrite(COM1, (unsigned char*)&light, 1);
                        kIo.Wait(200);   
                    }
                    break;
            case 11://tasta 3 - incrementare
                    {
                        light='3';
                        kIo.SerialWrite(COM1, (unsigned char*)&light, 1);
                        kIo.Wait(200);
                    }
                    break;
                }
        }
    return 0;
}

 

Soft atmega 328:

//Proiect SMP, Curatu Rares, Olteanu Gheorghe Daniel, 332AB
#include "Arduino.h"
void setup();
void loop();
const int analogInPin = A3;  //caderea de tensiune de pe fotorezistor este masurata pe pinul A3
const int analogOutPin = 3;  //rezistenta este controlata in PWM de pe pinul digital 3

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


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

void loop() {
  //valoare citita de la senzorul pe 10 biti
  sensorValue = analogRead(analogInPin);            
  //scalare a valorii pe 10 biti la 8 biti
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
 
  //citire pentru modul 1 (auto), valoarea seriala caracterul '1', adica in ASCII 49. In plus, modul initial este cel automat si se realizeaza si citirea initiala a valorilor.
  if(mod==49)
  {
    valoare=255-outputValue;  
  }
 
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
    mod=incomingByte;
    
    if(mod==50&&valoare>=0) //modul 2 (descrestere manuala), are valoarea pe serial caracterul '2', adica valoarea ASCII 50
    {
       valoare=valoare-50;
    }
    if(mod==51&&valoare<=255) //modul 3 (crestere manuala), are valoarea pe serial caracterul '2', adica valoarea ASCII 50
    {
       valoare=valoare+50;
    }         
    
    Serial.print("Modificare mod: ");
    Serial.println(mod);                
  }

//verificare ca iesirea sa fie in limitele 0-255:

  if(valoare<1)
  {
    valoare=0;
  }
  if(valoare>254)
  {
    valoare=255;
  }
  analogWrite(analogOutPin, valoare);
 

  Serial.print("sensor = " );                       
  Serial.print(sensorValue);      
  Serial.print("\t output = ");      
  Serial.print(valoare);   
  Serial.print("\t mod=");
  Serial.println(mod);
 
 
  delay(10);                     
}

Microcontrollerul transmite si date pe serial, pentru debugging.

VII. Results

Proiectul este in totalitate functional, lucreaza conform descrierii.

VIII. Download

After you have presented your project at the laboratory (week 13-14) you will add all your sources here. Any hardware simulation used, code archive and so on.

IX. Status

You will have to update this every 2 weeks to include details of what you have done on your project. E.g.: aquired componets, made board, written code for EV/Z3

X. Personal Contribution

Rares Curatu: Software microcontroller, Software placa EVZ3, realizare hardware

Gheorghe Olteanu: Software microcontroller, schema Proteus, realizare hardware