Índice:
- Etapa 1: introdução
- Etapa 2: Diagrama de Circuito Salve Meu Filho
- Etapa 3: Diagrama de Circuito
- Etapa 4: Diagrama de Circuito PCB
- Etapa 5: Diagrama de Circuito PCB
- Etapa 6: Configurações e comandos para Save My Child
- Etapa 7: Lista de componentes
- Etapa 8: Conclusão
Vídeo: Salve meu filho: o assento inteligente que envia mensagens de texto se você esquecer a criança no carro: 8 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:36
Está instalado em automóveis e, graças a um detector colocado na cadeira infantil, avisa - por SMS ou chamada telefónica - se fugirmos sem levar a criança connosco
Etapa 1: introdução
Entre os acidentes mais tristes (e pelo menos raros) noticiados, estão os de pais que - por causa da agilidade, problemas de saúde ou falta de atenção - saem do carro e “esquecem” os filhos na cadeirinha., em um ambiente quente ou frio. Certamente, tais acidentes poderiam ter sido evitados se alguém ou algo lembrasse ao motorista que ele deixou a criança no carro; sem dúvida a tecnologia pode ajudar e oferecer soluções, a serem implementadas no veículo pelo fabricante ou do tipo “retrofit”, como o projeto aqui descrito. Trata-se de um dispositivo baseado em um celular GSM que detecta alguns parâmetros, a partir dos quais se avalia o comportamento do motorista e se executam as ações necessárias: em particular, é enviado um SMS para o telefone do motorista que está fugindo do carro. O dispositivo é instalado no carro e é alimentado pelo sistema elétrico deste; verifica se a criança está sentada (por meio de um sensor composto por alguns botões de baixo perfil, montado em uma protoboard a ser colocada sob a capa da cadeira de criança): se verificar que os botões estão pressionados (portanto, a criança está sentada), o circuito também verificará se o veículo parou (por meio de um acelerômetro triaxial), em caso afirmativo e decorrido o tempo definido, enviará uma mensagem SMS de alarme para o telefone do motorista e vai soltar um som de campainha.
Além disso, realiza uma chamada para o mesmo número de telefone e possivelmente para outros, para que pais, amigos e outras pessoas liguem para o motorista para verificar o que está acontecendo. Embora a aplicação escolhida seja a mencionada, o projeto foi criado em nosso laboratório como uma plataforma que pode ser adaptada para os outros dois propósitos. O primeiro é um dispositivo de corrente residual para idosos e pessoas frágeis, enquanto o segundo é um alarme remoto, que funciona em caso de apagão (e útil para evitar que o congelador descongele e que os alimentos nele contidos se tornem perigosos)
Etapa 2: Diagrama de Circuito Salve Meu Filho
Vamos ver então do que se trata e analisar o diagrama elétrico do circuito, cuja gestão foi confiada a um microcontrolador PIC18F46K20-I / PT da Microchip, que foi programado através do nosso firmware MF1361, para que leia o estado de as entradas (às quais o sensor de peso da cadeira de criança e um possível dispositivo de detecção estão conectados), e adquire os sinais fornecidos pelo acelerômetro (U5), e fala com a EEPROM externa (U4) (contendo as configurações para o funcionamento do sistema) e faz interface com um possível receptor de rádio (U6) e gerencia um módulo celular (GSM).
Observe que o circuito considera elementos que podem ser montados ou não, já que o concebemos como uma plataforma de desenvolvimento expansível, para aqueles que desejavam criar sua própria aplicação, a partir do firmware base. Vamos começar descrevendo o microcontrolador, que - após o power-on-reset - inicializa as linhas RB1 e RB2 como entradas fornecidas com um resistor pull-up interno, que será necessário para ler alguns contatos normalmente abertos que estão conectados ao IN1 e IN2; os diodos D2 e D3 protegem o microcontrolador no caso em que uma tensão acima da da fonte de alimentação do PIC seja aplicada erroneamente nas entradas. Atualmente IN1 é utilizado para o sensor de peso da cadeira de criança, enquanto IN2 está disponível para outros controles possíveis: podemos utilizá-lo, por exemplo, para a detecção de abertura e fechamento de portas, através da leitura da tensão nas luzes de cortesia; a respeito disso, por favor, considere que em alguns carros modernos as luzes de teto são gerenciadas (em PWM) por uma caixa de junção (a fim de garantir um ligar e desligar gradual), enquanto nós apenas temos que ler o estado das luzes instantaneamente acesas e desligado (caso contrário, a leitura será anormal); depois disso, teremos que filtrar o PWM por meio de um capacitor colocado entre a entrada do microcontrolador e o terra (após o diodo). Outra entrada é a RB3, ainda fornecida com resistor pull-up interno, necessário para a leitura do botão P1 (que serve para ligar à força o módulo celular, normalmente desligado). Ainda durante a inicialização das E / Ss, RB4 é colocado como entrada com a finalidade de ler - por meio dos divisores de tensão R1 e R2 - a partida do circuito, realizada pelo duplo desvio SW1b; o divisor de tensão é necessário, pois o microcontrolador tolera uma tensão inferior à de entrada encontrada no conector de alimentação. A função do RB4 está reservada para desenvolvimentos futuros, é explicado considerando que o circuito pode ser alimentado tanto por uma rede de alimentação via tomada USB como por meio de uma bateria de lítio que é ligada à saída do regulador de carga dedicado.
Etapa 3: Diagrama de Circuito
Quando SW1 é movido nos contatos marcados com uma cruz no diagrama de circuito, o resto do circuito é isolado da bateria e, portanto, desligado; se na entrada da fonte de alimentação (USB) for aplicada uma tensão de 5 volts, apenas o estágio carregador estará operando (é alimentado pelo diodo D1, que o protege de inversões de polaridade). Ao mover SW1 para a posição ligada, SW1b traz a tensão de entrada para a linha RB4 e SW1a alimenta o microcontrolador e outros enfeites, por meio da tensão nas extremidades da bateria (cerca de 4 V quando em carga total), além de ligar o conversor de chaveamento elevador assinado como U3, que gera os 5V necessários para o resto do circuito.
No que se refere ao funcionamento do circuito alimentado por USB, o SWb traz a tensão de entrada para o RB4, que - ao realizar sua leitura no firmware - permite entender se a fonte de alimentação da rede foi encontrada; tal função é útil para o propósito de criar o alarme anti-blackout. Por outro lado, durante o funcionamento a bateria, o RB4 permite ao microcontrolador saber disso e realizar possíveis estratégias para diminuir o consumo de energia (por exemplo, reduzindo os intervalos em que o telemóvel é ligado). A linha RB4 é a única maneira que o firmware tem de entender quando o circuito é operado por bateria, pois se U1 estiver recebendo energia mesmo se RB4 estiver em zero volts, significa que o circuito é operado por bateria, enquanto se houver outra fonte de alimentação, ele estará funcionando graças à voltagem retirada do USB. Vamos voltar agora para a inicialização de I / Os e ver que as linhas RC0, RE1, RE2 e RA7 são inicializadas como entradas, que foram fornecidas com um resistor pull-up externo, uma vez que não podemos ativá-lo internamente para tais linhas; serão necessários para a leitura dos canais do receptor híbrido, que de qualquer forma é um acessório reservado para desenvolvimentos futuros. Esse receptor pode ser útil para o uso doméstico como um alarme remoto, para aqueles que têm seus movimentos prejudicados ou são forçados a deitar-se; ao detectar a variação nas saídas do rádio RX, fará um telefonema para pedir ajuda ou enviará um SMS semelhante. Esta é uma aplicação possível, mas existem outras; de qualquer maneira, deve ser implementado no firmware. RC3, RC4, RB0 e RD4 são as linhas que foram atribuídas ao acelerômetro U4, que mais especificamente é uma placa breakout baseada no acelerômetro triaxial MMA8452 da NXP: RC3 é uma saída e é necessária para enviar um sinal de relógio, RC4 é uma E / S bidirecional e aciona o SDA, enquanto os outros dois pinos são entradas que foram reservadas para a leitura das interrupções INT1 e INT2, que são geradas pelo acelerômetro quando determinados eventos ocorrem. As linhas RA1, RA2 e RA0 ainda são entradas, mas foram multiplexadas no conversor A / D e são utilizadas para a leitura do acelerômetro triaxial U5, que também está na placa de breakout e que é baseado no módulo acelerômetro MMA7361; tal componente pretende ser uma alternativa ao U4 (que é o esperado atualmente pelo nosso firmware) e fornece informações sobre as acelerações detectadas nos eixos X, Y, Z por meio de tensões analógicas que saem das linhas correspondentes. Neste caso, o firmware é simplificado, uma vez que não é necessária a rotina de gerenciamento do MMA8452 (requer leitura de registros, implementação do protocolo I²C-Bus, e assim por diante). Ainda no assunto ADCs, a linha An0 é utilizada para leitura do nível de tensão, que é fornecida pela bateria de lítio, que alimenta o microcontrolador e o resto do circuito (exceto para o receptor do rádio); se o firmware o considerar, ele permite a possibilidade de desligar o todo quando a bateria está fraca, ou quando está abaixo de um determinado limite de tensão. A linha RC2 é inicializada como uma saída e gera uma série de pulsos digitais quando o buzzer piezoelétrico BUZ1 deve emitir a nota acústica de advertência que foi indicada pelo firmware; outras duas saídas são RD6 e RD7, às quais foi confiada a tarefa de acender os LEDs LD1 e LD2.
Etapa 4: Diagrama de Circuito PCB
Vamos completar a análise dos I / Os com RD0, RD2, RD3, RC5, que junto com os RXs e TXs do UART da interface para o módulo celular SIM800C por SIMCom; no circuito, o último é montado em uma placa dedicada para ser inserido no conector específico encontrado na placa de circuito impresso. O módulo troca os dados das mensagens enviadas (alarmes) e recebidas (configuradas) com o microcontrolador, via UART do PIC, que também é necessário para os comandos de configuração do telemóvel; o resto das linhas diz respeito a alguns sinais de estado: RD2 lê a saída para o LED “sinal” que se repete pelo LD4, enquanto RD3 lê o Indicador de toque, ou seja, o contato do celular que fornece o nível lógico alto quando um chamada de telefone é recebida. A linha RD0 possibilita o reset do módulo e o RC5 trata do ligar e desligar; reset e ON / OFF são implementados pelo circuito na placa na qual o SIM800C está montado.
A placa, cujo diagrama de circuito foi mostrado - junto com a pinagem do conector de inserção - na Fig. 1, contém o telefone celular SIM800C, um conector de antena MMX 90 ° e uma tira de pinos macho 2 × 10 de 2 mm na qual a alimentação fonte, a linha de controle de ignição (PWR), todos os sinais e as linhas de comunicação serial de e para o módulo GSM, conforme mostrado na Fig. 1.
Etapa 5: Diagrama de Circuito PCB
Uma vez que as E / Ss do microcontrolador foram definidas, podemos dar uma olhada nas duas seções envolvidas na alimentação do circuito: o carregador e o conversor elevador DC / DC.
O carregador é baseado no circuito integrado MCP73831T (U2), fabricado pela Microchip; como entrada normalmente aceita 5 V (a faixa tolerável é entre 3,75 V e 6 V), vindo neste circuito do conector USB; ele fornece - na saída - a corrente necessária para carregar elementos de íon de lítio ou polímero de lítio (Li-Po) e fornecer até 550mA. Uma bateria (a ser conectada aos contatos +/- BAT) pode ter uma capacidade teoricamente ilimitada, pois no máximo seria carregada em um tempo muito longo, porém considere que por meio de uma corrente de 550mA, um elemento de 550mAh é cobrado em uma hora; como escolhemos uma célula de 500 mAh, ela será carregada em menos de uma hora. O circuito integrado opera na configuração típica, em que o diodo de luz LD3 é acionado pela saída STAT, que é levado ao nível lógico baixo ao carregar, enquanto permanece em nível lógico alto ao parar o carregamento; o mesmo é levado a uma alta impedância (aberto) quando o MCP73831T é desligado ou quando verifica-se que nenhuma bateria está conectada à saída do VB. VB (pino 3) é a saída usada para a bateria de lítio. O circuito integrado realiza o carregamento com corrente e tensão constantes. A corrente de carga (Ireg) é definida por meio de um resistor conectado ao pino 5 (no nosso caso, é R6); seu valor está conectado à resistência pela seguinte relação:
Ireg = 1.000 / R
em que o valor R é expresso em ohm se a corrente Ireg é expressa em A. Por exemplo, com 4,7 kohm uma limitação de 212 mA é obtida, enquanto com R sendo 2,2 kohm a corrente vale cerca de 454 mA. se o pino 5 for aberto, o circuito integrado passa para o estado inativo e absorve apenas 2 µA (desligamento); o pino pode, portanto, ser usado para habilitar. Vamos completar a descrição do diagrama de circuito com o conversor elevador, que extrai 5 volts estabilizados da tensão da bateria; o estágio é baseado no circuito integrado MCP1640BT-I / CHY, que é um regulador de reforço síncrono. Dentro dele há um gerador PWM que aciona um transistor cujo coletor fecha periodicamente a bobina L1 à terra, por meio do pino SW, carrega e deixa liberar a energia acumulada durante as pausas - por meio do pino 5 - para os condensadores de filtro C2, C3, C4, C7 e C9. O grampo de diodo que protege o transistor interno também é interno, reduzindo assim os componentes externos necessários ao mínimo: na verdade, existem os capacitores de filtro entre Vout e terra, o indutor L1 e o divisor resistivo entre Vout e FB que trata com a reativação do gerador PWM via amplificador de erro interno, por meio da estabilização da tensão de saída no valor desejado. Ao modificar a relação entre R7 e R8, é, portanto, possível modificar a tensão fornecida pelo pino Vout, mas isso não é do nosso interesse.
Etapa 6: Configurações e comandos para Save My Child
Assim que a instalação for concluída, você terá que configurar a unidade; tal operação é realizada via SMS, portanto, insira um SIM operacional no suporte SIM do módulo 7100-FT1308M e anote o número de telefone correspondente. Depois disso, dê todos os comandos necessários por meio de um telefone celular: eles são mostrados na Tabela 1.
Entre as primeiras coisas a fazer está a configuração dos números de telefone na lista daqueles para que o sistema irá ligar ou para os quais serão enviadas as mensagens SMS de alarme, no caso de criança na cadeirinha que porventura tenha estado “esquecido abandonado”. Para facilitar o procedimento, visto que o sistema está protegido por senha quanto a esta operação, foi projetado um modo Easy Setup: na primeira vez que for iniciado, o sistema salvará o primeiro número de telefone que ligar para ele, e considera-o como o primeiro número da lista. Este número poderá realizar modificações, mesmo sem senha; de qualquer forma os comandos podem ser enviados por qualquer telefone, desde que o SMS correspondente inclua a senha, e ainda que - para acelerar alguns comandos - tenhamos permitido que os enviados pelos números de telefone da lista fossem dados sem necessidade de senhas. Quanto aos comandos de adição e exclusão de números de telefone da lista, a solicitação de senha faz com que a lista seja administrada apenas por pessoa habilitada para tal. Passemos agora à descrição dos comandos e à sintaxe correspondente, com a premissa de que o circuito também aceita mensagens SMS contendo mais de um comando; nesse caso, os comandos devem ser separados do seguinte, por meio de uma vírgula. O primeiro comando examinado é o que altera a senha, consiste em um SMS do tipo PWDxxxxx; pwd, no qual a nova senha (composta por cinco números) deve ser escrita no lugar de xxxxx, enquanto pwd indica a senha atual. A senha padrão é 12345.
A memorização de um dos oito números habilitados para enviar comandos de configuração é realizada através do envio de um SMS, cujo texto contém o texto NUMx + nnnnnnnnnnnnn; pwd, no qual a posição (cujo número está sendo memorizado) deve ser escrita no lugar de ox, o número do telefone vai no lugar do ns, enquanto pwd é a senha atual. Tudo deve ser escrito sem espaços. Nos telefones celulares são permitidos números com 19 algarismos, enquanto o + substitui 00 como prefixo da ligação internacional. Por exemplo, para adicionar o número de telefone 00398911512 na terceira posição, você terá que enviar um comando como este: NUM3 + 398911512; pwd. A senha só é necessária quando você tenta salvar um número de telefone em uma posição que já foi ocupada por outro; por outro lado, se for necessário adicionar um número na posição vazia, basta enviar um SMS com o seguinte texto: NUMx + nnnnnnnnnnnnn. A exclusão de um número é executada por meio de um SMS contendo o texto NUMx; pwd; no lugar de x você deverá escrever a posição do número de telefone a ser apagado, enquanto pwd é a senha usual. Por exemplo, para excluir o quarto número de telefone da lista memorizada, uma mensagem contendo o texto NUM4; pwd é necessária. Para solicitar a lista dos números de telefone memorizados no circuito, deverá enviar um SMS contendo o seguinte texto: NUM?; Pwd. A diretoria atende ao número de telefone de onde vem o interrogatório. É possível saber a qualidade do sinal GSM enviando o QUAL? comando; o sistema responderá com um SMS contendo a situação atual. A mensagem será enviada para o telefone que enviou o comando. Vamos passar agora para o estado de entrada e mensagens de configuração: LIV? permite saber o estado das entradas; IN2 pode operar tanto em nível de tensão (é definido via LIV2: b, que dispara o alarme quando a entrada está aberta) e em variação um (é definido via LIV: v). Quanto às entradas, é possível definir um tempo de inibição, via comando INI1: mm (os minutos de interdição vão no lugar de mm) para IN1 e via INI2: mm para IN2; a inibição é necessária para evitar o envio de avisos contínuos se a entrada - no modo nível - permanecer aberta. Para definir quais os números da lista que devem receber chamadas, deve enviar a mensagem VOCxxxxxxxx: ON; pwd, com as mesmas regras utilizadas para a gestão dos números de telefone para os quais se deseja enviar SMS. A mensagem de resposta é muito semelhante: “Número memorizado: Posx V + nnnnnnnnnnnn, Posy V + nnnnnnnnnnn.” O S de SMS foi substituído pelo V de voz. Mesmo neste caso, existem dois comandos diferentes para a desativação: SMSxxxxxxxx: OFF; pwd desativa o envio de mensagens e VOCxxxxxxxx: OFF; pwd desativa a possibilidade de fazer chamadas. Os xs representam as posições dos números que não devem receber os avisos de alarme. Precisamos esclarecer algo a respeito do comando para a configuração dos números de telefone para ligar ou para os quais enviar as mensagens SMS de alarme: conforme as configurações padrão do firmware e após cada reset total, o sistema irá direcionar as chamadas e os SMS mensagens, para todos os números memorizados. Consequentemente, para omitir alguns deles, é necessário enviar os comandos de desativação: SMSxxxxxxxx: OFF; pwd ou VOCxxxxxxxx: OFF; pwd, e indicar as posições a omitir. O sistema envia um SMS para o número de telefone que ocupa o primeiro lugar na lista, sempre que é ligado novamente. Tal função pode ser desabilitada / habilitada por meio dos comandos AVV0 (desativar) e AVV1 (ativar); o texto padrão é INICIALIZAÇÃO DO SISTEMA. Passemos agora aos comandos que permitem memorizar ou sobrescrever as mensagens SMS a enviar: a sintaxe é como a de TINn: xxxxxxxxx, em que n é o número da entrada a que se refere a mensagem, enquanto os xs correspondem à mensagem de texto, que não deve exceder o comprimento de 100 caracteres. Uma configuração imprescindível é a do tempo de observação IN1, que se realiza através do comando OSS1: ss, em que o tempo (variando entre 0 e 59 segundos) vai no lugar de ss: indica ao circuito quanto tempo que os botões devem permanecer pressionados desde o momento em que foi detectado que o carro parou e antes da geração do alarme. A demora é fundamental, para evitar que surja um alarme falso quando você parar por um curto período de tempo. Sob este ponto de vista o firmware, quando o circuito é alimentado (quando o painel é ligado), aguarda um tempo que seja o dobro do definido, a fim de permitir ao motorista realizar operações como fechar o portão da garagem ou fixação dos cintos de segurança, etc. Também pode ser definido um tempo de observação para IN2, com os mesmos procedimentos, mediante o comando OSS2: ss; também é possível solicitar os horários atualmente configurados via SMS (comando OSS?). Vamos concluir esta visão geral dos comandos com aquele que retorna as configurações padrão: RES; pwd. A mensagem de resposta é “Reiniciar”. O restante dos comandos foi descrito na Tabela 1.
Etapa 7: Lista de componentes
C1, C8, C10: capacitor de cerâmica de 1 µF (0805)
C2, C6, C7, C9: capacitor de cerâmica 100 nF (0805)
C3, C4: 470 µF 6,3 VL capacitor de tântalo (D)
C5: 4, 7 µF 6,3 VL capacitor de tântalo (A)
R1, R2, R4: 10 kohm (0805)
R3, R12: 1 kohm (0805)
R5: 470 ohm (0805) R6: 3,3 kohm (0805)
R7: 470 kohm (0805) 1%
R8: 150 kohm (0805) 1%
R9 ÷ R11: 470 ohm (0805)
R13 ÷ R16: 10 kohm (0805)
R17: -
U1: PIC18F46K20-I / PT (MF1361)
U2: MCP73831T
U3: MCP1640BT-I / CHY
U4: cód. Quadro breakout. 2846-MMA8452
U5: cód. Quadro breakout. 7300-MMA7361 (não utilizado)
P1: Microinterruptor 90 °
P2: -
LD1: LED amarelo de 3 mm
LD2, LD4: LEDs verdes de 3 mm
LD5: - LD3: LED vermelho de 3 mm
D1 ÷ D3: MBRA140T3G
D4: MMSD4148
DZ1: diodo Zener 2.7V 500mW
L1: indutor enrolado em fio 4,7 µH 770mA
BUZ1: Campainha sem eletrônica
Strip-splitter feminino de 8 vias
Strip-splitter feminino de 9 vias
6 vias macho strip-splitter
2mm pitch 2 × 10 conector fêmea
Terminal bidirecional de 2,54 (3 unidades)
Conector JST de 2 vias de 2 mm de passo para PCBs
Bateria LiPo 500mA com conector JST de 2 mm
Placa de circuito impresso S1361 (85 × 51 mm)
Etapa 8: Conclusão
O projeto que propomos aqui é uma plataforma aberta; é possível utilizá-lo para criar muitas aplicações, entre as quais estão: o alarme para evitar o esquecimento de crianças no carro, o sistema de atendimento remoto e o alarme remoto que mencionamos anteriormente. Mais em geral, trata-se de um sistema capaz de gerar avisos e notificações via telefone, quando ocorrem determinados eventos - que não são necessariamente emergências - e, portanto, também servem para fins de monitoramento remoto.
Recomendado:
Como enviar mensagens de texto SMS do seu projeto Arduino ESP: 6 etapas
Como enviar mensagens de texto SMS de seu projeto Arduino ESP: Este instrutível demonstra como enviar mensagens de texto SMS de seu projeto arduino usando um dispositivo ESP8266 e uma conexão WiFi. Por que usar SMS? * As mensagens SMS são muito mais rápidas e confiáveis do que a notificação de aplicativo mensagens. * Mensagens SMS também podem
Calculadora de mensagens de texto: 6 etapas
Calculadora de mensagens de texto: agora um produto! http://www.rubydevices.com.au/productSelect/RubyCalculator Concluir um mestrado em Engenharia Elétrica exigiu um pouco de trabalho árduo. Foi uma longa estrada de cinco anos que eu gostei muito. No final de 2015 me formei na universidade
Carro faça você mesmo por uma criança de 7 anos: 5 etapas (com fotos)
Carro faça você mesmo por uma criança de 7 anos: Por que não fazer seus próprios brinquedos e aprender brincando? Aprenda a fazer você mesmo (faça você mesmo) enquanto Abzy, de 7 anos, ensina como fazer um automóvel DC simples movido a bateria inteiramente por conta própria. Há muito lixo eletrônico quando os brinquedos são jogados fora. Ab
Rodas elétricas RC para o segundo aniversário do meu filho !: 13 etapas (com fotos)
Rodas elétricas RC para o segundo aniversário do meu filho !: Eu sonhava em criar uma roda elétrica RC desde os 10 anos de idade. Há alguns meses, um amigo me deu uma roda de força velha e surrada, usada como brinquedo de mascar. Decidi realizar um sonho de infância e reformular completamente o
A maneira mais fácil de imprimir mensagens de texto ou conversas por IMessages do iPhone: 3 etapas
As maneiras mais fáceis de imprimir mensagens de texto ou conversas de IMessages do IPhone: Olá a todos, Neste Instructable, mostrarei as poucas maneiras mais fáceis de imprimir mensagens de texto de seu iPhone. Muitas das mensagens importantes que recebemos em nossas vidas agora são não vindo por carta, ou mesmo por e-mail, mas sim por tex